diff --git a/api.cjs.js b/api.cjs.js index 01ed8a1..098044d 100644 --- a/api.cjs.js +++ b/api.cjs.js @@ -452,6 +452,8 @@ const ISPROXYKEY = "_isProxy"; * 如果属性是数组,那么自动添加`Proxy`. * 可以使用`ISPROXYKEY`覆盖这个函数的代理行为(使用CADObject.CreateProxyArray快速覆盖) * + * ! 仅在{数组}或者{值}类型上使用,如果是Object,请使用AutoRecordObject + * * @param target * @param property * @param [descriptor] @@ -485,6 +487,57 @@ function AutoRecord(target, property, descriptor) { let arr = this[privateKey]; arr.length = 0; arr.push(...value); + // 可能的优化,没有启用这个代码 + // arr.length = value.length; + // for (let i = 0; i < value.length; i++) + // arr[i] = value[i]; + } + } + else { + let oldv = this[privateKey]; + if (oldv !== value) { + this.WriteAllObjectRecord(); + this[privateKey] = value; + } + } + }, + get: function () { + return this[privateKey]; + }, + enumerable: true, + configurable: true + }); +} +function AutoRecordObject(target, property, descriptor) { + let privateKey = '__' + property; + Object.defineProperty(target, property, { + set: function (value) { + if (value instanceof Object) { + if (!this[privateKey]) { + if (value[ISPROXYKEY]) + this[privateKey] = value; + else + this[privateKey] = new Proxy(value, { + set: (target, key, value, receiver) => { + if (Reflect.get(target, key, receiver) !== value) + this.WriteAllObjectRecord(); + return Reflect.set(target, key, value, receiver); + }, + get: (target, key, receiver) => { + if (key === ISPROXYKEY) + return true; + return Reflect.get(target, key, receiver); + } + }); + } + else { + let obj = this[privateKey]; + for (let key in value) { + if (obj[key] !== value[key]) { + this.WriteAllObjectRecord(); + obj[key] = value[key]; + } + } } } else { @@ -1453,16 +1506,17 @@ exports.Entity = Entity_1 = class Entity extends CADObject { //#endregion } get CacheDrawObject() { return this._CacheDrawObject; } + get SpaceCSNoClone() { return this._SpaceOCS; } get SpaceOCS() { return this._SpaceOCS.clone(); } - get SpaceOCSInv() { - return new three.Matrix4().getInverse(this._SpaceOCS); - } set SpaceOCS(m) { this.WriteAllObjectRecord(); this._SpaceOCS.copy(m); } + get SpaceOCSInv() { + return new three.Matrix4().getInverse(this._SpaceOCS); + } set Material(materialId) { if (materialId === this._MaterialId) return; @@ -11315,16 +11369,18 @@ function InitRectBoardHoleOption(br, option) { for (let i = 0; i < cus.length; i++) { let c = cus[i]; let derv = c.GetFistDeriv(0).multiplyScalar(dir); - let an = angle(derv); - an = clampRad(an); - if (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]; + if (Math.abs(derv.x) > Math.abs(derv.y)) { + if (derv.x > 0) + option.down = hightDrill[i]; + else + option.up = hightDrill[i]; + } + else { + if (derv.y > 0) + option.right = hightDrill[i]; + else + option.left = hightDrill[i]; + } } } function ExtureHoleInBoard(holes, board, ocs) { @@ -11350,16 +11406,18 @@ function SetRectHighHole(br, option) { for (let i = 0; i < cus.length; i++) { let c = cus[i]; let derv = c.GetFistDeriv(0).multiplyScalar(dir); - let an = angle(derv); - an = clampRad(an); - if (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); + if (Math.abs(derv.x) > Math.abs(derv.y)) { + if (derv.x > 0) + highDrill.push(option.down); + else + highDrill.push(option.up); + } + else { + if (derv.y > 0) + highDrill.push(option.right); + else + highDrill.push(option.left); + } } let types = new Set(highDrill); if (types.size === 1 && highDrill[0] !== DrillType.None) @@ -13441,7 +13499,7 @@ exports.HardwareTopline = class HardwareTopline extends exports.SweepSolid { } }; __decorate([ - AutoRecord + AutoRecordObject ], exports.HardwareTopline.prototype, "HardwareOption", void 0); __decorate([ AutoRecord @@ -17510,7 +17568,7 @@ exports.HardwareCompositeEntity = HardwareCompositeEntity_1 = class HardwareComp } }; __decorate([ - AutoRecord + AutoRecordObject ], exports.HardwareCompositeEntity.prototype, "HardwareOption", void 0); __decorate([ AutoRecord @@ -17829,7 +17887,7 @@ function MatrixIsCoplane2(matrixFrom, matrixTo, zFuzz) { let nor1 = new three.Vector3().setFromMatrixColumn(matrixFrom, 2); let nor2 = new three.Vector3().setFromMatrixColumn(matrixTo, 2); //法线共面 - if (!equalv3(nor1, nor2.negate(), 1e-5)) + if (!equalv3(nor1, nor2.negate(), 1e-4)) return false; //高共面 let pt = new three.Vector3().setFromMatrixPosition(matrixTo); @@ -19558,16 +19616,18 @@ function GetBoardHighSeal(br, sealcus) { let dir = Math.sign(br.ContourCurve.Area2); for (let c of sealcus) { let derv = c.GetFistDeriv(0).multiplyScalar(dir); - let an = angle(derv); - an = clampRad(an); - if ((an < Math.PI / 4 + 1e-8) || (an > Math.PI * 7 / 4)) - highSeals.push({ size: sealDown }); - else if (an > Math.PI / 4 && an < Math.PI * 3 / 4 + 1e-8) - highSeals.push({ size: sealRight }); - else if (an > Math.PI * 3 / 4 && an < Math.PI * 5 / 4 + 1e-8) - highSeals.push({ size: sealUp }); - else - highSeals.push({ size: sealLeft }); + if (Math.abs(derv.x) > Math.abs(derv.y)) { + if (derv.x > 0) + highSeals.push({ size: sealDown }); + else + highSeals.push({ size: sealUp }); + } + else { + if (derv.y > 0) + highSeals.push({ size: sealRight }); + else + highSeals.push({ size: sealLeft }); + } } } return highSeals; @@ -20099,8 +20159,8 @@ exports.Board = Board_1 = class Board extends exports.ExtrudeSolid { else //填充默认类型就好了 br._BoardProcessOption.highDrill = Array(br.contourCurve.EndParam).fill(br._BoardProcessOption.drillType); //如果是矩形板,关联切割后的板件,用上下左右封边重新填充高级封边,避免近乎矩形的板件封边看上去不对 #I2AQ9R - if (this.isRect) - br._BoardProcessOption.highSealed.length = 0; + // if (this.isRect) 由于异形也会被破坏,导致封边结果错误,对于异形也退化到矩形封边 + br._BoardProcessOption.highSealed.length = 0; } } return brs; @@ -22078,10 +22138,14 @@ exports.RoomWallArc = class RoomWallArc extends exports.RoomWallBase { let geo = this._MeshGeometry; let normal = this.Normal; let normaln = normal.clone().negate(); - let center = this.Center; + this.Center; let inv = this.OCSInv; let thisParam = new GetArcParam(this); const BuildLeftFace = (curve) => { + let materialIndex = 0; + if (curve[CURVE_FACE_TYPE_KEY] === exports.WallFaceType.Outside) { + materialIndex = 1; + } if (curve instanceof exports.Line) { let tapes = [new Tape(0, 1, 0, this._Height)]; let curveParam = new GetLineParam(curve); @@ -22110,7 +22174,7 @@ exports.RoomWallArc = class RoomWallArc extends exports.RoomWallBase { let endX = curveParam.Length * 1e-3 * tape.end; let startZ = tape.bottom * 1e-3; let endZ = tape.top * 1e-3; - geo.faces.push(new three.Face3(startIndex, startIndex + 2, startIndex + 1, curveParam.LeftDir), new three.Face3(startIndex + 1, startIndex + 2, startIndex + 3, curveParam.LeftDir)); + geo.faces.push(new three.Face3(startIndex, startIndex + 2, startIndex + 1, curveParam.LeftDir, undefined, materialIndex), new three.Face3(startIndex + 1, startIndex + 2, startIndex + 3, curveParam.LeftDir, undefined, materialIndex)); geo.faceVertexUvs[0].push([new three.Vector2(startX, startZ), new three.Vector2(startX, endZ), new three.Vector2(endX, startZ)], [new three.Vector2(endX, startZ), new three.Vector2(startX, endZ), new three.Vector2(endX, endZ)]); } } @@ -22159,8 +22223,8 @@ exports.RoomWallArc = class RoomWallArc extends exports.RoomWallBase { let endX = length * 1e-3 * tape.end; let startZ = tape.bottom * 1e-3; let endZ = tape.top * 1e-3; - let dir = arc.GetPointAtParam((tape.start + tape.end) * 0.5).applyMatrix4(inv).sub(center).subScalar(arc.Radius); - geo.faces.push(new three.Face3(p1Index, p3Index, p2Index, dir), new three.Face3(p2Index, p3Index, p4Index, dir)); + let dir = arc.GetPointAtParam((tape.start + tape.end) * 0.5).applyMatrix4(inv).divideScalar(arc.Radius); + geo.faces.push(new three.Face3(p1Index, p3Index, p2Index, dir, undefined, materialIndex), new three.Face3(p2Index, p3Index, p4Index, dir, undefined, materialIndex)); geo.faceVertexUvs[0].push([new three.Vector2(startX, startZ), new three.Vector2(startX, endZ), new three.Vector2(endX, startZ)], [new three.Vector2(endX, startZ), new three.Vector2(startX, endZ), new three.Vector2(endX, endZ)]); } } @@ -22178,14 +22242,18 @@ exports.RoomWallArc = class RoomWallArc extends exports.RoomWallBase { let pre = i - 1; let preX = pre * divLength; let nowX = i * divLength; - let dir = pts[i].clone().add(pts[pre]).multiplyScalar(0.5).sub(center).subScalar(arc.Radius); - geo.faces.push(new three.Face3(startIndex + i, startIndex + pre, startIndex + pre + count, dir), new three.Face3(startIndex + i + count, startIndex + i, startIndex + pre + count, dir)); + let dir = pts[i].clone().add(pts[pre]).multiplyScalar(0.5).divideScalar(arc.Radius); + geo.faces.push(new three.Face3(startIndex + i, startIndex + pre, startIndex + pre + count, dir, undefined, materialIndex), new three.Face3(startIndex + i + count, startIndex + i, startIndex + pre + count, dir, undefined, materialIndex)); geo.faceVertexUvs[0].push([new three.Vector2(nowX, 0), new three.Vector2(preX, 0), new three.Vector2(preX, this._Height * 1e-3)], [new three.Vector2(nowX, this._Height * 1e-3), new three.Vector2(nowX, 0), new three.Vector2(preX, this._Height * 1e-3)]); } } } }; const BuildRightFace = (curve) => { + let materialIndex = 0; + if (curve[CURVE_FACE_TYPE_KEY] === exports.WallFaceType.Outside) { + materialIndex = 1; + } if (curve instanceof exports.Line) { let tapes = [new Tape(0, 1, 0, this._Height)]; let curveParam = new GetLineParam(curve); @@ -22214,7 +22282,7 @@ exports.RoomWallArc = class RoomWallArc extends exports.RoomWallBase { let endX = curveParam.Length * 1e-3 * tape.end; let startZ = tape.bottom * 1e-3; let endZ = tape.top * 1e-3; - geo.faces.push(new three.Face3(startIndex, startIndex + 1, startIndex + 2, curveParam.RightDir), new three.Face3(startIndex + 1, startIndex + 3, startIndex + 2, curveParam.RightDir)); + geo.faces.push(new three.Face3(startIndex, startIndex + 1, startIndex + 2, curveParam.RightDir, undefined, materialIndex), new three.Face3(startIndex + 1, startIndex + 3, startIndex + 2, curveParam.RightDir, undefined, materialIndex)); geo.faceVertexUvs[0].push([new three.Vector2(startX, startZ), new three.Vector2(endX, startZ), new three.Vector2(startX, endZ)], [new three.Vector2(endX, startZ), new three.Vector2(endX, endZ), new three.Vector2(startX, endZ)]); } } @@ -22259,8 +22327,8 @@ exports.RoomWallArc = class RoomWallArc extends exports.RoomWallBase { let endX = length * 1e-3 * tape.end; let startZ = tape.bottom * 1e-3; let endZ = tape.top * 1e-3; - let dir = arc.GetPointAtParam((tape.start + tape.end) * 0.5).applyMatrix4(inv).sub(center).subScalar(arc.Radius).negate(); - geo.faces.push(new three.Face3(p1Index, p2Index, p3Index, dir), new three.Face3(p2Index, p4Index, p3Index, dir)); + let dir = arc.GetPointAtParam((tape.start + tape.end) * 0.5).applyMatrix4(inv).divideScalar(-arc.Radius); + geo.faces.push(new three.Face3(p1Index, p2Index, p3Index, dir, undefined, materialIndex), new three.Face3(p2Index, p4Index, p3Index, dir, undefined, materialIndex)); geo.faceVertexUvs[0].push([new three.Vector2(startX, startZ), new three.Vector2(endX, startZ), new three.Vector2(startX, endZ)], [new three.Vector2(endX, startZ), new three.Vector2(endX, endZ), new three.Vector2(startX, endZ)]); } } @@ -22279,8 +22347,8 @@ exports.RoomWallArc = class RoomWallArc extends exports.RoomWallBase { let pre = i - 1; let preX = pre * divLength; let nowX = i * divLength; - let dir = pts[i].clone().add(pts[pre]).multiplyScalar(0.5).sub(center).subScalar(arc.Radius); - geo.faces.push(new three.Face3(startIndex + pre, startIndex + i, startIndex + pre + count, dir), new three.Face3(startIndex + i, startIndex + i + count, startIndex + pre + count, dir)); + let dir = pts[i].clone().add(pts[pre]).multiplyScalar(0.5).divideScalar(-arc.Radius); + geo.faces.push(new three.Face3(startIndex + pre, startIndex + i, startIndex + pre + count, dir, undefined, materialIndex), new three.Face3(startIndex + i, startIndex + i + count, startIndex + pre + count, dir, undefined, materialIndex)); geo.faceVertexUvs[0].push([new three.Vector2(preX, 0), new three.Vector2(nowX, 0), new three.Vector2(preX, this._Height * 1e-3)], [new three.Vector2(nowX, 0), new three.Vector2(nowX, this._Height * 1e-3), new three.Vector2(preX, this._Height * 1e-3)]); } } @@ -24658,6 +24726,4277 @@ exports.GroupRecord = __decorate([ Factory ], exports.GroupRecord); +function BuildLayerBoards(opt, space, grooveOption) { + let spaceBox = space.SpaceBox; + let spaceOCS = space.SpaceOCS; + let size = spaceBox.getSize(new three.Vector3()); + const params = { L: size.x, W: size.y, H: size.z, BH: opt.thickness }; + let width; + if (opt.isTotalLength) + width = size.y; + else { + width = safeEval(opt.calcHeight, params); + } + let count = opt.count; + let type = opt.boardRelative; + let spaceSize = safeEval(opt.calcSpaceSize, params); + let frontShrink = safeEval(opt.calcFrontShrink, params); + width -= frontShrink; + if (width <= 0) { + Log("宽度无效,可能前缩过大,请修正"); + return []; + } + let leftShrink = safeEval(opt.calcLeftShrink, params); + let rightShrink = safeEval(opt.calcRightShrink, params); + let thickness = opt.thickness; + let len = size.x - leftShrink - rightShrink; + if (len <= 0) { + Log("长度无效,可能左缩右缩过大,请修正"); + return []; + } + let board = exports.Board.CreateBoard(len, width, thickness, BoardType.Layer); + if (grooveOption) { + board.KnifeRadius = safeEval(grooveOption.knifeRadius); + board.GroovesAddDepth = safeEval(grooveOption.grooveAddDepth); + board.GroovesAddWidth = safeEval(grooveOption.grooveAddWidth); + board.GroovesAddLength = safeEval(grooveOption.grooveAddLength); + } + opt.height = len; + opt.width = width; + //等分单层空间大小 + let singleSize = (size.z - (thickness * count)) / (count + 1); + let brs = []; + for (let i = 1; i <= count; i++) { + let b = board.Clone(); + b.Name = opt.name; + if (type === BrRelativePos.Top) + b.ApplyMatrix(MoveMatrix(spaceBox.min.clone().add(new three.Vector3(size.x - rightShrink, frontShrink, size.z - (spaceSize + thickness) * i)))); + else if (type === BrRelativePos.Bottom) + b.ApplyMatrix(MoveMatrix(spaceBox.min.clone().add(new three.Vector3(size.x - rightShrink, frontShrink, spaceSize * i + (i - 1) * thickness)))); + else { + b.ApplyMatrix(MoveMatrix(spaceBox.min.clone().add(new three.Vector3(size.x - rightShrink, frontShrink, singleSize * i + (i - 1) * thickness)))); + } + b.ApplyMatrix(spaceOCS); + brs.push(b); + } + return brs; +} +function BuildVerticalBoards(opt, space, grooveOption) { + const spaceBox = space.SpaceBox; + const spaceOCS = space.SpaceOCS; + let size = spaceBox.getSize(new three.Vector3()); + const params = { L: size.x, W: size.y, H: size.z, BH: opt.thickness }; + let frontShrink = safeEval(opt.calcFrontShrink, params); + let bottomShink = safeEval(opt.calcBottomShrink, params); + let width; + if (opt.isTotalWidth) + width = size.y - frontShrink; + else { + width = safeEval(opt.calcWidth, params); + } + if (width <= 0) { + Log("宽度无效,可能前缩过大,请修正"); + return []; + } + let length; + if (opt.isTotalLength) + length = size.z - bottomShink; + else { + length = safeEval(opt.calcHeight, params); + } + let count = opt.count; + let type = opt.boardRelative; + let spaceSize = safeEval(opt.calcSpaceSize, params); + let thickness = opt.thickness; + let board = exports.Board.CreateBoard(length, width, thickness, BoardType.Vertical); + if (grooveOption) { + board.KnifeRadius = safeEval(grooveOption.knifeRadius); + board.GroovesAddDepth = safeEval(grooveOption.grooveAddDepth); + board.GroovesAddWidth = safeEval(grooveOption.grooveAddWidth); + board.GroovesAddLength = safeEval(grooveOption.grooveAddLength); + } + opt.height = length; + opt.width = width; + //等分单层空间大小 + let singleSize = (size.x - (thickness * count)) / (count + 1); + let brs = []; + for (let i = 1; i <= count; i++) { + let b = board.Clone(); + b.Name = opt.name; + if (type === BrRelativePos.Left) + b.ApplyMatrix(MoveMatrix(spaceBox.min.clone().add(new three.Vector3(spaceSize * i + (i - 1) * thickness, frontShrink, bottomShink)))); + else if (type === BrRelativePos.Right) + b.ApplyMatrix(MoveMatrix(spaceBox.min.clone().add(new three.Vector3(size.x - (spaceSize + thickness) * i, frontShrink, bottomShink)))); + else + b.ApplyMatrix(MoveMatrix(spaceBox.min.clone().add(new three.Vector3(singleSize * i + (i - 1) * thickness, frontShrink, bottomShink)))); + b.ApplyMatrix(spaceOCS); + brs.push(b); + } + return brs; +} +function BuildBehindBoards(opt, space, grooveOption) { + let newBox = space.SpaceBox.clone(); + let spaceOcs = space.SpaceOCS; + //判断延伸 + let leftExt = opt.leftExt; + let rightExt = opt.rightExt; + let topExt = opt.topExt; + let bottomExt = opt.bottomExt; + newBox.max.add(new three.Vector3(leftExt + rightExt, 0, topExt + bottomExt)); + newBox.translate(new three.Vector3(-leftExt, 0, -bottomExt)); + //获取背板高度 + let size = newBox.getSize(new three.Vector3()); + const params = { L: size.x, W: size.y, H: size.z, BH: opt.thickness }; + let height; + if (opt.boardPosition === BehindHeightPositon.AllHeight) + height = size.z; + else + height = safeEval(opt.calcHeight, params); + let moveDist = safeEval(opt.calcMoveDist, params); + //判断背板位置,更新背板高度 + switch (opt.boardPosition) { + case BehindHeightPositon.ForTop: + newBox.min.add(new three.Vector3(0, 0, size.z - height)); + newBox.translate(new three.Vector3(0, 0, moveDist)); + break; + case BehindHeightPositon.ForBottom: + newBox.max.add(new three.Vector3(0, 0, height)); + newBox.translate(new three.Vector3(0, 0, -moveDist)); + break; + } + let count = opt.count; + //相对位置 + let relPos = opt.boardRelative; + //单层空间宽度 + let spaceSize = safeEval(opt.calcSpaceSize, params); + let thickness = opt.thickness; + let board = exports.Board.CreateBoard(height, size.x, thickness, BoardType.Behind); + if (grooveOption) { + board.KnifeRadius = safeEval(grooveOption.knifeRadius); + board.GroovesAddDepth = safeEval(grooveOption.grooveAddDepth); + board.GroovesAddWidth = safeEval(grooveOption.grooveAddWidth); + board.GroovesAddLength = safeEval(grooveOption.grooveAddLength); + } + opt.height = height; + opt.width = size.x; + //等分单层空间大小 + let singleSize = (size.y - (thickness * count)) / (count + 1); + let brs = []; + //构建板件 + for (let i = 1; i <= count; i++) { + let b = board.Clone(); + b.Name = opt.name; + if (relPos === BrRelativePos.Front) + b.ApplyMatrix(MoveMatrix(newBox.min.clone().add(new three.Vector3(0, spaceSize * i + thickness * i, 0)))); + else if (relPos === BrRelativePos.Back) + b.ApplyMatrix(MoveMatrix(newBox.min.clone().add(new three.Vector3(0, size.y - spaceSize * i - (i - 1) * thickness, 0)))); + else + b.ApplyMatrix(MoveMatrix(newBox.min.clone().add(new three.Vector3(0, (singleSize + thickness) * i, 0)))); + b.ApplyMatrix(spaceOcs); + brs.push(b); + } + return brs; +} +function ExtendsBoardThickness(temp, thickness) { + let bhPar = temp.GetParam("BH"); + if (bhPar) { + bhPar.expr = thickness; + if (temp.Parent) { + let rootBh = safeEval(temp.Root.GetParam("BH")?.value); + bhPar.expr = rootBh === thickness ? "$BH" : thickness; + } + } +} + +class DrawLatticeDrawerTool extends Singleton { + constructor() { + super(...arguments); + this.haveTopBr = false; + } + get Config() { + return this._config; + } + Draw(space, config) { + this._config = config; + this.space = space; + this.ParseSpaceBrs(); + this.HandleSpace(); + let size = space.Size; + if (config.arrayType === ELatticeArrayType.ByWidth) { + config.widthCount = Math.floor((size.x + config.thickness) / (config.gripWidth + config.thickness)); + config.depthCount = Math.floor((size.y + config.thickness) / (config.gripDepth + config.thickness)); + } + if (config.widthCount <= 0 || config.depthCount <= 0) { + this.End(); + return []; + } + let gripWidth = (size.x - ((config.widthCount - 1) * config.thickness)) / config.widthCount; + let gripDepth = (size.y - (config.depthCount - 1) * config.thickness) / config.depthCount; + config.gripWidth = gripWidth; + config.gripDepth = gripDepth; + let position = space.SpaceBox.min.clone(); + let verBr = exports.Board.CreateBoard(size.z, size.y, config.thickness, BoardType.Vertical); + //分析切角圆弧的结果 + let res = this.ParseArcLenOrObliuqeAng(verBr); + if (!res) { + this.End(); + return []; + } + //左右侧板跟随 + this.ChangeLeftRightBr(verBr); + this.ParseBrTooth(verBr); + this.ParseHighSealing(verBr, config.leftSealed, config.rightSealed, config.upSealed, config.downSealed, false); + this.WriteBoardProcessOption(verBr); + let lattices = []; + for (let i = 1; i < config.widthCount; i++) { + let br = verBr.Clone(); + br.Name = "竖板" + i; + let pos = position.clone(); + pos.add(new three.Vector3(gripWidth * i + (i - 1) * config.thickness)); + br.Position = pos; + br.ApplyMatrix(space.SpaceOCS); + lattices.push(br); + } + let beBr = exports.Board.CreateBoard(size.z, size.x, config.thickness, BoardType.Behind); + this.ParseBrTooth(beBr); + this.ParseHighSealing(beBr, config.leftSealed, config.rightSealed, config.upSealed, config.downSealed, true); + this.WriteBoardProcessOption(beBr); + for (let i = 1; i < config.depthCount; i++) { + let br = beBr.Clone(); + br.Name = "横板" + i; + let pos = position.clone(); + pos.add(new three.Vector3(0, (gripDepth + config.thickness) * i)); + br.Position = pos; + br.ApplyMatrix(space.SpaceOCS); + lattices.push(br); + } + this.End(); + return lattices; + } + HandleSpace() { + const config = this.Config; + let box = this.space.SpaceBox; + box.max.add(new three.Vector3(0, 0, -this.Config.downDist)); + //处理间隙 + box.min.add(new three.Vector3(config.space, config.space)); + box.max.add(new three.Vector3(-config.space, -config.space)); + if (this.frontBr && this.backBr) { + let backPos = this.backBr.Position.applyMatrix4(this.frontBr.OCSInv); + let addH = backPos.y + this.backBr.Height - this.frontBr.Height; + if (addH > 0) { + this.space.SpaceBox.max.add(new three.Vector3(0, 0, addH)); + if (config.isAuto) + config.arcLen = addH; + } + else + Log("挡板高度大于等于格子抽板高度,无法自动识别弧度!"); + } + if (this.haveTopBr) { + Log("顶板不为空,绘制格子抽可能错误!"); + } + } + ChangeLeftRightBr(refBr) { + const config = this.Config; + if (this.leftBr && this.rightBr) { + if (config.isChange) { + let lWidth = this.leftBr.Width; + let lHeight = this.leftBr.Height; + let lgrooves = this.leftBr.Grooves.slice(); + let rgrooves = this.rightBr.Grooves.slice(); + let rWidth = this.rightBr.Width; + let rHeight = this.rightBr.Height; + this.leftBr.ContourCurve = refBr.ContourCurve.Clone(); + this.rightBr.ContourCurve = refBr.ContourCurve.Clone(); + this.leftBr.Width = lWidth; + this.leftBr.Height = lHeight; + this.rightBr.Width = rWidth; + this.rightBr.Height = rHeight; + if (this.leftBr.Grooves.length !== lgrooves.length) + this.leftBr.AppendGrooves(lgrooves); + if (this.rightBr.Grooves.length !== rgrooves.length) + this.rightBr.AppendGrooves(rgrooves); + } + } + } + ParseBrTooth(br) { + const config = this.Config; + let grooveLenAdd = config.knifeRad; + let initPts = []; + if (br.BoardType === BoardType.Behind) { + let addWidth = (config.grooveAddWidth - 2 * config.upSealed) / 2; + let p1 = new three.Vector3(br.Width - config.gripWidth + addWidth, br.Height); + let p2 = new three.Vector3(br.Width - config.gripWidth + addWidth, br.Height / 2 - grooveLenAdd); + let p3 = new three.Vector3(br.Width - config.gripWidth - br.Thickness - addWidth, br.Height / 2 - grooveLenAdd); + let p4 = new three.Vector3(br.Width - config.gripWidth - br.Thickness - addWidth, br.Height); + initPts.push(p1, p2, p3, p4); + for (let i = 2; i < config.widthCount; i++) { + initPts.push(...[p1, p2, p3, p4].map(p => p.clone().add(new three.Vector3(-(config.gripWidth + br.Thickness) * (i - 1))))); + } + let cu = br.ContourCurve; + cu.AddVertexAt(cu.EndParam - 1, initPts.map(p => AsVector2(p))); + br.ContourCurve = cu; + } + else { + let addWidth = (config.grooveAddWidth - 2 * config.downSealed) / 2; + let p1 = new three.Vector3(config.gripDepth - addWidth, 0); + let p2 = new three.Vector3(config.gripDepth - addWidth, br.Height / 2 + grooveLenAdd); + let p3 = new three.Vector3(config.gripDepth + br.Thickness + addWidth, br.Height / 2 + grooveLenAdd); + let p4 = new three.Vector3(config.gripDepth + br.Thickness + addWidth, 0); + initPts.push(p1, p2, p3, p4); + for (let i = 2; i < config.depthCount; i++) { + initPts.push(...[p1, p2, p3, p4].map(p => p.clone().add(new three.Vector3((config.gripDepth + br.Thickness) * (i - 1))))); + } + let cu = br.ContourCurve; + cu.AddVertexAt(1, initPts.map(p => AsVector2(p))); + br.ContourCurve = cu; + } + } + ParseSpaceBrs() { + let vertBrs = this.space.BoardMap.get(BoardType.Vertical); + if (vertBrs && vertBrs.length > 1) { + vertBrs.sort((br1, br2) => { + return br1.Position.applyMatrix4(this.space.SpaceOCSInv).x - br2.Position.applyMatrix4(this.space.SpaceOCSInv).x; + }); + this.leftBr = vertBrs[0]; + this.rightBr = arrayLast(vertBrs); + } + let behindBrs = this.space.BoardMap.get(BoardType.Behind); + if (behindBrs && behindBrs.length > 1) { + behindBrs.sort((br1, br2) => { + return br1.Position.applyMatrix4(this.space.SpaceOCSInv).y - br2.Position.applyMatrix4(this.space.SpaceOCSInv).y; + }); + this.backBr = arrayLast(behindBrs); + this.frontBr = behindBrs[0]; + } + let lyBrs = this.space.BoardMap.get(BoardType.Layer); + this.haveTopBr = lyBrs && lyBrs.length > 1; + } + ParseArcLenOrObliuqeAng(br) { + const config = this.Config; + const size = this.space.Size; + if (config.isOpenCut) { + if (config.upCut > size.z || config.downCut > size.z) + return true; + if (config.upCut < 1 || config.downCut < 1) + return true; + let cu = br.ContourCurve; + cu.AddVertexAt(3, new three.Vector2(config.upCut, br.Height)); + cu.SetPointAt(4, new three.Vector2(0, br.Height - config.downCut)); + } + else { + if (config.arcLen > size.z || config.arcLen > size.y) { + Log("圆弧角过大"); + return false; + } + let cu = br.ContourCurve; + if (config.arcLen === 0) { + Log("圆弧角为0"); + return true; + } + cu.AddVertexAt(3, new three.Vector2(config.arcLen, br.Height)); + cu.SetBulgeAt(3, Math.tan(Math.PI / 8)); + cu.SetPointAt(4, new three.Vector2(0, br.Height - config.arcLen)); + } + return true; + } + WriteBoardProcessOption(br) { + const config = this.Config; + br.KnifeRadius = config.knifeRad; + br.BoardProcessOption.sealedUp = config.upSealed.toString(); + br.BoardProcessOption.sealedDown = config.downSealed.toString(); + br.BoardProcessOption.sealedLeft = config.leftSealed.toString(); + br.BoardProcessOption.sealedRight = config.rightSealed.toString(); + br.BoardProcessOption.drillType = DrillType.None; + br.BoardProcessOption.highDrill.fill(DrillType.None); + br.BoardProcessOption[EBoardKeyList.Lines] = LinesType.Reverse; //生成的板设置为反纹 + } + ParseHighSealing(br, leftSealed, rightSealed, topSealed, downSealed, isHor) { + let cu = br.ContourCurve; + br.BoardProcessOption.sealedLeft = leftSealed.toString(); + br.BoardProcessOption.sealedRight = rightSealed.toString(); + br.BoardProcessOption.sealedUp = topSealed.toString(); + br.BoardProcessOption.sealedDown = downSealed.toString(); + let highSeals = []; + let sizes = [...new Set([downSealed, rightSealed, topSealed, leftSealed])]; + let downSeal = { + size: downSealed, color: sizes.indexOf(downSealed) + 1 + }; + let rigthSeal = { + size: rightSealed, color: sizes.indexOf(rightSealed) + 1 + }; + let topSeal = { size: topSealed, color: sizes.indexOf(topSealed) + 1 }; + let leftSeal = { size: leftSealed, color: sizes.indexOf(leftSealed) + 1 }; + if (isHor) { + highSeals.push(downSeal, rigthSeal); + for (let i = 1; i <= cu.EndParam - 3; i++) { + highSeals.push(topSeal); + } + highSeals.push(leftSeal); + } + else { + let count = (this._config.depthCount - 1) * 3 + this._config.depthCount; + for (let i = 0; i < count; i++) { + highSeals.push(downSeal); + } + for (let i = count; i < cu.EndParam; i++) { + let c = cu.GetCurveAtIndex(i); + if (c instanceof exports.Arc) + break; + let derv = c.GetFistDeriv(0).normalize(); + if (equalv3(derv, YAxis)) + highSeals.push(rigthSeal); + else if (isParallelTo(derv, XAxis)) + highSeals.push(topSeal); + else if (equalv3(derv, YAxis.clone().negate())) + highSeals.push(leftSeal); + else + highSeals.push(topSeal); + } + } + br.BoardProcessOption.highSealed = highSeals; + } + End() { + this._config = null; + this.leftBr = null; + this.rightBr = null; + this.backBr = null; + this.frontBr = null; + this.haveTopBr = false; + } +} + +class ISpaceParse { + /** + * # 构造后请手动调用Parse()方法. + * @param boards 板件列表 + * @param [spaceOCS] 默认空间矩阵,如果不设置将使用第一块板作为空间矩阵 + */ + constructor(boards, spaceOCS) { + /** + * 解析空间成功 + */ + this.ParseOK = false; + /** + * 板件映射表 + */ + this.BoardMap = new Map(); + /** + * 动态中,禁止执行二次操作 + */ + this.IsDynamic = false; + this.Rotation = { x: 0, y: 0, z: 0 }; + this.Boards = boards; + if (spaceOCS) + this.SpaceOCS = spaceOCS; + else if (boards && boards.length > 0) + this.SpaceOCS = boards[0].SpaceOCS; + else + this.SpaceOCS = new three.Matrix4(); + this.SpaceOCSInv = new three.Matrix4().getInverse(this.SpaceOCS); + this.GeneralBoardMap(); + } + async Parse() { + } + get Size() { + if (this.SpaceBox) + return this.SpaceBox.getSize(new three.Vector3()); + return new three.Vector3(); + } + get DrawCS() { + if (!this.ParseOK) + return new three.Matrix4(); + let scs = this.SpaceOCS.clone(); + let p = this.SpaceBox.min.clone().applyMatrix4(scs); + scs.setPosition(p); + return scs; + } + GetBoardInSpaceType(br) { + //使用板件向量判断类型,而不是板件类型 + let normal = br.Normal.transformDirection(this.SpaceOCSInv); + let type; + if (isParallelTo(XAxis, normal, 1e-3)) + type = BoardType.Vertical; + else if (isParallelTo(YAxis, normal, 1e-3)) + type = BoardType.Behind; + else if (isParallelTo(ZAxis, normal, 1e-3)) + type = BoardType.Layer; + return type; + } + /** + * 构造板件类型Map + */ + GeneralBoardMap() { + if (this.Boards && this.Boards.length > 0) { + this.BoardMap.clear(); + for (let br of this.Boards) { + let type = this.GetBoardInSpaceType(br); + if (type === undefined) + continue; + let brs = this.BoardMap.get(type); + if (brs) + brs.push(br); + else + this.BoardMap.set(type, [br]); + } + } + } + /** + * 解析板件的盒子,并且(排序,归并) + * @param boardCol + * @param splitType + */ + ParseBoardBox(boardCol, splitType) { + let boxCol = boardCol.map(b => b.GetBoundingBoxInMtx(this.SpaceOCSInv)); + //查找最左的板和最右的板 + if (splitType === SplitType.X) { + let minX = Infinity; + let leftIndex = 0; + let maxX = -Infinity; + let rightIndex = 0; + for (let i = 0; i < boxCol.length; i++) { + let box = boxCol[i]; + if (box.min.x < minX) { + minX = box.min.x; + leftIndex = i; + } + if (box.max.x > maxX) { + maxX = box.max.x; + rightIndex = i; + } + } + this.LeftBoard = boardCol[leftIndex]; + this.RightBoard = boardCol[rightIndex]; + } + //根据分割类型排序 + boxCol.sort((b1, b2) => { + return b1.min.getComponent(splitType) - b2.min.getComponent(splitType); + }); + //归并盒子 + arrayRemoveDuplicateBySort(boxCol, (b1, b2) => { + if ( + //对齐 + equaln$1(b1.min.getComponent(splitType), b2.min.getComponent(splitType), 1e-3) + && + //厚度相等 + equaln$1(b1.getSize(new three.Vector3()).getComponent(splitType), b2.getSize(new three.Vector3()).getComponent(splitType), 1e-3)) { + b1.union(b2); + return true; + } + return false; + }); + return boxCol; + } +} + +/** + * 模版动作 + */ +exports.TemplateAction = class TemplateAction { + constructor() { + this.Name = "动作"; + } + WriteAllObjectRecord() { + if (this.parent) + this.parent.WriteAllObjectRecord(); + } + Update(paramDiff, newValue) { + if (this.Expr) { + let varDefines = {}; + varDefines[this.parent.name] = newValue; + newValue = safeEval(this.Expr, varDefines) || newValue; + varDefines[this.parent.name] = paramDiff; + paramDiff = safeEval(this.Expr, varDefines) || paramDiff; + } + this._Update(paramDiff, newValue); + } + /** + * @重载 + */ + _Update(paramDiff, newValue) { + } + //#region -------------------------File------------------------- + //对象应该实现dataIn和DataOut的方法,为了对象的序列化和反序列化 + //对象从文件中读取数据,初始化自身 + ReadFile(file) { + let ver = file.Read(); + this.Name = file.Read(); + if (ver > 2) { + this.Expr = file.Read(); + this.Description = file.Read(); + } + } + //对象将自身数据写入到文件. + WriteFile(file) { + file.Write(3); + file.Write(this.Name); + file.Write(this.Expr); + file.Write(this.Description); + } +}; +__decorate([ + AutoRecord +], exports.TemplateAction.prototype, "Name", void 0); +__decorate([ + AutoRecord +], exports.TemplateAction.prototype, "Expr", void 0); +__decorate([ + AutoRecord +], exports.TemplateAction.prototype, "Description", void 0); +exports.TemplateAction = __decorate([ + Factory +], exports.TemplateAction); + +var PromptStatus; +(function (PromptStatus) { + PromptStatus[PromptStatus["None"] = 0] = "None"; + PromptStatus[PromptStatus["Cancel"] = -1] = "Cancel"; + PromptStatus[PromptStatus["OK"] = 1] = "OK"; + PromptStatus[PromptStatus["Keyword"] = 2] = "Keyword"; + PromptStatus[PromptStatus["Other"] = 4] = "Other"; + PromptStatus[PromptStatus["String"] = 8] = "String"; + PromptStatus[PromptStatus["Error"] = -2] = "Error"; +})(PromptStatus || (PromptStatus = {})); +// export enum Errno 未来某一天我们可能需要这个东西 +// { +// Space = 0, +// Enter = 1, +// Esc = 2, +// Left = 3, +// Right = 4, +// } +class PromptResult { + constructor() { + this.Status = PromptStatus.None; + //是否为子级菜单 + this.isChild = false; + //当用户选择失败的时候,提供当前选择失败的原因 + // Errno?: Errno; + } +} +class PromptDistendResult extends PromptResult { + get Distance() { + return this._value; + } + set Distance(v) { + this._value = v; + } +} +class PromptEntityResult extends PromptResult { + constructor( + //选择到的图形 + Entity, + //点取的点 + Point, Object, IsCircle) { + super(); + this.Entity = Entity; + this.Point = Point; + this.Object = Object; + this.IsCircle = IsCircle; + } +} + +function Encode(res, enMap) { + if (res.Entity instanceof exports.Line || res.Entity.constructor.name === "RoomWallLine") { + enMap[0].push(res); + return 1; + } + else if (res.Entity instanceof exports.Arc || res.constructor.name === "RoomWallArc") { + enMap[1].push(res); + return 2; + } + else if (res.Entity instanceof exports.Polyline) { + enMap[2].push(res); + return 4; + } + else if (res.Entity instanceof exports.Spline) { + enMap[3].push(res); + return 8; + } + else if (res.Entity instanceof exports.Ellipse) { + enMap[4].push(res); + return 16; + } +} +//把圆转换成圆弧,避免圆参与计算. +function CircleEnResToArc(enRes) { + if (enRes.Entity instanceof exports.Circle) { + let an = angle(enRes.Point.clone().applyMatrix4(enRes.Entity.OCSInv)) + Math.PI; + let arc = new exports.Arc(new three.Vector3(), enRes.Entity.Radius, an, an + 0.1); + arc.ApplyMatrix(enRes.Entity.OCS); + arc.Center = enRes.Entity.Center; + enRes.Entity = arc; + enRes.IsCircle = true; + } +} +function GetFilletCurve(enRes) { + if (enRes.Entity instanceof exports.Polyline) { + let pl = enRes.Entity; + let param = pl.GetParamAtPoint(pl.GetClosestPointTo(enRes.Point, false)); + let paramF = Math.floor(param); + return [pl.GetCurveAtParam(param), paramF]; + } + else + return [enRes.Entity, NaN]; +} +var ExtendType; +(function (ExtendType) { + ExtendType[ExtendType["Start"] = 1] = "Start"; + ExtendType[ExtendType["End"] = 2] = "End"; +})(ExtendType || (ExtendType = {})); +class FilletUtils { + Fillet(enRes1, enRes2) { + CircleEnResToArc(enRes1); + CircleEnResToArc(enRes2); + let { enType, enMap } = this.EnCode(enRes1, enRes2); + if (enType === 4 && enRes1.Entity === enRes2.Entity) + return this.FilletPolyLineSelf(enRes1, enRes2); + else if (enType >= 4 && enType < 8) + return this.FilletPolylineAndCurve(enRes1, enRes2); + let interPts = this.GetIntersectAndSort(enRes1, enRes2, enType, enMap); + if (interPts.length === 0 + || (interPts.length === 1 && (enType & 2))) //圆弧相切 + { + if (enType === 1) + return this.FilletParallelLine(enRes1, enRes2); + else if (enType === 3) + return this.FilletLineAndArc(enMap, enRes1); + else if (enType === 2) + return this.FilletArcAndArc(enRes1, enRes2); + return; + } + return this.FilletLineOrArc(enRes1, enRes2, interPts); + } + FilletLineOrArc(enRes1, enRes2, interPts) { + let iPt = interPts[0]; + //裁剪延伸,使两条线组成一个尖角 + let splitedCu1 = this.SplitCurve(enRes1, iPt, interPts); + let splitedCu2 = this.SplitCurve(enRes2, iPt, interPts); + let fRadius = this.FilletRadius; + let res = { cu1: splitedCu1.Curve, cu2: splitedCu2.Curve, arc: undefined }; + if (fRadius > 0) { + //角平分线向量. + let bisectorVec = new three.Vector3(); + let c1Derv = this.ComputerDerv(splitedCu1, bisectorVec); + let c2Derv = this.ComputerDerv(splitedCu2, bisectorVec); + //方向相反 + if (equalv3(bisectorVec, new three.Vector3())) + return; + //相切 + if (equalv3(c2Derv, c1Derv)) { + bisectorVec.set(0, 0, 0); + c1Derv = this.ComputerDerv2(splitedCu1, bisectorVec); + c2Derv = this.ComputerDerv2(splitedCu2, bisectorVec); + } + let cu1RoOcsInv = new three.Matrix4().extractRotation(splitedCu1.Curve.OCSInv); + [c1Derv, c2Derv, bisectorVec].forEach(v => v.applyMatrix4(cu1RoOcsInv)); + let offCu1 = splitedCu1.Curve.GetOffsetCurves(fRadius * -Math.sign(c1Derv.cross(bisectorVec).z))[0]; + let offCu2 = splitedCu2.Curve.GetOffsetCurves(fRadius * -Math.sign(c2Derv.cross(bisectorVec).z))[0]; + if (!offCu1 || !offCu2) + return; + // JigUtils.Draw(new Line(iPt, iPt.clone().add(c1Derv.clone().multiplyScalar(10)))).ColorIndex = 1; + // JigUtils.Draw(new Line(iPt, iPt.clone().add(c2Derv.clone().multiplyScalar(10)))).ColorIndex = 2; + // JigUtils.Draw(new Line(iPt, iPt.clone().add(bisectorVec))).ColorIndex = 3; + // offCu1.ColorIndex = 6; + // offCu2.ColorIndex = 6; + // JigUtils.Draw(offCu1.Clone()); + // JigUtils.Draw(offCu2.Clone()); + let center = offCu1.IntersectWith(offCu2, IntersectOption.ExtendNone) + .sort((p1, p2) => { + return p1.distanceToSquared(iPt) - p2.distanceToSquared(iPt); + })[0]; + if (!center) + return; + let arcP1 = splitedCu1.Curve.GetClosestPointTo(center, true); + let arcP2 = splitedCu2.Curve.GetClosestPointTo(center, true); + if (!splitedCu1.Curve.PtOnCurve(arcP1) || !splitedCu2.Curve.PtOnCurve(arcP2)) + return; + //时针校验 + let v1 = arcP1.clone().sub(center).applyMatrix4(cu1RoOcsInv); + let v2 = arcP2.clone().sub(center).applyMatrix4(cu1RoOcsInv); + //绘制圆弧 + let arc = new exports.Arc(new three.Vector3(), this.FilletRadius, angle(v1), angle(v2), v1.cross(v2).z < 0); + arc.ApplyMatrix(splitedCu1.Curve.OCS); + arc.Center = center; + res.arc = arc; + //延伸或者裁剪到圆弧点 + this.ExtendPt(splitedCu1, arcP1); + this.ExtendPt(splitedCu2, arcP2); + } + res.cu1Extend = splitedCu1.ExtType; + res.cu2Extend = splitedCu2.ExtType; + return res; + } + FilletPolyLineSelf(enRes1, enRes2) { + let pl = enRes1.Entity; + let param1 = pl.GetParamAtPoint(pl.GetClosestPointTo(enRes1.Point, false)); + let param2 = pl.GetParamAtPoint(pl.GetClosestPointTo(enRes2.Point, false)); + if (param1 > param2) { + [param1, param2] = [param2, param1]; + [enRes1, enRes2] = [enRes2, enRes1]; + } + let parF1 = Math.floor(param1); + let parF2 = Math.floor(param2); + //共线 + if (parF1 === parF2) + return; + let c1 = pl.GetCurveAtParam(param1); + let c2 = pl.GetCurveAtParam(param2); + if (equalv3(c1.GetFistDeriv(1).normalize(), c2.GetFistDeriv(0).normalize())) + return; + let es1 = new PromptEntityResult(); + es1.Entity = c1; + es1.Point = enRes1.Point; + let es2 = new PromptEntityResult(); + es2.Entity = c2; + es2.Point = enRes2.Point; + let fres = this.Fillet(es1, es2); + if (!fres) + return; + let pln = pl.Clone(); + if (fres.cu1 instanceof exports.Arc) + pln.SetBulgeAt(parF1, fres.cu1.Bul); + if (fres.cu2 instanceof exports.Arc) + pln.SetBulgeAt(parF2, fres.cu2.Bul); + let splitType1 = fres.cu1Extend; + let splitType2 = fres.cu2Extend; + if (splitType1 === splitType2) + return; + if (!fres.arc) { + if (splitType1 === ExtendType.End) { + let ep = AsVector2(fres.cu1.EndPoint.applyMatrix4(pln.OCSInv)); + pln.SetPointAt(parF1 + 1, ep); + let sp = AsVector2(fres.cu2.StartPoint.applyMatrix4(pln.OCSInv)); + pln.SetPointAt(parF2, sp); + //移除多余的点 + pln.LineData.splice(parF1 + 1, parF2 - parF1 - 1); + pln.Update(); + return { cu1: pln }; + } + else { + let ep = AsVector2(fres.cu1.StartPoint.applyMatrix4(pln.OCSInv)); + pln.SetPointAt(parF1, ep); + let sp = AsVector2(fres.cu2.EndPoint.applyMatrix4(pln.OCSInv)); + pln.SetPointAt(parF2 + 1, sp); + pln.LineData.splice(parF2 + 2); + pln.LineData.splice(0, parF1); + pln.Update(); + return { cu1: pln }; + } + } + if (splitType1 === ExtendType.End) //没有经过起点 + { + let sp = AsVector2(fres.cu1.EndPoint.applyMatrix4(pln.OCSInv)); + if (parF2 - parF1 === 1) { + pln.AddVertexAt(parF1 + 1, sp); + parF2++; + } + else + pln.SetPointAt(parF1 + 1, sp); + pln.SetBulgeAt(parF1 + 1, fres.arc.Bul); + let ep = AsVector2(fres.cu2.StartPoint.applyMatrix4(pln.OCSInv)); + pln.SetPointAt(parF2, ep); + //移除多余的点 + pln.LineData.splice(parF1 + 2, parF2 - parF1 - 2); + pln.Update(); + return { cu1: pln }; + } + else //经过起点 + { + let sp = AsVector2(fres.arc.EndPoint.applyMatrix4(pln.OCSInv)); + let keepF1 = 0; + if (parF2 + 1 <= pln.LineData.length) { + if (parF1 === 0 || equaln$1(pln.GetBulgeAt(parF1 - 1), 0)) + pln.AddVertexAt(parF2 + 1, sp); + else { + pln.SetPointAt(parF1 - 1, sp); + keepF1 = -1; //保留圆弧位 + } + } + else + pln.SetPointAt(parF2 + 1, sp); + if (keepF1 === 0) + pln.SetBulgeAt(parF2 + 1, -fres.arc.Bul); + else + pln.SetBulgeAt(parF1 - 1, -fres.arc.Bul); + let ep = AsVector2(fres.cu1.StartPoint.applyMatrix4(pln.OCSInv)); + pln.SetPointAt(parF1, ep); + pln.CloseMark = true; + pln.LineData.splice(parF2 + 2 + keepF1); + pln.LineData.splice(0, parF1 + keepF1); + pln.Update(); + return { cu1: pln }; + } + } + FilletPolylineAndCurve(enRes1, enRes2) { + let arr1 = GetFilletCurve(enRes1); + let arr2 = GetFilletCurve(enRes2); + let [cu1, paramF1] = arr1; + let [cu2, paramF2] = arr2; + let es1 = new PromptEntityResult(); + es1.Entity = cu1; + es1.Point = enRes1.Point; + let es2 = new PromptEntityResult(); + es2.Entity = cu2; + es2.Point = enRes2.Point; + let fres = this.Fillet(es1, es2); + if (fres) { + let cus = []; + let isFirst = false; + if (fres.cu1) { + if (enRes1.Entity instanceof exports.Polyline) { + isFirst = true; + let pln = enRes1.Entity.Clone(); + pln.DigestionCloseMark(); + if (fres.cu1 instanceof exports.Arc) + pln.SetBulgeAt(paramF1, fres.cu1.Bul); + if (fres.cu1Extend === ExtendType.End) { + pln.LineData.splice(paramF1 + 2); + let ep = AsVector2(fres.cu1.EndPoint.applyMatrix4(pln.OCSInv)); + pln.SetPointAt(paramF1 + 1, ep); + } + else { + pln.LineData.splice(0, paramF1); + let sp = AsVector2(fres.cu1.StartPoint.applyMatrix4(pln.OCSInv)); + pln.SetPointAt(0, sp); + } + cus.push(pln); + } + else if (!enRes1.IsCircle) + cus.push(fres.cu1); + } + if (fres.arc) + cus.push(fres.arc); + if (fres.cu2) { + if (enRes2.Entity instanceof exports.Polyline) { + let pln = enRes2.Entity.Clone(); + pln.DigestionCloseMark(); + if (fres.cu2 instanceof exports.Arc) + pln.SetBulgeAt(paramF2, fres.cu2.Bul); + if (fres.cu2Extend === ExtendType.End) { + pln.LineData.splice(paramF2 + 2); + let ep = AsVector2(fres.cu2.EndPoint.applyMatrix4(pln.OCSInv)); + pln.SetPointAt(paramF2 + 1, ep); + } + else { + pln.LineData.splice(0, paramF2); + let sp = AsVector2(fres.cu2.StartPoint.applyMatrix4(pln.OCSInv)); + pln.SetPointAt(0, sp); + } + cus.push(pln); + cus.reverse(); + } + else if (!enRes2.IsCircle) + cus.push(fres.cu2); + } + if (cus.length > 0) { + let pl = cus[0]; + if (!(pl instanceof exports.Polyline)) + return; + for (let i = 1; i < cus.length; i++) + pl.Join(cus[i]); + if (isFirst) + return { cu1: pl }; + else + return { cu2: pl }; + } + } + return undefined; + } + FilletPolyLineAllAngular(enRes1) { + let pl = enRes1.Entity; + let cus = pl.Explode(); + let count = cus.length; + if (pl.IsClose) + cus.push(cus[0]); + let ncus = []; + for (let i = 0; i < count; i++) { + let c1 = cus[i]; + let c2 = cus[i + 1]; + ncus.push(c1); + if (!c2) + break; + if (equalv3(c1.GetFistDeriv(1).normalize(), c2.GetFistDeriv(0).normalize())) + continue; + let es1 = new PromptEntityResult(); + es1.Entity = c1; + es1.Point = c1.EndPoint; + let es2 = new PromptEntityResult(); + es2.Entity = c2; + es2.Point = c2.StartPoint; + let fres = this.Fillet(es1, es2); + if (fres) { + if (fres.cu1) + c1.CopyFrom(fres.cu1); + if (fres.cu2) + c2.CopyFrom(fres.cu2); + if (fres.arc) + ncus.push(fres.arc); + } + } + let pln = pl.Clone(); + pln.LineData = []; + pln.ApplyMatrix(pln.OCSInv); + pln.CloseMark = false; + for (let cu of ncus) + pln.Join(cu); + pln.CloseMark = pl.CloseMark; + return { + cu1: pln, + cu2: undefined, + arc: undefined + }; + } + FindNearestPt(pts, target) { + let res = pts[0]; + let dis = Infinity; + for (let p of pts) { + let d = p.distanceTo(target); + if (d < dis) { + res = p; + dis = d; + } + } + return res; + } + FilletBoard(brRes, ptRes) { + let br = brRes.Entity; + let brContour = br.ContourCurve.Clone(); + //------1.求交 + let brResPt = brRes.Point.clone().applyMatrix4(br.OCSInv).setZ(0); + let ptResPt = ptRes.Point.clone().applyMatrix4(br.OCSInv).setZ(0); + let l = new exports.Line(brResPt, ptResPt); + let ipts = l.IntersectWith(brContour, IntersectOption.ExtendThis); + if (ipts.length > 2) //超过2个则有可能有多余交点 + //找最近点 + ipts = [this.FindNearestPt(ipts, brResPt), this.FindNearestPt(ipts, ptResPt)]; + if (ipts.length !== 2) + return "倒角失败!交点个数异常."; + //------2.倒角 + let es1 = new PromptEntityResult(brContour, ipts[0]); + let es2 = new PromptEntityResult(brContour, ipts[1]); + let res = this.FilletPolyLineSelf(es1, es2); + if (res && res.cu1) + return res.cu1; + else + return "倒角失败"; + } + /** + * 平行线倒角 + */ + FilletParallelLine(enRes1, enRes2) { + let l1 = enRes1.Entity; + let l2 = enRes2.Entity; + let l1Derv = l1.GetFistDeriv(0); + if (!isParallelTo(l1Derv, l2.GetFistDeriv(0))) + return; + let vec = l2.StartPoint.sub(l1.StartPoint); + if (isParallelTo(vec, l1Derv)) + return; + let par1 = l2.GetClosestAtPoint(l1.StartPoint, true).param; + let par2 = l2.GetClosestAtPoint(l1.EndPoint, true).param; + if (!isIntersect2(0, 1, par1, par2)) + return; + let lineClone1 = l1.Clone(); + let lineClone2 = l2.Clone(); + let par = l1.GetClosestAtPoint(enRes1.Point, true).param; + let parFix = Math.round(par); + let ptFix = lineClone1.GetPointAtParam(parFix); + let ptL2Fix = lineClone2.GetClosestAtPoint(ptFix, true).closestPt; + let cu1Extend = parFix === 0 ? ExtendType.Start : ExtendType.End; + let cu2Extend; + if ((par1 > par2) === (parFix === 1)) { + lineClone2.StartPoint = ptL2Fix; + cu2Extend = ExtendType.Start; + } + else { + lineClone2.EndPoint = ptL2Fix; + cu2Extend = ExtendType.End; + } + let radius = ptFix.distanceTo(ptL2Fix) / 2; + if (radius < 1e-3) + return; + let arcCenter = midPoint(ptFix, ptL2Fix); + let sv = ptFix.sub(arcCenter); + let ev = ptL2Fix.sub(arcCenter); + if (parFix === 0) + l1Derv.negate(); + //平面矩阵 + let xVec = new three.Vector3(); + let yVec = new three.Vector3(); + let zVec = vec.cross(l1Derv).normalize(); + let l1Normal = l1.Normal; + if (isParallelTo(zVec, l1Normal)) + zVec = l1Normal; + Orbit.ComputUpDirection(zVec, yVec, xVec); + let mtx = new three.Matrix4().makeBasis(xVec, yVec, zVec); + let mtxInv = new three.Matrix4().getInverse(mtx); + //变换 + sv.applyMatrix4(mtxInv); + ev.applyMatrix4(mtxInv); + l1Derv.applyMatrix4(mtxInv); + let sa = angle(sv); + let ea = angle(ev); + let clockwise = ev.cross(l1Derv).z > 0; + let arc = new exports.Arc(new three.Vector3(), radius, sa, ea, clockwise); + arc.ApplyMatrix(mtx); + arc.Center = arcCenter; + return { + cu1: lineClone1, + cu1Extend, + cu2: lineClone2, + cu2Extend, + arc, + }; + } + /** + * 计算圆弧与圆弧没有交点的情况下倒角结果. + * @param enRes1 + * @param enRes2 + * @returns arc and arc + */ + FilletArcAndArc(enRes1, enRes2) { + let a1 = enRes1.Entity; + let a2 = enRes2.Entity; + let arcO1 = a1.GetOffsetCurves(this.FilletRadius * (a1.IsClockWise ? -1 : 1))[0]; + let arcO2 = a2.GetOffsetCurves(this.FilletRadius * (a2.IsClockWise ? -1 : 1))[0]; + // arcO1.ColorIndex = 6; + // arcO2.ColorIndex = 6; + // JigUtils.Draw(arcO1); + // JigUtils.Draw(arcO2); + //求交 + let intPts = arcO1.IntersectWith(arcO2, IntersectOption.ExtendBoth); + if (intPts.length === 0) + return; //无交点无法倒角 + //两选择点的中点 + let clickMidp = midPoint(enRes1.Point, enRes2.Point); //用来选择合适的交点 + //选择合适的交点 + intPts.sort((p1, p2) => { + return p1.distanceToSquared(clickMidp) - p2.distanceToSquared(clickMidp); + }); + //圆弧圆心 + let narcCenter = intPts[0]; + let narcP1 = a1.GetClosestPointTo(narcCenter, true); //两圆弧和相切弧的交点 + let narcP2 = a2.GetClosestPointTo(narcCenter, true); + let tempCircle = new exports.Circle(narcCenter, this.FilletRadius); + tempCircle.OCSNoClone.copy(a1.OCSNoClone).setPosition(narcCenter); + let closestPt = a1.GetClosestPointTo(a2.Center, true); //两曲线距离对方圆心最近的点 + let narcMP = tempCircle.GetClosestPointTo(closestPt, false); //相切圆距离closestPt最近的点 + //构造圆弧 + let narc = new exports.Arc().ApplyMatrix(a1.OCS).FromThreePoint(narcP1, narcMP, narcP2); + let a1Clone = a1.Clone(); + let a2Clone = a2.Clone(); + let a1Param = a1.GetParamAtPoint(narcP1); + let a2Param = a2.GetParamAtPoint(narcP2); + let a1Derv = a1.GetFistDeriv(a1Param).normalize(); + let a2Derv = a2.GetFistDeriv(a2Param).normalize(); + let narcDerv0 = narc.GetFistDeriv(0).normalize(); + let narcDerv1 = narc.GetFistDeriv(1).normalize(); + //裁剪圆弧 + if (equalv3(a1Derv, narcDerv0)) + a1Clone.EndPoint = narcP1; + else + a1Clone.StartPoint = narcP1; + if (equalv3(a2Derv, narcDerv1)) + a2Clone.StartPoint = narcP2; + else + a2Clone.EndPoint = narcP2; + return { + cu1: a1Clone, + cu2: a2Clone, + arc: narc + }; + } + /** + * 计算直线与圆弧没有交点(或相切)的情况下倒角结果 + * @param enRes1 + * @param enRes2 + * @returns line and cir + */ + FilletLineAndArc(enMap, enRes1) { + let lineRes = enMap[0][0]; + let arcRes = enMap[1][0]; + let line = lineRes.Entity; + let arc = arcRes.Entity; + let dir = GetPointAtCurveDir(line, arc.Center); + let lineO = line.GetOffsetCurves(this.FilletRadius * dir)[0]; + let arcO = arc.GetOffsetCurves(this.FilletRadius * (arc.IsClockWise ? -1 : 1))[0]; // tip:面积逆时针为正, 顺时针为负. + // lineO.ColorIndex = 6; + // arcO.ColorIndex = 6; + // JigUtils.Draw(lineO); + // JigUtils.Draw(arcO); + //求交 + let intPts = lineO.IntersectWith(arcO, IntersectOption.ExtendBoth); + if (intPts.length === 0) + return; //无交点无法倒角 + //两选择点的中点 + let clickMidp = midPoint(lineRes.Point, arcRes.Point); + //选择适合的交点。 + intPts.sort((p1, p2) => { + return p1.distanceToSquared(clickMidp) - p2.distanceToSquared(clickMidp); + }); + //圆弧圆心 + let arcCenter = intPts[0]; + let arcP1 = line.GetClosestPointTo(arcCenter, true); //直线与相切圆的交点 + let arcP2 = arc.GetClosestPointTo(arcCenter, true); //圆弧与相切圆的交点 + let tempCircle = new exports.Circle(arcCenter, this.FilletRadius); + tempCircle.OCSNoClone.copy(arc.OCSNoClone).setPosition(arcCenter); + let { closestPt, param } = line.GetClosestAtPoint(arc.Center, true); + let arcMP = tempCircle.GetClosestPointTo(closestPt, false); + //构造圆弧 + let narc = new exports.Arc().ApplyMatrix(arc.OCS).FromThreePoint(arcP1, arcMP, arcP2); + //裁剪线 + let lineClone = line.Clone(); + let arcClone = arc.Clone(); + let lineExtend; + let p1Param = line.GetParamAtPoint(arcP1); + if (p1Param > param) { + lineClone.StartPoint = arcP1; + lineExtend = ExtendType.Start; + } + else { + lineClone.EndPoint = arcP1; + lineExtend = ExtendType.End; + } + //裁剪圆弧 + let arcParam = arc.GetParamAtPoint(arcP2); + let arcDerv = arc.GetFistDeriv(arcParam).normalize(); + let narcDerv = narc.GetFistDeriv(1).normalize(); + let arcExtend; + if (equalv3(arcDerv, narcDerv)) { + arcClone.StartPoint = arcP2; + arcExtend = ExtendType.Start; + } + else { + arcClone.EndPoint = arcP2; + arcExtend = ExtendType.End; + } + //先选直线为真 + if (enRes1.Entity === line) + return { + cu1: lineClone, + cu1Extend: lineExtend, + cu2: arcClone, + cu2Extend: arcExtend, + arc: narc + }; + else + return { + cu1: arcClone, + cu1Extend: arcExtend, + cu2: lineClone, + cu2Extend: lineExtend, + arc: narc.Reverse() //#I3BWIA 避免起点和终点方向相反导致的多段线连接错误 + }; + } + //获得两曲线的交点,并且排序交点. + GetIntersectAndSort(enRes, enRes2, enType, enMap) { + let interPts = enRes.Entity.IntersectWith(enRes2.Entity, IntersectOption.ExtendBoth); + if (interPts.length > 1) { + let baseP; + if (enType & 1) //如果有直线,那么用直线 + baseP = enMap[0][0].Point; + else if (enType === 2) //如果都是圆弧,那么取中点 + baseP = midPoint(enMap[1][0].Point, enMap[1][1].Point); + interPts.sort((p1, p2) => p1.distanceToSquared(baseP) - p2.distanceToSquared(baseP)); + } + return interPts; + } + /** + * 对图元列表进行按位编码,类型映射如下: + * # 1:line 2:arc 4:polyline + * @param enRes + * @param enRes2 + * @returns + */ + EnCode(enRes, enRes2) { + let enMap = [[], [], [], [], []]; + let enType = 0; + enType |= Encode(enRes, enMap); + enType |= Encode(enRes2, enMap); + return { enType, enMap }; + } + //计算曲线在相交处的切线,取真实的切线 + ComputerDerv(cuRes, dervSum) { + let derv; + let cu = cuRes.Curve; + if (cuRes.ExtType === ExtendType.Start) { + derv = cu.GetFistDeriv(0).normalize(); + dervSum.add(derv); + } + else { + derv = cu.GetFistDeriv(cu.EndParam).normalize(); + dervSum.add(derv.clone().negate()); + } + return derv; + } + // 计算曲线在相交处的切线,取起点到终点的切线.(当曲线相切时调用此方法.) + ComputerDerv2(cuRes, dervSum) { + let cu = cuRes.Curve; + let derv = cu.EndPoint.sub(cu.StartPoint); + if (cuRes.ExtType === ExtendType.Start) + dervSum.add(derv); + else + dervSum.add(derv.clone().negate()); + return derv; + } + // 延伸或者裁剪到指定的圆弧的点. + ExtendPt(cu, newP) { + if (cu.ExtType === ExtendType.Start) + cu.Curve.StartPoint = newP; + else + cu.Curve.EndPoint = newP; + } + /** + * 切割或者延伸曲线,尖角化 + * + * @param cu 处理的曲线 + * @param interPt 原先的相交点 + * @param pickPoint 鼠标点击点 + * @returns 返回新的曲线 + */ + SplitCurve(enRes, interPt, interPts) { + let cu = enRes.Entity; + let pickPoint = enRes.Point; + let cp = cu.GetClosestPointTo(pickPoint, false); + let cus = cu.GetSplitCurvesByPts([interPt]); + if (cus.length === 0) + cus.push(cu.Clone()); + else if (cus.length === 2) + cus.sort((c1, c2) => { + return c1.GetClosestPointTo(cp, false).distanceTo(cp) + < c2.GetClosestPointTo(cp, false).distanceTo(cp) ? -1 : 1; + }); + let exType = undefined; + let newCu = cus[0]; + if (newCu instanceof exports.Line || newCu.constructor.name === "RoomWallLine") + newCu.Extend(newCu.GetParamAtPoint(interPt)); //延伸到需要的长度 + else if (newCu instanceof exports.Arc || newCu.constructor.name === "RoomWallArc") { + let arc = newCu; + if (cus.length === 1) + if (!cu.PtOnCurve(interPt)) { + if (cu.PtOnCurve(interPts[1])) { + //交点参数 + let iparam = arc.GetParamAtPoint(interPts[1]); + let pickParam = arc.GetParamAtAngle(arc.GetAngleAtPoint(pickPoint)); + if (pickParam > iparam) { + arc.EndAngle = arc.GetAngleAtPoint(interPt); + exType = ExtendType.End; + } + else { + arc.StartAngle = arc.GetAngleAtPoint(interPt); + exType = ExtendType.Start; + } + } + else { + //终点,起点 + interPts = interPts.sort((p1, p2) => { + return arc.ComputeAnlge(arc.GetAngleAtPoint(p1)) - arc.ComputeAnlge(arc.GetAngleAtPoint(p2)); + }); + if (interPt === interPts[0]) { + arc.EndAngle = arc.GetAngleAtPoint(interPt); + exType = ExtendType.End; + } + else { + arc.StartAngle = arc.GetAngleAtPoint(interPt); + exType = ExtendType.Start; + } + } + } + } + if (exType === undefined) { + //使用equalv3时由于精度误差导致的判断错误 + if (interPt.manhattanDistanceTo(newCu.StartPoint) < interPt.manhattanDistanceTo(newCu.EndPoint)) + exType = ExtendType.Start; + else + exType = ExtendType.End; + } + return { Curve: newCu, ExtType: exType }; + } +} + +exports.TemplateFilletAction = class TemplateFilletAction extends exports.TemplateAction { + constructor() { + super(); + this.FilletDatas = []; + } + _Update(paramDiff, newValue) { + for (let d of this.FilletDatas) { + if (d.Entity?.IsErase !== false) + continue; + let br = d.Entity.Object; + let update_bak = br.AutoUpdate; + br.AutoUpdate = false; + if (d.ArcParams.length > 0) + this.Fillet(br, newValue, d); + if (br.Grooves.length > 0 && d.Grooves?.length) { + for (let data of d.Grooves) { + const groove = br.Grooves[data.Index]; + if (groove) + this.Fillet(groove, newValue, data); + } + } + const path2d = br.Modeling2D; + if (path2d.length > 0 && d.Path2D?.length) { + for (let data of d.Path2D) { + let vm = path2d[data.Index]; + if (vm) { + this.Fillet(vm, newValue, data); + } + } + br._2D3DPathObject = null; + } + br.AutoUpdate = update_bak; + br.Update(exports.UpdateDraw.Geometry); + } + } + Fillet(br, newValue, d) { + let cu = br instanceof exports.ExtrudeSolid ? br.ContourCurve : br.path; + if (cu instanceof exports.Circle) + return; + let fillet = new FilletUtils(); + fillet.FilletRadius = Math.max(newValue, 0.1); + let cuOld = cu; + for (let arcParam of d.ArcParams) { + let param1 = FixIndex$1(arcParam - 1, cu.EndParam); + let param2 = FixIndex$1(arcParam + 1, cu.EndParam); + let p1 = cu.GetPointAtParam(param1); + let p2 = cu.GetPointAtParam(param2); + let res1 = new PromptEntityResult(cu, p1); + let res2 = new PromptEntityResult(cu, p2); + let fres = fillet.FilletPolyLineSelf(res1, res2); + if (fres) + cu = fres.cu1; + } + if (br instanceof exports.ExtrudeSolid) { + if (cu !== cuOld) + br.ContourCurve = cu; + } + else { + if (cu !== cuOld) + br.path = cu; + } + } + //#region -------------------------File------------------------- + //对象应该实现dataIn和DataOut的方法,为了对象的序列化和反序列化 + //对象从文件中读取数据,初始化自身 + ReadFile(file) { + let ver = file.Read(); + super.ReadFile(file); + this.FilletDatas.length = 0; + if (ver === 1) { + let id = file.ReadObjectId(); + let param1 = file.Read(); + let param2 = file.Read(); + let arcParam = param2 !== 0 ? param2 - 1 : param1 + 1; + this.FilletDatas.push({ Entity: id, ArcParams: [arcParam] }); + } + else { + let count = file.Read(); + for (let i = 0; i < count; i++) { + let id = file.ReadObjectId(); + let params = []; + let parCount = file.Read(); + for (let i = 0; i < parCount; i++) + params.push(file.Read()); + const groove = []; + const path2d = []; + if (ver >= 3) { + const grooveCount = file.Read(); + for (let i = 0; i < grooveCount; i++) { + let data = { + Index: undefined, + ArcParams: [], + }; + data.Index = file.Read(); + let parCount = file.Read(); + for (let j = 0; j < parCount; j++) + data.ArcParams.push(file.Read()); + groove.push(data); + } + const path2DCount = file.Read(); + for (let i = 0; i < path2DCount; i++) { + let data = { + Index: undefined, + ArcParams: [], + }; + data.Index = file.Read(); + let parCount = file.Read(); + for (let j = 0; j < parCount; j++) + data.ArcParams.push(file.Read()); + path2d.push(data); + } + } + if (id) + this.FilletDatas.push({ Entity: id, ArcParams: params, Grooves: groove, Path2D: path2d }); + } + } + } + //对象将自身数据写入到文件. + WriteFile(file) { + file.Write(3); + super.WriteFile(file); + file.Write(this.FilletDatas.length); + for (let d of this.FilletDatas) { + file.WriteObjectId(d.Entity); + file.Write(d.ArcParams.length); + for (let param of d.ArcParams) + file.Write(param); + file.Write(d.Grooves ? d.Grooves.length : 0); + for (let data of (d.Grooves ?? [])) { + file.Write(data.Index); + file.Write(data.ArcParams.length); + for (let par of data.ArcParams) + file.Write(par); + } + file.Write(d.Path2D ? d.Path2D.length : 0); + for (let data of (d.Path2D ?? [])) { + file.Write(data.Index); + file.Write(data.ArcParams.length); + for (let par of data.ArcParams) + file.Write(par); + } + } + } +}; +exports.TemplateFilletAction = __decorate([ + Factory +], exports.TemplateFilletAction); + +function ApplyGoodInfo(en, material) { + en.BoardProcessOption[EBoardKeyList.BrMat] = material.GoodsInfo.name; + en.BoardProcessOption[EBoardKeyList.Color] = material.GoodsInfo.color; + en.BoardProcessOption[EBoardKeyList.Mat] = material.GoodsInfo.material; +} + +exports.TemplateMaterialAction = class TemplateMaterialAction extends exports.TemplateAction { + constructor(Entitys = [], CompositeEntitys = [], ApplyGoodInfo = true) { + super(); + this.Entitys = Entitys; + this.CompositeEntitys = CompositeEntitys; + this.ApplyGoodInfo = ApplyGoodInfo; + } + _Update(paramDiff) { + if (!this.parent.MaterialValue) + return; + for (let id of this.Entitys) { + if (!(id?.Object) || id.IsErase) + continue; + let en = id.Object; + if (this.ApplyGoodInfo && en instanceof exports.Board) + ApplyGoodInfo(en, this.parent.MaterialValue); + en.Material = this.parent.MaterialValue.Id; + } + for (let [id, indexs] of this.CompositeEntitys) { + if (!(id?.Object) || id.IsErase) + continue; + let en = id.Object; + let allEntitys = []; + const GetAllEntitys = (hard) => { + for (let e of hard.Entitys) { + if (e instanceof exports.HardwareCompositeEntity) + GetAllEntitys(e); + else + allEntitys.push(e); + } + }; + GetAllEntitys(en); + for (let index of indexs) { + let subE = allEntitys[index]; + if (!subE) + continue; + if (this.ApplyGoodInfo && subE instanceof exports.Board) + ApplyGoodInfo(subE, this.parent.MaterialValue); + subE.Material = this.parent.MaterialValue.Id; + } + } + } + //#region -------------------------File------------------------- + //对象应该实现dataIn和DataOut的方法,为了对象的序列化和反序列化 + //对象从文件中读取数据,初始化自身 + ReadFile(file) { + let ver = file.Read(); + super.ReadFile(file); + this.ApplyGoodInfo = file.Read() === 1; + this.Entitys.length = 0; + let count = file.Read(); + for (let i = 0; i < count; i++) { + let id = file.ReadObjectId(); + if (id) + this.Entitys.push(id); + } + if (ver > 1) { + count = file.Read(); + this.CompositeEntitys.length = 0; + for (let i = 0; i < count; i++) { + let id = file.ReadObjectId(); + let indexs = file.Read(); + this.CompositeEntitys.push([id, indexs]); + } + } + } + //对象将自身数据写入到文件. + WriteFile(file) { + file.Write(2); + super.WriteFile(file); + file.Write(this.ApplyGoodInfo ? 1 : 0); + file.Write(this.Entitys.length); + for (let ent of this.Entitys) + file.WriteObjectId(ent); + file.Write(this.CompositeEntitys.length); + for (let [id, indexs] of this.CompositeEntitys) { + file.WriteObjectId(id); + file.Write(indexs.concat()); + } + } +}; +exports.TemplateMaterialAction = __decorate([ + Factory +], exports.TemplateMaterialAction); + +/** + * 模版参数类型 + */ +var TemplateParamType; +(function (TemplateParamType) { + TemplateParamType[TemplateParamType["String"] = 0] = "String"; + TemplateParamType[TemplateParamType["Float"] = 1] = "Float"; + TemplateParamType[TemplateParamType["Int"] = 2] = "Int"; + TemplateParamType[TemplateParamType["Enum"] = 3] = "Enum"; + TemplateParamType[TemplateParamType["Material"] = 4] = "Material"; +})(TemplateParamType || (TemplateParamType = {})); + +/** + * 模版参数 + */ +exports.TemplateParam = class TemplateParam { + constructor() { + /** 表达式 使用js引起求值(暂时) */ + this.expr = ""; + this.type = TemplateParamType.Float; + this.isLock = false; + //监听 + this.actions = new Proxy([], { + set: (target, key, value, receiver) => { + if (Reflect.get(target, key, receiver) !== value) { + this.WriteAllObjectRecord(); + if (value instanceof exports.TemplateAction) + value.parent = this; + } + return Reflect.set(target, key, value, receiver); + }, + get: (target, key, receiver) => { + if (key === ISPROXYKEY) + return true; + else + return Reflect.get(target, key, receiver); + } + }); + } + WriteAllObjectRecord() { + if (this.parent) + this.parent.WriteAllObjectRecord(); + } + /** + * private:仅供内部调用. + * 更新参数值,并且触发动作. + */ + UpdateParam(value) { + switch (this.type) { + case TemplateParamType.String: + break; + case TemplateParamType.Float: + let oldV = this.value; + let newV = value; + if (!equaln$1(oldV, newV)) { + this.WriteAllObjectRecord(); + this.value = newV; + let diff = newV - oldV; + for (let a of this.actions) + a.Update(diff, newV); + } + else { + for (let a of this.actions) { + if (a instanceof exports.TemplateFilletAction) + a.Update(0, newV); + } + } + break; + case TemplateParamType.Int: + break; + case TemplateParamType.Enum: + break; + case TemplateParamType.Material: + { + if (this.MaterialValue) { + for (let a of this.actions) + a.Update(0, 0); + } + this.MaterialValue = undefined; + break; + } + } + } + /** + * 计算表达式的值并更新 + * @param vardefines 变量定义列表 + * @param paramMap 所有的参数列表.(可能我们需要依赖更新它) + */ + EvalUpdate(vardefines, paramMap, evaled, update = true) { + if (this.type === TemplateParamType.Material) { + if (update && this.MaterialValue) { + for (let a of this.actions) { + if (a instanceof exports.TemplateMaterialAction) + a.Update(0, this.value); + } + this.MaterialValue = undefined; + } + return 0; + } + if (this.expr === "") { + if (update) { + for (let a of this.actions) { + if (a instanceof exports.TemplateFilletAction) + a.Update(0, this.value); + } + } + return this.value; + } + if (evaled.has(this)) + return this.value; + if (update) + evaled.add(this); + let value = parseFloat(this.expr); + if (isNaN(this.expr)) { + //依赖收集 提前更新 + let keywords = this.expr.split(/[\s(){}=+-/*/,%;]/).filter(s => s.length > 0); + for (let key of keywords) { + if (key !== this.name && paramMap.has(key)) + vardefines[key] = paramMap.get(key).EvalUpdate(vardefines, paramMap, evaled, update); + } + try { + value = eval2(this.expr, vardefines); + } + catch (error) { + console.log("更新失败:", error); + return this.value; + } + } + else if (update) + this.expr = ""; + vardefines[this.name] = value; + if (update) + this.UpdateParam(value); + return value; + } + //#region -------------------------File------------------------- + //对象应该实现dataIn和DataOut的方法,为了对象的序列化和反序列化 + //对象从文件中读取数据,初始化自身 + ReadFile(file) { + let ver = file.Read(); + this.name = file.Read(); + this.expr = file.Read(); + this.value = file.Read(); + this.default = file.Read(); + this.description = file.Read(); + this.type = file.Read(); + this.min = file.Read(); + this.max = file.Read(); + this.option = file.Read(); + let count = file.Read(); + this.actions.length = 0; + for (let i = 0; i < count; i++) + this.actions.push(file.ReadObject()); + if (ver > 1) + this.isLock = file.Read(); + } + //对象将自身数据写入到文件. + WriteFile(file) { + file.Write(2); + file.Write(this.name); + file.Write(this.expr); + file.Write(this.value); + file.Write(this.default); + file.Write(this.description); + file.Write(this.type); + file.Write(this.min); + file.Write(this.max); + file.Write(this.option); + file.Write(this.actions.length); + for (let action of this.actions) + file.WriteObject(action); + file.Write(this.isLock); + } +}; +__decorate([ + AutoRecord +], exports.TemplateParam.prototype, "name", void 0); +__decorate([ + AutoRecord +], exports.TemplateParam.prototype, "expr", void 0); +__decorate([ + AutoRecord +], exports.TemplateParam.prototype, "value", void 0); +__decorate([ + AutoRecord +], exports.TemplateParam.prototype, "default", void 0); +__decorate([ + AutoRecord +], exports.TemplateParam.prototype, "description", void 0); +__decorate([ + AutoRecord +], exports.TemplateParam.prototype, "type", void 0); +__decorate([ + AutoRecord +], exports.TemplateParam.prototype, "min", void 0); +__decorate([ + AutoRecord +], exports.TemplateParam.prototype, "max", void 0); +__decorate([ + AutoRecord +], exports.TemplateParam.prototype, "option", void 0); +__decorate([ + AutoRecord +], exports.TemplateParam.prototype, "actions", void 0); +__decorate([ + AutoRecord +], exports.TemplateParam.prototype, "parent", void 0); +__decorate([ + AutoRecord +], exports.TemplateParam.prototype, "isLock", void 0); +exports.TemplateParam = __decorate([ + Factory +], exports.TemplateParam); + +/** + * 夹层空间分析 + */ +class ClampSpaceParse extends ISpaceParse { + constructor() { + super(...arguments); + this.SelectBoxRecord = new Map(); + } + async Parse() { + if (this.Boards.length === 1) { + await this.ParseSignalBoard(); + return; + } + //夹层空间 + let clampBoxs = []; + //单层空间(用于切割) + let spliteBoxs = new Map(); + for (let [boardType, boards] of this.BoardMap) { + let splitType = ConverBoardTypeToSpaceType(boardType); + let boardBoxCol = this.ParseBoardBox(boards, splitType); + //#IWFYY + if (boardType === BoardType.Behind && this.BoardMap.size > 1 && boardBoxCol.length > 1) { + let clampBox = boardBoxCol[0].clampSpace(boardBoxCol[1], splitType); + let size = clampBox.getSize(new three.Vector3()); + if (size.y > 2440) + boardBoxCol = [arrayLast(boardBoxCol)]; + } + if (boardBoxCol.length > 1) { + let clampBox = boardBoxCol[0].clampSpace(arrayLast(boardBoxCol), splitType); + if (clampBox.isSolid()) + clampBoxs.push(clampBox); + } + else if (boardBoxCol.length === 1) { + spliteBoxs.set(splitType, boardBoxCol[0]); + } + } + //归并盒子 + let allSpaceBox; + if (clampBoxs.length === 0) //如果不存在盒子,拿所有的盒子当空间 + { + allSpaceBox = new Box3Ext(); + spliteBoxs.forEach((box) => { allSpaceBox.union(box); }); + } + else //夹层空间合并 + { + allSpaceBox = clampBoxs[0]; + for (let i = 1, len = clampBoxs.length; i < len; i++) + allSpaceBox.intersect(clampBoxs[i]); + } + //切割并选择合适的空间 + await this.SpliteBoxsAndSelect(allSpaceBox, spliteBoxs); + if (this.SpaceBox && this.SpaceBox.isSolid()) { + //空间延伸到背板 + let behindBox = spliteBoxs.get(SplitType.Y); + if (behindBox && behindBox.min.y > this.SpaceBox.min.y) + this.SpaceBox.max.setY(behindBox.min.y); + this.ParseOK = true; + } + } + /** + * 单板延伸空间的时候的延伸距离 + */ + get SignalDist() { + return this._signalDist; + } + async ParseSignalBoard() { + let res = await this.GetSignalDist(); + if (res.Status === PromptStatus.OK && res.Distance > 0) { + let dist = res.Distance; + this._signalDist = dist; + let br = this.Boards[0]; + let box = br.GetBoundingBoxInMtx(this.SpaceOCSInv); + let type = this.GetBoardInSpaceType(br); + if (type === undefined) //暂时不支持斜空间 + { + //暂时不支持 + this.ParseOK = false; + return; + } + let splitType = ConverBoardTypeToSpaceType(type); + let p1 = box.min.clone().setComponent(splitType, box.min.getComponent(splitType) - dist); + let p2 = box.max.clone().setComponent(splitType, box.min.getComponent(splitType)); + let p3 = box.min.clone().setComponent(splitType, box.max.getComponent(splitType)); + let p4 = box.max.clone().setComponent(splitType, box.max.getComponent(splitType) + dist); + let boxs = [new Box3Ext().setFromPoints([p1, p2]), new Box3Ext().setFromPoints([p3, p4])]; + this.SpaceBox = await this.WrapSelectBox(boxs, ConverBoardTypeToSpaceType(br.BoardType)); + if (this.SpaceBox) + this.ParseOK = true; + } + else + this.ParseOK = false; + } + //virtual (请重载) 指定用户选择单块板的延伸空间 + async GetSignalDist() { + let res = new PromptDistendResult(); + res.Distance = 300; + res.Status = PromptStatus.OK; + return res; + } + SetRay(ray) { + } + async WrapSelectBox(splitBoxs, splitType) { + let box = await this.SelectBox(splitBoxs, splitType); + this.SelectBoxRecord.set(splitType, splitBoxs.indexOf(box)); + return box; + } + /** + * virtual (请重载) 当盒子空间被切割时,选择合适的空间 + * @param splitBoxs 切割后的盒子(2个) + * @param splitType 切割类型 + * @returns box 盒子 + */ + async SelectBox(splitBoxs, splitType) { + return splitBoxs[0]; + } + /** + *用单块板包围盒切割空间 + */ + async SpliteBoxsAndSelect(orgBox, spliteBoxes) { + this.SpaceBox = undefined; + if (spliteBoxes.size === 0) { + this.SpaceBox = orgBox; + return; + } + for (let [splitType, spBox] of spliteBoxes) { + let remBoxs = orgBox.substract(spBox, splitType); + if (remBoxs.length === 0) + return undefined; + else if (remBoxs.length === 1) { + //#IZE2N + if (splitType === SplitType.Y && remBoxs[0].min.y === orgBox.min.y) + continue; + orgBox = remBoxs[0]; + } + else + orgBox = await this.WrapSelectBox(remBoxs, splitType); + if (!orgBox) + return; + //Left Or Right Board + if (splitType === SplitType.X) { + if (spBox.min.x < orgBox.min.x) + this.LeftBoard = this.BoardMap.get(BoardType.Vertical)[0]; + else + this.RightBoard = this.BoardMap.get(BoardType.Vertical)[0]; + } + } + this.SpaceBox = orgBox; + } +} + +class ClampSpaceParseFix extends ClampSpaceParse { + set SignalDist(v) { + this._signalDist = v; + } + get SignalDist() { + return this._signalDist; + } + //virtual (请重载) 指定用户选择单块板的延伸空间 + async GetSignalDist() { + let res = new PromptDistendResult(); + res.Distance = this._signalDist; + res.Status = PromptStatus.OK; + return res; + } + async SelectBox(splitBoxs, splitType) { + let index = this.SelectBoxRecord.get(splitType); + return splitBoxs[index]; + } +} + +/** + * 模版定位信息(基类) + */ +exports.Positioning = class Positioning { + /** + * 定位 (更新 SpaceCS SpaceBox SpaceSize) + */ + async Positioning(param) { + } + WriteAllObjectRecord() { + if (this.parent) + this.parent.WriteAllObjectRecord(); + } + ReadFile(file) { + } + WriteFile(file) { + } +}; +exports.Positioning = __decorate([ + Factory +], exports.Positioning); + +exports.PositioningClampSpace = class PositioningClampSpace extends exports.Positioning { + constructor() { + super(...arguments); + this.Objects = []; + //按照 SplitType进行排序 0X 1Y 2Z + this.SelectBoxIndex = [0, 0, 0]; //左右下 + this.SignalDist = 100; //默认为100 防止空 + //#endregion + } + FromSpaceParse(parse) { + this.SignalDist = parse.SignalDist || 100; + this.Objects = parse.Boards.map(br => br.Id); + for (let [splitType, index] of parse.SelectBoxRecord) + this.SelectBoxIndex[splitType] = index; + } + /** + * 定位 + */ + async Positioning(param) { + let brs = this.Objects.filter(id => !id.IsErase).map(id => id.Object); + this._SpaceParse = new ClampSpaceParseFix(brs); + for (let i = 0; i < 3; i++) + this._SpaceParse.SelectBoxRecord.set(i, this.SelectBoxIndex[i]); + this._SpaceParse.SignalDist = this.SignalDist; + await this._SpaceParse.Parse(); + if (this._SpaceParse.ParseOK) { + this.SpaceCS = this._SpaceParse.DrawCS; + this.SpaceSize = this._SpaceParse.Size; + } + else { + this.SpaceCS = undefined; + this.SpaceSize = undefined; + // Log("模块定位错误!"); + } + } + //#region File + ReadFile(file) { + file.Read(); + let count = file.Read(); + this.Objects.length = 0; + for (let i = 0; i < count; i++) { + let id = file.ReadObjectId(); + if (id) + this.Objects.push(id); + } + this.SelectBoxIndex = file.Read(); + this.SignalDist = file.Read(); + } + WriteFile(file) { + file.Write(1); + file.Write(this.Objects.length); + for (let id of this.Objects) + file.WriteObjectId(id); + file.Write(arrayClone(this.SelectBoxIndex)); + file.Write(this.SignalDist); + } +}; +__decorate([ + AutoRecord +], exports.PositioningClampSpace.prototype, "Objects", void 0); +__decorate([ + AutoRecord +], exports.PositioningClampSpace.prototype, "SelectBoxIndex", void 0); +__decorate([ + AutoRecord +], exports.PositioningClampSpace.prototype, "SignalDist", void 0); +exports.PositioningClampSpace = __decorate([ + Factory +], exports.PositioningClampSpace); + +/** + * 临时定位 + * 在首次绘制时使用2点3点空间时通常不能使用定位,使用临时定位设置给模块后,模块在第一次使用后清空定位. + */ +exports.PositioningTemporary = class PositioningTemporary extends exports.Positioning { +}; +exports.PositioningTemporary = __decorate([ + Factory +], exports.PositioningTemporary); + +/** + * 模版类型 + */ +var TemplateType; +(function (TemplateType) { + //普通模板 + TemplateType[TemplateType["Usual"] = 0] = "Usual"; + //酒格 使用程序 + TemplateType[TemplateType["Grid"] = 1] = "Grid"; + //阵列模版 + TemplateType[TemplateType["Array"] = 2] = "Array"; + //没有实体的 + TemplateType[TemplateType["Clear"] = 4] = "Clear"; + //展开的 + TemplateType[TemplateType["Expanded"] = 8] = "Expanded"; + //隐藏的 + TemplateType[TemplateType["Hidden"] = 16] = "Hidden"; + TemplateType[TemplateType["HiddenChildren"] = 32] = "HiddenChildren"; + //标记 + TemplateType[TemplateType["Sign"] = 64] = "Sign"; + //以下未启用 + TemplateType[TemplateType["Door"] = 128] = "Door"; + TemplateType[TemplateType["Drawer"] = 256] = "Drawer"; + TemplateType[TemplateType["Handle"] = 512] = "Handle"; + TemplateType[TemplateType["Hinge"] = 1024] = "Hinge"; +})(TemplateType || (TemplateType = {})); +//以下未启用 +var TemplateType2; +(function (TemplateType2) { + TemplateType2[TemplateType2["Usual"] = 0] = "Usual"; + TemplateType2[TemplateType2["Door"] = 1] = "Door"; + TemplateType2[TemplateType2["Drawer"] = 2] = "Drawer"; + TemplateType2[TemplateType2["Handle"] = 3] = "Handle"; + TemplateType2[TemplateType2["Hinge"] = 4] = "Hinge"; + TemplateType2[TemplateType2["WineRack"] = 5] = "WineRack"; + TemplateType2[TemplateType2["Grid"] = 6] = "Grid"; +})(TemplateType2 || (TemplateType2 = {})); +var TemplateSplitType; +(function (TemplateSplitType) { + TemplateSplitType[TemplateSplitType["None"] = -1] = "None"; + TemplateSplitType[TemplateSplitType["X"] = 0] = "X"; + TemplateSplitType[TemplateSplitType["Y"] = 1] = "Y"; + TemplateSplitType[TemplateSplitType["Z"] = 2] = "Z"; +})(TemplateSplitType || (TemplateSplitType = {})); + +var TemplateRecord_1; +const TemplateDefaultParams = ["L", "W", "H", "PX", "PY", "PZ", "RX", "RY", "RZ", "BH"]; +const TempateDefaultParamCount = TemplateDefaultParams.length; +/** + * ### 模板记录 + * 模版与实体总是互相关联的,所以添加实体进入模版的时候,应该保证这个记录已经加入到数据库 + * + * 保留参数名称列表: L W H RX RY RZ X Y Z + * 保留参数前缀: _ $ + * + * #### 批量修改参数值. + * 程序应该只传入expr的值,(禁止直接编辑value).传入后,交由模版进行计算更新. + * 模版内部消化,决定是否保留expr.(当纯数字将被直接计算成value而不保存expr). + * + * 由于`DIV`变量的计算机制,`LWH`变量将不能依赖同层变量,(这可能会导致一些错误) + * + * 当模块节点处于切割空间内时,如果想重新绑定空间,那么空间树的位置将发生变更(实际上不管是不是在切割空间内,空间位置都可能发生变更) + * + */ +exports.TemplateRecord = TemplateRecord_1 = class TemplateRecord extends SymbolTableRecord { + constructor() { + super(); + this.Type = TemplateType.Usual; + this.SplitType = TemplateSplitType.None; + //展开的 这是UI数据我们暂时不序列化它(默认不展开有比较好的显示效果) + this.isExpanded = false; + //监听 + this.Params = this.CreateProxyArray(value => { + if (value instanceof exports.TemplateParam) + value.parent = this; + }); + this.Objects = this.CreateProxyArray(value => { + if (value instanceof ObjectId && value.Object instanceof exports.Entity) { + if (!this.Id) + console.warn("请先将模版添加到Database后在进行操作!"); + value.Object.Template = this.Id; + } + }); + this.Children = this.CreateProxyArray(value => { + if (value instanceof ObjectId && value.Object instanceof TemplateRecord_1) { + if (!this.Id) + console.warn("请先将模版添加到Database后在进行操作!"); + value.Object.Parent = this.Id; + } + }); + } + get Name() { + return this.name; + } + set Name(name) { + if (name !== this.name) { + this.WriteAllObjectRecord(); + this.name = name; + } + } + get Parent() { + return this._Parent; + } + set Parent(id) { + if (id !== this._Parent) { + this.WriteAllObjectRecord(); + if (this?._Parent?.Object) + arrayRemoveOnce((this.Parent.Object).Children, this.Id); + this._Parent = id; + } + } + get Root() { + return this.Parent?.Object?.Root ?? this; + } + get IsRoot() { + return this._Parent === undefined; + } + get Entitys() { + return this.Objects.map(o => o.Object); + } + get AllEntitys() { + let entitys = []; + this.Traverse((t) => { + for (let o of t.Objects) { + if (!o.IsErase) + entitys.push(o.Object); + } + }); + return entitys; + } + GetProperty(p) { return (this.Type & p) !== 0; } + SetProperty(p, v) { + if (this.GetProperty(p) === v) + return; + if (v) + this.Type |= p; + else + this.Type &= ~p; + } + get IsClear() { return this.GetProperty(TemplateType.Clear); } + set IsClear(isClear) { this.SetProperty(TemplateType.Clear, isClear); } + get IsSign() { return this.GetProperty(TemplateType.Sign); } + set IsSign(isSign) { this.SetProperty(TemplateType.Sign, isSign); } + get IsHidden() { return this.GetProperty(TemplateType.Hidden); } + set IsHidden(isHidden) { this.SetProperty(TemplateType.Hidden, isHidden); } + get IsHiddenChildren() { return this.GetProperty(TemplateType.HiddenChildren); } + set IsHiddenChildren(isHidden) { this.SetProperty(TemplateType.HiddenChildren, isHidden); } + Purge() { + this.Children = this.Children.filter(rc => rc && !rc.IsErase && rc.Object instanceof TemplateRecord_1); + this.Objects = this.Objects.filter(id => id?.IsErase === false); + } + Traverse(callback) { + callback(this); + for (let c of this.Children) { + if (c && c.Object) { + if (c.Object instanceof TemplateRecord_1) { + let template = c.Object; + template.Traverse(callback); + } + else { + Toaster({ + message: "模块子实体有个错误,程序已经暂时先忽略了这个错误!", + timeout: 8000, + intent: Intent.DANGER, + }); + } + } + } + } + async TraverseAsync(callback) { + await callback(this); + for (let c of this.Children) { + if (c && c.Object) { + let template = c.Object; + await template.TraverseAsync(callback); + } + } + } + /** 节点深度,根节点=0 */ + get NodeDepth() { + if (this._NodeDepthCache !== undefined) + return this._NodeDepthCache; + if (!this.Parent?.Object) + return 0; + let parentTemplate = this.Parent.Object; + this._NodeDepthCache = parentTemplate.NodeDepth + 1; + return this._NodeDepthCache; + } + /** 模版定位 */ + get Positioning() { + if (this._Positioning) + return this._Positioning; + let spaceCS = this.GetTemplateRealitySpaceCS(); + let positioning = new exports.PositioningTemporary(); + positioning.SpaceCS = spaceCS; + positioning.SpaceSize = new three.Vector3(this.LParam.value, this.WParam.value, this.HParam.value); + return positioning; + } + /** + * 当存在夹层空间定位时,辅助定位表达式将使用夹层空间作为相对空间. + */ + set Positioning(p) { + this.WriteAllObjectRecord(); + if (p) + p.parent = this; + this._Positioning = p; + } + //#region param + /** 初始化基础参数 */ + InitBaseParams() { + for (let paramName of TemplateDefaultParams) { + let value = 0; + let param = new exports.TemplateParam(); + param.name = paramName; + param.type = TemplateParamType.Float; + param.value = value; + this.Params.push(param); + } + this.LParam.description = "宽"; + this.WParam.description = "深"; + this.HParam.description = "高"; + this.Params[9].description = "板厚"; + this.Params[9].value = 18; + return this; + } + get LParam() { return this.Params[0]; } + get WParam() { return this.Params[1]; } + get HParam() { return this.Params[2]; } + get PXParam() { return this.Params[3]; } + get PYParam() { return this.Params[4]; } + get PZParam() { return this.Params[5]; } + get RXParam() { return this.Params[6]; } + get RYParam() { return this.Params[7]; } + get RZParam() { return this.Params[8]; } + GetParam(paramName) { + return this.Params.find(param => param.name === paramName); + } + SetParamExpr(paramName, expr) { + let param = this.GetParam(paramName); + if (param) + param.expr = expr; + } + DeleteParam(paramName) { + let index = this.Params.findIndex(p => p.name === paramName); + if (index !== -1 && index >= TempateDefaultParamCount) //LWH P R 禁止删除 + this.Params.splice(index, 1); + return this; + } + //#endregion param + /** + * 通常UI操作的时候,都需要更新整个树,所以隐藏这个API. + * see `UpdateTemplateTree` + * + * 更新当前节点 + * + * ### 定位 (大小,方位) + * + * - (放弃)如果当前节点是更新树的最高层(但当前节点不是根节点) + * 那么当存在夹层空间定位的时候,可以不重复进行夹层空间定位,因为此时该空间不会发生变化. + * 补充:如果夹层空间的板件都在上层,那么可以做这个优化,如果定位的板件没在模块中,那么不能进行这个优化. + * + * - [更新优先]在没有实现变量依赖收集(类似mobx)时,我们认为`positioning`的优先级最高. + * 所以`positioning`会被优先更新. `LWH`,`XYZ`. + * + * - 在使用变量定位时,需要传入上层的坐标系,以便进行相对定位. + * 使用空间分析时,已经不需要上层坐标系. + * + * - 辅助定位:帮助空间坐标系进行旋转 + * 辅助定位的参数变量将暴露出来.{RX RY RZ} + * 辅助定位作为参数变量时,用户使用值时很难正确的计算值,应~加入交互选择.(辅助计算) + * + * ### 变量表达式计算 + * + * - `LWH`将被`positioning`替代,但变量定义仍然正常存在. + * + * - 变量大部分时候都是被批量更新,(同时传入许多参数). + * + */ + async Update() { + this._CacheParamVars = this.GetParameterDefinition(false); + let ens = this.Objects.filter(id => !id.IsErase).map(id => id.Object); + let evaled = new Set(); + this._CacheSpaceCS = this.GetTemplateSpaceCS(false); + let paramMap = new Map(); + for (let param of this.Params) + paramMap.set(param.name, param); + if (this._Positioning) { + await this._Positioning.Positioning(); + if (!this._Positioning.SpaceCS) { + //退化成个体坐标系 + if (ens.length) { + this._Positioning.SpaceCS = ens[0].SpaceOCS; + this._Positioning.SpaceSize = new three.Vector3(this.LParam.value, this.WParam.value, this.HParam.value); + } + else { + Log(`模块:(${this.name})定位错误!`); + return; //出事故 + } + } + } + for (let en of ens) { + en.ApplyMatrix(en.SpaceOCSInv); + if (en instanceof exports.Board) + en.IsLazyGrooveCheck = true; + } + //#region 1.定位(坐标系和大小) + /** + * LWH在存在定位空间和继承空间时的表达式行为不一致. + * - 在存在定位空间的时候,LWH是修改定位空间旋转后的值. + * - 不存在定位空间的时候,修改的是空间旋转前的值,因为此时已经没有空间尺寸可供旋转了, + * 只能先提供空间尺寸,然后才进行旋转. + */ + if (this._Positioning) { + this._CacheSpaceCS = this._Positioning.SpaceCS; + this._CacheSpaceSize = this._Positioning.SpaceSize; + this.RotateSpaceCS(paramMap, evaled); + if (this.LParam.expr) + this._CacheSpaceSize.x = this.LParam.EvalUpdate(this._CacheParamVars, paramMap, evaled, false); + if (this.WParam.expr) + this._CacheSpaceSize.y = this.WParam.EvalUpdate(this._CacheParamVars, paramMap, evaled, false); + if (this.HParam.expr) + this._CacheSpaceSize.z = this.HParam.EvalUpdate(this._CacheParamVars, paramMap, evaled, false); + if (this._Positioning instanceof exports.PositioningTemporary) + this._Positioning = undefined; + } + else { + let l = this.LParam.EvalUpdate(this._CacheParamVars, paramMap, evaled, false); + let w = this.WParam.EvalUpdate(this._CacheParamVars, paramMap, evaled, false); + let h = this.HParam.EvalUpdate(this._CacheParamVars, paramMap, evaled, false); + this._CacheSpaceSize = new three.Vector3(l, w, h); + this.RotateSpaceCS(paramMap, evaled); + if (!this.Parent) { + this.PXParam.value = 0; + this.PYParam.value = 0; + this.PZParam.value = 0; + this.PXParam.expr = ""; + this.PYParam.expr = ""; + this.PZParam.expr = ""; + this.RXParam.value = 0; + this.RYParam.value = 0; + this.RZParam.value = 0; + this.RXParam.expr = ""; + this.RYParam.expr = ""; + this.RZParam.expr = ""; + } + } + //相对定位. use PX PY PZ + this.UpdatePosition(paramMap, evaled); + //更新LWH(通过定位空间) + this.LParam.UpdateParam(this._CacheSpaceSize.x); + this.WParam.UpdateParam(this._CacheSpaceSize.y); + this.HParam.UpdateParam(this._CacheSpaceSize.z); + evaled.add(this.LParam); + evaled.add(this.WParam); + evaled.add(this.HParam); + //#endregion + //更新其他参数变量 Eval local params + for (const param of this.Params) { + param.EvalUpdate(this._CacheParamVars, paramMap, evaled); + } + //删除材质变量(材质变量仅在KJL导入中使用,重新出现在右侧列表中是不明智的?) (但是用户可能编辑更新了它?) + // arrayRemoveIf(this.Params, p => p.type === TemplateParamType.Material); + //变换到新的模版空间 + for (let en of ens) { + en.ApplyMatrix(this._CacheSpaceCS); + if (en instanceof exports.Board) + en.LazyGrooveCheckAll(); + } + //更新顶层变量值 + if (!this.Parent) { + for (const param of this.Params) + this._CacheParamVars[`$${param.name}`] = param.value; + } + else { + for (let param of this._CatchRootParam) + this._CacheParamVars[`$${param.name}`] = param.value; + } + //保持SpaceCS + for (let ent of ens) { + ent.SpaceOCS = this._CacheSpaceCS; + } + } + /** + * 使用PXPYPZ更新空间位置 + */ + UpdatePosition(paramMap, evaled) { + let x = this.PXParam.EvalUpdate(this._CacheParamVars, paramMap, evaled, false); + let y = this.PYParam.EvalUpdate(this._CacheParamVars, paramMap, evaled, false); + let z = this.PZParam.EvalUpdate(this._CacheParamVars, paramMap, evaled, false); + if (x !== 0 || y !== 0 || z !== 0) { + this.PXParam.value = x; + this.PYParam.value = y; + this.PZParam.value = z; + let baseP = new three.Vector3(x, y, z); + baseP.applyMatrix4(this._CacheSpaceCS); + this._CacheSpaceCS.setPosition(baseP); + } + } + /** + * 旋转空间定位,如果旋转成功,那么SpaceSize和SpaceCS都可能被更新 + */ + RotateSpaceCS(paramMap, evaled) { + this.RXParam.EvalUpdate(this._CacheParamVars, paramMap, evaled); + this.RYParam.EvalUpdate(this._CacheParamVars, paramMap, evaled); + this.RZParam.EvalUpdate(this._CacheParamVars, paramMap, evaled); + //use RX RY RZ + let rx = three.MathUtils.degToRad(this.RXParam.value); + let ry = three.MathUtils.degToRad(this.RYParam.value); + let rz = three.MathUtils.degToRad(this.RZParam.value); + if (rx !== 0 || ry !== 0 || rz !== 0) { + let mrx = new three.Matrix4().makeRotationX(rx); + let mry = new three.Matrix4().makeRotationY(ry); + let mrz = new three.Matrix4().makeRotationZ(rz); + let mro = mrz.multiply(mry.multiply(mrx)); + let roSpace = mro.multiplyMatrices(this._CacheSpaceCS, mro); + let roSpaceInv = mrx.getInverse(roSpace); //变量复用 + let transfromToRoSpace = roSpaceInv.multiply(this._CacheSpaceCS); + let box = new three.Box3(new three.Vector3(), this._CacheSpaceSize.clone()); + box.applyMatrix4(transfromToRoSpace); + box.getSize(this._CacheSpaceSize); + let baseP = box.min.clone().applyMatrix4(roSpace); + roSpace.setPosition(baseP); + //更新LWH(通过定位空间) + this.LParam.UpdateParam(this._CacheSpaceSize.x); + this.WParam.UpdateParam(this._CacheSpaceSize.y); + this.HParam.UpdateParam(this._CacheSpaceSize.z); + this._CacheSpaceCS = roSpace; + } + this._CacheParamVars["L"] = this._CacheSpaceSize.x; + this._CacheParamVars["W"] = this._CacheSpaceSize.y; + this._CacheParamVars["H"] = this._CacheSpaceSize.z; + } + /** 以广度搜索优先更新节点树 */ + async UpdateTemplateTree() { + if (this.Parent && !this.Parent.IsErase) { + let parent = this.Parent.Object; + if (parent.SplitType !== TemplateSplitType.None || this.NeedUpdateParent) + return await parent.UpdateTemplateTree(); + } + let stack = [this]; + await this.Update(); + while (stack.length > 0) { + let template = stack.shift(); + //清理历史记录时,子对象会被清理,为了防止被清理掉,清除不需要的id + template.Children = template.Children.filter(id => id && !id.IsErase); + //计算DIV(给子空间使用) + if (template.Children.length > 0 && template.SplitType !== TemplateSplitType.None) { + let sum = 0; //除去div时,总共占用的空间 + for (let c of template.Children) { + let ctemplate = c.Object; + let vardefines = ctemplate.GetParameterDefinition(false); + vardefines._DIV = 0; + let param = ctemplate.Params[template.SplitType]; + sum += param.EvalUpdate(vardefines, new Map(), new Set(), false); + } + let sumDiv = 0; //div=1时占用的空间 + for (let c of template.Children) { + let ctemplate = c.Object; + let vardefines = ctemplate.GetParameterDefinition(false); + vardefines._DIV = 1; + let param = ctemplate.Params[template.SplitType]; + sumDiv += param.EvalUpdate(vardefines, new Map(), new Set(), false); + } + let divCount = sumDiv - sum; + if (divCount > 0) { + //div可用总空间 + let divSum = (template.Params[template.SplitType].value - sum); + if (divSum > 0) + template._CacheParamVars.DIV = divSum / divCount; + else + template._CacheParamVars.DIV = 0; + } + template._CacheParamVars.POS = 0; + } + for (let c of template.Children) { + let ctemplate = c.Object; + stack.push(ctemplate); + await ctemplate.Update(); + if (template._CacheParamVars.POS !== undefined) //更新POS + template._CacheParamVars.POS += ctemplate.Params[template.SplitType].value; + } + } + } + /** + * 本节点可用的所有变量定义.(包括变量继承) + * @param [useCache=true] 当更新当前节点的时候,我们不希望使用缓存,(因为父节点的参数可能已经被更新) + * @returns + */ + GetParameterDefinition(useCache = true) { + if (this._CacheParamVars && useCache) + return this._CacheParamVars; + let vars = this.GetParentParams(); + this._CatchRootParam = new Set(); + for (const param of this.Params) { + vars[param.name] = param.value; + let rootParamName = "$" + param.name; + if (!this.Parent) + vars[rootParamName] = param.value; //root + else if (!(rootParamName in vars)) { + this._CatchRootParam.add(param); + vars[rootParamName] = param.value; //顶层变量捕获 root + } + } + this._CacheParamVars = vars; + return vars; + } + /** + * 变量继承 + * - 每继承一层,前缀增加一个`_` + * - 顶层前缀`$` + * + * @returns 继承于父空间的变量定义列表 + */ + GetParentParams() { + if (!this.Parent?.Object) + return {}; + let parent = this.Parent.Object; + let params = parent.GetParameterDefinition(); + let newParams = {}; + for (let key in params) { + if (key[0] !== "$") + newParams["_" + key] = params[key]; + else + newParams[key] = params[key]; + } + if (newParams._DIV === undefined && parent.SplitType !== TemplateSplitType.None) + newParams._DIV = 1; + if (newParams._POS === undefined) + newParams._POS = 0; + return newParams; + } + get SpaceParse() { + let spaceParse; + if (this._Positioning && this._Positioning instanceof exports.PositioningClampSpace) + spaceParse = this._Positioning._SpaceParse; + else + spaceParse = new ISpaceParse(); + spaceParse.SpaceOCS = this._CacheSpaceCS; + spaceParse.ParseOK = true; + spaceParse.SpaceBox = new Box3Ext(new three.Vector3(), this._CacheSpaceSize); + return spaceParse; + } + /** + * 获得当前的模版空间的相对坐标系 + * - 存在父节点的时候使用父节点的模版空间坐标系 + * - 不存在父节点的时候使用自身的模版空间坐标系 + * + * - 空间坐标系将被定位更新 + * + * @param [useCache=true] 当更新当前节点的时候,我们不希望使用缓存,(因为父节点的参数可能已经被更新) + */ + GetTemplateSpaceCS(useCache = true) { + if (useCache && this._CacheSpaceCS) + return this._CacheSpaceCS.clone(); + if (this.Parent?.Object) { + let template = this.Parent.Object; + return template.GetTemplateSpaceCS(); + } + for (let brId of this.Objects) { + if (brId.Object && !brId.IsErase) { + let br = brId.Object; + return br.SpaceOCS; + } + } + return new three.Matrix4(); + } + /** + * 获得当前模块的实际位置坐标系. + * 使用 GetTemplateSpaceCS 可能会得到不准确的位置.(得到Parent或者已经缓存的位置) + */ + GetTemplateRealitySpaceCS() { + for (let brId of this.Objects) { + if (brId.Object && !brId.IsErase) { + let br = brId.Object; + return br.SpaceOCS; + } + } + return this.GetTemplateSpaceCS(true); //此时已经可能不准确 + } + get NeedUpdateParent() { + if (this._Positioning) + return false; //存在自我定位时,不需要更新父层 + if (this.Parent) { + let template = this.Parent.Object; + return template._CacheSpaceCS === undefined; //父层已更新时,不需要更新父层 + } + return false; //没有父层时,不需要更新父层 + } + get PositioningSupportBoards() { + let brs = []; + if (this._Positioning && this._Positioning instanceof exports.PositioningClampSpace) { + for (let id of this._Positioning.Objects) + if (!id.IsErase && id.Object instanceof exports.Board) + brs.push(id.Object); + } + if (brs.length === 0) { + //可视化空间使用周围板件数据 + let parentTemplate = this.Parent?.Object; + while (parentTemplate) { + for (let e of parentTemplate.AllEntitys) + if (e instanceof exports.Board) { + brs.push(e); + break; + } + if (brs.length) + break; + parentTemplate = parentTemplate.Parent?.Object; + } + if (brs.length === 0) + brs.push(new exports.Board()); + } + return brs; + } + //#region -------------------------File------------------------- + //对象应该实现dataIn和DataOut的方法,为了对象的序列化和反序列化 + //对象从文件中读取数据,初始化自身 + ReadFile(file) { + this._Version = file.Read(); + super.ReadFile(file); + this.Type = file.Read(); + this._Parent = file.ReadHardObjectId(); + let count = file.Read(); + this.Children.length = 0; + for (let i = 0; i < count; i++) { + let id = file.ReadHardObjectId(); + if (id) + this.Children.push(id); + } + count = file.Read(); + this.Params.length = 0; + for (let i = 0; i < count; i++) + this.Params.push(file.ReadObject()); + count = file.Read(); + this.Objects.length = 0; + for (let i = 0; i < count; i++) { + let id = file.ReadObjectId(); + if (id) + this.Objects.push(id); + } + this._Positioning = file.ReadObject(); + if (this._Version > 1) + this.SplitType = file.Read() ?? this.SplitType; + //清空缓存,因为我们回滚了模块(BUG:修改参数->撤销->替换模块(此时读取了缓存的数据) + this._CacheParamVars = undefined; + this._CacheSpaceCS = undefined; + this._CacheSpaceSize = undefined; + this._CatchRootParam = undefined; + this._NodeDepthCache = undefined; + } + //对象将自身数据写入到文件. + WriteFile(file) { + file.Write(3); + super.WriteFile(file); + let type = this.Type; + //我们在保存文件的时候,才会去序列化它,否则我们不会自动添加历史记录(被动式) + if (this.isExpanded) + type |= TemplateType.Expanded; + else + type &= ~TemplateType.Expanded; + file.Write(type); + file.WriteHardObjectId(this._Parent); + file.Write(this.Children.length); + for (let id of this.Children) + file.WriteHardObjectId(id); + file.Write(this.Params.length); + for (let param of this.Params) + file.WriteObject(param); + file.Write(this.Objects.length); + for (let id of this.Objects) + file.WriteHardObjectId(id); + file.WriteObject(this._Positioning); + file.Write(this.SplitType); + } +}; +__decorate([ + AutoRecord +], exports.TemplateRecord.prototype, "Type", void 0); +__decorate([ + AutoRecord +], exports.TemplateRecord.prototype, "SplitType", void 0); +__decorate([ + AutoRecord +], exports.TemplateRecord.prototype, "Children", void 0); +__decorate([ + AutoRecord +], exports.TemplateRecord.prototype, "Params", void 0); +__decorate([ + AutoRecord +], exports.TemplateRecord.prototype, "Objects", void 0); +exports.TemplateRecord = TemplateRecord_1 = __decorate([ + Factory +], exports.TemplateRecord); + +exports.TemplateLatticeRecord = class TemplateLatticeRecord extends exports.TemplateRecord { + constructor() { + super(); + this.option = { ...DefaultLatticeConfig }; + this.name = "格子抽(自动)"; + } + get Option() { + return Object.assign({}, this.option); + } + set Option(option) { + this.WriteAllObjectRecord(); + Object.assign(this.option, option); + ExtendsBoardThickness(this, option.thickness); + } + // InitBaseParams() + // { + // super.InitBaseParams(); + // return this; + // } + async Update() { + await super.Update(); + let thickness = this.GetParam("BH")?.value; + if (thickness) + this.option.thickness = thickness; + let tool = DrawLatticeDrawerTool.GetInstance(); + let sbrs = this.PositioningSupportBoards; + let space = new ISpaceParse(sbrs, this._CacheSpaceCS); + space.ParseOK = true; + space.SpaceBox = new Box3Ext(new three.Vector3(), this._CacheSpaceSize); + let nbrs = tool.Draw(space, this.Option); + if (sbrs.length > 0) { + for (let br of nbrs) { + br.BoardProcessOption[EBoardKeyList.CabinetName] = sbrs[0].BoardProcessOption[EBoardKeyList.CabinetName]; + br.BoardProcessOption[EBoardKeyList.RoomName] = sbrs[0].BoardProcessOption[EBoardKeyList.RoomName]; + } + } + for (let i = nbrs.length; i < this.Objects.length; i++) + this.Objects[i].Object.Erase(); + for (let i = 0; i < nbrs.length; i++) { + if (i < this.Objects.length) { + let br = this.Objects[i].Object; + br.Erase(false); + br.CopyFrom(nbrs[i]); + br.SpaceOCS = this._CacheSpaceCS; + } + else { + nbrs[i].SpaceOCS = this._CacheSpaceCS; + this._db.ModelSpace.Append(nbrs[i]); + this.Objects.push(nbrs[i].Id); + } + } + } + //#region -------------------------File------------------------- + //对象应该实现dataIn和DataOut的方法,为了对象的序列化和反序列化 + //对象从文件中读取数据,初始化自身 + ReadFile(file) { + file.Read(); + super.ReadFile(file); + this.option.arrayType = file.Read(); + this.option.gripWidth = file.Read(); + this.option.gripDepth = file.Read(); + this.option.widthCount = file.Read(); + this.option.depthCount = file.Read(); + this.option.knifeRad = file.Read(); + this.option.thickness = file.Read(); + this.option.arcLen = file.Read(); + this.option.downDist = file.Read(); + this.option.space = file.Read(); + this.option.grooveAddWidth = file.Read(); + this.option.upSealed = file.Read(); + this.option.downSealed = file.Read(); + this.option.leftSealed = file.Read(); + this.option.rightSealed = file.Read(); + this.option.isAuto = file.Read(); + this.option.isChange = file.Read(); + this.option.isOpenCut = file.Read(); + this.option.upCut = file.Read(); + this.option.downCut = file.Read(); + } + //对象将自身数据写入到文件. + WriteFile(file) { + file.Write(1); + super.WriteFile(file); + file.Write(this.option.arrayType); + file.Write(this.option.gripWidth); + file.Write(this.option.gripDepth); + file.Write(this.option.widthCount); + file.Write(this.option.depthCount); + file.Write(this.option.knifeRad); + file.Write(this.option.thickness); + file.Write(this.option.arcLen); + file.Write(this.option.downDist); + file.Write(this.option.space); + file.Write(this.option.grooveAddWidth); + file.Write(this.option.upSealed); + file.Write(this.option.downSealed); + file.Write(this.option.leftSealed); + file.Write(this.option.rightSealed); + file.Write(this.option.isAuto); + file.Write(this.option.isChange); + file.Write(this.option.isOpenCut); + file.Write(this.option.upCut); + file.Write(this.option.downCut); + } +}; +exports.TemplateLatticeRecord = __decorate([ + Factory +], exports.TemplateLatticeRecord); + +function BuildTopBottomBoards(topOpt, bottomOpt, space) { + let brs = []; + if (topOpt.isDraw) { + let basePt = GetTopBoardBasePt(topOpt, space); + brs.push(GetTopOrDownBoard(space, topOpt, basePt, true)); + } + if (bottomOpt.isDraw) { + let basePt = GetBottomBoardBasePt(bottomOpt, space); + brs.push(GetTopOrDownBoard(space, bottomOpt, basePt, false)); + let size = space.Size; + let refSize = size.y; + const thickness = bottomOpt.footThickness; + if (bottomOpt.offset > 0 && !bottomOpt.isWrapSide) { + //绘制前地脚 + if (bottomOpt.isDrawFooter) { + brs.push(GetFootBoard(bottomOpt, space, false)); + refSize -= thickness + bottomOpt.footBehindShrink; + } + //绘制后地脚 + if (bottomOpt.isDrawBackFooter) { + brs.push(GetFootBoard(bottomOpt, space, true)); + refSize -= thickness + bottomOpt.footerOffset; + } + //绘制加强条 + if (bottomOpt.isDrawStrengthenStrip) + brs.push(...GetStrengthenStrips(bottomOpt, space, refSize - bottomOpt.frontDist - bottomOpt.behindDistance)); + } + } + return brs; +} +function GetTopOrDownBoard(spaceParse, opt, basePt, isTop = true) { + //前后距 + let frontDist = -opt.frontDist; + let backDist = -opt.behindDistance; + //左右延伸 + let leftExt = opt.leftExt; + let rightExt = opt.rightExt; + //大小 + let size = spaceParse.Size; + let length = size.x; + let width = size.y + frontDist + backDist; + let thickness = opt.thickness; + if (opt.isWrapSide) { + let leftBoardThickness = spaceParse.LeftBoard ? spaceParse.LeftBoard.Thickness : opt.thickness; + let rightBoardThickness = spaceParse.RightBoard ? spaceParse.RightBoard.Thickness : opt.thickness; + length += leftBoardThickness + rightBoardThickness + leftExt + rightExt; + } + else { + leftExt = 0; + rightExt = 0; + } + let board = exports.Board.CreateBoard(length, width, thickness, BoardType.Layer); + board.Name = "顶板"; + if (!isTop) { + board.Name = "底板"; + } + //移动右缩和前距的距离 + basePt.add(new three.Vector3(rightExt, -frontDist)); + board.ApplyMatrix(MoveMatrix(basePt)); + board.ApplyMatrix(spaceParse.SpaceOCS); + return board; +} +function GetTopBoardBasePt(opt, spc) { + let box = spc.SpaceBox; + let min = box.min; + let max = box.max; + let basePoint = new three.Vector3(); + if (opt.isWrapSide) { + let rightBoardThickness = spc.RightBoard ? spc.RightBoard.Thickness : opt.thickness; + basePoint.set(max.x + rightBoardThickness, min.y, max.z); + } + else { + basePoint.set(max.x, min.y, max.z - (opt.thickness + parseFloat(opt.offset))); + } + return basePoint; +} +function GetBottomBoardBasePt(opt, spc) { + let box = spc.SpaceBox; + let min = box.min; + let max = box.max; + let basePoint = new three.Vector3(); + if (opt.isWrapSide) { + let rightBoardThickness = spc.RightBoard ? spc.RightBoard.Thickness : opt.thickness; + basePoint.set(max.x + rightBoardThickness, min.y, min.z - opt.thickness); + } + else { + basePoint.set(max.x, min.y, min.z + opt.offset); + } + return basePoint; +} +function GetFootBoard(opt, spaceParse, isBack) { + let offset = opt.offset; + let thickness = opt.footThickness; + let footBoard = exports.Board.CreateBoard(offset, spaceParse.Size.x, opt.footThickness, BoardType.Behind); + footBoard.Name = isBack ? "后地脚" : "地脚线"; + let moveDist = isBack ? spaceParse.Size.y - opt.footerOffset - opt.behindDistance : thickness + opt.footBehindShrink + opt.frontDist; + footBoard.ApplyMatrix(MoveMatrix(spaceParse.SpaceBox.min.clone().add(new three.Vector3(0, moveDist)))) + .ApplyMatrix(spaceParse.SpaceOCS); + return footBoard; +} +function GetStrengthenStrips(opt, spaceParse, width) { + let brs = []; + const thickness = opt.footThickness; + let count = opt.divCount; + if (count === 0) + return brs; + let spaceSize = (spaceParse.Size.x - count * thickness) / (count + 1); + let br = exports.Board.CreateBoard(opt.offset, width, thickness, BoardType.Vertical); + let yDist = opt.frontDist; + if (opt.isDrawFooter) + yDist += (opt.footBehindShrink + thickness); + for (let i = 1; i <= count; i++) { + let b = br.Clone(); + b.Name = "加强条" + i; + b.ApplyMatrix(MoveMatrix(spaceParse.SpaceBox.min.clone().add(new three.Vector3(spaceSize * i + (i - 1) * thickness, yDist)))) + .ApplyMatrix(spaceParse.SpaceOCS); + brs.push(b); + } + return brs; +} + +/**顶底板模板 */ +exports.TemplateTopBottomBoard = class TemplateTopBottomBoard extends exports.TemplateRecord { + constructor() { + super(); + this._topOption = { ...DefaultTopBoardOption }; + this._bottomOption = { ...DefaultBottomBoardOption }; + this.UseBoardProcessOption = false; + this.DrawCounts = [1, 1, 1]; + this.name = "顶底板"; + } + get TopOption() { + return Object.assign({}, this._topOption); + } + set TopOption(option) { + this.WriteAllObjectRecord(); + Object.assign(this._topOption, option); + ExtendsBoardThickness(this, option.thickness); + } + get BottomOption() { + return Object.assign({}, this._bottomOption); + } + set BottomOption(option) { + this.WriteAllObjectRecord(); + Object.assign(this._bottomOption, option); + } + // InitBaseParams() + // { + // super.InitBaseParams(); + // return this; + // } + async Update() { + await super.Update(); + let thickness = this.GetParam("BH")?.value; + if (thickness) { + this._topOption.thickness = thickness; + this._bottomOption.thickness = thickness; + this._bottomOption.footThickness = thickness; + } + let spaceParse = this.SpaceParse; + let nbrs = BuildTopBottomBoards(this._topOption, this._bottomOption, spaceParse); + let sbrs = this.PositioningSupportBoards; + if (this.BoardProcessOption) { + let minSealed = GetMinSealed(this.BoardProcessOption); + for (let br of nbrs) { + br.BoardProcessOption = this.BoardProcessOption; + this.SetBoardProcess(br, minSealed); + } + this.BoardProcessOption = undefined; + } + if (this.UseBoardProcessOption && sbrs.length > 0) { + let cname = sbrs[0].BoardProcessOption[EBoardKeyList.CabinetName]; + let rname = sbrs[0].BoardProcessOption[EBoardKeyList.RoomName]; + for (let br of nbrs) { + br.BoardProcessOption[EBoardKeyList.CabinetName] = cname; + br.BoardProcessOption[EBoardKeyList.RoomName] = rname; + } + this.UseBoardProcessOption = false; + } + let oldBrss = [[], [], []]; + let refBr; + let minSealed; + for (let id of this.Objects) { + let b = id.Object; + if (!refBr) + refBr = b; + oldBrss[b.BoardType].push(b); + } + if (refBr) + minSealed = GetMinSealed(refBr.BoardProcessOption); + let newBrss = [[], [], []]; + for (let b of nbrs) { + newBrss[b.BoardType].push(b); + } + for (let i = 0; i < oldBrss.length; i++) { + let oldBrs = oldBrss[i]; + let newBrs = newBrss[i]; + let oldLen = oldBrs.length; + for (let j = newBrs.length; j < oldLen; j++) + oldBrs[j].Erase(); + for (let j = 0; j < newBrs.length; j++) { + if (j < oldLen) { + if (j >= this.DrawCounts[i]) { + oldBrs[j].Erase(false); + } + oldBrs[j].Name = newBrs[j].Name; + oldBrs[j].Position = newBrs[j].Position; + oldBrs[j].Width = newBrs[j].Width; + oldBrs[j].Height = newBrs[j].Height; + oldBrs[j].Thickness = newBrs[j].Thickness; + } + else { + if (refBr) { + newBrs[j].BoardProcessOption = refBr.BoardProcessOption; + this.SetBoardProcess(newBrs[j], minSealed); + } + this._db.ModelSpace.Append(newBrs[j]); + this.Objects.push(newBrs[j].Id); + } + } + this.DrawCounts[i] = newBrs.length; + } + //保持SpaceCS + for (let id of this.Objects) { + if (id && !id.IsErase) + id.Object.SpaceOCS = this._CacheSpaceCS; + } + } + SetBoardProcess(br, minSealed) { + if (br.Name === "底板") { + br.BoardProcessOption[EBoardKeyList.BigHole] = FaceDirection.Back; + } + else if (br.Name.includes("地脚") || br.Name.includes("加强条")) { + // br.BoardProcessOption.composingFace = ComposingType.Reverse; + br.BoardProcessOption.bigHoleDir = FaceDirection.Back; + br.BoardProcessOption.lines = LinesType.Reverse; + //用薄封边 + br.BoardProcessOption.sealedUp = minSealed; + br.BoardProcessOption.sealedDown = minSealed; + br.BoardProcessOption.sealedLeft = minSealed; + br.BoardProcessOption.sealedRight = minSealed; + } + } + ReadFile(file) { + let ver = file.Read(); + super.ReadFile(file); + this.DrawCounts[0] = file.Read(); + this.DrawCounts[1] = file.Read(); + this.DrawCounts[2] = file.Read(); + this._topOption.type = file.Read(); + this._topOption.name = file.Read(); + this._topOption.isDraw = file.Read(); + this._topOption.thickness = file.Read(); + this._topOption.frontDist = file.Read(); + this._topOption.behindDistance = file.Read(); + this._topOption.isWrapSide = file.Read(); + this._topOption.useLFData = file.Read(); + this._topOption.leftExt = file.Read(); + this._topOption.rightExt = file.Read(); + this._topOption.offset = file.Read(); + if (ver === 1 && typeof this._topOption.offset === "string") + this._topOption.offset = parseFloat(this._topOption.offset) ?? 0; + this._bottomOption.type = file.Read(); + this._bottomOption.name = file.Read(); + this._bottomOption.isDraw = file.Read(); + this._bottomOption.thickness = file.Read(); + this._bottomOption.frontDist = file.Read(); + this._bottomOption.behindDistance = file.Read(); + this._bottomOption.isWrapSide = file.Read(); + this._bottomOption.useLFData = file.Read(); + this._bottomOption.leftExt = file.Read(); + this._bottomOption.rightExt = file.Read(); + this._bottomOption.offset = file.Read(); + this._bottomOption.footThickness = file.Read(); + this._bottomOption.isDrawFooter = file.Read(); + this._bottomOption.footBehindShrink = file.Read(); + this._bottomOption.isDrawBackFooter = file.Read(); + this._bottomOption.isDrawStrengthenStrip = file.Read(); + this._bottomOption.footerOffset = file.Read(); + this._bottomOption.divCount = file.Read(); + } + WriteFile(file) { + file.Write(2); + super.WriteFile(file); + file.Write(this.DrawCounts[0]); + file.Write(this.DrawCounts[1]); + file.Write(this.DrawCounts[2]); + file.Write(this._topOption.type); + file.Write(this._topOption.name); + file.Write(this._topOption.isDraw); + file.Write(this._topOption.thickness); + file.Write(this._topOption.frontDist); + file.Write(this._topOption.behindDistance); + file.Write(this._topOption.isWrapSide); + file.Write(this._topOption.useLFData); + file.Write(this._topOption.leftExt); + file.Write(this._topOption.rightExt); + file.Write(this._topOption.offset); + file.Write(this._bottomOption.type); + file.Write(this._bottomOption.name); + file.Write(this._bottomOption.isDraw); + file.Write(this._bottomOption.thickness); + file.Write(this._bottomOption.frontDist); + file.Write(this._bottomOption.behindDistance); + file.Write(this._bottomOption.isWrapSide); + file.Write(this._bottomOption.useLFData); + file.Write(this._bottomOption.leftExt); + file.Write(this._bottomOption.rightExt); + file.Write(this._bottomOption.offset); + file.Write(this._bottomOption.footThickness); + file.Write(this._bottomOption.isDrawFooter); + file.Write(this._bottomOption.footBehindShrink); + file.Write(this._bottomOption.isDrawBackFooter); + file.Write(this._bottomOption.isDrawStrengthenStrip); + file.Write(this._bottomOption.footerOffset); + file.Write(this._bottomOption.divCount); + } +}; +__decorate([ + AutoRecord +], exports.TemplateTopBottomBoard.prototype, "DrawCounts", void 0); +exports.TemplateTopBottomBoard = __decorate([ + Factory +], exports.TemplateTopBottomBoard); +//获得最薄的封边 +function GetMinSealed(opt) { + return Math.max(0, Math.min(parseFloat(opt.sealedDown) || 0, parseFloat(opt.sealedLeft) || 0, parseFloat(opt.sealedRight) || 0, parseFloat(opt.sealedUp) || 0)).toString(); +} + +const SIN45 = Math.sin(Math.PI / 4); +class DrawWineRackTool extends Singleton { + constructor() { + super(...arguments); + this.boardlist = []; + } + get Config() { + return this._config; + } + Parse(space, config) { + this._config = config; + this.boardlist.length = 0; + this.space = space; + //处理格子深 + if (!config.isTotalDepth) { + let depth = safeEval(config.calcDepth, { L: space.Size.x, W: space.Size.y, H: space.Size.z }); + if (!isNaN(depth)) { + space.SpaceBox.max.setY(space.SpaceBox.min.y + depth); + } + } + //处理前缩 + space.SpaceBox.min.add(new three.Vector3(0, config.frontCut)); + //左右缩 + space.SpaceBox.min.add(new three.Vector3(config.leftCut)); + space.SpaceBox.max.add(new three.Vector3(-config.rightCut)); + //上缩 + space.SpaceBox.max.add(new three.Vector3(0, 0, -config.topCut)); + } + /** 拾取空间周围的板件柜名房名等信息*/ + GetBoardProcessOption(br) { + //获取空间周围的板件数据 + if (this.space.Boards.length > 0) { + let refProcessData = this.space.Boards[0].BoardProcessOption; + br.BoardProcessOption[EBoardKeyList.RoomName] = refProcessData[EBoardKeyList.RoomName]; + br.BoardProcessOption[EBoardKeyList.CabinetName] = refProcessData[EBoardKeyList.CabinetName]; + } + } + /**分析高级封边数据 */ + ParseHighSealing(br, leftSealed, rightSealed, topSealed, downSealed, isLeft) { + this.GetBoardProcessOption(br); + let cu = br.ContourCurve; + br.BoardProcessOption.sealedLeft = leftSealed.toString(); + br.BoardProcessOption.sealedRight = rightSealed.toString(); + br.BoardProcessOption.sealedUp = topSealed.toString(); + br.BoardProcessOption.sealedDown = downSealed.toString(); + let sizes = [...new Set([downSealed, rightSealed, topSealed, leftSealed])]; + let downSeal = { + size: downSealed, color: sizes.indexOf(downSealed) + 1 + }; + let rigthSeal = { + size: rightSealed, color: sizes.indexOf(rightSealed) + 1 + }; + let topSeal = { size: topSealed, color: sizes.indexOf(topSealed) + 1 }; + let leftSeal = { size: leftSealed, color: sizes.indexOf(leftSealed) + 1 }; + let highSeals = [downSeal]; + if (isLeft) { + highSeals.push(rigthSeal, topSeal); + for (let i = 3; i <= cu.EndParam - 1; i++) { + highSeals.push(leftSeal); + } + } + else { + for (let i = 1; i <= cu.EndParam - 3; i++) { + highSeals.push(rigthSeal); + } + highSeals.push(topSeal, leftSeal); + } + br.BoardProcessOption.highSealed = highSeals; + br.BoardProcessOption.drillType = DrillType.None; + br.BoardProcessOption.highDrill.fill(DrillType.None); + } + /**补板 */ + AddLayerOrVerticalBoard(actWidth, actHeight) { + const config = this.Config; + const size = this.space.Size; + let isDrawLy = false; + //是否补层板 + if (config.isDrawLy && (config.arrayType === EWRackArrayType.Fixed || config.fullType === EFullType.ByWidth)) { + isDrawLy = true; + let length = actWidth; + let width = size.y + config.frontCut; + let position = this.space.SpaceBox.min.clone(); + if (config.arrayType === EWRackArrayType.Fixed) { + if (config.fullDir === EFullDir.Right) { + length += config.rightCut; + position.add(new three.Vector3(size.x + config.rightCut, -config.frontCut, actHeight + config.topCut)); + } + else { + length += config.leftCut; + position.add(new three.Vector3(actWidth, -config.frontCut, actHeight + config.topCut)); + } + } + else { + length += (config.leftCut + config.rightCut); + position.add(new three.Vector3(actWidth + config.rightCut, -config.frontCut, actHeight + config.topCut)); + } + //补板跟随 + if (config.followNarrow) { + //处理前缩 + position.add(new three.Vector3(0, config.frontCut)); + width -= config.frontCut; + } + let br = exports.Board.CreateBoard(length, width, config.brThick2); + this.GetBoardProcessOption(br); + br.BoardProcessOption.bigHoleDir = FaceDirection.Back; + br.Position = position; + br.ApplyMatrix(this.space.SpaceOCS); + this.boardlist.push(br); + } + if (config.isDrawVer && (config.arrayType === EWRackArrayType.Fixed || config.fullType === EFullType.ByHeight)) { + let len = actHeight + config.topCut; + if (isDrawLy) + len += config.brThick2; + let br = exports.Board.CreateBoard(len, size.y + config.frontCut, config.brThick2, BoardType.Vertical); + let position = this.space.SpaceBox.min.clone(); + if (config.fullDir === EFullDir.Right) + position.x += size.x - actWidth - config.brThick2; + else { + br.BoardProcessOption.bigHoleDir = FaceDirection.Back; + position.x += actWidth; + } + //补板跟随 + if (config.followNarrow) { + br.WriteAllObjectRecord(); + position.y += config.frontCut; + br.Width -= config.frontCut; + } + //这里要跟外面平 + position.y -= config.frontCut; + this.GetBoardProcessOption(br); + br.Position = position; + br.ApplyMatrix(this.space.SpaceOCS); + this.boardlist.push(br); + } + } +} + +const R2WRTolerance = 1e-3; +/** + * 斜酒格 + */ +class DrawObliqueWineRackTool extends DrawWineRackTool { + Parse(space, config) { + super.Parse(space, config); + const size = space.Size; + const spaceHeight = size.z; + const spaceWidth = size.x; + const ptMid = new three.Vector3(0.5 * size.x, size.z / 2, 0); + let mirrorMtx; + if (config.fullType === EFullType.ByWidth) + mirrorMtx = MakeMirrorMtx(YAxis, ptMid); + else + mirrorMtx = MakeMirrorMtx(XAxis, ptMid); + ptMid.set(0.5 * size.x, size.z / 2, 0); + polar(ptMid, Math.PI * 0.75, -config.boardThick); + if (config.isFull && config.arrayType !== EWRackArrayType.Fixed) { + switch (config.fullType) { + case EFullType.ByHeight: + this.CalGridWidth(spaceHeight); + break; + case EFullType.ByWidth: + this.CalGridWidth(spaceWidth); + break; + case EFullType.Symmetry: + this.CalGridWidth(spaceHeight); + this.CalGridWidth(spaceWidth); + } + let rectPl = new exports.Polyline().Rectangle(spaceWidth, spaceHeight); + let gripWidth = config.boardThick + config.gripWidth; + let retPls = []; + let pls1 = this.CalculationRectPolylineArr(ptMid, rectPl, gripWidth); + polar(ptMid, Math.PI * 0.75, -gripWidth); + let pls2 = this.CalculationRectPolylineArr(ptMid, rectPl, -gripWidth); + retPls.push(...pls1, ...pls2); + for (let pl of [...pls1, ...pls2]) { + let plClone = pl.Clone(); + plClone.ApplyMatrix(mirrorMtx); + retPls.push(plClone); + } + this.DrawBoardFormPolyLine(retPls); + } + else { + let lWRData = []; + let rWRData = []; + let res; + switch (config.arrayType) { + case EWRackArrayType.ByWidth: + res = this.CalcWineRackDataByWidth(lWRData, rWRData); + break; + case EWRackArrayType.ByCount: + res = this.CalcWineRackDataByCount(lWRData, rWRData); + break; + case EWRackArrayType.Fixed: + res = this.CalcWineRackDataByFixed(lWRData, rWRData); + } + let pls = []; + for (let data of lWRData) { + pls.push(this.CreatePolylineByWineData(data)); + } + rWRData.sort((d1, d2) => { + if (equaln$1(d1.basePt.x, d2.basePt.x)) { + return d1.basePt.y - d2.basePt.y; + } + else + return d2.basePt.x - d1.basePt.x; + }); + for (let data of rWRData) { + pls.push(this.CreatePolylineByWineData(data, false)); + } + //补板 + this.AddLayerOrVerticalBoard(res.width, res.height); + this.DrawBoardFormPolyLine(pls, res.width); + } + } + CalGridWidth(length) { + const count = (length - this.Config.boardThick * 2 / SIN45) / ((this.Config.boardThick + this.Config.gripWidth) * Math.sqrt(2)); + this.Config.gripWidth = ((length - this.Config.boardThick / SIN45) / Math.floor(count)) / Math.sqrt(2) - this.Config.boardThick; + } + /**获取矩形多段线的4个对角点并判断是否有效 */ + GetRect4Pts(xline, rectPl, p1, p2, p3, p4) { + let res1 = this.GetRect2Pts(xline, rectPl, p1, p2); + let vec = polar(new three.Vector3(), Math.PI * 0.75, this.Config.boardThick); + xline.ApplyMatrix(MoveMatrix(vec)); + let res2 = this.GetRect2Pts(xline, rectPl, p3, p4); + return res1 && res2 && p1.distanceTo(p2) > this.Config.gripWidth; + } + /**获取矩形一边的点 */ + GetRect2Pts(xline, rectPl, p1, p2) { + let intPts = xline.IntersectWith(rectPl, IntersectOption.ExtendBoth); + if (intPts.length === 2) { + p1.copy(intPts[0]); + p2.copy(intPts[1]); + if (p1.x > p2.x) { + let tmpPt = p2.clone(); + p2.copy(p1); + p1.copy(tmpPt); + } + return true; + } + return false; + } + /**按格子宽获取酒格数据 */ + CalcWineRackDataByWidth(lWRDataList, rWRDataList) { + let size = this.space.Size; + let Config = this.Config; + let widthCount = 0, heightCount = 0, gripWidth = 0; + let width = size.x - 2 * Config.boardThick * SIN45; + let height = size.z - 2 * Config.boardThick * SIN45; + if (Config.fullType === EFullType.ByWidth) { + widthCount = Math.floor(width / ((Config.gripWidth + Config.boardThick) * SIN45)); + gripWidth = width / widthCount; + //处理锁定个数 + if (!Config.isLock) { + heightCount = Math.floor(height / gripWidth); + } + else { + heightCount = Math.floor(Config.heightCount * 2); + } + height = heightCount * gripWidth + 2 * Config.boardThick * SIN45; + width = size.x; + } + else { + heightCount = Math.floor(height / ((Config.gripWidth + Config.boardThick) * SIN45)); + gripWidth = height / heightCount; + //处理锁定个数 + if (!Config.isLock) { + widthCount = Math.floor(width / gripWidth); + } + else { + widthCount = Math.floor(Config.widthCount * 2); + } + width = widthCount * gripWidth + 2 * Config.boardThick * SIN45; + height = size.z; + } + this.GetWineRackData(width, height, gripWidth, Config.boardThick, widthCount, heightCount, lWRDataList, rWRDataList); + return { + width: width, height: height + }; + } + CalcWineRackDataByCount(lWRDataList, rWRDataList) { + const config = this.Config; + const size = this.space.Size; + let widthCount = Math.floor(config.widthCount * 2); + let heightCount = Math.floor(config.heightCount * 2); + let gripWidth = (size.x - 2 * config.boardThick * SIN45) / widthCount; + let width = 0; + let height = 0; + if (config.fullType === EFullType.ByWidth) { + gripWidth = (size.x - 2 * config.boardThick * SIN45) / widthCount; + width = size.x; + if (!config.isLock) //如果没锁定个数 + { + heightCount = Math.floor((size.z - 2 * config.boardThick * SIN45) / gripWidth + 1e-3); + } + height = heightCount * gripWidth + 2 * config.boardThick * SIN45; + } + else { + gripWidth = (size.z - 2 * config.boardThick * SIN45) / heightCount; + if (!config.isLock) //如果没有锁定个数 + { + widthCount = Math.floor((size.x - 2 * config.boardThick * SIN45) / gripWidth); + } + width = widthCount * gripWidth + 2 * config.boardThick * SIN45; + height = size.z; + } + this.GetWineRackData(width, height, gripWidth, config.boardThick, widthCount, heightCount, lWRDataList, rWRDataList); + return { + width: width, height: height + }; + } + CalcWineRackDataByFixed(lWRDataList, rWRDataList) { + const config = this.Config; + let widthCount = Math.floor(config.widthCount * 2); + let heightCount = Math.floor(config.heightCount * 2); + let gripWidth = config.gripWidth * SIN45; + let width = widthCount * gripWidth + 2 * config.boardThick * SIN45; + let height = heightCount * gripWidth + 2 * config.boardThick * SIN45; + this.GetWineRackData(width, height, gripWidth, config.boardThick, widthCount, heightCount, lWRDataList, rWRDataList); + return { + width: width, height: height + }; + } + /**构建酒格正面多段线组*/ + CalculationRectPolylineArr(ptMid, rectPl, gripWidth) { + let pls = []; + let pt = ptMid.clone(); + while (true) { + let pl = this.CalculationRectPolyline(pt, rectPl); + if (!pl) + break; + polar(pt, Math.PI * 0.75, gripWidth); + pls.push(pl); + } + return pls; + } + /**构建酒格正面多段线*/ + CalculationRectPolyline(pt, rectPl) { + const xline = new exports.Line(pt, pt.clone().add(new three.Vector3(1, 1))); + const p1 = new three.Vector3(); + const p2 = new three.Vector3(); + const p3 = new three.Vector3(); + const p4 = new three.Vector3(); + if (!this.GetRect4Pts(xline, rectPl, p1, p2, p3, p4)) { + return null; + } + let minDis = this.Config.boardThick / Math.sqrt(2); + //如果左边停靠 + if (p1.x < minDis) { + p1.copy(polar(p3.clone(), Math.PI * -0.25, this.Config.boardThick)); + } + else { + p3.copy(polar(p1.clone(), Math.PI * 0.75, this.Config.boardThick)); + } + //右边点 上面停靠 + let size = this.space.Size; + if (p2.y > size.z - minDis) { + p2.copy(polar(p4.clone(), -Math.PI * 0.25, this.Config.boardThick)); + } + else { + p4.copy(polar(p2.clone(), Math.PI * 0.75, this.Config.boardThick)); + } + if (p1.distanceTo(p2) < (this.Config.gripWidth + this.Config.boardThick * 1.8) && p1.y > this.Config.boardThick * 2) + return null; + let lineData = [p1, p2, p4, p3].map(p => { + return { + pt: AsVector2(p), + bul: 0 + }; + }); + let pl = new exports.Polyline(lineData); + pl.CloseMark = true; + return pl; + } + //获取酒格数据 + GetWineRackData(width, height, gripWidth, brThick, widthCount, heightCount, lWRDataList, rWRDataList) { + let data; + for (let i = 0; i < Math.floor(widthCount / 2); i++) { + let p1 = gripWidth + brThick * SIN45 + gripWidth * i * 2; + data = { + basePt: new three.Vector3(p1, 0, 0), + brLength: 0 + }; + if (width - p1 > height - brThick * SIN45) { + data.brLength = (height - brThick * SIN45) / SIN45; + } + else { + data.brLength = (width - p1) / SIN45; + } + rWRDataList.push(data); + } + for (let i = 0; i < Math.floor(heightCount / 2); i++) { + let p1 = gripWidth + brThick * SIN45 + i * gripWidth * 2; + data = { + basePt: new three.Vector3(brThick * SIN45, p1 - brThick * SIN45, 0), + brLength: 0 + }; + if (height - p1 > width - brThick * SIN45) { + data.brLength = (width - brThick * SIN45) / SIN45; + } + else { + data.brLength = (height - p1) / SIN45; + } + rWRDataList.push(data); + } + for (let i = 0; i < Math.floor(widthCount / 2); i++) { + let p1 = gripWidth + i * gripWidth * 2; + data = { + basePt: new three.Vector3(p1 + brThick * SIN45, 2 * brThick * SIN45, 0), + brLength: 0 + }; + if (equaln$1(p1, height - brThick * SIN45 * 2)) { + data.brLength = (height - brThick * SIN45 * 2) / SIN45; + } + else if (p1 > height - brThick * SIN45 * 3) { + data.brLength = (height - brThick * SIN45 * 3) / SIN45; + } + else { + data.brLength = (p1 - brThick * SIN45) / SIN45; + } + lWRDataList.push(data); + } + if (widthCount % 2 === 0) { + for (let i = 0; i < Math.floor(heightCount / 2); i++) { + let p1 = gripWidth + 2 * brThick * SIN45 + i * gripWidth * 2; + data = { + basePt: new three.Vector3(width - brThick * SIN45, p1, 0), + brLength: 0 + }; + if (equaln$1(height - p1, width - 2 * brThick * SIN45)) { + data.brLength = (height - p1) / SIN45; + } + else if (height - p1 - brThick * SIN45 > width - 2 * brThick * SIN45) { + data.brLength = (width - brThick * SIN45 * 3) / SIN45; + } + else { + data.brLength = (height - p1 - brThick * SIN45) / SIN45; + } + lWRDataList.push(data); + } + } + else { + for (let i = 0; i < Math.floor(heightCount / 2) + 1; i++) { + let p1 = 0; + if (i == 0) { + p1 = brThick * SIN45; + data = { + basePt: new three.Vector3(width, p1, 0), + brLength: 0 + }; + if (equaln$1(height, width, 1e-3)) { + data.brLength = (width - brThick * SIN45) / SIN45; + } + else if (height - p1 > width - 2 * brThick * SIN45) { + data.brLength = (width - brThick * SIN45 * 2) / SIN45; + } + else { + data.brLength = (height - p1 - brThick * SIN45) / SIN45; + } + } + else { + p1 = 2 * brThick * SIN45 + i * gripWidth * 2; + data = { + basePt: new three.Vector3(width - brThick * SIN45, p1, 0), + brLength: 0 + }; + if (height - p1 > brThick) { + if (equaln$1(height - p1, width - 2 * brThick * SIN45, 1e-3)) { + data.brLength = (height - p1) / SIN45; + } + else if (height - p1 > width - brThick * SIN45) { + data.brLength = (width - brThick * SIN45 * 3) / SIN45; + } + else { + data.brLength = (height - p1 - brThick * SIN45) / SIN45; + } + } + else { + continue; //这里需要跳出. + } + } + lWRDataList.push(data); + } + } + } + /**根据酒格数据获取多段线 */ + CreatePolylineByWineData(data, isLeft = true) { + let thick = this.Config.boardThick; + let lineData = [ + { + pt: new three.Vector2(), + bul: 0 + }, + { + pt: new three.Vector2(thick, 0), + bul: 0 + }, + { + pt: new three.Vector2(thick, data.brLength), + bul: 0 + }, + { + pt: new three.Vector2(0, data.brLength), + bul: 0 + }, + ]; + let pl = new exports.Polyline(lineData); + pl.CloseMark = true; + let mat = MoveMatrix(new three.Vector3(thick)) + .multiply(new three.Matrix4().makeRotationZ(0.25 * Math.PI * (isLeft ? 1 : -1))) + .multiply(MoveMatrix(new three.Vector3(-thick))); + pl.ApplyMatrix(mat) + .ApplyMatrix(MoveMatrix(data.basePt.add(new three.Vector3(-thick)))); + return pl; + } + /**根据多段线组构建酒格 */ + DrawBoardFormPolyLine(pls, actualWidth, config) { + const leftData = []; + const rightData = []; + for (let pl of pls) { + let data = this.ParsePolyLine(pl); + if (!data.isOk) + continue; + if (data.isLeft) + leftData.push(data); + else + rightData.push(data); + } + this.CreateBoard(leftData, rightData, actualWidth, config); + this.CreateBoard(rightData, leftData, actualWidth, config); + } + ParsePolyLine(pl) { + if (pl.IsClose) { + if (pl.EndParam !== 4) { + return { + isOk: false + }; + } + let pts = pl.GetStretchPoints(); + if (equalv3(pts[0], arrayLast(pts))) + pts.pop(); + /*****统一初始形状 + * **** h + * * * + * 0 **** t + */ + pts.sort((a, b) => { + if (equaln$1(a.y, b.y)) + return a.x - b.x; + else + return a.y - b.y; + }); + let pts1 = pts.splice(0, 2); + pts1.sort((a, b) => a.x - b.x); + pts.sort((a, b) => a.distanceTo(pts1[1]) - b.distanceTo(pts1[1])); + pts.unshift(...pts1); + const area = pl.Area; + let v1 = pts[1].clone().clone().sub(pts[0]); + let v2 = arrayLast(pts).clone().sub(pts[0]); + let [vecY, vecX] = v1.length() > v2.length() ? [v1, v2] : [v2, v1]; + let length = vecY.length(); + let thick = vecX.length(); + let mat = new three.Matrix4().makeBasis(vecX.normalize(), vecY.normalize(), ZAxis).setPosition(pts[0]); + let matInv = new three.Matrix4().getInverse(mat); + let bp = pts[0].clone().negate(); + if (equaln$1(length * thick, area, 5)) { + let an = vecY.angleTo(XAxis); + if (equaln$1(an, Math.PI / 4, R2WRTolerance)) { + pts.sort((p1, p2) => p2.x - p1.x); + return { + isOk: true, + isLeft: true, + pl, + length, + matInv, + basePt: new three.Vector3(pts[0].x, 0, pts[0].y), + thickness: thick, + isRo: true, + }; + } + else if (equaln$1(an, 3 * Math.PI / 4, R2WRTolerance)) { + pts.sort((p1, p2) => p1.y - p2.y); + return { + isOk: true, + isLeft: false, + pl, + length, + matInv, + basePt: new three.Vector3(pts[0].x, 0, pts[0].y), + thickness: thick, + isRo: true, + }; + } + else if (isParallelTo(vecX, XAxis, R2WRTolerance)) { + return { + isOk: true, + isLeft: false, + pl, + length, + matInv: new three.Matrix4().setPosition(bp), + basePt: new three.Vector3(pts[0].x, 0, pts[0].y), + thickness: thick, + isVer: true, + isRo: false, + }; + } + else if (isParallelTo(vecX, YAxis, R2WRTolerance)) { + return { + isOk: true, + isLeft: true, + pl, + length, + matInv: new three.Matrix4().setPosition(bp), + basePt: new three.Vector3(pts[1].x, 0, pts[1].y), + thickness: thick, + isRo: false, + }; + } + else { + return { + isOk: false + }; + } + } + } + return { + isOk: false + }; + } + /**绘制酒格 */ + CreateBoard(lData, rData, actualWidth, cof) { + if (!lData.length) + return; + let leftSeal, rightSeal, upSeal, downSeal, knifeRad; + let config; + if (cof) { + leftSeal = cof.sealedLeft; + rightSeal = cof.sealedRight; + upSeal = cof.sealedUp; + downSeal = cof.sealedDown; + knifeRad = cof.knifeRadius; + } + else { + config = this.Config; + leftSeal = config.leftEdge; + rightSeal = config.leftEdge; + upSeal = config.leftEdge; + downSeal = config.leftEdge; + knifeRad = config.grooveLengthAdd; + } + for (let i = 0; i < lData.length; i++) { + let d = lData[i]; + let dists = []; + for (let d2 of rData) { + let intPts = d.pl.IntersectWith(d2.pl, IntersectOption.ExtendNone); + if (intPts.length === 4) { + dists.push(...intPts.map(p => { + let p1 = p.applyMatrix4(d.matInv); + if (!d.isRo && !d.isVer) + return Math.abs(p1.x); + return Math.abs(p1.y); + })); + } + } + arraySortByNumber(dists); + arrayRemoveDuplicateBySort(dists, (n1, n2) => equaln$1(n1, n2, R2WRTolerance)); + let pl = this.GetPolyline(d, dists, cof); + if (pl) { + let br = exports.Board.CreateBoard(1, 1, d.thickness ?? config.boardThick, d.isVer ? BoardType.Vertical : BoardType.Layer); + if (d.isLeft) + br.Name = "右板" + (lData.length - i); + else + br.Name = "左板" + (i + 1); + br.ContourCurve = pl; + this.ParseHighSealing(br, leftSeal, rightSeal, upSeal, downSeal, d.isLeft); + br.KnifeRadius = knifeRad; + if (d.isRo) + br.RotateBoard(0, Math.PI / 4 * (d.isLeft ? -1 : 1), 0); + br.ApplyMatrix(MoveMatrix(this.space.SpaceBox.min)); + br.ApplyMatrix(MoveMatrix(d.basePt)); + if (config && (config.fullType === EFullType.ByHeight || config.arrayType === EWRackArrayType.Fixed) + && config.fullDir === EFullDir.Right) { + br.ApplyMatrix(MoveMatrix(new three.Vector3(this.space.Size.x - (actualWidth ?? 0)))); + } + br.ApplyMatrix(this.space.SpaceOCS); + this.boardlist.push(br); + } + } + } + /**构建酒格形状,加入齿 */ + GetPolyline(data, dists, cof) { + let len = data.length; + let isLeft = data.isLeft; + const size = this.space.Size; + let pl = new exports.Polyline(); + pl.Rectangle(size.y, len); + let addWidth; + let leftEdge; + let rightEdge; + let knifeRad; + if (cof) { + addWidth = cof.addLen; + leftEdge = cof.sealedLeft; + rightEdge = cof.sealedRight; + knifeRad = cof.knifeRadius; + } + else { + const config = this.Config; + addWidth = config.grooveWidthAdd; + leftEdge = config.leftEdge; + rightEdge = config.rightEdge; + knifeRad = config.grooveLengthAdd; + } + if (isLeft) { + if (!data.isVer) { + let newDist = dists.map(d => len - d); + dists.length = 0; + dists.push(...newDist); + } + addWidth = (addWidth - 2 * leftEdge) / 2; + } + else + addWidth = (addWidth - 2 * rightEdge) / 2; + if (dists.length % 2 === 0 && dists.length > 1) { + let pts = []; + for (let i = 0; i < dists.length; i++) { + if (i % 2 === 0) { + if (isLeft) { + pts.push(new three.Vector2(0, dists[i] + addWidth)); + pts.push(new three.Vector2(size.y / 2 + knifeRad, dists[i] + addWidth)); + } + else { + pts.push(new three.Vector2(size.y, dists[i] - addWidth)); + pts.push(new three.Vector2(size.y / 2 - knifeRad, dists[i] - addWidth)); + } + } + else { + if (isLeft) { + pts.push(new three.Vector2(size.y / 2 + knifeRad, dists[i] - addWidth)); + pts.push(new three.Vector2(0, dists[i] - addWidth)); + } + else { + pts.push(new three.Vector2(size.y / 2 - knifeRad, dists[i] + addWidth)); + pts.push(new three.Vector2(size.y, dists[i] + addWidth)); + } + } + } + pl.AddVertexAt(isLeft ? pl.NumberOfVertices : 2, pts); + } + return pl; + } +} + +/** + * 正酒格 + */ +class DrawUprightWineRackTool extends DrawWineRackTool { + Parse(space, config) { + super.Parse(space, config); + let size = space.Size; + let gripWidth = config.gripWidth; + let brThick = config.boardThick; + let spaceHeight = size.z; + let spaceWidth = size.x; + let gripHeight = gripWidth; + let actualHeight = spaceHeight; + let actualWidth = spaceWidth; + switch (config.arrayType) { + case EWRackArrayType.ByWidth: + // let tempWidthCount = 0; + // let tempHeightCount = 0; + // if (widCount > 0 || heightCount > 0) + // { + // tempWidthCount = Math.floor(spaceWidth / (gripWidth + brThick)); + // tempHeightCount = Math.floor(spaceHeight / (gripWidth + brThick)); + // gripWidth = (spaceWidth - (tempWidthCount - 1) * brThick) / tempWidthCount; + // gripHeight = (spaceHeight - (tempHeightCount - 1) * brThick) / tempHeightCount; + // if (widCount > 0) + // { + // heightCount = tempHeightCount; + // actualWidth = gripWidth * widCount + brThick * (widCount - 1); + // } + // else if (heightCount > 0) + // { + // widCount = tempWidthCount; + // actualWidth = gripWidth * widCount + brThick * (widCount - 1); + // } + // } + config.widthCount = Math.floor(spaceWidth / (gripWidth + brThick)); + config.heightCount = Math.floor(spaceHeight / (gripWidth + brThick)); + config.gripWidth = (spaceWidth - (config.widthCount - 1) * brThick) / config.widthCount; + gripHeight = (spaceHeight - (config.heightCount - 1) * brThick) / config.heightCount; + break; + case EWRackArrayType.ByCount: + if (config.widthCount > 0) { + config.widthCount = Math.floor(config.widthCount); + } + else { + let gk = (spaceHeight - 2 * brThick) / config.heightCount; + config.widthCount = Math.floor((spaceWidth - 2 * brThick) / gk + 1e-6); + } + if (config.heightCount > 0) { + config.heightCount = Math.floor(config.heightCount); + } + else { + let gk = (spaceWidth - 2 * config.heightCount) / config.heightCount; + config.heightCount = Math.floor((spaceHeight - 2 * brThick) / gk + 1e-6); + } + config.gripWidth = (spaceWidth - (config.widthCount - 1) * brThick) / config.widthCount; + gripHeight = (spaceHeight - (config.heightCount - 1) * brThick) / config.heightCount; + break; + case EWRackArrayType.Fixed: + config.widthCount = Math.floor(config.widthCount); + config.heightCount = Math.floor(config.heightCount); + actualWidth = gripWidth * config.widthCount + brThick * (config.widthCount - 1); + actualHeight = gripWidth * config.heightCount + brThick * (config.heightCount - 1); + } + if (config.widthCount <= 0 || config.heightCount <= 0) + throw `绘制酒格失败,酒格个数异常! 宽个数:${config.widthCount} 高个数:${config.heightCount}`; + config.widthCount--; + config.heightCount--; + this.BuildBoard(gripHeight, actualWidth, actualHeight, space); + // this.AddLayerOrVerticalBoard(actualWidth, actualHeight); + } + BuildBoard(gripHeight, spaceWidth, spaceHeight, space) { + const config = this.Config; + let min = space.SpaceBox.min; + let size = space.Size; + let brThick = config.boardThick; + let verBr = exports.Board.CreateBoard(spaceHeight, size.y, brThick, BoardType.Vertical); + this.ParseBrTooth(verBr, gripHeight); + for (let i = 1; i <= config.widthCount; i++) { + let br = verBr.Clone(); + br.Name = "右板" + i; + br.ApplyMatrix(MoveMatrix(min.clone().add(new three.Vector3(config.gripWidth * i + (i - 1) * brThick)))).ApplyMatrix(space.SpaceOCS); + this.boardlist.push(br); + } + let lyBr = exports.Board.CreateBoard(spaceWidth, size.y, brThick); + this.ParseBrTooth(lyBr); + for (let i = 1; i <= config.heightCount; i++) { + let br = lyBr.Clone(); + br.Name = "左板" + i; + br.ApplyMatrix(MoveMatrix(min.clone().add(new three.Vector3(spaceWidth, 0, gripHeight * i + (i - 1) * brThick)))) + .ApplyMatrix(space.SpaceOCS); + this.boardlist.push(br); + } + } + ParseBrTooth(br, gripHeight) { + const config = this.Config; + let initPts = []; + let addWidth = config.grooveWidthAdd; + let topEdge = config.topEdge; + let bottomEdge = config.bottomEdge; + let leftEdge = config.leftEdge; + let rightEdge = config.rightEdge; + let grooveLenAdd = config.grooveLengthAdd; + br.BoardProcessOption.sealedUp = topEdge.toString(); + br.BoardProcessOption.sealedDown = bottomEdge.toString(); + br.BoardProcessOption.sealedLeft = leftEdge.toString(); + br.BoardProcessOption.sealedRight = rightEdge.toString(); + if (br.BoardType === BoardType.Layer) { + addWidth = (addWidth - 2 * leftEdge) / 2; + let p1 = new three.Vector3(0, config.gripWidth - addWidth); + let p2 = new three.Vector3(br.Width / 2 + grooveLenAdd, config.gripWidth - addWidth); + let p3 = new three.Vector3(br.Width / 2 + grooveLenAdd, config.gripWidth + br.Thickness + addWidth); + let p4 = new three.Vector3(0, config.gripWidth + br.Thickness + addWidth); + initPts.push(p1, p2, p3, p4); + for (let i = 2; i <= config.widthCount; i++) { + initPts.push(...[p1, p2, p3, p4].map(p => p.clone().add(new three.Vector3(0, (config.gripWidth + br.Thickness) * (i - 1))))); + } + initPts.reverse(); + let cu = br.ContourCurve; + cu.AddVertexAt(cu.EndParam, initPts.map(p => AsVector2(p))); + br.ContourCurve = cu; + } + else { + addWidth = (addWidth - 2 * rightEdge) / 2; + let p1 = new three.Vector3(br.Width, gripHeight - addWidth); + let p2 = new three.Vector3(br.Width / 2 - grooveLenAdd, gripHeight - addWidth); + let p3 = new three.Vector3(br.Width / 2 - grooveLenAdd, gripHeight + br.Thickness + addWidth); + let p4 = new three.Vector3(br.Width, gripHeight + br.Thickness + addWidth); + initPts.push(p1, p2, p3, p4); + for (let i = 2; i <= config.heightCount; i++) { + initPts.push(...[p1, p2, p3, p4].map(p => p.clone().add(new three.Vector3(0, (gripHeight + br.Thickness) * (i - 1))))); + } + let cu = br.ContourCurve; + cu.AddVertexAt(2, initPts.map(p => AsVector2(p))); + br.ContourCurve = cu; + } + this.ParseHighSealing(br, config.leftEdge, config.rightEdge, config.topEdge, config.bottomEdge, br.BoardType === BoardType.Layer); + } +} + +exports.TemplateWineRackRecord = class TemplateWineRackRecord extends exports.TemplateRecord { + constructor() { + super(); + this.option = { ...DefaultWineRackConfig }; + this.name = "酒格(自动)"; + } + get Option() { + return Object.assign({}, this.option); + } + set Option(option) { + this.WriteAllObjectRecord(); + Object.assign(this.option, option); + ExtendsBoardThickness(this, option.boardThick); + } + async Update() { + await super.Update(); + let bh = this.GetParam("BH")?.value; + if (bh) + this.option.boardThick = bh; + let bh2 = this.GetParam("BH2")?.value; + if (bh2) + this.option.brThick2 = bh2; + let wineRack; + if (this.option.type === EWineRackType.Oblique) + wineRack = DrawObliqueWineRackTool.GetInstance(); + else + wineRack = DrawUprightWineRackTool.GetInstance(); + let sbrs = this.PositioningSupportBoards; + let space = new ISpaceParse(sbrs, this._CacheSpaceCS); + space.ParseOK = true; + space.SpaceBox = new Box3Ext(new three.Vector3(), this._CacheSpaceSize); + wineRack.Parse(space, this.Option); + let nbrs = wineRack.boardlist; + for (let i = nbrs.length; i < this.Objects.length; i++) + this.Objects[i].Object.Erase(); + for (let i = 0; i < nbrs.length; i++) { + if (i < this.Objects.length) { + let br = this.Objects[i].Object; + br.Erase(false); + br.CopyFrom(nbrs[i]); + br.SpaceOCS = this._CacheSpaceCS; + } + else { + this._db.ModelSpace.Append(nbrs[i]); + this.Objects.push(nbrs[i].Id); + nbrs[i].SpaceOCS = this._CacheSpaceCS; + } + } + } + //#region -------------------------File------------------------- + //对象应该实现dataIn和DataOut的方法,为了对象的序列化和反序列化 + //对象从文件中读取数据,初始化自身 + ReadFile(file) { + let ver = file.Read(); + super.ReadFile(file); + this.option.type = file.Read(); + this.option.arrayType = file.Read(); + this.option.fullType = file.Read(); + this.option.isFull = file.Read(); + this.option.fullDir = file.Read(); + this.option.isLock = file.Read(); + this.option.heightCount = file.Read(); + this.option.widthCount = file.Read(); + this.option.isTotalDepth = file.Read(); + this.option.depth = file.Read(); + this.option.calcDepth = file.Read(); + this.option.gripWidth = file.Read(); + this.option.boardThick = file.Read(); + this.option.grooveWidthAdd = file.Read(); + this.option.leftEdge = file.Read(); + this.option.rightEdge = file.Read(); + this.option.topEdge = file.Read(); + this.option.bottomEdge = file.Read(); + this.option.frontCut = file.Read(); + this.option.leftCut = file.Read(); + this.option.rightCut = file.Read(); + this.option.topCut = file.Read(); + this.option.grooveLengthAdd = file.Read(); + this.option.isDrawLy = file.Read(); + this.option.isDrawVer = file.Read(); + this.option.brThick2 = file.Read(); + if (ver > 1) + this.option.followNarrow = file.Read(); + } + //对象将自身数据写入到文件. + WriteFile(file) { + file.Write(2); + super.WriteFile(file); + file.Write(this.option.type); + file.Write(this.option.arrayType); + file.Write(this.option.fullType); + file.Write(this.option.isFull); + file.Write(this.option.fullDir); + file.Write(this.option.isLock); + file.Write(this.option.heightCount); + file.Write(this.option.widthCount); + file.Write(this.option.isTotalDepth); + file.Write(this.option.depth); + file.Write(this.option.calcDepth); + file.Write(this.option.gripWidth); + file.Write(this.option.boardThick); + file.Write(this.option.grooveWidthAdd); + file.Write(this.option.leftEdge); + file.Write(this.option.rightEdge); + file.Write(this.option.topEdge); + file.Write(this.option.bottomEdge); + file.Write(this.option.frontCut); + file.Write(this.option.leftCut); + file.Write(this.option.rightCut); + file.Write(this.option.topCut); + file.Write(this.option.grooveLengthAdd); + file.Write(this.option.isDrawLy); + file.Write(this.option.isDrawVer); + file.Write(this.option.brThick2); + file.Write(this.option.followNarrow); + } +}; +exports.TemplateWineRackRecord = __decorate([ + Factory +], exports.TemplateWineRackRecord); + +function IsHinge(en) { + if (en instanceof exports.HardwareCompositeEntity) { + if (en.Template) { + let temp = en.Template.Object; + if (temp?.Parent?.Object?.Name === "铰链空间") + return true; + } + // else //有时候 模块会被破坏,所以模块检测不是唯一标准 + { + return en.HardwareOption.name.includes("铰链"); + } + } +} + exports.TextAligen = void 0; (function (TextAligen) { TextAligen[TextAligen["LeftTop"] = 3] = "LeftTop"; @@ -25616,7 +29955,8 @@ exports.ViewportEntity = ViewportEntity_1 = class ViewportEntity extends exports if (!this._ShowObjectIds.has(en.Id) || this._HideObjectIds.has(en.Id)) return false; } - if (en instanceof exports.HardwareCompositeEntity && en.HardwareOption.name.includes("铰链")) + // if (en instanceof HardwareCompositeEntity && en.HardwareOption.name.includes("铰链")) + if (IsHinge(en)) return false; return true; } @@ -27531,6 +31871,30 @@ exports.BoxSolid = class BoxSolid extends exports.Entity { this.OnlyRenderType = true; this._opacity = 0.5; } + get Length() { return this._length; } + get Width() { return this._width; } + get Height() { return this._height; } + set Length(v) { + if (!equaln$1(v, this._length, 1e-5)) { + this.WriteAllObjectRecord(); + this._length = v; + this.Update(); + } + } + set Width(v) { + if (!equaln$1(v, this._width, 1e-5)) { + this.WriteAllObjectRecord(); + this._width = v; + this.Update(); + } + } + set Height(v) { + if (!equaln$1(v, this._height, 1e-5)) { + this.WriteAllObjectRecord(); + this._height = v; + this.Update(); + } + } set Opacity(o) { if (o !== this._opacity) { this.WriteAllObjectRecord(); @@ -27552,6 +31916,12 @@ exports.BoxSolid = class BoxSolid extends exports.Entity { obj.children[0].position.copy(new three.Vector3(this._length / 2, this._width / 2, this._height / 2)); obj.children[0].updateMatrix(); } + get BoundingBoxInOCS() { + return new Box3Ext(new three.Vector3, new three.Vector3(this._length, this._width, this._height)); + } + get BoundingBox() { + return this.BoundingBoxInOCS.applyMatrix4(this.OCSNoClone); + } }; exports.BoxSolid = __decorate([ Factory @@ -29150,2342 +33520,6 @@ exports.RoomHoleLine = __decorate([ ], exports.RoomHoleLine); applyMixins(exports.RoomHoleLine, exports.Line); -class ISpaceParse { - /** - * # 构造后请手动调用Parse()方法. - * @param boards 板件列表 - * @param [spaceOCS] 默认空间矩阵,如果不设置将使用第一块板作为空间矩阵 - */ - constructor(boards, spaceOCS) { - /** - * 解析空间成功 - */ - this.ParseOK = false; - /** - * 板件映射表 - */ - this.BoardMap = new Map(); - /** - * 动态中,禁止执行二次操作 - */ - this.IsDynamic = false; - this.Rotation = { x: 0, y: 0, z: 0 }; - this.Boards = boards; - if (spaceOCS) - this.SpaceOCS = spaceOCS; - else if (boards && boards.length > 0) - this.SpaceOCS = boards[0].SpaceOCS; - else - this.SpaceOCS = new three.Matrix4(); - this.SpaceOCSInv = new three.Matrix4().getInverse(this.SpaceOCS); - this.GeneralBoardMap(); - } - async Parse() { - } - get Size() { - if (this.SpaceBox) - return this.SpaceBox.getSize(new three.Vector3()); - return new three.Vector3(); - } - get DrawCS() { - if (!this.ParseOK) - return new three.Matrix4(); - let scs = this.SpaceOCS.clone(); - let p = this.SpaceBox.min.clone().applyMatrix4(scs); - scs.setPosition(p); - return scs; - } - GetBoardInSpaceType(br) { - //使用板件向量判断类型,而不是板件类型 - let normal = br.Normal.transformDirection(this.SpaceOCSInv); - let type; - if (isParallelTo(XAxis, normal, 1e-3)) - type = BoardType.Vertical; - else if (isParallelTo(YAxis, normal, 1e-3)) - type = BoardType.Behind; - else if (isParallelTo(ZAxis, normal, 1e-3)) - type = BoardType.Layer; - return type; - } - /** - * 构造板件类型Map - */ - GeneralBoardMap() { - if (this.Boards && this.Boards.length > 0) { - this.BoardMap.clear(); - for (let br of this.Boards) { - let type = this.GetBoardInSpaceType(br); - if (type === undefined) - continue; - let brs = this.BoardMap.get(type); - if (brs) - brs.push(br); - else - this.BoardMap.set(type, [br]); - } - } - } - /** - * 解析板件的盒子,并且(排序,归并) - * @param boardCol - * @param splitType - */ - ParseBoardBox(boardCol, splitType) { - let boxCol = boardCol.map(b => b.GetBoundingBoxInMtx(this.SpaceOCSInv)); - //查找最左的板和最右的板 - if (splitType === SplitType.X) { - let minX = Infinity; - let leftIndex = 0; - let maxX = -Infinity; - let rightIndex = 0; - for (let i = 0; i < boxCol.length; i++) { - let box = boxCol[i]; - if (box.min.x < minX) { - minX = box.min.x; - leftIndex = i; - } - if (box.max.x > maxX) { - maxX = box.max.x; - rightIndex = i; - } - } - this.LeftBoard = boardCol[leftIndex]; - this.RightBoard = boardCol[rightIndex]; - } - //根据分割类型排序 - boxCol.sort((b1, b2) => { - return b1.min.getComponent(splitType) - b2.min.getComponent(splitType); - }); - //归并盒子 - arrayRemoveDuplicateBySort(boxCol, (b1, b2) => { - if ( - //对齐 - equaln$1(b1.min.getComponent(splitType), b2.min.getComponent(splitType), 1e-3) - && - //厚度相等 - equaln$1(b1.getSize(new three.Vector3()).getComponent(splitType), b2.getSize(new three.Vector3()).getComponent(splitType), 1e-3)) { - b1.union(b2); - return true; - } - return false; - }); - return boxCol; - } -} - -/** - * 模版动作 - */ -exports.TemplateAction = class TemplateAction { - constructor() { - this.Name = "动作"; - } - WriteAllObjectRecord() { - if (this.parent) - this.parent.WriteAllObjectRecord(); - } - Update(paramDiff, newValue) { - if (this.Expr) { - let varDefines = {}; - varDefines[this.parent.name] = newValue; - newValue = safeEval(this.Expr, varDefines) || newValue; - varDefines[this.parent.name] = paramDiff; - paramDiff = safeEval(this.Expr, varDefines) || paramDiff; - } - this._Update(paramDiff, newValue); - } - /** - * @重载 - */ - _Update(paramDiff, newValue) { - } - //#region -------------------------File------------------------- - //对象应该实现dataIn和DataOut的方法,为了对象的序列化和反序列化 - //对象从文件中读取数据,初始化自身 - ReadFile(file) { - let ver = file.Read(); - this.Name = file.Read(); - if (ver > 2) { - this.Expr = file.Read(); - this.Description = file.Read(); - } - } - //对象将自身数据写入到文件. - WriteFile(file) { - file.Write(3); - file.Write(this.Name); - file.Write(this.Expr); - file.Write(this.Description); - } -}; -__decorate([ - AutoRecord -], exports.TemplateAction.prototype, "Name", void 0); -__decorate([ - AutoRecord -], exports.TemplateAction.prototype, "Expr", void 0); -__decorate([ - AutoRecord -], exports.TemplateAction.prototype, "Description", void 0); -exports.TemplateAction = __decorate([ - Factory -], exports.TemplateAction); - -var PromptStatus; -(function (PromptStatus) { - PromptStatus[PromptStatus["None"] = 0] = "None"; - PromptStatus[PromptStatus["Cancel"] = -1] = "Cancel"; - PromptStatus[PromptStatus["OK"] = 1] = "OK"; - PromptStatus[PromptStatus["Keyword"] = 2] = "Keyword"; - PromptStatus[PromptStatus["Other"] = 4] = "Other"; - PromptStatus[PromptStatus["String"] = 8] = "String"; - PromptStatus[PromptStatus["Error"] = -2] = "Error"; -})(PromptStatus || (PromptStatus = {})); -// export enum Errno 未来某一天我们可能需要这个东西 -// { -// Space = 0, -// Enter = 1, -// Esc = 2, -// Left = 3, -// Right = 4, -// } -class PromptResult { - constructor() { - this.Status = PromptStatus.None; - //是否为子级菜单 - this.isChild = false; - //当用户选择失败的时候,提供当前选择失败的原因 - // Errno?: Errno; - } -} -class PromptDistendResult extends PromptResult { - get Distance() { - return this._value; - } - set Distance(v) { - this._value = v; - } -} -class PromptEntityResult extends PromptResult { - constructor( - //选择到的图形 - Entity, - //点取的点 - Point, Object, IsCircle) { - super(); - this.Entity = Entity; - this.Point = Point; - this.Object = Object; - this.IsCircle = IsCircle; - } -} - -function Encode(res, enMap) { - if (res.Entity instanceof exports.Line || res.Entity.constructor.name === "RoomWallLine") { - enMap[0].push(res); - return 1; - } - else if (res.Entity instanceof exports.Arc || res.constructor.name === "RoomWallArc") { - enMap[1].push(res); - return 2; - } - else if (res.Entity instanceof exports.Polyline) { - enMap[2].push(res); - return 4; - } - else if (res.Entity instanceof exports.Spline) { - enMap[3].push(res); - return 8; - } - else if (res.Entity instanceof exports.Ellipse) { - enMap[4].push(res); - return 16; - } -} -//把圆转换成圆弧,避免圆参与计算. -function CircleEnResToArc(enRes) { - if (enRes.Entity instanceof exports.Circle) { - let an = angle(enRes.Point.clone().applyMatrix4(enRes.Entity.OCSInv)) + Math.PI; - let arc = new exports.Arc(new three.Vector3(), enRes.Entity.Radius, an, an + 0.1); - arc.ApplyMatrix(enRes.Entity.OCS); - arc.Center = enRes.Entity.Center; - enRes.Entity = arc; - enRes.IsCircle = true; - } -} -function GetFilletCurve(enRes) { - if (enRes.Entity instanceof exports.Polyline) { - let pl = enRes.Entity; - let param = pl.GetParamAtPoint(pl.GetClosestPointTo(enRes.Point, false)); - let paramF = Math.floor(param); - return [pl.GetCurveAtParam(param), paramF]; - } - else - return [enRes.Entity, NaN]; -} -var ExtendType; -(function (ExtendType) { - ExtendType[ExtendType["Start"] = 1] = "Start"; - ExtendType[ExtendType["End"] = 2] = "End"; -})(ExtendType || (ExtendType = {})); -class FilletUtils { - Fillet(enRes1, enRes2) { - CircleEnResToArc(enRes1); - CircleEnResToArc(enRes2); - let { enType, enMap } = this.EnCode(enRes1, enRes2); - if (enType === 4 && enRes1.Entity === enRes2.Entity) - return this.FilletPolyLineSelf(enRes1, enRes2); - else if (enType >= 4 && enType < 8) - return this.FilletPolylineAndCurve(enRes1, enRes2); - let interPts = this.GetIntersectAndSort(enRes1, enRes2, enType, enMap); - if (interPts.length === 0 - || (interPts.length === 1 && (enType & 2))) //圆弧相切 - { - if (enType === 1) - return this.FilletParallelLine(enRes1, enRes2); - else if (enType === 3) - return this.FilletLineAndArc(enMap, enRes1); - else if (enType === 2) - return this.FilletArcAndArc(enRes1, enRes2); - return; - } - return this.FilletLineOrArc(enRes1, enRes2, interPts); - } - FilletLineOrArc(enRes1, enRes2, interPts) { - let iPt = interPts[0]; - //裁剪延伸,使两条线组成一个尖角 - let splitedCu1 = this.SplitCurve(enRes1, iPt, interPts); - let splitedCu2 = this.SplitCurve(enRes2, iPt, interPts); - let fRadius = this.FilletRadius; - let res = { cu1: splitedCu1.Curve, cu2: splitedCu2.Curve, arc: undefined }; - if (fRadius > 0) { - //角平分线向量. - let bisectorVec = new three.Vector3(); - let c1Derv = this.ComputerDerv(splitedCu1, bisectorVec); - let c2Derv = this.ComputerDerv(splitedCu2, bisectorVec); - //方向相反 - if (equalv3(bisectorVec, new three.Vector3())) - return; - //相切 - if (equalv3(c2Derv, c1Derv)) { - bisectorVec.set(0, 0, 0); - c1Derv = this.ComputerDerv2(splitedCu1, bisectorVec); - c2Derv = this.ComputerDerv2(splitedCu2, bisectorVec); - } - let cu1RoOcsInv = new three.Matrix4().extractRotation(splitedCu1.Curve.OCSInv); - [c1Derv, c2Derv, bisectorVec].forEach(v => v.applyMatrix4(cu1RoOcsInv)); - let offCu1 = splitedCu1.Curve.GetOffsetCurves(fRadius * -Math.sign(c1Derv.cross(bisectorVec).z))[0]; - let offCu2 = splitedCu2.Curve.GetOffsetCurves(fRadius * -Math.sign(c2Derv.cross(bisectorVec).z))[0]; - if (!offCu1 || !offCu2) - return; - // JigUtils.Draw(new Line(iPt, iPt.clone().add(c1Derv.clone().multiplyScalar(10)))).ColorIndex = 1; - // JigUtils.Draw(new Line(iPt, iPt.clone().add(c2Derv.clone().multiplyScalar(10)))).ColorIndex = 2; - // JigUtils.Draw(new Line(iPt, iPt.clone().add(bisectorVec))).ColorIndex = 3; - // offCu1.ColorIndex = 6; - // offCu2.ColorIndex = 6; - // JigUtils.Draw(offCu1.Clone()); - // JigUtils.Draw(offCu2.Clone()); - let center = offCu1.IntersectWith(offCu2, IntersectOption.ExtendNone) - .sort((p1, p2) => { - return p1.distanceToSquared(iPt) - p2.distanceToSquared(iPt); - })[0]; - if (!center) - return; - let arcP1 = splitedCu1.Curve.GetClosestPointTo(center, true); - let arcP2 = splitedCu2.Curve.GetClosestPointTo(center, true); - if (!splitedCu1.Curve.PtOnCurve(arcP1) || !splitedCu2.Curve.PtOnCurve(arcP2)) - return; - //时针校验 - let v1 = arcP1.clone().sub(center).applyMatrix4(cu1RoOcsInv); - let v2 = arcP2.clone().sub(center).applyMatrix4(cu1RoOcsInv); - //绘制圆弧 - let arc = new exports.Arc(new three.Vector3(), this.FilletRadius, angle(v1), angle(v2), v1.cross(v2).z < 0); - arc.ApplyMatrix(splitedCu1.Curve.OCS); - arc.Center = center; - res.arc = arc; - //延伸或者裁剪到圆弧点 - this.ExtendPt(splitedCu1, arcP1); - this.ExtendPt(splitedCu2, arcP2); - } - res.cu1Extend = splitedCu1.ExtType; - res.cu2Extend = splitedCu2.ExtType; - return res; - } - FilletPolyLineSelf(enRes1, enRes2) { - let pl = enRes1.Entity; - let param1 = pl.GetParamAtPoint(pl.GetClosestPointTo(enRes1.Point, false)); - let param2 = pl.GetParamAtPoint(pl.GetClosestPointTo(enRes2.Point, false)); - if (param1 > param2) { - [param1, param2] = [param2, param1]; - [enRes1, enRes2] = [enRes2, enRes1]; - } - let parF1 = Math.floor(param1); - let parF2 = Math.floor(param2); - //共线 - if (parF1 === parF2) - return; - let c1 = pl.GetCurveAtParam(param1); - let c2 = pl.GetCurveAtParam(param2); - if (equalv3(c1.GetFistDeriv(1).normalize(), c2.GetFistDeriv(0).normalize())) - return; - let es1 = new PromptEntityResult(); - es1.Entity = c1; - es1.Point = enRes1.Point; - let es2 = new PromptEntityResult(); - es2.Entity = c2; - es2.Point = enRes2.Point; - let fres = this.Fillet(es1, es2); - if (!fres) - return; - let pln = pl.Clone(); - if (fres.cu1 instanceof exports.Arc) - pln.SetBulgeAt(parF1, fres.cu1.Bul); - if (fres.cu2 instanceof exports.Arc) - pln.SetBulgeAt(parF2, fres.cu2.Bul); - let splitType1 = fres.cu1Extend; - let splitType2 = fres.cu2Extend; - if (splitType1 === splitType2) - return; - if (!fres.arc) { - if (splitType1 === ExtendType.End) { - let ep = AsVector2(fres.cu1.EndPoint.applyMatrix4(pln.OCSInv)); - pln.SetPointAt(parF1 + 1, ep); - let sp = AsVector2(fres.cu2.StartPoint.applyMatrix4(pln.OCSInv)); - pln.SetPointAt(parF2, sp); - //移除多余的点 - pln.LineData.splice(parF1 + 1, parF2 - parF1 - 1); - pln.Update(); - return { cu1: pln }; - } - else { - let ep = AsVector2(fres.cu1.StartPoint.applyMatrix4(pln.OCSInv)); - pln.SetPointAt(parF1, ep); - let sp = AsVector2(fres.cu2.EndPoint.applyMatrix4(pln.OCSInv)); - pln.SetPointAt(parF2 + 1, sp); - pln.LineData.splice(parF2 + 2); - pln.LineData.splice(0, parF1); - pln.Update(); - return { cu1: pln }; - } - } - if (splitType1 === ExtendType.End) //没有经过起点 - { - let sp = AsVector2(fres.cu1.EndPoint.applyMatrix4(pln.OCSInv)); - if (parF2 - parF1 === 1) { - pln.AddVertexAt(parF1 + 1, sp); - parF2++; - } - else - pln.SetPointAt(parF1 + 1, sp); - pln.SetBulgeAt(parF1 + 1, fres.arc.Bul); - let ep = AsVector2(fres.cu2.StartPoint.applyMatrix4(pln.OCSInv)); - pln.SetPointAt(parF2, ep); - //移除多余的点 - pln.LineData.splice(parF1 + 2, parF2 - parF1 - 2); - pln.Update(); - return { cu1: pln }; - } - else //经过起点 - { - let sp = AsVector2(fres.arc.EndPoint.applyMatrix4(pln.OCSInv)); - let keepF1 = 0; - if (parF2 + 1 <= pln.LineData.length) { - if (parF1 === 0 || equaln$1(pln.GetBulgeAt(parF1 - 1), 0)) - pln.AddVertexAt(parF2 + 1, sp); - else { - pln.SetPointAt(parF1 - 1, sp); - keepF1 = -1; //保留圆弧位 - } - } - else - pln.SetPointAt(parF2 + 1, sp); - if (keepF1 === 0) - pln.SetBulgeAt(parF2 + 1, -fres.arc.Bul); - else - pln.SetBulgeAt(parF1 - 1, -fres.arc.Bul); - let ep = AsVector2(fres.cu1.StartPoint.applyMatrix4(pln.OCSInv)); - pln.SetPointAt(parF1, ep); - pln.CloseMark = true; - pln.LineData.splice(parF2 + 2 + keepF1); - pln.LineData.splice(0, parF1 + keepF1); - pln.Update(); - return { cu1: pln }; - } - } - FilletPolylineAndCurve(enRes1, enRes2) { - let arr1 = GetFilletCurve(enRes1); - let arr2 = GetFilletCurve(enRes2); - let [cu1, paramF1] = arr1; - let [cu2, paramF2] = arr2; - let es1 = new PromptEntityResult(); - es1.Entity = cu1; - es1.Point = enRes1.Point; - let es2 = new PromptEntityResult(); - es2.Entity = cu2; - es2.Point = enRes2.Point; - let fres = this.Fillet(es1, es2); - if (fres) { - let cus = []; - let isFirst = false; - if (fres.cu1) { - if (enRes1.Entity instanceof exports.Polyline) { - isFirst = true; - let pln = enRes1.Entity.Clone(); - pln.DigestionCloseMark(); - if (fres.cu1 instanceof exports.Arc) - pln.SetBulgeAt(paramF1, fres.cu1.Bul); - if (fres.cu1Extend === ExtendType.End) { - pln.LineData.splice(paramF1 + 2); - let ep = AsVector2(fres.cu1.EndPoint.applyMatrix4(pln.OCSInv)); - pln.SetPointAt(paramF1 + 1, ep); - } - else { - pln.LineData.splice(0, paramF1); - let sp = AsVector2(fres.cu1.StartPoint.applyMatrix4(pln.OCSInv)); - pln.SetPointAt(0, sp); - } - cus.push(pln); - } - else if (!enRes1.IsCircle) - cus.push(fres.cu1); - } - if (fres.arc) - cus.push(fres.arc); - if (fres.cu2) { - if (enRes2.Entity instanceof exports.Polyline) { - let pln = enRes2.Entity.Clone(); - pln.DigestionCloseMark(); - if (fres.cu2 instanceof exports.Arc) - pln.SetBulgeAt(paramF2, fres.cu2.Bul); - if (fres.cu2Extend === ExtendType.End) { - pln.LineData.splice(paramF2 + 2); - let ep = AsVector2(fres.cu2.EndPoint.applyMatrix4(pln.OCSInv)); - pln.SetPointAt(paramF2 + 1, ep); - } - else { - pln.LineData.splice(0, paramF2); - let sp = AsVector2(fres.cu2.StartPoint.applyMatrix4(pln.OCSInv)); - pln.SetPointAt(0, sp); - } - cus.push(pln); - cus.reverse(); - } - else if (!enRes2.IsCircle) - cus.push(fres.cu2); - } - if (cus.length > 0) { - let pl = cus[0]; - if (!(pl instanceof exports.Polyline)) - return; - for (let i = 1; i < cus.length; i++) - pl.Join(cus[i]); - if (isFirst) - return { cu1: pl }; - else - return { cu2: pl }; - } - } - return undefined; - } - FilletPolyLineAllAngular(enRes1) { - let pl = enRes1.Entity; - let cus = pl.Explode(); - let count = cus.length; - if (pl.IsClose) - cus.push(cus[0]); - let ncus = []; - for (let i = 0; i < count; i++) { - let c1 = cus[i]; - let c2 = cus[i + 1]; - ncus.push(c1); - if (!c2) - break; - if (equalv3(c1.GetFistDeriv(1).normalize(), c2.GetFistDeriv(0).normalize())) - continue; - let es1 = new PromptEntityResult(); - es1.Entity = c1; - es1.Point = c1.EndPoint; - let es2 = new PromptEntityResult(); - es2.Entity = c2; - es2.Point = c2.StartPoint; - let fres = this.Fillet(es1, es2); - if (fres) { - if (fres.cu1) - c1.CopyFrom(fres.cu1); - if (fres.cu2) - c2.CopyFrom(fres.cu2); - if (fres.arc) - ncus.push(fres.arc); - } - } - let pln = pl.Clone(); - pln.LineData = []; - pln.ApplyMatrix(pln.OCSInv); - pln.CloseMark = false; - for (let cu of ncus) - pln.Join(cu); - pln.CloseMark = pl.CloseMark; - return { - cu1: pln, - cu2: undefined, - arc: undefined - }; - } - FindNearestPt(pts, target) { - let res = pts[0]; - let dis = Infinity; - for (let p of pts) { - let d = p.distanceTo(target); - if (d < dis) { - res = p; - dis = d; - } - } - return res; - } - FilletBoard(brRes, ptRes) { - let br = brRes.Entity; - let brContour = br.ContourCurve.Clone(); - //------1.求交 - let brResPt = brRes.Point.clone().applyMatrix4(br.OCSInv).setZ(0); - let ptResPt = ptRes.Point.clone().applyMatrix4(br.OCSInv).setZ(0); - let l = new exports.Line(brResPt, ptResPt); - let ipts = l.IntersectWith(brContour, IntersectOption.ExtendThis); - if (ipts.length > 2) //超过2个则有可能有多余交点 - //找最近点 - ipts = [this.FindNearestPt(ipts, brResPt), this.FindNearestPt(ipts, ptResPt)]; - if (ipts.length !== 2) - return "倒角失败!交点个数异常."; - //------2.倒角 - let es1 = new PromptEntityResult(brContour, ipts[0]); - let es2 = new PromptEntityResult(brContour, ipts[1]); - let res = this.FilletPolyLineSelf(es1, es2); - if (res && res.cu1) - return res.cu1; - else - return "倒角失败"; - } - /** - * 平行线倒角 - */ - FilletParallelLine(enRes1, enRes2) { - let l1 = enRes1.Entity; - let l2 = enRes2.Entity; - let l1Derv = l1.GetFistDeriv(0); - if (!isParallelTo(l1Derv, l2.GetFistDeriv(0))) - return; - let vec = l2.StartPoint.sub(l1.StartPoint); - if (isParallelTo(vec, l1Derv)) - return; - let par1 = l2.GetClosestAtPoint(l1.StartPoint, true).param; - let par2 = l2.GetClosestAtPoint(l1.EndPoint, true).param; - if (!isIntersect2(0, 1, par1, par2)) - return; - let lineClone1 = l1.Clone(); - let lineClone2 = l2.Clone(); - let par = l1.GetClosestAtPoint(enRes1.Point, true).param; - let parFix = Math.round(par); - let ptFix = lineClone1.GetPointAtParam(parFix); - let ptL2Fix = lineClone2.GetClosestAtPoint(ptFix, true).closestPt; - let cu1Extend = parFix === 0 ? ExtendType.Start : ExtendType.End; - let cu2Extend; - if ((par1 > par2) === (parFix === 1)) { - lineClone2.StartPoint = ptL2Fix; - cu2Extend = ExtendType.Start; - } - else { - lineClone2.EndPoint = ptL2Fix; - cu2Extend = ExtendType.End; - } - let radius = ptFix.distanceTo(ptL2Fix) / 2; - if (radius < 1e-3) - return; - let arcCenter = midPoint(ptFix, ptL2Fix); - let sv = ptFix.sub(arcCenter); - let ev = ptL2Fix.sub(arcCenter); - if (parFix === 0) - l1Derv.negate(); - //平面矩阵 - let xVec = new three.Vector3(); - let yVec = new three.Vector3(); - let zVec = vec.cross(l1Derv).normalize(); - let l1Normal = l1.Normal; - if (isParallelTo(zVec, l1Normal)) - zVec = l1Normal; - Orbit.ComputUpDirection(zVec, yVec, xVec); - let mtx = new three.Matrix4().makeBasis(xVec, yVec, zVec); - let mtxInv = new three.Matrix4().getInverse(mtx); - //变换 - sv.applyMatrix4(mtxInv); - ev.applyMatrix4(mtxInv); - l1Derv.applyMatrix4(mtxInv); - let sa = angle(sv); - let ea = angle(ev); - let clockwise = ev.cross(l1Derv).z > 0; - let arc = new exports.Arc(new three.Vector3(), radius, sa, ea, clockwise); - arc.ApplyMatrix(mtx); - arc.Center = arcCenter; - return { - cu1: lineClone1, - cu1Extend, - cu2: lineClone2, - cu2Extend, - arc, - }; - } - /** - * 计算圆弧与圆弧没有交点的情况下倒角结果. - * @param enRes1 - * @param enRes2 - * @returns arc and arc - */ - FilletArcAndArc(enRes1, enRes2) { - let a1 = enRes1.Entity; - let a2 = enRes2.Entity; - let arcO1 = a1.GetOffsetCurves(this.FilletRadius * (a1.IsClockWise ? -1 : 1))[0]; - let arcO2 = a2.GetOffsetCurves(this.FilletRadius * (a2.IsClockWise ? -1 : 1))[0]; - // arcO1.ColorIndex = 6; - // arcO2.ColorIndex = 6; - // JigUtils.Draw(arcO1); - // JigUtils.Draw(arcO2); - //求交 - let intPts = arcO1.IntersectWith(arcO2, IntersectOption.ExtendBoth); - if (intPts.length === 0) - return; //无交点无法倒角 - //两选择点的中点 - let clickMidp = midPoint(enRes1.Point, enRes2.Point); //用来选择合适的交点 - //选择合适的交点 - intPts.sort((p1, p2) => { - return p1.distanceToSquared(clickMidp) - p2.distanceToSquared(clickMidp); - }); - //圆弧圆心 - let narcCenter = intPts[0]; - let narcP1 = a1.GetClosestPointTo(narcCenter, true); //两圆弧和相切弧的交点 - let narcP2 = a2.GetClosestPointTo(narcCenter, true); - let tempCircle = new exports.Circle(narcCenter, this.FilletRadius); - tempCircle.OCSNoClone.copy(a1.OCSNoClone).setPosition(narcCenter); - let closestPt = a1.GetClosestPointTo(a2.Center, true); //两曲线距离对方圆心最近的点 - let narcMP = tempCircle.GetClosestPointTo(closestPt, false); //相切圆距离closestPt最近的点 - //构造圆弧 - let narc = new exports.Arc().ApplyMatrix(a1.OCS).FromThreePoint(narcP1, narcMP, narcP2); - let a1Clone = a1.Clone(); - let a2Clone = a2.Clone(); - let a1Param = a1.GetParamAtPoint(narcP1); - let a2Param = a2.GetParamAtPoint(narcP2); - let a1Derv = a1.GetFistDeriv(a1Param).normalize(); - let a2Derv = a2.GetFistDeriv(a2Param).normalize(); - let narcDerv0 = narc.GetFistDeriv(0).normalize(); - let narcDerv1 = narc.GetFistDeriv(1).normalize(); - //裁剪圆弧 - if (equalv3(a1Derv, narcDerv0)) - a1Clone.EndPoint = narcP1; - else - a1Clone.StartPoint = narcP1; - if (equalv3(a2Derv, narcDerv1)) - a2Clone.StartPoint = narcP2; - else - a2Clone.EndPoint = narcP2; - return { - cu1: a1Clone, - cu2: a2Clone, - arc: narc - }; - } - /** - * 计算直线与圆弧没有交点(或相切)的情况下倒角结果 - * @param enRes1 - * @param enRes2 - * @returns line and cir - */ - FilletLineAndArc(enMap, enRes1) { - let lineRes = enMap[0][0]; - let arcRes = enMap[1][0]; - let line = lineRes.Entity; - let arc = arcRes.Entity; - let dir = GetPointAtCurveDir(line, arc.Center); - let lineO = line.GetOffsetCurves(this.FilletRadius * dir)[0]; - let arcO = arc.GetOffsetCurves(this.FilletRadius * (arc.IsClockWise ? -1 : 1))[0]; // tip:面积逆时针为正, 顺时针为负. - // lineO.ColorIndex = 6; - // arcO.ColorIndex = 6; - // JigUtils.Draw(lineO); - // JigUtils.Draw(arcO); - //求交 - let intPts = lineO.IntersectWith(arcO, IntersectOption.ExtendBoth); - if (intPts.length === 0) - return; //无交点无法倒角 - //两选择点的中点 - let clickMidp = midPoint(lineRes.Point, arcRes.Point); - //选择适合的交点。 - intPts.sort((p1, p2) => { - return p1.distanceToSquared(clickMidp) - p2.distanceToSquared(clickMidp); - }); - //圆弧圆心 - let arcCenter = intPts[0]; - let arcP1 = line.GetClosestPointTo(arcCenter, true); //直线与相切圆的交点 - let arcP2 = arc.GetClosestPointTo(arcCenter, true); //圆弧与相切圆的交点 - let tempCircle = new exports.Circle(arcCenter, this.FilletRadius); - tempCircle.OCSNoClone.copy(arc.OCSNoClone).setPosition(arcCenter); - let { closestPt, param } = line.GetClosestAtPoint(arc.Center, true); - let arcMP = tempCircle.GetClosestPointTo(closestPt, false); - //构造圆弧 - let narc = new exports.Arc().ApplyMatrix(arc.OCS).FromThreePoint(arcP1, arcMP, arcP2); - //裁剪线 - let lineClone = line.Clone(); - let arcClone = arc.Clone(); - let lineExtend; - let p1Param = line.GetParamAtPoint(arcP1); - if (p1Param > param) { - lineClone.StartPoint = arcP1; - lineExtend = ExtendType.Start; - } - else { - lineClone.EndPoint = arcP1; - lineExtend = ExtendType.End; - } - //裁剪圆弧 - let arcParam = arc.GetParamAtPoint(arcP2); - let arcDerv = arc.GetFistDeriv(arcParam).normalize(); - let narcDerv = narc.GetFistDeriv(1).normalize(); - let arcExtend; - if (equalv3(arcDerv, narcDerv)) { - arcClone.StartPoint = arcP2; - arcExtend = ExtendType.Start; - } - else { - arcClone.EndPoint = arcP2; - arcExtend = ExtendType.End; - } - //先选直线为真 - if (enRes1.Entity === line) - return { - cu1: lineClone, - cu1Extend: lineExtend, - cu2: arcClone, - cu2Extend: arcExtend, - arc: narc - }; - else - return { - cu1: arcClone, - cu1Extend: arcExtend, - cu2: lineClone, - cu2Extend: lineExtend, - arc: narc.Reverse() //#I3BWIA 避免起点和终点方向相反导致的多段线连接错误 - }; - } - //获得两曲线的交点,并且排序交点. - GetIntersectAndSort(enRes, enRes2, enType, enMap) { - let interPts = enRes.Entity.IntersectWith(enRes2.Entity, IntersectOption.ExtendBoth); - if (interPts.length > 1) { - let baseP; - if (enType & 1) //如果有直线,那么用直线 - baseP = enMap[0][0].Point; - else if (enType === 2) //如果都是圆弧,那么取中点 - baseP = midPoint(enMap[1][0].Point, enMap[1][1].Point); - interPts.sort((p1, p2) => p1.distanceToSquared(baseP) - p2.distanceToSquared(baseP)); - } - return interPts; - } - /** - * 对图元列表进行按位编码,类型映射如下: - * # 1:line 2:arc 4:polyline - * @param enRes - * @param enRes2 - * @returns - */ - EnCode(enRes, enRes2) { - let enMap = [[], [], [], [], []]; - let enType = 0; - enType |= Encode(enRes, enMap); - enType |= Encode(enRes2, enMap); - return { enType, enMap }; - } - //计算曲线在相交处的切线,取真实的切线 - ComputerDerv(cuRes, dervSum) { - let derv; - let cu = cuRes.Curve; - if (cuRes.ExtType === ExtendType.Start) { - derv = cu.GetFistDeriv(0).normalize(); - dervSum.add(derv); - } - else { - derv = cu.GetFistDeriv(cu.EndParam).normalize(); - dervSum.add(derv.clone().negate()); - } - return derv; - } - // 计算曲线在相交处的切线,取起点到终点的切线.(当曲线相切时调用此方法.) - ComputerDerv2(cuRes, dervSum) { - let cu = cuRes.Curve; - let derv = cu.EndPoint.sub(cu.StartPoint); - if (cuRes.ExtType === ExtendType.Start) - dervSum.add(derv); - else - dervSum.add(derv.clone().negate()); - return derv; - } - // 延伸或者裁剪到指定的圆弧的点. - ExtendPt(cu, newP) { - if (cu.ExtType === ExtendType.Start) - cu.Curve.StartPoint = newP; - else - cu.Curve.EndPoint = newP; - } - /** - * 切割或者延伸曲线,尖角化 - * - * @param cu 处理的曲线 - * @param interPt 原先的相交点 - * @param pickPoint 鼠标点击点 - * @returns 返回新的曲线 - */ - SplitCurve(enRes, interPt, interPts) { - let cu = enRes.Entity; - let pickPoint = enRes.Point; - let cp = cu.GetClosestPointTo(pickPoint, false); - let cus = cu.GetSplitCurvesByPts([interPt]); - if (cus.length === 0) - cus.push(cu.Clone()); - else if (cus.length === 2) - cus.sort((c1, c2) => { - return c1.GetClosestPointTo(cp, false).distanceTo(cp) - < c2.GetClosestPointTo(cp, false).distanceTo(cp) ? -1 : 1; - }); - let exType = undefined; - let newCu = cus[0]; - if (newCu instanceof exports.Line || newCu.constructor.name === "RoomWallLine") - newCu.Extend(newCu.GetParamAtPoint(interPt)); //延伸到需要的长度 - else if (newCu instanceof exports.Arc || newCu.constructor.name === "RoomWallArc") { - let arc = newCu; - if (cus.length === 1) - if (!cu.PtOnCurve(interPt)) { - if (cu.PtOnCurve(interPts[1])) { - //交点参数 - let iparam = arc.GetParamAtPoint(interPts[1]); - let pickParam = arc.GetParamAtAngle(arc.GetAngleAtPoint(pickPoint)); - if (pickParam > iparam) { - arc.EndAngle = arc.GetAngleAtPoint(interPt); - exType = ExtendType.End; - } - else { - arc.StartAngle = arc.GetAngleAtPoint(interPt); - exType = ExtendType.Start; - } - } - else { - //终点,起点 - interPts = interPts.sort((p1, p2) => { - return arc.ComputeAnlge(arc.GetAngleAtPoint(p1)) - arc.ComputeAnlge(arc.GetAngleAtPoint(p2)); - }); - if (interPt === interPts[0]) { - arc.EndAngle = arc.GetAngleAtPoint(interPt); - exType = ExtendType.End; - } - else { - arc.StartAngle = arc.GetAngleAtPoint(interPt); - exType = ExtendType.Start; - } - } - } - } - if (exType === undefined) { - //使用equalv3时由于精度误差导致的判断错误 - if (interPt.manhattanDistanceTo(newCu.StartPoint) < interPt.manhattanDistanceTo(newCu.EndPoint)) - exType = ExtendType.Start; - else - exType = ExtendType.End; - } - return { Curve: newCu, ExtType: exType }; - } -} - -exports.TemplateFilletAction = class TemplateFilletAction extends exports.TemplateAction { - constructor() { - super(); - this.FilletDatas = []; - } - _Update(paramDiff, newValue) { - for (let d of this.FilletDatas) { - if (d.Entity?.IsErase !== false) - continue; - let br = d.Entity.Object; - let update_bak = br.AutoUpdate; - br.AutoUpdate = false; - if (d.ArcParams.length > 0) - this.Fillet(br, newValue, d); - if (br.Grooves.length > 0 && d.Grooves?.length) { - for (let data of d.Grooves) { - const groove = br.Grooves[data.Index]; - if (groove) - this.Fillet(groove, newValue, data); - } - } - const path2d = br.Modeling2D; - if (path2d.length > 0 && d.Path2D?.length) { - for (let data of d.Path2D) { - let vm = path2d[data.Index]; - if (vm) { - this.Fillet(vm, newValue, data); - } - } - br._2D3DPathObject = null; - } - br.AutoUpdate = update_bak; - br.Update(exports.UpdateDraw.Geometry); - } - } - Fillet(br, newValue, d) { - let cu = br instanceof exports.ExtrudeSolid ? br.ContourCurve : br.path; - if (cu instanceof exports.Circle) - return; - let fillet = new FilletUtils(); - fillet.FilletRadius = Math.max(newValue, 0.1); - let cuOld = cu; - for (let arcParam of d.ArcParams) { - let param1 = FixIndex$1(arcParam - 1, cu.EndParam); - let param2 = FixIndex$1(arcParam + 1, cu.EndParam); - let p1 = cu.GetPointAtParam(param1); - let p2 = cu.GetPointAtParam(param2); - let res1 = new PromptEntityResult(cu, p1); - let res2 = new PromptEntityResult(cu, p2); - let fres = fillet.FilletPolyLineSelf(res1, res2); - if (fres) - cu = fres.cu1; - } - if (br instanceof exports.ExtrudeSolid) { - if (cu !== cuOld) - br.ContourCurve = cu; - } - else { - if (cu !== cuOld) - br.path = cu; - } - } - //#region -------------------------File------------------------- - //对象应该实现dataIn和DataOut的方法,为了对象的序列化和反序列化 - //对象从文件中读取数据,初始化自身 - ReadFile(file) { - let ver = file.Read(); - super.ReadFile(file); - this.FilletDatas.length = 0; - if (ver === 1) { - let id = file.ReadObjectId(); - let param1 = file.Read(); - let param2 = file.Read(); - let arcParam = param2 !== 0 ? param2 - 1 : param1 + 1; - this.FilletDatas.push({ Entity: id, ArcParams: [arcParam] }); - } - else { - let count = file.Read(); - for (let i = 0; i < count; i++) { - let id = file.ReadObjectId(); - let params = []; - let parCount = file.Read(); - for (let i = 0; i < parCount; i++) - params.push(file.Read()); - const groove = []; - const path2d = []; - if (ver >= 3) { - const grooveCount = file.Read(); - for (let i = 0; i < grooveCount; i++) { - let data = { - Index: undefined, - ArcParams: [], - }; - data.Index = file.Read(); - let parCount = file.Read(); - for (let j = 0; j < parCount; j++) - data.ArcParams.push(file.Read()); - groove.push(data); - } - const path2DCount = file.Read(); - for (let i = 0; i < path2DCount; i++) { - let data = { - Index: undefined, - ArcParams: [], - }; - data.Index = file.Read(); - let parCount = file.Read(); - for (let j = 0; j < parCount; j++) - data.ArcParams.push(file.Read()); - path2d.push(data); - } - } - if (id) - this.FilletDatas.push({ Entity: id, ArcParams: params, Grooves: groove, Path2D: path2d }); - } - } - } - //对象将自身数据写入到文件. - WriteFile(file) { - file.Write(3); - super.WriteFile(file); - file.Write(this.FilletDatas.length); - for (let d of this.FilletDatas) { - file.WriteObjectId(d.Entity); - file.Write(d.ArcParams.length); - for (let param of d.ArcParams) - file.Write(param); - file.Write(d.Grooves ? d.Grooves.length : 0); - for (let data of (d.Grooves ?? [])) { - file.Write(data.Index); - file.Write(data.ArcParams.length); - for (let par of data.ArcParams) - file.Write(par); - } - file.Write(d.Path2D ? d.Path2D.length : 0); - for (let data of (d.Path2D ?? [])) { - file.Write(data.Index); - file.Write(data.ArcParams.length); - for (let par of data.ArcParams) - file.Write(par); - } - } - } -}; -exports.TemplateFilletAction = __decorate([ - Factory -], exports.TemplateFilletAction); - -function ApplyGoodInfo(en, material) { - en.BoardProcessOption[EBoardKeyList.BrMat] = material.GoodsInfo.name; - en.BoardProcessOption[EBoardKeyList.Color] = material.GoodsInfo.color; - en.BoardProcessOption[EBoardKeyList.Mat] = material.GoodsInfo.material; -} - -exports.TemplateMaterialAction = class TemplateMaterialAction extends exports.TemplateAction { - constructor(Entitys = [], CompositeEntitys = [], ApplyGoodInfo = true) { - super(); - this.Entitys = Entitys; - this.CompositeEntitys = CompositeEntitys; - this.ApplyGoodInfo = ApplyGoodInfo; - } - _Update(paramDiff) { - if (!this.parent.MaterialValue) - return; - for (let id of this.Entitys) { - if (!(id?.Object) || id.IsErase) - continue; - let en = id.Object; - if (this.ApplyGoodInfo && en instanceof exports.Board) - ApplyGoodInfo(en, this.parent.MaterialValue); - en.Material = this.parent.MaterialValue.Id; - } - for (let [id, indexs] of this.CompositeEntitys) { - if (!(id?.Object) || id.IsErase) - continue; - let en = id.Object; - let allEntitys = []; - const GetAllEntitys = (hard) => { - for (let e of hard.Entitys) { - if (e instanceof exports.HardwareCompositeEntity) - GetAllEntitys(e); - else - allEntitys.push(e); - } - }; - GetAllEntitys(en); - for (let index of indexs) { - let subE = allEntitys[index]; - if (!subE) - continue; - if (this.ApplyGoodInfo && subE instanceof exports.Board) - ApplyGoodInfo(subE, this.parent.MaterialValue); - subE.Material = this.parent.MaterialValue.Id; - } - } - } - //#region -------------------------File------------------------- - //对象应该实现dataIn和DataOut的方法,为了对象的序列化和反序列化 - //对象从文件中读取数据,初始化自身 - ReadFile(file) { - let ver = file.Read(); - super.ReadFile(file); - this.ApplyGoodInfo = file.Read() === 1; - this.Entitys.length = 0; - let count = file.Read(); - for (let i = 0; i < count; i++) { - let id = file.ReadObjectId(); - if (id) - this.Entitys.push(id); - } - if (ver > 1) { - count = file.Read(); - this.CompositeEntitys.length = 0; - for (let i = 0; i < count; i++) { - let id = file.ReadObjectId(); - let indexs = file.Read(); - this.CompositeEntitys.push([id, indexs]); - } - } - } - //对象将自身数据写入到文件. - WriteFile(file) { - file.Write(2); - super.WriteFile(file); - file.Write(this.ApplyGoodInfo ? 1 : 0); - file.Write(this.Entitys.length); - for (let ent of this.Entitys) - file.WriteObjectId(ent); - file.Write(this.CompositeEntitys.length); - for (let [id, indexs] of this.CompositeEntitys) { - file.WriteObjectId(id); - file.Write(indexs.concat()); - } - } -}; -exports.TemplateMaterialAction = __decorate([ - Factory -], exports.TemplateMaterialAction); - -/** - * 模版参数类型 - */ -var TemplateParamType; -(function (TemplateParamType) { - TemplateParamType[TemplateParamType["String"] = 0] = "String"; - TemplateParamType[TemplateParamType["Float"] = 1] = "Float"; - TemplateParamType[TemplateParamType["Int"] = 2] = "Int"; - TemplateParamType[TemplateParamType["Enum"] = 3] = "Enum"; - TemplateParamType[TemplateParamType["Material"] = 4] = "Material"; -})(TemplateParamType || (TemplateParamType = {})); - -/** - * 模版参数 - */ -exports.TemplateParam = class TemplateParam { - constructor() { - /** 表达式 使用js引起求值(暂时) */ - this.expr = ""; - this.type = TemplateParamType.Float; - this.isLock = false; - //监听 - this.actions = new Proxy([], { - set: (target, key, value, receiver) => { - if (Reflect.get(target, key, receiver) !== value) { - this.WriteAllObjectRecord(); - if (value instanceof exports.TemplateAction) - value.parent = this; - } - return Reflect.set(target, key, value, receiver); - }, - get: (target, key, receiver) => { - if (key === ISPROXYKEY) - return true; - else - return Reflect.get(target, key, receiver); - } - }); - } - WriteAllObjectRecord() { - if (this.parent) - this.parent.WriteAllObjectRecord(); - } - /** - * private:仅供内部调用. - * 更新参数值,并且触发动作. - */ - UpdateParam(value) { - switch (this.type) { - case TemplateParamType.String: - break; - case TemplateParamType.Float: - let oldV = this.value; - let newV = value; - if (!equaln$1(oldV, newV)) { - this.WriteAllObjectRecord(); - this.value = newV; - let diff = newV - oldV; - for (let a of this.actions) - a.Update(diff, newV); - } - else { - for (let a of this.actions) { - if (a instanceof exports.TemplateFilletAction) - a.Update(0, newV); - } - } - break; - case TemplateParamType.Int: - break; - case TemplateParamType.Enum: - break; - case TemplateParamType.Material: - { - if (this.MaterialValue) { - for (let a of this.actions) - a.Update(0, 0); - } - this.MaterialValue = undefined; - break; - } - } - } - /** - * 计算表达式的值并更新 - * @param vardefines 变量定义列表 - * @param paramMap 所有的参数列表.(可能我们需要依赖更新它) - */ - EvalUpdate(vardefines, paramMap, evaled, update = true) { - if (this.type === TemplateParamType.Material) { - if (update && this.MaterialValue) { - for (let a of this.actions) { - if (a instanceof exports.TemplateMaterialAction) - a.Update(0, this.value); - } - this.MaterialValue = undefined; - } - return 0; - } - if (this.expr === "") { - if (update) { - for (let a of this.actions) { - if (a instanceof exports.TemplateFilletAction) - a.Update(0, this.value); - } - } - return this.value; - } - if (evaled.has(this)) - return this.value; - if (update) - evaled.add(this); - let value = parseFloat(this.expr); - if (isNaN(this.expr)) { - //依赖收集 提前更新 - let keywords = this.expr.split(/[\s(){}=+-/*/,%;]/).filter(s => s.length > 0); - for (let key of keywords) { - if (key !== this.name && paramMap.has(key)) - vardefines[key] = paramMap.get(key).EvalUpdate(vardefines, paramMap, evaled, update); - } - try { - value = eval2(this.expr, vardefines); - } - catch (error) { - console.log("更新失败:", error); - return this.value; - } - } - else if (update) - this.expr = ""; - vardefines[this.name] = value; - if (update) - this.UpdateParam(value); - return value; - } - //#region -------------------------File------------------------- - //对象应该实现dataIn和DataOut的方法,为了对象的序列化和反序列化 - //对象从文件中读取数据,初始化自身 - ReadFile(file) { - let ver = file.Read(); - this.name = file.Read(); - this.expr = file.Read(); - this.value = file.Read(); - this.default = file.Read(); - this.description = file.Read(); - this.type = file.Read(); - this.min = file.Read(); - this.max = file.Read(); - this.option = file.Read(); - let count = file.Read(); - this.actions.length = 0; - for (let i = 0; i < count; i++) - this.actions.push(file.ReadObject()); - if (ver > 1) - this.isLock = file.Read(); - } - //对象将自身数据写入到文件. - WriteFile(file) { - file.Write(2); - file.Write(this.name); - file.Write(this.expr); - file.Write(this.value); - file.Write(this.default); - file.Write(this.description); - file.Write(this.type); - file.Write(this.min); - file.Write(this.max); - file.Write(this.option); - file.Write(this.actions.length); - for (let action of this.actions) - file.WriteObject(action); - file.Write(this.isLock); - } -}; -__decorate([ - AutoRecord -], exports.TemplateParam.prototype, "name", void 0); -__decorate([ - AutoRecord -], exports.TemplateParam.prototype, "expr", void 0); -__decorate([ - AutoRecord -], exports.TemplateParam.prototype, "value", void 0); -__decorate([ - AutoRecord -], exports.TemplateParam.prototype, "default", void 0); -__decorate([ - AutoRecord -], exports.TemplateParam.prototype, "description", void 0); -__decorate([ - AutoRecord -], exports.TemplateParam.prototype, "type", void 0); -__decorate([ - AutoRecord -], exports.TemplateParam.prototype, "min", void 0); -__decorate([ - AutoRecord -], exports.TemplateParam.prototype, "max", void 0); -__decorate([ - AutoRecord -], exports.TemplateParam.prototype, "option", void 0); -__decorate([ - AutoRecord -], exports.TemplateParam.prototype, "actions", void 0); -__decorate([ - AutoRecord -], exports.TemplateParam.prototype, "parent", void 0); -__decorate([ - AutoRecord -], exports.TemplateParam.prototype, "isLock", void 0); -exports.TemplateParam = __decorate([ - Factory -], exports.TemplateParam); - -/** - * 夹层空间分析 - */ -class ClampSpaceParse extends ISpaceParse { - constructor() { - super(...arguments); - this.SelectBoxRecord = new Map(); - } - async Parse() { - if (this.Boards.length === 1) { - await this.ParseSignalBoard(); - return; - } - //夹层空间 - let clampBoxs = []; - //单层空间(用于切割) - let spliteBoxs = new Map(); - for (let [boardType, boards] of this.BoardMap) { - let splitType = ConverBoardTypeToSpaceType(boardType); - let boardBoxCol = this.ParseBoardBox(boards, splitType); - //#IWFYY - if (boardType === BoardType.Behind && this.BoardMap.size > 1 && boardBoxCol.length > 1) { - let clampBox = boardBoxCol[0].clampSpace(boardBoxCol[1], splitType); - let size = clampBox.getSize(new three.Vector3()); - if (size.y > 2440) - boardBoxCol = [arrayLast(boardBoxCol)]; - } - if (boardBoxCol.length > 1) { - let clampBox = boardBoxCol[0].clampSpace(arrayLast(boardBoxCol), splitType); - if (clampBox.isSolid()) - clampBoxs.push(clampBox); - } - else if (boardBoxCol.length === 1) { - spliteBoxs.set(splitType, boardBoxCol[0]); - } - } - //归并盒子 - let allSpaceBox; - if (clampBoxs.length === 0) //如果不存在盒子,拿所有的盒子当空间 - { - allSpaceBox = new Box3Ext(); - spliteBoxs.forEach((box) => { allSpaceBox.union(box); }); - } - else //夹层空间合并 - { - allSpaceBox = clampBoxs[0]; - for (let i = 1, len = clampBoxs.length; i < len; i++) - allSpaceBox.intersect(clampBoxs[i]); - } - //切割并选择合适的空间 - await this.SpliteBoxsAndSelect(allSpaceBox, spliteBoxs); - if (this.SpaceBox && this.SpaceBox.isSolid()) { - //空间延伸到背板 - let behindBox = spliteBoxs.get(SplitType.Y); - if (behindBox && behindBox.min.y > this.SpaceBox.min.y) - this.SpaceBox.max.setY(behindBox.min.y); - this.ParseOK = true; - } - } - /** - * 单板延伸空间的时候的延伸距离 - */ - get SignalDist() { - return this._signalDist; - } - async ParseSignalBoard() { - let res = await this.GetSignalDist(); - if (res.Status === PromptStatus.OK && res.Distance > 0) { - let dist = res.Distance; - this._signalDist = dist; - let br = this.Boards[0]; - let box = br.GetBoundingBoxInMtx(this.SpaceOCSInv); - let type = this.GetBoardInSpaceType(br); - if (type === undefined) //暂时不支持斜空间 - { - //暂时不支持 - this.ParseOK = false; - return; - } - let splitType = ConverBoardTypeToSpaceType(type); - let p1 = box.min.clone().setComponent(splitType, box.min.getComponent(splitType) - dist); - let p2 = box.max.clone().setComponent(splitType, box.min.getComponent(splitType)); - let p3 = box.min.clone().setComponent(splitType, box.max.getComponent(splitType)); - let p4 = box.max.clone().setComponent(splitType, box.max.getComponent(splitType) + dist); - let boxs = [new Box3Ext().setFromPoints([p1, p2]), new Box3Ext().setFromPoints([p3, p4])]; - this.SpaceBox = await this.WrapSelectBox(boxs, ConverBoardTypeToSpaceType(br.BoardType)); - if (this.SpaceBox) - this.ParseOK = true; - } - else - this.ParseOK = false; - } - //virtual (请重载) 指定用户选择单块板的延伸空间 - async GetSignalDist() { - let res = new PromptDistendResult(); - res.Distance = 300; - res.Status = PromptStatus.OK; - return res; - } - SetRay(ray) { - } - async WrapSelectBox(splitBoxs, splitType) { - let box = await this.SelectBox(splitBoxs, splitType); - this.SelectBoxRecord.set(splitType, splitBoxs.indexOf(box)); - return box; - } - /** - * virtual (请重载) 当盒子空间被切割时,选择合适的空间 - * @param splitBoxs 切割后的盒子(2个) - * @param splitType 切割类型 - * @returns box 盒子 - */ - async SelectBox(splitBoxs, splitType) { - return splitBoxs[0]; - } - /** - *用单块板包围盒切割空间 - */ - async SpliteBoxsAndSelect(orgBox, spliteBoxes) { - this.SpaceBox = undefined; - if (spliteBoxes.size === 0) { - this.SpaceBox = orgBox; - return; - } - for (let [splitType, spBox] of spliteBoxes) { - let remBoxs = orgBox.substract(spBox, splitType); - if (remBoxs.length === 0) - return undefined; - else if (remBoxs.length === 1) { - //#IZE2N - if (splitType === SplitType.Y && remBoxs[0].min.y === orgBox.min.y) - continue; - orgBox = remBoxs[0]; - } - else - orgBox = await this.WrapSelectBox(remBoxs, splitType); - if (!orgBox) - return; - //Left Or Right Board - if (splitType === SplitType.X) { - if (spBox.min.x < orgBox.min.x) - this.LeftBoard = this.BoardMap.get(BoardType.Vertical)[0]; - else - this.RightBoard = this.BoardMap.get(BoardType.Vertical)[0]; - } - } - this.SpaceBox = orgBox; - } -} - -class ClampSpaceParseFix extends ClampSpaceParse { - set SignalDist(v) { - this._signalDist = v; - } - get SignalDist() { - return this._signalDist; - } - //virtual (请重载) 指定用户选择单块板的延伸空间 - async GetSignalDist() { - let res = new PromptDistendResult(); - res.Distance = this._signalDist; - res.Status = PromptStatus.OK; - return res; - } - async SelectBox(splitBoxs, splitType) { - let index = this.SelectBoxRecord.get(splitType); - return splitBoxs[index]; - } -} - -/** - * 模版定位信息(基类) - */ -exports.Positioning = class Positioning { - /** - * 定位 (更新 SpaceCS SpaceBox SpaceSize) - */ - async Positioning(param) { - } - WriteAllObjectRecord() { - if (this.parent) - this.parent.WriteAllObjectRecord(); - } - ReadFile(file) { - } - WriteFile(file) { - } -}; -exports.Positioning = __decorate([ - Factory -], exports.Positioning); - -exports.PositioningClampSpace = class PositioningClampSpace extends exports.Positioning { - constructor() { - super(...arguments); - this.Objects = []; - //按照 SplitType进行排序 0X 1Y 2Z - this.SelectBoxIndex = [0, 0, 0]; //左右下 - this.SignalDist = 100; //默认为100 防止空 - //#endregion - } - FromSpaceParse(parse) { - this.SignalDist = parse.SignalDist || 100; - this.Objects = parse.Boards.map(br => br.Id); - for (let [splitType, index] of parse.SelectBoxRecord) - this.SelectBoxIndex[splitType] = index; - } - /** - * 定位 - */ - async Positioning(param) { - let brs = this.Objects.filter(id => !id.IsErase).map(id => id.Object); - this._SpaceParse = new ClampSpaceParseFix(brs); - for (let i = 0; i < 3; i++) - this._SpaceParse.SelectBoxRecord.set(i, this.SelectBoxIndex[i]); - this._SpaceParse.SignalDist = this.SignalDist; - await this._SpaceParse.Parse(); - if (this._SpaceParse.ParseOK) { - this.SpaceCS = this._SpaceParse.DrawCS; - this.SpaceSize = this._SpaceParse.Size; - } - else { - this.SpaceCS = undefined; - this.SpaceSize = undefined; - Log("模块定位错误!"); - } - } - //#region File - ReadFile(file) { - file.Read(); - let count = file.Read(); - this.Objects.length = 0; - for (let i = 0; i < count; i++) { - let id = file.ReadObjectId(); - if (id) - this.Objects.push(id); - } - this.SelectBoxIndex = file.Read(); - this.SignalDist = file.Read(); - } - WriteFile(file) { - file.Write(1); - file.Write(this.Objects.length); - for (let id of this.Objects) - file.WriteObjectId(id); - file.Write(arrayClone(this.SelectBoxIndex)); - file.Write(this.SignalDist); - } -}; -__decorate([ - AutoRecord -], exports.PositioningClampSpace.prototype, "Objects", void 0); -__decorate([ - AutoRecord -], exports.PositioningClampSpace.prototype, "SelectBoxIndex", void 0); -__decorate([ - AutoRecord -], exports.PositioningClampSpace.prototype, "SignalDist", void 0); -exports.PositioningClampSpace = __decorate([ - Factory -], exports.PositioningClampSpace); - -/** - * 临时定位 - * 在首次绘制时使用2点3点空间时通常不能使用定位,使用临时定位设置给模块后,模块在第一次使用后清空定位. - */ -exports.PositioningTemporary = class PositioningTemporary extends exports.Positioning { -}; -exports.PositioningTemporary = __decorate([ - Factory -], exports.PositioningTemporary); - -/** - * 模版类型 - */ -var TemplateType; -(function (TemplateType) { - //普通模板 - TemplateType[TemplateType["Usual"] = 0] = "Usual"; - //酒格 使用程序 - TemplateType[TemplateType["Grid"] = 1] = "Grid"; - //阵列模版 - TemplateType[TemplateType["Array"] = 2] = "Array"; - //没有实体的 - TemplateType[TemplateType["Clear"] = 4] = "Clear"; - //展开的 - TemplateType[TemplateType["Expanded"] = 8] = "Expanded"; - //隐藏的 - TemplateType[TemplateType["Hidden"] = 16] = "Hidden"; - TemplateType[TemplateType["HiddenChildren"] = 32] = "HiddenChildren"; - //标记 - TemplateType[TemplateType["Sign"] = 64] = "Sign"; -})(TemplateType || (TemplateType = {})); -var TemplateSplitType; -(function (TemplateSplitType) { - TemplateSplitType[TemplateSplitType["None"] = -1] = "None"; - TemplateSplitType[TemplateSplitType["X"] = 0] = "X"; - TemplateSplitType[TemplateSplitType["Y"] = 1] = "Y"; - TemplateSplitType[TemplateSplitType["Z"] = 2] = "Z"; -})(TemplateSplitType || (TemplateSplitType = {})); - -var TemplateRecord_1; -const TemplateDefaultParams = ["L", "W", "H", "PX", "PY", "PZ", "RX", "RY", "RZ", "BH"]; -const TempateDefaultParamCount = TemplateDefaultParams.length; -/** - * ### 模板记录 - * 模版与实体总是互相关联的,所以添加实体进入模版的时候,应该保证这个记录已经加入到数据库 - * - * 保留参数名称列表: L W H RX RY RZ X Y Z - * 保留参数前缀: _ $ - * - * #### 批量修改参数值. - * 程序应该只传入expr的值,(禁止直接编辑value).传入后,交由模版进行计算更新. - * 模版内部消化,决定是否保留expr.(当纯数字将被直接计算成value而不保存expr). - * - * 由于`DIV`变量的计算机制,`LWH`变量将不能依赖同层变量,(这可能会导致一些错误) - * - * 当模块节点处于切割空间内时,如果想重新绑定空间,那么空间树的位置将发生变更(实际上不管是不是在切割空间内,空间位置都可能发生变更) - * - */ -exports.TemplateRecord = TemplateRecord_1 = class TemplateRecord extends SymbolTableRecord { - constructor() { - super(); - this.Type = TemplateType.Usual; - this.SplitType = TemplateSplitType.None; - //展开的 这是UI数据我们暂时不序列化它(默认不展开有比较好的显示效果) - this.isExpanded = false; - //监听 - this.Params = this.CreateProxyArray(value => { - if (value instanceof exports.TemplateParam) - value.parent = this; - }); - this.Objects = this.CreateProxyArray(value => { - if (value instanceof ObjectId && value.Object instanceof exports.Entity) { - if (!this.Id) - console.warn("请先将模版添加到Database后在进行操作!"); - value.Object.Template = this.Id; - } - }); - this.Children = this.CreateProxyArray(value => { - if (value instanceof ObjectId && value.Object instanceof TemplateRecord_1) { - if (!this.Id) - console.warn("请先将模版添加到Database后在进行操作!"); - value.Object.Parent = this.Id; - } - }); - } - get Name() { - return this.name; - } - set Name(name) { - if (name !== this.name) { - this.WriteAllObjectRecord(); - this.name = name; - } - } - get Parent() { - return this._Parent; - } - set Parent(id) { - if (id !== this._Parent) { - this.WriteAllObjectRecord(); - if (this?._Parent?.Object) - arrayRemoveOnce((this.Parent.Object).Children, this.Id); - this._Parent = id; - } - } - get Root() { - return this.Parent?.Object?.Root ?? this; - } - get IsRoot() { - return this._Parent === undefined; - } - get Entitys() { - return this.Objects.map(o => o.Object); - } - get AllEntitys() { - let entitys = []; - this.Traverse((t) => { - for (let o of t.Objects) { - if (!o.IsErase) - entitys.push(o.Object); - } - }); - return entitys; - } - GetProperty(p) { return (this.Type & p) !== 0; } - SetProperty(p, v) { - if (this.GetProperty(p) === v) - return; - if (v) - this.Type |= p; - else - this.Type &= ~p; - } - get IsClear() { return this.GetProperty(TemplateType.Clear); } - set IsClear(isClear) { this.SetProperty(TemplateType.Clear, isClear); } - get IsSign() { return this.GetProperty(TemplateType.Sign); } - set IsSign(isSign) { this.SetProperty(TemplateType.Sign, isSign); } - get IsHidden() { return this.GetProperty(TemplateType.Hidden); } - set IsHidden(isHidden) { this.SetProperty(TemplateType.Hidden, isHidden); } - get IsHiddenChildren() { return this.GetProperty(TemplateType.HiddenChildren); } - set IsHiddenChildren(isHidden) { this.SetProperty(TemplateType.HiddenChildren, isHidden); } - Purge() { - this.Children = this.Children.filter(rc => rc && !rc.IsErase && rc.Object instanceof TemplateRecord_1); - this.Objects = this.Objects.filter(id => id?.IsErase === false); - } - Traverse(callback) { - callback(this); - for (let c of this.Children) { - if (c && c.Object) { - if (c.Object instanceof TemplateRecord_1) { - let template = c.Object; - template.Traverse(callback); - } - else { - Toaster({ - message: "模块子实体有个错误,程序已经暂时先忽略了这个错误!", - timeout: 8000, - intent: Intent.DANGER, - }); - } - } - } - } - async TraverseAsync(callback) { - await callback(this); - for (let c of this.Children) { - if (c && c.Object) { - let template = c.Object; - await template.TraverseAsync(callback); - } - } - } - /** 节点深度,根节点=0 */ - get NodeDepth() { - if (this._NodeDepthCache !== undefined) - return this._NodeDepthCache; - if (!this.Parent?.Object) - return 0; - let parentTemplate = this.Parent.Object; - this._NodeDepthCache = parentTemplate.NodeDepth + 1; - return this._NodeDepthCache; - } - /** 模版定位 */ - get Positioning() { - if (this._Positioning) - return this._Positioning; - let spaceCS = this.GetTemplateRealitySpaceCS(); - let positioning = new exports.PositioningTemporary(); - positioning.SpaceCS = spaceCS; - positioning.SpaceSize = new three.Vector3(this.LParam.value, this.WParam.value, this.HParam.value); - return positioning; - } - /** - * 当存在夹层空间定位时,辅助定位表达式将使用夹层空间作为相对空间. - */ - set Positioning(p) { - this.WriteAllObjectRecord(); - if (p) - p.parent = this; - this._Positioning = p; - } - //#region param - /** 初始化基础参数 */ - InitBaseParams() { - for (let paramName of TemplateDefaultParams) { - let value = 0; - let param = new exports.TemplateParam(); - param.name = paramName; - param.type = TemplateParamType.Float; - param.value = value; - this.Params.push(param); - } - this.LParam.description = "宽"; - this.WParam.description = "深"; - this.HParam.description = "高"; - this.Params[9].description = "板厚"; - this.Params[9].value = 18; - return this; - } - get LParam() { return this.Params[0]; } - get WParam() { return this.Params[1]; } - get HParam() { return this.Params[2]; } - get PXParam() { return this.Params[3]; } - get PYParam() { return this.Params[4]; } - get PZParam() { return this.Params[5]; } - get RXParam() { return this.Params[6]; } - get RYParam() { return this.Params[7]; } - get RZParam() { return this.Params[8]; } - GetParam(paramName) { - return this.Params.find(param => param.name === paramName); - } - SetParamExpr(paramName, expr) { - let param = this.GetParam(paramName); - if (param) - param.expr = expr; - } - DeleteParam(paramName) { - let index = this.Params.findIndex(p => p.name === paramName); - if (index !== -1 && index >= TempateDefaultParamCount) //LWH P R 禁止删除 - this.Params.splice(index, 1); - return this; - } - //#endregion param - /** - * 通常UI操作的时候,都需要更新整个树,所以隐藏这个API. - * see `UpdateTemplateTree` - * - * 更新当前节点 - * - * ### 定位 (大小,方位) - * - * - (放弃)如果当前节点是更新树的最高层(但当前节点不是根节点) - * 那么当存在夹层空间定位的时候,可以不重复进行夹层空间定位,因为此时该空间不会发生变化. - * 补充:如果夹层空间的板件都在上层,那么可以做这个优化,如果定位的板件没在模块中,那么不能进行这个优化. - * - * - [更新优先]在没有实现变量依赖收集(类似mobx)时,我们认为`positioning`的优先级最高. - * 所以`positioning`会被优先更新. `LWH`,`XYZ`. - * - * - 在使用变量定位时,需要传入上层的坐标系,以便进行相对定位. - * 使用空间分析时,已经不需要上层坐标系. - * - * - 辅助定位:帮助空间坐标系进行旋转 - * 辅助定位的参数变量将暴露出来.{RX RY RZ} - * 辅助定位作为参数变量时,用户使用值时很难正确的计算值,应~加入交互选择.(辅助计算) - * - * ### 变量表达式计算 - * - * - `LWH`将被`positioning`替代,但变量定义仍然正常存在. - * - * - 变量大部分时候都是被批量更新,(同时传入许多参数). - * - */ - async Update() { - this._CacheParamVars = this.GetParameterDefinition(false); - let ens = this.Objects.filter(id => !id.IsErase).map(id => id.Object); - let evaled = new Set(); - this._CacheSpaceCS = this.GetTemplateSpaceCS(false); - let paramMap = new Map(); - for (let param of this.Params) - paramMap.set(param.name, param); - if (this._Positioning) { - await this._Positioning.Positioning(); - if (!this._Positioning.SpaceCS) { - //退化成个体坐标系 - if (ens.length) { - this._Positioning.SpaceCS = ens[0].SpaceOCS; - this._Positioning.SpaceSize = new three.Vector3(this.LParam.value, this.WParam.value, this.HParam.value); - } - else { - Log("模块定位错误!"); - return; //出事故 - } - } - } - for (let en of ens) { - en.ApplyMatrix(en.SpaceOCSInv); - if (en instanceof exports.Board) - en.IsLazyGrooveCheck = true; - } - //#region 1.定位(坐标系和大小) - /** - * LWH在存在定位空间和继承空间时的表达式行为不一致. - * - 在存在定位空间的时候,LWH是修改定位空间旋转后的值. - * - 不存在定位空间的时候,修改的是空间旋转前的值,因为此时已经没有空间尺寸可供旋转了, - * 只能先提供空间尺寸,然后才进行旋转. - */ - if (this._Positioning) { - this._CacheSpaceCS = this._Positioning.SpaceCS; - this._CacheSpaceSize = this._Positioning.SpaceSize; - this.RotateSpaceCS(paramMap, evaled); - if (this.LParam.expr) - this._CacheSpaceSize.x = this.LParam.EvalUpdate(this._CacheParamVars, paramMap, evaled, false); - if (this.WParam.expr) - this._CacheSpaceSize.y = this.WParam.EvalUpdate(this._CacheParamVars, paramMap, evaled, false); - if (this.HParam.expr) - this._CacheSpaceSize.z = this.HParam.EvalUpdate(this._CacheParamVars, paramMap, evaled, false); - if (this._Positioning instanceof exports.PositioningTemporary) - this._Positioning = undefined; - } - else { - let l = this.LParam.EvalUpdate(this._CacheParamVars, paramMap, evaled, false); - let w = this.WParam.EvalUpdate(this._CacheParamVars, paramMap, evaled, false); - let h = this.HParam.EvalUpdate(this._CacheParamVars, paramMap, evaled, false); - this._CacheSpaceSize = new three.Vector3(l, w, h); - this.RotateSpaceCS(paramMap, evaled); - if (!this.Parent) { - this.PXParam.value = 0; - this.PYParam.value = 0; - this.PZParam.value = 0; - this.PXParam.expr = ""; - this.PYParam.expr = ""; - this.PZParam.expr = ""; - this.RXParam.value = 0; - this.RYParam.value = 0; - this.RZParam.value = 0; - this.RXParam.expr = ""; - this.RYParam.expr = ""; - this.RZParam.expr = ""; - } - } - //相对定位. use PX PY PZ - this.UpdatePosition(paramMap, evaled); - //更新LWH(通过定位空间) - this.LParam.UpdateParam(this._CacheSpaceSize.x); - this.WParam.UpdateParam(this._CacheSpaceSize.y); - this.HParam.UpdateParam(this._CacheSpaceSize.z); - evaled.add(this.LParam); - evaled.add(this.WParam); - evaled.add(this.HParam); - //#endregion - //更新其他参数变量 Eval local params - for (const param of this.Params) { - param.EvalUpdate(this._CacheParamVars, paramMap, evaled); - } - //删除材质变量(材质变量仅在KJL导入中使用,重新出现在右侧列表中是不明智的?) (但是用户可能编辑更新了它?) - // arrayRemoveIf(this.Params, p => p.type === TemplateParamType.Material); - //变换到新的模版空间 - for (let en of ens) { - en.ApplyMatrix(this._CacheSpaceCS); - if (en instanceof exports.Board) - en.LazyGrooveCheckAll(); - } - //更新顶层变量值 - if (!this.Parent) { - for (const param of this.Params) - this._CacheParamVars[`$${param.name}`] = param.value; - } - else { - for (let param of this._CatchRootParam) - this._CacheParamVars[`$${param.name}`] = param.value; - } - //保持SpaceCS - for (let ent of ens) { - ent.SpaceOCS = this._CacheSpaceCS; - } - } - /** - * 使用PXPYPZ更新空间位置 - */ - UpdatePosition(paramMap, evaled) { - let x = this.PXParam.EvalUpdate(this._CacheParamVars, paramMap, evaled, false); - let y = this.PYParam.EvalUpdate(this._CacheParamVars, paramMap, evaled, false); - let z = this.PZParam.EvalUpdate(this._CacheParamVars, paramMap, evaled, false); - if (x !== 0 || y !== 0 || z !== 0) { - this.PXParam.value = x; - this.PYParam.value = y; - this.PZParam.value = z; - let baseP = new three.Vector3(x, y, z); - baseP.applyMatrix4(this._CacheSpaceCS); - this._CacheSpaceCS.setPosition(baseP); - } - } - /** - * 旋转空间定位,如果旋转成功,那么SpaceSize和SpaceCS都可能被更新 - */ - RotateSpaceCS(paramMap, evaled) { - this.RXParam.EvalUpdate(this._CacheParamVars, paramMap, evaled); - this.RYParam.EvalUpdate(this._CacheParamVars, paramMap, evaled); - this.RZParam.EvalUpdate(this._CacheParamVars, paramMap, evaled); - //use RX RY RZ - let rx = three.MathUtils.degToRad(this.RXParam.value); - let ry = three.MathUtils.degToRad(this.RYParam.value); - let rz = three.MathUtils.degToRad(this.RZParam.value); - if (rx !== 0 || ry !== 0 || rz !== 0) { - let mrx = new three.Matrix4().makeRotationX(rx); - let mry = new three.Matrix4().makeRotationY(ry); - let mrz = new three.Matrix4().makeRotationZ(rz); - let mro = mrz.multiply(mry.multiply(mrx)); - let roSpace = mro.multiplyMatrices(this._CacheSpaceCS, mro); - let roSpaceInv = mrx.getInverse(roSpace); //变量复用 - let transfromToRoSpace = roSpaceInv.multiply(this._CacheSpaceCS); - let box = new three.Box3(new three.Vector3(), this._CacheSpaceSize.clone()); - box.applyMatrix4(transfromToRoSpace); - box.getSize(this._CacheSpaceSize); - let baseP = box.min.clone().applyMatrix4(roSpace); - roSpace.setPosition(baseP); - //更新LWH(通过定位空间) - this.LParam.UpdateParam(this._CacheSpaceSize.x); - this.WParam.UpdateParam(this._CacheSpaceSize.y); - this.HParam.UpdateParam(this._CacheSpaceSize.z); - this._CacheSpaceCS = roSpace; - } - this._CacheParamVars["L"] = this._CacheSpaceSize.x; - this._CacheParamVars["W"] = this._CacheSpaceSize.y; - this._CacheParamVars["H"] = this._CacheSpaceSize.z; - } - /** 以广度搜索优先更新节点树 */ - async UpdateTemplateTree() { - if (this.Parent && !this.Parent.IsErase) { - let parent = this.Parent.Object; - if (parent.SplitType !== TemplateSplitType.None || this.NeedUpdateParent) - return await parent.UpdateTemplateTree(); - } - let stack = [this]; - await this.Update(); - while (stack.length > 0) { - let template = stack.shift(); - //清理历史记录时,子对象会被清理,为了防止被清理掉,清除不需要的id - template.Children = template.Children.filter(id => id && !id.IsErase); - //计算DIV(给子空间使用) - if (template.Children.length > 0 && template.SplitType !== TemplateSplitType.None) { - let vardefines = template.Children[0].Object.GetParameterDefinition(false); - vardefines._DIV = 0; - let sum = 0; - for (let c of template.Children) { - let ctemplate = c.Object; - let param = ctemplate.Params[template.SplitType]; - sum += param.EvalUpdate(vardefines, new Map(), new Set(), false); - } - let sumDiv = 0; - vardefines._DIV = 1; - for (let c of template.Children) { - let ctemplate = c.Object; - let param = ctemplate.Params[template.SplitType]; - sumDiv += param.EvalUpdate(vardefines, new Map(), new Set(), false); - } - let divCount = sumDiv - sum; - if (divCount > 0) { - //div可用总空间 - let divSum = (template.Params[template.SplitType].value - sum); - if (divSum > 0) - template._CacheParamVars.DIV = divSum / divCount; - else - template._CacheParamVars.DIV = 0; - } - template._CacheParamVars.POS = 0; - } - for (let c of template.Children) { - let ctemplate = c.Object; - stack.push(ctemplate); - await ctemplate.Update(); - if (template._CacheParamVars.POS !== undefined) //更新POS - template._CacheParamVars.POS += ctemplate.Params[template.SplitType].value; - } - } - } - /** - * 本节点可用的所有变量定义.(包括变量继承) - * @param [useCache=true] 当更新当前节点的时候,我们不希望使用缓存,(因为父节点的参数可能已经被更新) - * @returns - */ - GetParameterDefinition(useCache = true) { - if (this._CacheParamVars && useCache) - return this._CacheParamVars; - let vars = this.GetParentParams(); - this._CatchRootParam = new Set(); - for (const param of this.Params) { - vars[param.name] = param.value; - let rootParamName = "$" + param.name; - if (!this.Parent) - vars[rootParamName] = param.value; //root - else if (!(rootParamName in vars)) { - this._CatchRootParam.add(param); - vars[rootParamName] = param.value; //顶层变量捕获 root - } - } - this._CacheParamVars = vars; - return vars; - } - /** - * 变量继承 - * - 每继承一层,前缀增加一个`_` - * - 顶层前缀`$` - * - * @returns 继承于父空间的变量定义列表 - */ - GetParentParams() { - if (!this.Parent?.Object) - return {}; - let parent = this.Parent.Object; - let params = parent.GetParameterDefinition(); - let newParams = {}; - for (let key in params) { - if (key[0] !== "$") - newParams["_" + key] = params[key]; - else - newParams[key] = params[key]; - } - if (newParams._DIV === undefined && parent.SplitType !== TemplateSplitType.None) - newParams._DIV = 1; - if (newParams._POS === undefined) - newParams._POS = 0; - return newParams; - } - get SpaceParse() { - let spaceParse; - if (this._Positioning && this._Positioning instanceof exports.PositioningClampSpace) - spaceParse = this._Positioning._SpaceParse; - else - spaceParse = new ISpaceParse(); - spaceParse.SpaceOCS = this._CacheSpaceCS; - spaceParse.ParseOK = true; - spaceParse.SpaceBox = new Box3Ext(new three.Vector3(), this._CacheSpaceSize); - return spaceParse; - } - /** - * 获得当前的模版空间的相对坐标系 - * - 存在父节点的时候使用父节点的模版空间坐标系 - * - 不存在父节点的时候使用自身的模版空间坐标系 - * - * - 空间坐标系将被定位更新 - * - * @param [useCache=true] 当更新当前节点的时候,我们不希望使用缓存,(因为父节点的参数可能已经被更新) - */ - GetTemplateSpaceCS(useCache = true) { - if (useCache && this._CacheSpaceCS) - return this._CacheSpaceCS.clone(); - if (this.Parent?.Object) { - let template = this.Parent.Object; - return template.GetTemplateSpaceCS(); - } - for (let brId of this.Objects) { - if (brId.Object && !brId.IsErase) { - let br = brId.Object; - return br.SpaceOCS; - } - } - return new three.Matrix4(); - } - /** - * 获得当前模块的实际位置坐标系. - * 使用 GetTemplateSpaceCS 可能会得到不准确的位置.(得到Parent或者已经缓存的位置) - */ - GetTemplateRealitySpaceCS() { - for (let brId of this.Objects) { - if (brId.Object && !brId.IsErase) { - let br = brId.Object; - return br.SpaceOCS; - } - } - return this.GetTemplateSpaceCS(true); //此时已经可能不准确 - } - get NeedUpdateParent() { - if (this._Positioning) - return false; //存在自我定位时,不需要更新父层 - if (this.Parent) { - let template = this.Parent.Object; - return template._CacheSpaceCS === undefined; //父层已更新时,不需要更新父层 - } - return false; //没有父层时,不需要更新父层 - } - get PositioningSupportBoards() { - let brs = []; - if (this._Positioning && this._Positioning instanceof exports.PositioningClampSpace) { - for (let id of this._Positioning.Objects) - if (!id.IsErase && id.Object instanceof exports.Board) - brs.push(id.Object); - } - if (brs.length === 0) - brs.push(new exports.Board()); - return brs; - } - //#region -------------------------File------------------------- - //对象应该实现dataIn和DataOut的方法,为了对象的序列化和反序列化 - //对象从文件中读取数据,初始化自身 - ReadFile(file) { - this._Version = file.Read(); - super.ReadFile(file); - this.Type = file.Read(); - this._Parent = file.ReadHardObjectId(); - let count = file.Read(); - this.Children.length = 0; - for (let i = 0; i < count; i++) { - let id = file.ReadHardObjectId(); - if (id) - this.Children.push(id); - } - count = file.Read(); - this.Params.length = 0; - for (let i = 0; i < count; i++) - this.Params.push(file.ReadObject()); - count = file.Read(); - this.Objects.length = 0; - for (let i = 0; i < count; i++) { - let id = file.ReadObjectId(); - if (id) - this.Objects.push(id); - } - this._Positioning = file.ReadObject(); - if (this._Version > 1) - this.SplitType = file.Read() ?? this.SplitType; - //清空缓存,因为我们回滚了模块(BUG:修改参数->撤销->替换模块(此时读取了缓存的数据) - this._CacheParamVars = undefined; - this._CacheSpaceCS = undefined; - this._CacheSpaceSize = undefined; - this._CatchRootParam = undefined; - this._NodeDepthCache = undefined; - } - //对象将自身数据写入到文件. - WriteFile(file) { - file.Write(3); - super.WriteFile(file); - let type = this.Type; - //我们在保存文件的时候,才会去序列化它,否则我们不会自动添加历史记录(被动式) - if (this.isExpanded) - type |= TemplateType.Expanded; - else - type &= ~TemplateType.Expanded; - file.Write(type); - file.WriteHardObjectId(this._Parent); - file.Write(this.Children.length); - for (let id of this.Children) - file.WriteHardObjectId(id); - file.Write(this.Params.length); - for (let param of this.Params) - file.WriteObject(param); - file.Write(this.Objects.length); - for (let id of this.Objects) - file.WriteHardObjectId(id); - file.WriteObject(this._Positioning); - file.Write(this.SplitType); - } -}; -__decorate([ - AutoRecord -], exports.TemplateRecord.prototype, "Type", void 0); -__decorate([ - AutoRecord -], exports.TemplateRecord.prototype, "SplitType", void 0); -__decorate([ - AutoRecord -], exports.TemplateRecord.prototype, "Children", void 0); -__decorate([ - AutoRecord -], exports.TemplateRecord.prototype, "Params", void 0); -__decorate([ - AutoRecord -], exports.TemplateRecord.prototype, "Objects", void 0); -exports.TemplateRecord = TemplateRecord_1 = __decorate([ - Factory -], exports.TemplateRecord); - exports.ThicknessDirection = void 0; (function (ThicknessDirection) { ThicknessDirection[ThicknessDirection["Center"] = 0] = "Center"; @@ -31808,188 +33842,6 @@ exports.PositioningBoardSpace = __decorate([ Factory ], exports.PositioningBoardSpace); -function BuildLayerBoards(opt, space, grooveOption) { - let spaceBox = space.SpaceBox; - let spaceOCS = space.SpaceOCS; - let size = spaceBox.getSize(new three.Vector3()); - const params = { L: size.x, W: size.y, H: size.z, BH: opt.thickness }; - let width; - if (opt.isTotalLength) - width = size.y; - else { - width = safeEval(opt.calcHeight, params); - } - let count = opt.count; - let type = opt.boardRelative; - let spaceSize = safeEval(opt.calcSpaceSize, params); - let frontShrink = safeEval(opt.calcFrontShrink, params); - width -= frontShrink; - if (width <= 0) { - Log("宽度无效,可能前缩过大,请修正"); - return []; - } - let leftShrink = safeEval(opt.calcLeftShrink, params); - let rightShrink = safeEval(opt.calcRightShrink, params); - let thickness = opt.thickness; - let len = size.x - leftShrink - rightShrink; - if (len <= 0) { - Log("长度无效,可能左缩右缩过大,请修正"); - return []; - } - let board = exports.Board.CreateBoard(len, width, thickness, BoardType.Layer); - if (grooveOption) { - board.KnifeRadius = safeEval(grooveOption.knifeRadius); - board.GroovesAddDepth = safeEval(grooveOption.grooveAddDepth); - board.GroovesAddWidth = safeEval(grooveOption.grooveAddWidth); - board.GroovesAddLength = safeEval(grooveOption.grooveAddLength); - } - opt.height = len; - opt.width = width; - //等分单层空间大小 - let singleSize = (size.z - (thickness * count)) / (count + 1); - let brs = []; - for (let i = 1; i <= count; i++) { - let b = board.Clone(); - b.Name = opt.name; - if (type === BrRelativePos.Top) - b.ApplyMatrix(MoveMatrix(spaceBox.min.clone().add(new three.Vector3(size.x - rightShrink, frontShrink, size.z - (spaceSize + thickness) * i)))); - else if (type === BrRelativePos.Bottom) - b.ApplyMatrix(MoveMatrix(spaceBox.min.clone().add(new three.Vector3(size.x - rightShrink, frontShrink, spaceSize * i + (i - 1) * thickness)))); - else { - b.ApplyMatrix(MoveMatrix(spaceBox.min.clone().add(new three.Vector3(size.x - rightShrink, frontShrink, singleSize * i + (i - 1) * thickness)))); - } - b.ApplyMatrix(spaceOCS); - brs.push(b); - } - return brs; -} -function BuildVerticalBoards(opt, space, grooveOption) { - const spaceBox = space.SpaceBox; - const spaceOCS = space.SpaceOCS; - let size = spaceBox.getSize(new three.Vector3()); - const params = { L: size.x, W: size.y, H: size.z, BH: opt.thickness }; - let frontShrink = safeEval(opt.calcFrontShrink, params); - let bottomShink = safeEval(opt.calcBottomShrink, params); - let width; - if (opt.isTotalWidth) - width = size.y - frontShrink; - else { - width = safeEval(opt.calcWidth, params); - } - if (width <= 0) { - Log("宽度无效,可能前缩过大,请修正"); - return []; - } - let length; - if (opt.isTotalLength) - length = size.z - bottomShink; - else { - length = safeEval(opt.calcHeight, params); - } - let count = opt.count; - let type = opt.boardRelative; - let spaceSize = safeEval(opt.calcSpaceSize, params); - let thickness = opt.thickness; - let board = exports.Board.CreateBoard(length, width, thickness, BoardType.Vertical); - if (grooveOption) { - board.KnifeRadius = safeEval(grooveOption.knifeRadius); - board.GroovesAddDepth = safeEval(grooveOption.grooveAddDepth); - board.GroovesAddWidth = safeEval(grooveOption.grooveAddWidth); - board.GroovesAddLength = safeEval(grooveOption.grooveAddLength); - } - opt.height = length; - opt.width = width; - //等分单层空间大小 - let singleSize = (size.x - (thickness * count)) / (count + 1); - let brs = []; - for (let i = 1; i <= count; i++) { - let b = board.Clone(); - b.Name = opt.name; - if (type === BrRelativePos.Left) - b.ApplyMatrix(MoveMatrix(spaceBox.min.clone().add(new three.Vector3(spaceSize * i + (i - 1) * thickness, frontShrink, bottomShink)))); - else if (type === BrRelativePos.Right) - b.ApplyMatrix(MoveMatrix(spaceBox.min.clone().add(new three.Vector3(size.x - (spaceSize + thickness) * i, frontShrink, bottomShink)))); - else - b.ApplyMatrix(MoveMatrix(spaceBox.min.clone().add(new three.Vector3(singleSize * i + (i - 1) * thickness, frontShrink, bottomShink)))); - b.ApplyMatrix(spaceOCS); - brs.push(b); - } - return brs; -} -function BuildBehindBoards(opt, space, grooveOption) { - let newBox = space.SpaceBox.clone(); - let spaceOcs = space.SpaceOCS; - //判断延伸 - let leftExt = opt.leftExt; - let rightExt = opt.rightExt; - let topExt = opt.topExt; - let bottomExt = opt.bottomExt; - newBox.max.add(new three.Vector3(leftExt + rightExt, 0, topExt + bottomExt)); - newBox.translate(new three.Vector3(-leftExt, 0, -bottomExt)); - //获取背板高度 - let size = newBox.getSize(new three.Vector3()); - const params = { L: size.x, W: size.y, H: size.z, BH: opt.thickness }; - let height; - if (opt.boardPosition === BehindHeightPositon.AllHeight) - height = size.z; - else - height = safeEval(opt.calcHeight, params); - let moveDist = safeEval(opt.calcMoveDist, params); - //判断背板位置,更新背板高度 - switch (opt.boardPosition) { - case BehindHeightPositon.ForTop: - newBox.min.add(new three.Vector3(0, 0, size.z - height)); - newBox.translate(new three.Vector3(0, 0, moveDist)); - break; - case BehindHeightPositon.ForBottom: - newBox.max.add(new three.Vector3(0, 0, height)); - newBox.translate(new three.Vector3(0, 0, -moveDist)); - break; - } - let count = opt.count; - //相对位置 - let relPos = opt.boardRelative; - //单层空间宽度 - let spaceSize = safeEval(opt.calcSpaceSize, params); - let thickness = opt.thickness; - let board = exports.Board.CreateBoard(height, size.x, thickness, BoardType.Behind); - if (grooveOption) { - board.KnifeRadius = safeEval(grooveOption.knifeRadius); - board.GroovesAddDepth = safeEval(grooveOption.grooveAddDepth); - board.GroovesAddWidth = safeEval(grooveOption.grooveAddWidth); - board.GroovesAddLength = safeEval(grooveOption.grooveAddLength); - } - opt.height = height; - opt.width = size.x; - //等分单层空间大小 - let singleSize = (size.y - (thickness * count)) / (count + 1); - let brs = []; - //构建板件 - for (let i = 1; i <= count; i++) { - let b = board.Clone(); - b.Name = opt.name; - if (relPos === BrRelativePos.Front) - b.ApplyMatrix(MoveMatrix(newBox.min.clone().add(new three.Vector3(0, spaceSize * i + thickness * i, 0)))); - else if (relPos === BrRelativePos.Back) - b.ApplyMatrix(MoveMatrix(newBox.min.clone().add(new three.Vector3(0, size.y - spaceSize * i - (i - 1) * thickness, 0)))); - else - b.ApplyMatrix(MoveMatrix(newBox.min.clone().add(new three.Vector3(0, (singleSize + thickness) * i, 0)))); - b.ApplyMatrix(spaceOcs); - brs.push(b); - } - return brs; -} -function ExtendsBoardThickness(temp, thickness) { - let bhPar = temp.GetParam("BH"); - if (bhPar) { - bhPar.expr = thickness; - if (temp.Parent) { - let rootBh = safeEval(temp.Root.GetParam("BH")?.value); - bhPar.expr = rootBh === thickness ? "$BH" : thickness; - } - } -} - /** * 板件模板的基类.(层板,立板,背板) */ @@ -32069,8 +33921,11 @@ exports.TemplateBoardRecord = class TemplateBoardRecord extends exports.Template } } this.DrawBoardCount = nbrs.length; - let brs = this.Objects.filter(id => !id.IsErase).map(id => id.Object); - brs.map(br => br.SpaceOCS = this._CacheSpaceCS); + //保持SpaceCS + for (let id of this.Objects) { + if (id && !id.IsErase) + id.Object.SpaceOCS = this._CacheSpaceCS; + } } ReadFile(file) { file.Read(); @@ -32169,372 +34024,6 @@ exports.TemplateBehindBoard = __decorate([ Factory ], exports.TemplateBehindBoard); -class DrawLatticeDrawerTool extends Singleton { - constructor() { - super(...arguments); - this.haveTopBr = false; - } - get Config() { - return this._config; - } - Draw(space, config) { - this._config = config; - this.space = space; - this.ParseSpaceBrs(); - this.HandleSpace(); - let size = space.Size; - if (config.arrayType === ELatticeArrayType.ByWidth) { - config.widthCount = Math.floor((size.x + config.thickness) / (config.gripWidth + config.thickness)); - config.depthCount = Math.floor((size.y + config.thickness) / (config.gripDepth + config.thickness)); - } - if (config.widthCount <= 0 || config.depthCount <= 0) { - this.End(); - return []; - } - let gripWidth = (size.x - ((config.widthCount - 1) * config.thickness)) / config.widthCount; - let gripDepth = (size.y - (config.depthCount - 1) * config.thickness) / config.depthCount; - config.gripWidth = gripWidth; - config.gripDepth = gripDepth; - let position = space.SpaceBox.min.clone(); - let verBr = exports.Board.CreateBoard(size.z, size.y, config.thickness, BoardType.Vertical); - //分析切角圆弧的结果 - let res = this.ParseArcLenOrObliuqeAng(verBr); - if (!res) { - this.End(); - return []; - } - //左右侧板跟随 - this.ChangeLeftRightBr(verBr); - this.ParseBrTooth(verBr); - this.ParseHighSealing(verBr, config.leftSealed, config.rightSealed, config.upSealed, config.downSealed, false); - this.WriteBoardProcessOption(verBr); - let lattices = []; - for (let i = 1; i < config.widthCount; i++) { - let br = verBr.Clone(); - br.Name = "竖板" + i; - let pos = position.clone(); - pos.add(new three.Vector3(gripWidth * i + (i - 1) * config.thickness)); - br.Position = pos; - br.ApplyMatrix(space.SpaceOCS); - lattices.push(br); - } - let beBr = exports.Board.CreateBoard(size.z, size.x, config.thickness, BoardType.Behind); - this.ParseBrTooth(beBr); - this.ParseHighSealing(beBr, config.leftSealed, config.rightSealed, config.upSealed, config.downSealed, true); - this.WriteBoardProcessOption(beBr); - for (let i = 1; i < config.depthCount; i++) { - let br = beBr.Clone(); - br.Name = "横板" + i; - let pos = position.clone(); - pos.add(new three.Vector3(0, (gripDepth + config.thickness) * i)); - br.Position = pos; - br.ApplyMatrix(space.SpaceOCS); - lattices.push(br); - } - this.End(); - return lattices; - } - HandleSpace() { - const config = this.Config; - let box = this.space.SpaceBox; - box.max.add(new three.Vector3(0, 0, -this.Config.downDist)); - //处理间隙 - box.min.add(new three.Vector3(config.space, config.space)); - box.max.add(new three.Vector3(-config.space, -config.space)); - if (this.frontBr && this.backBr) { - let backPos = this.backBr.Position.applyMatrix4(this.frontBr.OCSInv); - let addH = backPos.y + this.backBr.Height - this.frontBr.Height; - if (addH > 0) { - this.space.SpaceBox.max.add(new three.Vector3(0, 0, addH)); - if (config.isAuto) - config.arcLen = addH; - } - else - Log("挡板高度大于等于格子抽板高度,无法自动识别弧度!"); - } - if (this.haveTopBr) { - Log("顶板不为空,绘制格子抽可能错误!"); - } - } - ChangeLeftRightBr(refBr) { - const config = this.Config; - if (this.leftBr && this.rightBr) { - if (config.isChange) { - let lWidth = this.leftBr.Width; - let lHeight = this.leftBr.Height; - let lgrooves = this.leftBr.Grooves.slice(); - let rgrooves = this.rightBr.Grooves.slice(); - let rWidth = this.rightBr.Width; - let rHeight = this.rightBr.Height; - this.leftBr.ContourCurve = refBr.ContourCurve.Clone(); - this.rightBr.ContourCurve = refBr.ContourCurve.Clone(); - this.leftBr.Width = lWidth; - this.leftBr.Height = lHeight; - this.rightBr.Width = rWidth; - this.rightBr.Height = rHeight; - if (this.leftBr.Grooves.length !== lgrooves.length) - this.leftBr.AppendGrooves(lgrooves); - if (this.rightBr.Grooves.length !== rgrooves.length) - this.rightBr.AppendGrooves(rgrooves); - } - } - } - ParseBrTooth(br) { - const config = this.Config; - let grooveLenAdd = config.knifeRad; - let initPts = []; - if (br.BoardType === BoardType.Behind) { - let addWidth = (config.grooveAddWidth - 2 * config.upSealed) / 2; - let p1 = new three.Vector3(br.Width - config.gripWidth + addWidth, br.Height); - let p2 = new three.Vector3(br.Width - config.gripWidth + addWidth, br.Height / 2 - grooveLenAdd); - let p3 = new three.Vector3(br.Width - config.gripWidth - br.Thickness - addWidth, br.Height / 2 - grooveLenAdd); - let p4 = new three.Vector3(br.Width - config.gripWidth - br.Thickness - addWidth, br.Height); - initPts.push(p1, p2, p3, p4); - for (let i = 2; i < config.widthCount; i++) { - initPts.push(...[p1, p2, p3, p4].map(p => p.clone().add(new three.Vector3(-(config.gripWidth + br.Thickness) * (i - 1))))); - } - let cu = br.ContourCurve; - cu.AddVertexAt(cu.EndParam - 1, initPts.map(p => AsVector2(p))); - br.ContourCurve = cu; - } - else { - let addWidth = (config.grooveAddWidth - 2 * config.downSealed) / 2; - let p1 = new three.Vector3(config.gripDepth - addWidth, 0); - let p2 = new three.Vector3(config.gripDepth - addWidth, br.Height / 2 + grooveLenAdd); - let p3 = new three.Vector3(config.gripDepth + br.Thickness + addWidth, br.Height / 2 + grooveLenAdd); - let p4 = new three.Vector3(config.gripDepth + br.Thickness + addWidth, 0); - initPts.push(p1, p2, p3, p4); - for (let i = 2; i < config.depthCount; i++) { - initPts.push(...[p1, p2, p3, p4].map(p => p.clone().add(new three.Vector3((config.gripDepth + br.Thickness) * (i - 1))))); - } - let cu = br.ContourCurve; - cu.AddVertexAt(1, initPts.map(p => AsVector2(p))); - br.ContourCurve = cu; - } - } - ParseSpaceBrs() { - let vertBrs = this.space.BoardMap.get(BoardType.Vertical); - if (vertBrs && vertBrs.length > 1) { - vertBrs.sort((br1, br2) => { - return br1.Position.applyMatrix4(this.space.SpaceOCSInv).x - br2.Position.applyMatrix4(this.space.SpaceOCSInv).x; - }); - this.leftBr = vertBrs[0]; - this.rightBr = arrayLast(vertBrs); - } - let behindBrs = this.space.BoardMap.get(BoardType.Behind); - if (behindBrs && behindBrs.length > 1) { - behindBrs.sort((br1, br2) => { - return br1.Position.applyMatrix4(this.space.SpaceOCSInv).y - br2.Position.applyMatrix4(this.space.SpaceOCSInv).y; - }); - this.backBr = arrayLast(behindBrs); - this.frontBr = behindBrs[0]; - } - let lyBrs = this.space.BoardMap.get(BoardType.Layer); - this.haveTopBr = lyBrs && lyBrs.length > 1; - } - ParseArcLenOrObliuqeAng(br) { - const config = this.Config; - const size = this.space.Size; - if (config.isOpenCut) { - if (config.upCut > size.z || config.downCut > size.z) - return true; - if (config.upCut < 1 || config.downCut < 1) - return true; - let cu = br.ContourCurve; - cu.AddVertexAt(3, new three.Vector2(config.upCut, br.Height)); - cu.SetPointAt(4, new three.Vector2(0, br.Height - config.downCut)); - } - else { - if (config.arcLen > size.z || config.arcLen > size.y) { - Log("圆弧角过大"); - return false; - } - let cu = br.ContourCurve; - if (config.arcLen === 0) { - Log("圆弧角为0"); - return true; - } - cu.AddVertexAt(3, new three.Vector2(config.arcLen, br.Height)); - cu.SetBulgeAt(3, Math.tan(Math.PI / 8)); - cu.SetPointAt(4, new three.Vector2(0, br.Height - config.arcLen)); - } - return true; - } - WriteBoardProcessOption(br) { - const config = this.Config; - br.KnifeRadius = config.knifeRad; - br.BoardProcessOption.sealedUp = config.upSealed.toString(); - br.BoardProcessOption.sealedDown = config.downSealed.toString(); - br.BoardProcessOption.sealedLeft = config.leftSealed.toString(); - br.BoardProcessOption.sealedRight = config.rightSealed.toString(); - br.BoardProcessOption.drillType = DrillType.None; - br.BoardProcessOption.highDrill.fill(DrillType.None); - br.BoardProcessOption[EBoardKeyList.Lines] = LinesType.Reverse; //生成的板设置为反纹 - } - ParseHighSealing(br, leftSealed, rightSealed, topSealed, downSealed, isHor) { - let cu = br.ContourCurve; - br.BoardProcessOption.sealedLeft = leftSealed.toString(); - br.BoardProcessOption.sealedRight = rightSealed.toString(); - br.BoardProcessOption.sealedUp = topSealed.toString(); - br.BoardProcessOption.sealedDown = downSealed.toString(); - let highSeals = []; - let sizes = [...new Set([downSealed, rightSealed, topSealed, leftSealed])]; - let downSeal = { - size: downSealed, color: sizes.indexOf(downSealed) + 1 - }; - let rigthSeal = { - size: rightSealed, color: sizes.indexOf(rightSealed) + 1 - }; - let topSeal = { size: topSealed, color: sizes.indexOf(topSealed) + 1 }; - let leftSeal = { size: leftSealed, color: sizes.indexOf(leftSealed) + 1 }; - if (isHor) { - highSeals.push(downSeal, rigthSeal); - for (let i = 1; i <= cu.EndParam - 3; i++) { - highSeals.push(topSeal); - } - highSeals.push(leftSeal); - } - else { - let count = (this._config.depthCount - 1) * 3 + this._config.depthCount; - for (let i = 0; i < count; i++) { - highSeals.push(downSeal); - } - for (let i = count; i < cu.EndParam; i++) { - let c = cu.GetCurveAtIndex(i); - if (c instanceof exports.Arc) - break; - let derv = c.GetFistDeriv(0).normalize(); - if (equalv3(derv, YAxis)) - highSeals.push(rigthSeal); - else if (isParallelTo(derv, XAxis)) - highSeals.push(topSeal); - else if (equalv3(derv, YAxis.clone().negate())) - highSeals.push(leftSeal); - else - highSeals.push(topSeal); - } - } - br.BoardProcessOption.highSealed = highSeals; - } - End() { - this._config = null; - this.leftBr = null; - this.rightBr = null; - this.backBr = null; - this.frontBr = null; - this.haveTopBr = false; - } -} - -exports.TemplateLatticeRecord = class TemplateLatticeRecord extends exports.TemplateRecord { - constructor() { - super(); - this.option = { ...DefaultLatticeConfig }; - this.name = "格子抽(自动)"; - } - get Option() { - return Object.assign({}, this.option); - } - set Option(option) { - this.WriteAllObjectRecord(); - Object.assign(this.option, option); - ExtendsBoardThickness(this, option.thickness); - } - // InitBaseParams() - // { - // super.InitBaseParams(); - // return this; - // } - async Update() { - await super.Update(); - let thickness = this.GetParam("BH")?.value; - if (thickness) - this.option.thickness = thickness; - let tool = DrawLatticeDrawerTool.GetInstance(); - let sbrs = this.PositioningSupportBoards; - let space = new ISpaceParse(sbrs, this._CacheSpaceCS); - space.ParseOK = true; - space.SpaceBox = new Box3Ext(new three.Vector3(), this._CacheSpaceSize); - let nbrs = tool.Draw(space, this.Option); - if (sbrs.length > 0) { - for (let br of nbrs) { - br.BoardProcessOption[EBoardKeyList.CabinetName] = sbrs[0].BoardProcessOption[EBoardKeyList.CabinetName]; - br.BoardProcessOption[EBoardKeyList.RoomName] = sbrs[0].BoardProcessOption[EBoardKeyList.RoomName]; - } - } - for (let i = nbrs.length; i < this.Objects.length; i++) - this.Objects[i].Object.Erase(); - for (let i = 0; i < nbrs.length; i++) { - if (i < this.Objects.length) { - let br = this.Objects[i].Object; - br.Erase(false); - br.CopyFrom(nbrs[i]); - br.SpaceOCS = this._CacheSpaceCS; - } - else { - nbrs[i].SpaceOCS = this._CacheSpaceCS; - this._db.ModelSpace.Append(nbrs[i]); - this.Objects.push(nbrs[i].Id); - } - } - } - //#region -------------------------File------------------------- - //对象应该实现dataIn和DataOut的方法,为了对象的序列化和反序列化 - //对象从文件中读取数据,初始化自身 - ReadFile(file) { - file.Read(); - super.ReadFile(file); - this.option.arrayType = file.Read(); - this.option.gripWidth = file.Read(); - this.option.gripDepth = file.Read(); - this.option.widthCount = file.Read(); - this.option.depthCount = file.Read(); - this.option.knifeRad = file.Read(); - this.option.thickness = file.Read(); - this.option.arcLen = file.Read(); - this.option.downDist = file.Read(); - this.option.space = file.Read(); - this.option.grooveAddWidth = file.Read(); - this.option.upSealed = file.Read(); - this.option.downSealed = file.Read(); - this.option.leftSealed = file.Read(); - this.option.rightSealed = file.Read(); - this.option.isAuto = file.Read(); - this.option.isChange = file.Read(); - this.option.isOpenCut = file.Read(); - this.option.upCut = file.Read(); - this.option.downCut = file.Read(); - } - //对象将自身数据写入到文件. - WriteFile(file) { - file.Write(1); - super.WriteFile(file); - file.Write(this.option.arrayType); - file.Write(this.option.gripWidth); - file.Write(this.option.gripDepth); - file.Write(this.option.widthCount); - file.Write(this.option.depthCount); - file.Write(this.option.knifeRad); - file.Write(this.option.thickness); - file.Write(this.option.arcLen); - file.Write(this.option.downDist); - file.Write(this.option.space); - file.Write(this.option.grooveAddWidth); - file.Write(this.option.upSealed); - file.Write(this.option.downSealed); - file.Write(this.option.leftSealed); - file.Write(this.option.rightSealed); - file.Write(this.option.isAuto); - file.Write(this.option.isChange); - file.Write(this.option.isOpenCut); - file.Write(this.option.upCut); - file.Write(this.option.downCut); - } -}; -exports.TemplateLatticeRecord = __decorate([ - Factory -], exports.TemplateLatticeRecord); - class GripScene extends three.Object3D { constructor() { super(); @@ -33116,6 +34605,9 @@ exports.TemplateLeftRightBoardRecord = class TemplateLeftRightBoardRecord extend let y = new three.Vector3().setFromMatrixColumn(this._CacheSpaceCS, 1); x.multiplyScalar(this._CacheSpaceSize.x - lBr.Thickness); rBr.Position = lBr.Position.sub(y.multiplyScalar(ls - rs)).add(x); + //保持SpaceCS + for (let ent of [lBr, rBr]) + ent.SpaceOCS = this._CacheSpaceCS; } ReadFile(file) { super.ReadFile(file); @@ -33170,332 +34662,6 @@ exports.TemplateSizeBoard = __decorate([ Factory ], exports.TemplateSizeBoard); -function BuildTopBottomBoards(topOpt, bottomOpt, space) { - let brs = []; - if (topOpt.isDraw) { - let basePt = GetTopBoardBasePt(topOpt, space); - brs.push(GetTopOrDownBoard(space, topOpt, basePt, true)); - } - if (bottomOpt.isDraw) { - let basePt = GetBottomBoardBasePt(bottomOpt, space); - brs.push(GetTopOrDownBoard(space, bottomOpt, basePt, false)); - let size = space.Size; - let refSize = size.y; - const thickness = bottomOpt.footThickness; - if (bottomOpt.offset > 0 && !bottomOpt.isWrapSide) { - //绘制前地脚 - if (bottomOpt.isDrawFooter) { - brs.push(GetFootBoard(bottomOpt, space, false)); - refSize -= thickness + bottomOpt.footBehindShrink; - } - //绘制后地脚 - if (bottomOpt.isDrawBackFooter) { - brs.push(GetFootBoard(bottomOpt, space, true)); - refSize -= thickness + bottomOpt.footerOffset; - } - //绘制加强条 - if (bottomOpt.isDrawStrengthenStrip) - brs.push(...GetStrengthenStrips(bottomOpt, space, refSize - bottomOpt.frontDist - bottomOpt.behindDistance)); - } - } - return brs; -} -function GetTopOrDownBoard(spaceParse, opt, basePt, isTop = true) { - //前后距 - let frontDist = -opt.frontDist; - let backDist = -opt.behindDistance; - //左右延伸 - let leftExt = opt.leftExt; - let rightExt = opt.rightExt; - //大小 - let size = spaceParse.Size; - let length = size.x; - let width = size.y + frontDist + backDist; - let thickness = opt.thickness; - if (opt.isWrapSide) { - let leftBoardThickness = spaceParse.LeftBoard ? spaceParse.LeftBoard.Thickness : opt.thickness; - let rightBoardThickness = spaceParse.RightBoard ? spaceParse.RightBoard.Thickness : opt.thickness; - length += leftBoardThickness + rightBoardThickness + leftExt + rightExt; - } - else { - leftExt = 0; - rightExt = 0; - } - let board = exports.Board.CreateBoard(length, width, thickness, BoardType.Layer); - board.Name = "顶板"; - if (!isTop) { - board.Name = "底板"; - } - //移动右缩和前距的距离 - basePt.add(new three.Vector3(rightExt, -frontDist)); - board.ApplyMatrix(MoveMatrix(basePt)); - board.ApplyMatrix(spaceParse.SpaceOCS); - return board; -} -function GetTopBoardBasePt(opt, spc) { - let box = spc.SpaceBox; - let min = box.min; - let max = box.max; - let basePoint = new three.Vector3(); - if (opt.isWrapSide) { - let rightBoardThickness = spc.RightBoard ? spc.RightBoard.Thickness : opt.thickness; - basePoint.set(max.x + rightBoardThickness, min.y, max.z); - } - else { - basePoint.set(max.x, min.y, max.z - (opt.thickness + parseFloat(opt.offset))); - } - return basePoint; -} -function GetBottomBoardBasePt(opt, spc) { - let box = spc.SpaceBox; - let min = box.min; - let max = box.max; - let basePoint = new three.Vector3(); - if (opt.isWrapSide) { - let rightBoardThickness = spc.RightBoard ? spc.RightBoard.Thickness : opt.thickness; - basePoint.set(max.x + rightBoardThickness, min.y, min.z - opt.thickness); - } - else { - basePoint.set(max.x, min.y, min.z + opt.offset); - } - return basePoint; -} -function GetFootBoard(opt, spaceParse, isBack) { - let offset = opt.offset; - let thickness = opt.footThickness; - let footBoard = exports.Board.CreateBoard(offset, spaceParse.Size.x, opt.footThickness, BoardType.Behind); - footBoard.Name = isBack ? "后地脚" : "地脚线"; - let moveDist = isBack ? spaceParse.Size.y - opt.footerOffset - opt.behindDistance : thickness + opt.footBehindShrink + opt.frontDist; - footBoard.ApplyMatrix(MoveMatrix(spaceParse.SpaceBox.min.clone().add(new three.Vector3(0, moveDist)))) - .ApplyMatrix(spaceParse.SpaceOCS); - return footBoard; -} -function GetStrengthenStrips(opt, spaceParse, width) { - let brs = []; - const thickness = opt.footThickness; - let count = opt.divCount; - if (count === 0) - return brs; - let spaceSize = (spaceParse.Size.x - count * thickness) / (count + 1); - let br = exports.Board.CreateBoard(opt.offset, width, thickness, BoardType.Vertical); - let yDist = opt.frontDist; - if (opt.isDrawFooter) - yDist += (opt.footBehindShrink + thickness); - for (let i = 1; i <= count; i++) { - let b = br.Clone(); - b.Name = "加强条" + i; - b.ApplyMatrix(MoveMatrix(spaceParse.SpaceBox.min.clone().add(new three.Vector3(spaceSize * i + (i - 1) * thickness, yDist)))) - .ApplyMatrix(spaceParse.SpaceOCS); - brs.push(b); - } - return brs; -} - -/**顶底板模板 */ -exports.TemplateTopBottomBoard = class TemplateTopBottomBoard extends exports.TemplateRecord { - constructor() { - super(); - this._topOption = { ...DefaultTopBoardOption }; - this._bottomOption = { ...DefaultBottomBoardOption }; - this.UseBoardProcessOption = false; - this.DrawCounts = [1, 1, 1]; - this.name = "顶底板"; - } - get TopOption() { - return Object.assign({}, this._topOption); - } - set TopOption(option) { - this.WriteAllObjectRecord(); - Object.assign(this._topOption, option); - ExtendsBoardThickness(this, option.thickness); - } - get BottomOption() { - return Object.assign({}, this._bottomOption); - } - set BottomOption(option) { - this.WriteAllObjectRecord(); - Object.assign(this._bottomOption, option); - } - // InitBaseParams() - // { - // super.InitBaseParams(); - // return this; - // } - async Update() { - await super.Update(); - let thickness = this.GetParam("BH")?.value; - if (thickness) { - this._topOption.thickness = thickness; - this._bottomOption.thickness = thickness; - this._bottomOption.footThickness = thickness; - } - let spaceParse = this.SpaceParse; - let nbrs = BuildTopBottomBoards(this._topOption, this._bottomOption, spaceParse); - let sbrs = this.PositioningSupportBoards; - if (this.BoardProcessOption) { - let minSealed = GetMinSealed(this.BoardProcessOption); - for (let br of nbrs) { - br.BoardProcessOption = this.BoardProcessOption; - this.SetBoardProcess(br, minSealed); - } - this.BoardProcessOption = undefined; - } - if (this.UseBoardProcessOption && sbrs.length > 0) { - let cname = sbrs[0].BoardProcessOption[EBoardKeyList.CabinetName]; - let rname = sbrs[0].BoardProcessOption[EBoardKeyList.RoomName]; - for (let br of nbrs) { - br.BoardProcessOption[EBoardKeyList.CabinetName] = cname; - br.BoardProcessOption[EBoardKeyList.RoomName] = rname; - } - this.UseBoardProcessOption = false; - } - let oldBrss = [[], [], []]; - let refBr; - let minSealed; - for (let id of this.Objects) { - let b = id.Object; - if (!refBr) - refBr = b; - oldBrss[b.BoardType].push(b); - } - if (refBr) - minSealed = GetMinSealed(refBr.BoardProcessOption); - let newBrss = [[], [], []]; - for (let b of nbrs) { - newBrss[b.BoardType].push(b); - } - for (let i = 0; i < oldBrss.length; i++) { - let oldBrs = oldBrss[i]; - let newBrs = newBrss[i]; - let oldLen = oldBrs.length; - for (let j = newBrs.length; j < oldLen; j++) - oldBrs[j].Erase(); - for (let j = 0; j < newBrs.length; j++) { - if (j < oldLen) { - if (j >= this.DrawCounts[i]) { - oldBrs[j].Erase(false); - } - oldBrs[j].Name = newBrs[j].Name; - oldBrs[j].Position = newBrs[j].Position; - oldBrs[j].Width = newBrs[j].Width; - oldBrs[j].Height = newBrs[j].Height; - oldBrs[j].Thickness = newBrs[j].Thickness; - } - else { - if (refBr) { - newBrs[j].BoardProcessOption = refBr.BoardProcessOption; - this.SetBoardProcess(newBrs[j], minSealed); - } - this._db.ModelSpace.Append(newBrs[j]); - this.Objects.push(newBrs[j].Id); - } - } - this.DrawCounts[i] = newBrs.length; - } - let brs = this.Objects.filter(id => !id.IsErase).map(id => id.Object); - brs.map(br => br.SpaceOCS = this._CacheSpaceCS); - } - SetBoardProcess(br, minSealed) { - if (br.Name === "底板") { - br.BoardProcessOption[EBoardKeyList.BigHole] = FaceDirection.Back; - } - else if (br.Name.includes("地脚") || br.Name.includes("加强条")) { - // br.BoardProcessOption.composingFace = ComposingType.Reverse; - br.BoardProcessOption.bigHoleDir = FaceDirection.Back; - br.BoardProcessOption.lines = LinesType.Reverse; - //用薄封边 - br.BoardProcessOption.sealedUp = minSealed; - br.BoardProcessOption.sealedDown = minSealed; - br.BoardProcessOption.sealedLeft = minSealed; - br.BoardProcessOption.sealedRight = minSealed; - } - } - ReadFile(file) { - let ver = file.Read(); - super.ReadFile(file); - this.DrawCounts[0] = file.Read(); - this.DrawCounts[1] = file.Read(); - this.DrawCounts[2] = file.Read(); - this._topOption.type = file.Read(); - this._topOption.name = file.Read(); - this._topOption.isDraw = file.Read(); - this._topOption.thickness = file.Read(); - this._topOption.frontDist = file.Read(); - this._topOption.behindDistance = file.Read(); - this._topOption.isWrapSide = file.Read(); - this._topOption.useLFData = file.Read(); - this._topOption.leftExt = file.Read(); - this._topOption.rightExt = file.Read(); - this._topOption.offset = file.Read(); - if (ver === 1 && typeof this._topOption.offset === "string") - this._topOption.offset = parseFloat(this._topOption.offset) ?? 0; - this._bottomOption.type = file.Read(); - this._bottomOption.name = file.Read(); - this._bottomOption.isDraw = file.Read(); - this._bottomOption.thickness = file.Read(); - this._bottomOption.frontDist = file.Read(); - this._bottomOption.behindDistance = file.Read(); - this._bottomOption.isWrapSide = file.Read(); - this._bottomOption.useLFData = file.Read(); - this._bottomOption.leftExt = file.Read(); - this._bottomOption.rightExt = file.Read(); - this._bottomOption.offset = file.Read(); - this._bottomOption.footThickness = file.Read(); - this._bottomOption.isDrawFooter = file.Read(); - this._bottomOption.footBehindShrink = file.Read(); - this._bottomOption.isDrawBackFooter = file.Read(); - this._bottomOption.isDrawStrengthenStrip = file.Read(); - this._bottomOption.footerOffset = file.Read(); - this._bottomOption.divCount = file.Read(); - } - WriteFile(file) { - file.Write(2); - super.WriteFile(file); - file.Write(this.DrawCounts[0]); - file.Write(this.DrawCounts[1]); - file.Write(this.DrawCounts[2]); - file.Write(this._topOption.type); - file.Write(this._topOption.name); - file.Write(this._topOption.isDraw); - file.Write(this._topOption.thickness); - file.Write(this._topOption.frontDist); - file.Write(this._topOption.behindDistance); - file.Write(this._topOption.isWrapSide); - file.Write(this._topOption.useLFData); - file.Write(this._topOption.leftExt); - file.Write(this._topOption.rightExt); - file.Write(this._topOption.offset); - file.Write(this._bottomOption.type); - file.Write(this._bottomOption.name); - file.Write(this._bottomOption.isDraw); - file.Write(this._bottomOption.thickness); - file.Write(this._bottomOption.frontDist); - file.Write(this._bottomOption.behindDistance); - file.Write(this._bottomOption.isWrapSide); - file.Write(this._bottomOption.useLFData); - file.Write(this._bottomOption.leftExt); - file.Write(this._bottomOption.rightExt); - file.Write(this._bottomOption.offset); - file.Write(this._bottomOption.footThickness); - file.Write(this._bottomOption.isDrawFooter); - file.Write(this._bottomOption.footBehindShrink); - file.Write(this._bottomOption.isDrawBackFooter); - file.Write(this._bottomOption.isDrawStrengthenStrip); - file.Write(this._bottomOption.footerOffset); - file.Write(this._bottomOption.divCount); - } -}; -__decorate([ - AutoRecord -], exports.TemplateTopBottomBoard.prototype, "DrawCounts", void 0); -exports.TemplateTopBottomBoard = __decorate([ - Factory -], exports.TemplateTopBottomBoard); -//获得最薄的封边 -function GetMinSealed(opt) { - return Math.max(0, Math.min(parseFloat(opt.sealedDown) || 0, parseFloat(opt.sealedLeft) || 0, parseFloat(opt.sealedRight) || 0, parseFloat(opt.sealedUp) || 0)).toString(); -} - /** * 立板模板 */ @@ -33640,1019 +34806,6 @@ exports.TemplateVisualSpace = __decorate([ Factory ], exports.TemplateVisualSpace); -const SIN45 = Math.sin(Math.PI / 4); -class DrawWineRackTool extends Singleton { - constructor() { - super(...arguments); - this.boardlist = []; - } - get Config() { - return this._config; - } - Parse(space, config) { - this._config = config; - this.boardlist.length = 0; - this.space = space; - //处理格子深 - if (!config.isTotalDepth) { - let depth = safeEval(config.calcDepth, { L: space.Size.x, W: space.Size.y, H: space.Size.z }); - if (!isNaN(depth)) { - space.SpaceBox.max.setY(space.SpaceBox.min.y + depth); - } - } - //处理前缩 - space.SpaceBox.min.add(new three.Vector3(0, config.frontCut)); - //左右缩 - space.SpaceBox.min.add(new three.Vector3(config.leftCut)); - space.SpaceBox.max.add(new three.Vector3(-config.rightCut)); - //上缩 - space.SpaceBox.max.add(new three.Vector3(0, 0, -config.topCut)); - } - /** 拾取空间周围的板件柜名房名等信息*/ - GetBoardProcessOption(br) { - //获取空间周围的板件数据 - if (this.space.Boards.length > 0) { - let refProcessData = this.space.Boards[0].BoardProcessOption; - br.BoardProcessOption[EBoardKeyList.RoomName] = refProcessData[EBoardKeyList.RoomName]; - br.BoardProcessOption[EBoardKeyList.CabinetName] = refProcessData[EBoardKeyList.CabinetName]; - } - } - /**分析高级封边数据 */ - ParseHighSealing(br, leftSealed, rightSealed, topSealed, downSealed, isLeft) { - this.GetBoardProcessOption(br); - let cu = br.ContourCurve; - br.BoardProcessOption.sealedLeft = leftSealed.toString(); - br.BoardProcessOption.sealedRight = rightSealed.toString(); - br.BoardProcessOption.sealedUp = topSealed.toString(); - br.BoardProcessOption.sealedDown = downSealed.toString(); - let sizes = [...new Set([downSealed, rightSealed, topSealed, leftSealed])]; - let downSeal = { - size: downSealed, color: sizes.indexOf(downSealed) + 1 - }; - let rigthSeal = { - size: rightSealed, color: sizes.indexOf(rightSealed) + 1 - }; - let topSeal = { size: topSealed, color: sizes.indexOf(topSealed) + 1 }; - let leftSeal = { size: leftSealed, color: sizes.indexOf(leftSealed) + 1 }; - let highSeals = [downSeal]; - if (isLeft) { - highSeals.push(rigthSeal, topSeal); - for (let i = 3; i <= cu.EndParam - 1; i++) { - highSeals.push(leftSeal); - } - } - else { - for (let i = 1; i <= cu.EndParam - 3; i++) { - highSeals.push(rigthSeal); - } - highSeals.push(topSeal, leftSeal); - } - br.BoardProcessOption.highSealed = highSeals; - br.BoardProcessOption.drillType = DrillType.None; - br.BoardProcessOption.highDrill.fill(DrillType.None); - } - /**补板 */ - AddLayerOrVerticalBoard(actWidth, actHeight) { - const config = this.Config; - const size = this.space.Size; - let isDrawLy = false; - //是否补层板 - if (config.isDrawLy && (config.arrayType === EWRackArrayType.Fixed || config.fullType === EFullType.ByWidth)) { - isDrawLy = true; - let length = actWidth; - let width = size.y + config.frontCut; - let position = this.space.SpaceBox.min.clone(); - if (config.arrayType === EWRackArrayType.Fixed) { - if (config.fullDir === EFullDir.Right) { - length += config.rightCut; - position.add(new three.Vector3(size.x + config.rightCut, -config.frontCut, actHeight + config.topCut)); - } - else { - length += config.leftCut; - position.add(new three.Vector3(actWidth, -config.frontCut, actHeight + config.topCut)); - } - } - else { - length += (config.leftCut + config.rightCut); - position.add(new three.Vector3(actWidth + config.rightCut, -config.frontCut, actHeight + config.topCut)); - } - //补板跟随 - if (config.followNarrow) { - //处理前缩 - position.add(new three.Vector3(0, config.frontCut)); - width -= config.frontCut; - } - let br = exports.Board.CreateBoard(length, width, config.brThick2); - this.GetBoardProcessOption(br); - br.BoardProcessOption.bigHoleDir = FaceDirection.Back; - br.Position = position; - br.ApplyMatrix(this.space.SpaceOCS); - this.boardlist.push(br); - } - if (config.isDrawVer && (config.arrayType === EWRackArrayType.Fixed || config.fullType === EFullType.ByHeight)) { - let len = actHeight + config.topCut; - if (isDrawLy) - len += config.brThick2; - let br = exports.Board.CreateBoard(len, size.y + config.frontCut, config.brThick2, BoardType.Vertical); - let position = this.space.SpaceBox.min.clone(); - if (config.fullDir === EFullDir.Right) - position.x += size.x - actWidth - config.brThick2; - else { - br.BoardProcessOption.bigHoleDir = FaceDirection.Back; - position.x += actWidth; - } - //补板跟随 - if (config.followNarrow) { - br.WriteAllObjectRecord(); - position.y += config.frontCut; - br.Width -= config.frontCut; - } - //这里要跟外面平 - position.y -= config.frontCut; - this.GetBoardProcessOption(br); - br.Position = position; - br.ApplyMatrix(this.space.SpaceOCS); - this.boardlist.push(br); - } - } -} - -const R2WRTolerance = 1e-3; -/** - * 斜酒格 - */ -class DrawObliqueWineRackTool extends DrawWineRackTool { - Parse(space, config) { - super.Parse(space, config); - const size = space.Size; - const spaceHeight = size.z; - const spaceWidth = size.x; - const ptMid = new three.Vector3(0.5 * size.x, size.z / 2, 0); - let mirrorMtx; - if (config.fullType === EFullType.ByWidth) - mirrorMtx = MakeMirrorMtx(YAxis, ptMid); - else - mirrorMtx = MakeMirrorMtx(XAxis, ptMid); - ptMid.set(0.5 * size.x, size.z / 2, 0); - polar(ptMid, Math.PI * 0.75, -config.boardThick); - if (config.isFull && config.arrayType !== EWRackArrayType.Fixed) { - switch (config.fullType) { - case EFullType.ByHeight: - this.CalGridWidth(spaceHeight); - break; - case EFullType.ByWidth: - this.CalGridWidth(spaceWidth); - break; - case EFullType.Symmetry: - this.CalGridWidth(spaceHeight); - this.CalGridWidth(spaceWidth); - } - let rectPl = new exports.Polyline().Rectangle(spaceWidth, spaceHeight); - let gripWidth = config.boardThick + config.gripWidth; - let retPls = []; - let pls1 = this.CalculationRectPolylineArr(ptMid, rectPl, gripWidth); - polar(ptMid, Math.PI * 0.75, -gripWidth); - let pls2 = this.CalculationRectPolylineArr(ptMid, rectPl, -gripWidth); - retPls.push(...pls1, ...pls2); - for (let pl of [...pls1, ...pls2]) { - let plClone = pl.Clone(); - plClone.ApplyMatrix(mirrorMtx); - retPls.push(plClone); - } - this.DrawBoardFormPolyLine(retPls); - } - else { - let lWRData = []; - let rWRData = []; - let res; - switch (config.arrayType) { - case EWRackArrayType.ByWidth: - res = this.CalcWineRackDataByWidth(lWRData, rWRData); - break; - case EWRackArrayType.ByCount: - res = this.CalcWineRackDataByCount(lWRData, rWRData); - break; - case EWRackArrayType.Fixed: - res = this.CalcWineRackDataByFixed(lWRData, rWRData); - } - let pls = []; - for (let data of lWRData) { - pls.push(this.CreatePolylineByWineData(data)); - } - rWRData.sort((d1, d2) => { - if (equaln$1(d1.basePt.x, d2.basePt.x)) { - return d1.basePt.y - d2.basePt.y; - } - else - return d2.basePt.x - d1.basePt.x; - }); - for (let data of rWRData) { - pls.push(this.CreatePolylineByWineData(data, false)); - } - //补板 - this.AddLayerOrVerticalBoard(res.width, res.height); - this.DrawBoardFormPolyLine(pls, res.width); - } - } - CalGridWidth(length) { - const count = (length - this.Config.boardThick * 2 / SIN45) / ((this.Config.boardThick + this.Config.gripWidth) * Math.sqrt(2)); - this.Config.gripWidth = ((length - this.Config.boardThick / SIN45) / Math.floor(count)) / Math.sqrt(2) - this.Config.boardThick; - } - /**获取矩形多段线的4个对角点并判断是否有效 */ - GetRect4Pts(xline, rectPl, p1, p2, p3, p4) { - let res1 = this.GetRect2Pts(xline, rectPl, p1, p2); - let vec = polar(new three.Vector3(), Math.PI * 0.75, this.Config.boardThick); - xline.ApplyMatrix(MoveMatrix(vec)); - let res2 = this.GetRect2Pts(xline, rectPl, p3, p4); - return res1 && res2 && p1.distanceTo(p2) > this.Config.gripWidth; - } - /**获取矩形一边的点 */ - GetRect2Pts(xline, rectPl, p1, p2) { - let intPts = xline.IntersectWith(rectPl, IntersectOption.ExtendBoth); - if (intPts.length === 2) { - p1.copy(intPts[0]); - p2.copy(intPts[1]); - if (p1.x > p2.x) { - let tmpPt = p2.clone(); - p2.copy(p1); - p1.copy(tmpPt); - } - return true; - } - return false; - } - /**按格子宽获取酒格数据 */ - CalcWineRackDataByWidth(lWRDataList, rWRDataList) { - let size = this.space.Size; - let Config = this.Config; - let widthCount = 0, heightCount = 0, gripWidth = 0; - let width = size.x - 2 * Config.boardThick * SIN45; - let height = size.z - 2 * Config.boardThick * SIN45; - if (Config.fullType === EFullType.ByWidth) { - widthCount = Math.floor(width / ((Config.gripWidth + Config.boardThick) * SIN45)); - gripWidth = width / widthCount; - //处理锁定个数 - if (!Config.isLock) { - heightCount = Math.floor(height / gripWidth); - } - else { - heightCount = Math.floor(Config.heightCount * 2); - } - height = heightCount * gripWidth + 2 * Config.boardThick * SIN45; - width = size.x; - } - else { - heightCount = Math.floor(height / ((Config.gripWidth + Config.boardThick) * SIN45)); - gripWidth = height / heightCount; - //处理锁定个数 - if (!Config.isLock) { - widthCount = Math.floor(width / gripWidth); - } - else { - widthCount = Math.floor(Config.widthCount * 2); - } - width = widthCount * gripWidth + 2 * Config.boardThick * SIN45; - height = size.z; - } - this.GetWineRackData(width, height, gripWidth, Config.boardThick, widthCount, heightCount, lWRDataList, rWRDataList); - return { - width: width, height: height - }; - } - CalcWineRackDataByCount(lWRDataList, rWRDataList) { - const config = this.Config; - const size = this.space.Size; - let widthCount = Math.floor(config.widthCount * 2); - let heightCount = Math.floor(config.heightCount * 2); - let gripWidth = (size.x - 2 * config.boardThick * SIN45) / widthCount; - let width = 0; - let height = 0; - if (config.fullType === EFullType.ByWidth) { - gripWidth = (size.x - 2 * config.boardThick * SIN45) / widthCount; - width = size.x; - if (!config.isLock) //如果没锁定个数 - { - heightCount = Math.floor((size.z - 2 * config.boardThick * SIN45) / gripWidth + 1e-3); - } - height = heightCount * gripWidth + 2 * config.boardThick * SIN45; - } - else { - gripWidth = (size.z - 2 * config.boardThick * SIN45) / heightCount; - if (!config.isLock) //如果没有锁定个数 - { - widthCount = Math.floor((size.x - 2 * config.boardThick * SIN45) / gripWidth); - } - width = widthCount * gripWidth + 2 * config.boardThick * SIN45; - height = size.z; - } - this.GetWineRackData(width, height, gripWidth, config.boardThick, widthCount, heightCount, lWRDataList, rWRDataList); - return { - width: width, height: height - }; - } - CalcWineRackDataByFixed(lWRDataList, rWRDataList) { - const config = this.Config; - let widthCount = Math.floor(config.widthCount * 2); - let heightCount = Math.floor(config.heightCount * 2); - let gripWidth = config.gripWidth * SIN45; - let width = widthCount * gripWidth + 2 * config.boardThick * SIN45; - let height = heightCount * gripWidth + 2 * config.boardThick * SIN45; - this.GetWineRackData(width, height, gripWidth, config.boardThick, widthCount, heightCount, lWRDataList, rWRDataList); - return { - width: width, height: height - }; - } - /**构建酒格正面多段线组*/ - CalculationRectPolylineArr(ptMid, rectPl, gripWidth) { - let pls = []; - let pt = ptMid.clone(); - while (true) { - let pl = this.CalculationRectPolyline(pt, rectPl); - if (!pl) - break; - polar(pt, Math.PI * 0.75, gripWidth); - pls.push(pl); - } - return pls; - } - /**构建酒格正面多段线*/ - CalculationRectPolyline(pt, rectPl) { - const xline = new exports.Line(pt, pt.clone().add(new three.Vector3(1, 1))); - const p1 = new three.Vector3(); - const p2 = new three.Vector3(); - const p3 = new three.Vector3(); - const p4 = new three.Vector3(); - if (!this.GetRect4Pts(xline, rectPl, p1, p2, p3, p4)) { - return null; - } - let minDis = this.Config.boardThick / Math.sqrt(2); - //如果左边停靠 - if (p1.x < minDis) { - p1.copy(polar(p3.clone(), Math.PI * -0.25, this.Config.boardThick)); - } - else { - p3.copy(polar(p1.clone(), Math.PI * 0.75, this.Config.boardThick)); - } - //右边点 上面停靠 - let size = this.space.Size; - if (p2.y > size.z - minDis) { - p2.copy(polar(p4.clone(), -Math.PI * 0.25, this.Config.boardThick)); - } - else { - p4.copy(polar(p2.clone(), Math.PI * 0.75, this.Config.boardThick)); - } - if (p1.distanceTo(p2) < (this.Config.gripWidth + this.Config.boardThick * 1.8) && p1.y > this.Config.boardThick * 2) - return null; - let lineData = [p1, p2, p4, p3].map(p => { - return { - pt: AsVector2(p), - bul: 0 - }; - }); - let pl = new exports.Polyline(lineData); - pl.CloseMark = true; - return pl; - } - //获取酒格数据 - GetWineRackData(width, height, gripWidth, brThick, widthCount, heightCount, lWRDataList, rWRDataList) { - let data; - for (let i = 0; i < Math.floor(widthCount / 2); i++) { - let p1 = gripWidth + brThick * SIN45 + gripWidth * i * 2; - data = { - basePt: new three.Vector3(p1, 0, 0), - brLength: 0 - }; - if (width - p1 > height - brThick * SIN45) { - data.brLength = (height - brThick * SIN45) / SIN45; - } - else { - data.brLength = (width - p1) / SIN45; - } - rWRDataList.push(data); - } - for (let i = 0; i < Math.floor(heightCount / 2); i++) { - let p1 = gripWidth + brThick * SIN45 + i * gripWidth * 2; - data = { - basePt: new three.Vector3(brThick * SIN45, p1 - brThick * SIN45, 0), - brLength: 0 - }; - if (height - p1 > width - brThick * SIN45) { - data.brLength = (width - brThick * SIN45) / SIN45; - } - else { - data.brLength = (height - p1) / SIN45; - } - rWRDataList.push(data); - } - for (let i = 0; i < Math.floor(widthCount / 2); i++) { - let p1 = gripWidth + i * gripWidth * 2; - data = { - basePt: new three.Vector3(p1 + brThick * SIN45, 2 * brThick * SIN45, 0), - brLength: 0 - }; - if (equaln$1(p1, height - brThick * SIN45 * 2)) { - data.brLength = (height - brThick * SIN45 * 2) / SIN45; - } - else if (p1 > height - brThick * SIN45 * 3) { - data.brLength = (height - brThick * SIN45 * 3) / SIN45; - } - else { - data.brLength = (p1 - brThick * SIN45) / SIN45; - } - lWRDataList.push(data); - } - if (widthCount % 2 === 0) { - for (let i = 0; i < Math.floor(heightCount / 2); i++) { - let p1 = gripWidth + 2 * brThick * SIN45 + i * gripWidth * 2; - data = { - basePt: new three.Vector3(width - brThick * SIN45, p1, 0), - brLength: 0 - }; - if (equaln$1(height - p1, width - 2 * brThick * SIN45)) { - data.brLength = (height - p1) / SIN45; - } - else if (height - p1 - brThick * SIN45 > width - 2 * brThick * SIN45) { - data.brLength = (width - brThick * SIN45 * 3) / SIN45; - } - else { - data.brLength = (height - p1 - brThick * SIN45) / SIN45; - } - lWRDataList.push(data); - } - } - else { - for (let i = 0; i < Math.floor(heightCount / 2) + 1; i++) { - let p1 = 0; - if (i == 0) { - p1 = brThick * SIN45; - data = { - basePt: new three.Vector3(width, p1, 0), - brLength: 0 - }; - if (equaln$1(height, width, 1e-3)) { - data.brLength = (width - brThick * SIN45) / SIN45; - } - else if (height - p1 > width - 2 * brThick * SIN45) { - data.brLength = (width - brThick * SIN45 * 2) / SIN45; - } - else { - data.brLength = (height - p1 - brThick * SIN45) / SIN45; - } - } - else { - p1 = 2 * brThick * SIN45 + i * gripWidth * 2; - data = { - basePt: new three.Vector3(width - brThick * SIN45, p1, 0), - brLength: 0 - }; - if (height - p1 > brThick) { - if (equaln$1(height - p1, width - 2 * brThick * SIN45, 1e-3)) { - data.brLength = (height - p1) / SIN45; - } - else if (height - p1 > width - brThick * SIN45) { - data.brLength = (width - brThick * SIN45 * 3) / SIN45; - } - else { - data.brLength = (height - p1 - brThick * SIN45) / SIN45; - } - } - else { - continue; //这里需要跳出. - } - } - lWRDataList.push(data); - } - } - } - /**根据酒格数据获取多段线 */ - CreatePolylineByWineData(data, isLeft = true) { - let thick = this.Config.boardThick; - let lineData = [ - { - pt: new three.Vector2(), - bul: 0 - }, - { - pt: new three.Vector2(thick, 0), - bul: 0 - }, - { - pt: new three.Vector2(thick, data.brLength), - bul: 0 - }, - { - pt: new three.Vector2(0, data.brLength), - bul: 0 - }, - ]; - let pl = new exports.Polyline(lineData); - pl.CloseMark = true; - let mat = MoveMatrix(new three.Vector3(thick)) - .multiply(new three.Matrix4().makeRotationZ(0.25 * Math.PI * (isLeft ? 1 : -1))) - .multiply(MoveMatrix(new three.Vector3(-thick))); - pl.ApplyMatrix(mat) - .ApplyMatrix(MoveMatrix(data.basePt.add(new three.Vector3(-thick)))); - return pl; - } - /**根据多段线组构建酒格 */ - DrawBoardFormPolyLine(pls, actualWidth, config) { - const leftData = []; - const rightData = []; - for (let pl of pls) { - let data = this.ParsePolyLine(pl); - if (!data.isOk) - continue; - if (data.isLeft) - leftData.push(data); - else - rightData.push(data); - } - this.CreateBoard(leftData, rightData, actualWidth, config); - this.CreateBoard(rightData, leftData, actualWidth, config); - } - ParsePolyLine(pl) { - if (pl.IsClose) { - if (pl.EndParam !== 4) { - return { - isOk: false - }; - } - let pts = pl.GetStretchPoints(); - if (equalv3(pts[0], arrayLast(pts))) - pts.pop(); - /*****统一初始形状 - * **** h - * * * - * 0 **** t - */ - pts.sort((a, b) => { - if (equaln$1(a.y, b.y)) - return a.x - b.x; - else - return a.y - b.y; - }); - let pts1 = pts.splice(0, 2); - pts1.sort((a, b) => a.x - b.x); - pts.sort((a, b) => a.distanceTo(pts1[1]) - b.distanceTo(pts1[1])); - pts.unshift(...pts1); - const area = pl.Area; - let v1 = pts[1].clone().clone().sub(pts[0]); - let v2 = arrayLast(pts).clone().sub(pts[0]); - let [vecY, vecX] = v1.length() > v2.length() ? [v1, v2] : [v2, v1]; - let length = vecY.length(); - let thick = vecX.length(); - let mat = new three.Matrix4().makeBasis(vecX.normalize(), vecY.normalize(), ZAxis).setPosition(pts[0]); - let matInv = new three.Matrix4().getInverse(mat); - let bp = pts[0].clone().negate(); - if (equaln$1(length * thick, area, 5)) { - let an = vecY.angleTo(XAxis); - if (equaln$1(an, Math.PI / 4, R2WRTolerance)) { - pts.sort((p1, p2) => p2.x - p1.x); - return { - isOk: true, - isLeft: true, - pl, - length, - matInv, - basePt: new three.Vector3(pts[0].x, 0, pts[0].y), - thickness: thick, - isRo: true, - }; - } - else if (equaln$1(an, 3 * Math.PI / 4, R2WRTolerance)) { - pts.sort((p1, p2) => p1.y - p2.y); - return { - isOk: true, - isLeft: false, - pl, - length, - matInv, - basePt: new three.Vector3(pts[0].x, 0, pts[0].y), - thickness: thick, - isRo: true, - }; - } - else if (isParallelTo(vecX, XAxis, R2WRTolerance)) { - return { - isOk: true, - isLeft: false, - pl, - length, - matInv: new three.Matrix4().setPosition(bp), - basePt: new three.Vector3(pts[0].x, 0, pts[0].y), - thickness: thick, - isVer: true, - isRo: false, - }; - } - else if (isParallelTo(vecX, YAxis, R2WRTolerance)) { - return { - isOk: true, - isLeft: true, - pl, - length, - matInv: new three.Matrix4().setPosition(bp), - basePt: new three.Vector3(pts[1].x, 0, pts[1].y), - thickness: thick, - isRo: false, - }; - } - else { - return { - isOk: false - }; - } - } - } - return { - isOk: false - }; - } - /**绘制酒格 */ - CreateBoard(lData, rData, actualWidth, cof) { - if (!lData.length) - return; - let leftSeal, rightSeal, upSeal, downSeal, knifeRad; - let config; - if (cof) { - leftSeal = cof.sealedLeft; - rightSeal = cof.sealedRight; - upSeal = cof.sealedUp; - downSeal = cof.sealedDown; - knifeRad = cof.knifeRadius; - } - else { - config = this.Config; - leftSeal = config.leftEdge; - rightSeal = config.leftEdge; - upSeal = config.leftEdge; - downSeal = config.leftEdge; - knifeRad = config.grooveLengthAdd; - } - for (let i = 0; i < lData.length; i++) { - let d = lData[i]; - let dists = []; - for (let d2 of rData) { - let intPts = d.pl.IntersectWith(d2.pl, IntersectOption.ExtendNone); - if (intPts.length === 4) { - dists.push(...intPts.map(p => { - let p1 = p.applyMatrix4(d.matInv); - if (!d.isRo && !d.isVer) - return Math.abs(p1.x); - return Math.abs(p1.y); - })); - } - } - arraySortByNumber(dists); - arrayRemoveDuplicateBySort(dists, (n1, n2) => equaln$1(n1, n2, R2WRTolerance)); - let pl = this.GetPolyline(d, dists, cof); - if (pl) { - let br = exports.Board.CreateBoard(1, 1, d.thickness ?? config.boardThick, d.isVer ? BoardType.Vertical : BoardType.Layer); - if (d.isLeft) - br.Name = "右板" + (lData.length - i); - else - br.Name = "左板" + (i + 1); - br.ContourCurve = pl; - this.ParseHighSealing(br, leftSeal, rightSeal, upSeal, downSeal, d.isLeft); - br.KnifeRadius = knifeRad; - if (d.isRo) - br.RotateBoard(0, Math.PI / 4 * (d.isLeft ? -1 : 1), 0); - br.ApplyMatrix(MoveMatrix(this.space.SpaceBox.min)); - br.ApplyMatrix(MoveMatrix(d.basePt)); - if (config && (config.fullType === EFullType.ByHeight || config.arrayType === EWRackArrayType.Fixed) - && config.fullDir === EFullDir.Right) { - br.ApplyMatrix(MoveMatrix(new three.Vector3(this.space.Size.x - (actualWidth ?? 0)))); - } - br.ApplyMatrix(this.space.SpaceOCS); - this.boardlist.push(br); - } - } - } - /**构建酒格形状,加入齿 */ - GetPolyline(data, dists, cof) { - let len = data.length; - let isLeft = data.isLeft; - const size = this.space.Size; - let pl = new exports.Polyline(); - pl.Rectangle(size.y, len); - let addWidth; - let leftEdge; - let rightEdge; - let knifeRad; - if (cof) { - addWidth = cof.addLen; - leftEdge = cof.sealedLeft; - rightEdge = cof.sealedRight; - knifeRad = cof.knifeRadius; - } - else { - const config = this.Config; - addWidth = config.grooveWidthAdd; - leftEdge = config.leftEdge; - rightEdge = config.rightEdge; - knifeRad = config.grooveLengthAdd; - } - if (isLeft) { - if (!data.isVer) { - let newDist = dists.map(d => len - d); - dists.length = 0; - dists.push(...newDist); - } - addWidth = (addWidth - 2 * leftEdge) / 2; - } - else - addWidth = (addWidth - 2 * rightEdge) / 2; - if (dists.length % 2 === 0 && dists.length > 1) { - let pts = []; - for (let i = 0; i < dists.length; i++) { - if (i % 2 === 0) { - if (isLeft) { - pts.push(new three.Vector2(0, dists[i] + addWidth)); - pts.push(new three.Vector2(size.y / 2 + knifeRad, dists[i] + addWidth)); - } - else { - pts.push(new three.Vector2(size.y, dists[i] - addWidth)); - pts.push(new three.Vector2(size.y / 2 - knifeRad, dists[i] - addWidth)); - } - } - else { - if (isLeft) { - pts.push(new three.Vector2(size.y / 2 + knifeRad, dists[i] - addWidth)); - pts.push(new three.Vector2(0, dists[i] - addWidth)); - } - else { - pts.push(new three.Vector2(size.y / 2 - knifeRad, dists[i] + addWidth)); - pts.push(new three.Vector2(size.y, dists[i] + addWidth)); - } - } - } - pl.AddVertexAt(isLeft ? pl.NumberOfVertices : 2, pts); - } - return pl; - } -} - -/** - * 正酒格 - */ -class DrawUprightWineRackTool extends DrawWineRackTool { - Parse(space, config) { - super.Parse(space, config); - let size = space.Size; - let gripWidth = config.gripWidth; - let brThick = config.boardThick; - let spaceHeight = size.z; - let spaceWidth = size.x; - let gripHeight = gripWidth; - let actualHeight = spaceHeight; - let actualWidth = spaceWidth; - switch (config.arrayType) { - case EWRackArrayType.ByWidth: - // let tempWidthCount = 0; - // let tempHeightCount = 0; - // if (widCount > 0 || heightCount > 0) - // { - // tempWidthCount = Math.floor(spaceWidth / (gripWidth + brThick)); - // tempHeightCount = Math.floor(spaceHeight / (gripWidth + brThick)); - // gripWidth = (spaceWidth - (tempWidthCount - 1) * brThick) / tempWidthCount; - // gripHeight = (spaceHeight - (tempHeightCount - 1) * brThick) / tempHeightCount; - // if (widCount > 0) - // { - // heightCount = tempHeightCount; - // actualWidth = gripWidth * widCount + brThick * (widCount - 1); - // } - // else if (heightCount > 0) - // { - // widCount = tempWidthCount; - // actualWidth = gripWidth * widCount + brThick * (widCount - 1); - // } - // } - config.widthCount = Math.floor(spaceWidth / (gripWidth + brThick)); - config.heightCount = Math.floor(spaceHeight / (gripWidth + brThick)); - config.gripWidth = (spaceWidth - (config.widthCount - 1) * brThick) / config.widthCount; - gripHeight = (spaceHeight - (config.heightCount - 1) * brThick) / config.heightCount; - break; - case EWRackArrayType.ByCount: - if (config.widthCount > 0) { - config.widthCount = Math.floor(config.widthCount); - } - else { - let gk = (spaceHeight - 2 * brThick) / config.heightCount; - config.widthCount = Math.floor((spaceWidth - 2 * brThick) / gk + 1e-6); - } - if (config.heightCount > 0) { - config.heightCount = Math.floor(config.heightCount); - } - else { - let gk = (spaceWidth - 2 * config.heightCount) / config.heightCount; - config.heightCount = Math.floor((spaceHeight - 2 * brThick) / gk + 1e-6); - } - config.gripWidth = (spaceWidth - (config.widthCount - 1) * brThick) / config.widthCount; - gripHeight = (spaceHeight - (config.heightCount - 1) * brThick) / config.heightCount; - break; - case EWRackArrayType.Fixed: - config.widthCount = Math.floor(config.widthCount); - config.heightCount = Math.floor(config.heightCount); - actualWidth = gripWidth * config.widthCount + brThick * (config.widthCount - 1); - actualHeight = gripWidth * config.heightCount + brThick * (config.heightCount - 1); - } - if (config.widthCount <= 0 || config.heightCount <= 0) - throw `绘制酒格失败,酒格个数异常! 宽个数:${config.widthCount} 高个数:${config.heightCount}`; - config.widthCount--; - config.heightCount--; - this.BuildBoard(gripHeight, actualWidth, actualHeight, space); - // this.AddLayerOrVerticalBoard(actualWidth, actualHeight); - } - BuildBoard(gripHeight, spaceWidth, spaceHeight, space) { - const config = this.Config; - let min = space.SpaceBox.min; - let size = space.Size; - let brThick = config.boardThick; - let verBr = exports.Board.CreateBoard(spaceHeight, size.y, brThick, BoardType.Vertical); - this.ParseBrTooth(verBr, gripHeight); - for (let i = 1; i <= config.widthCount; i++) { - let br = verBr.Clone(); - br.Name = "右板" + i; - br.ApplyMatrix(MoveMatrix(min.clone().add(new three.Vector3(config.gripWidth * i + (i - 1) * brThick)))).ApplyMatrix(space.SpaceOCS); - this.boardlist.push(br); - } - let lyBr = exports.Board.CreateBoard(spaceWidth, size.y, brThick); - this.ParseBrTooth(lyBr); - for (let i = 1; i <= config.heightCount; i++) { - let br = lyBr.Clone(); - br.Name = "左板" + i; - br.ApplyMatrix(MoveMatrix(min.clone().add(new three.Vector3(spaceWidth, 0, gripHeight * i + (i - 1) * brThick)))) - .ApplyMatrix(space.SpaceOCS); - this.boardlist.push(br); - } - } - ParseBrTooth(br, gripHeight) { - const config = this.Config; - let initPts = []; - let addWidth = config.grooveWidthAdd; - let topEdge = config.topEdge; - let bottomEdge = config.bottomEdge; - let leftEdge = config.leftEdge; - let rightEdge = config.rightEdge; - let grooveLenAdd = config.grooveLengthAdd; - br.BoardProcessOption.sealedUp = topEdge.toString(); - br.BoardProcessOption.sealedDown = bottomEdge.toString(); - br.BoardProcessOption.sealedLeft = leftEdge.toString(); - br.BoardProcessOption.sealedRight = rightEdge.toString(); - if (br.BoardType === BoardType.Layer) { - addWidth = (addWidth - 2 * leftEdge) / 2; - let p1 = new three.Vector3(0, config.gripWidth - addWidth); - let p2 = new three.Vector3(br.Width / 2 + grooveLenAdd, config.gripWidth - addWidth); - let p3 = new three.Vector3(br.Width / 2 + grooveLenAdd, config.gripWidth + br.Thickness + addWidth); - let p4 = new three.Vector3(0, config.gripWidth + br.Thickness + addWidth); - initPts.push(p1, p2, p3, p4); - for (let i = 2; i <= config.widthCount; i++) { - initPts.push(...[p1, p2, p3, p4].map(p => p.clone().add(new three.Vector3(0, (config.gripWidth + br.Thickness) * (i - 1))))); - } - initPts.reverse(); - let cu = br.ContourCurve; - cu.AddVertexAt(cu.EndParam, initPts.map(p => AsVector2(p))); - br.ContourCurve = cu; - } - else { - addWidth = (addWidth - 2 * rightEdge) / 2; - let p1 = new three.Vector3(br.Width, gripHeight - addWidth); - let p2 = new three.Vector3(br.Width / 2 - grooveLenAdd, gripHeight - addWidth); - let p3 = new three.Vector3(br.Width / 2 - grooveLenAdd, gripHeight + br.Thickness + addWidth); - let p4 = new three.Vector3(br.Width, gripHeight + br.Thickness + addWidth); - initPts.push(p1, p2, p3, p4); - for (let i = 2; i <= config.heightCount; i++) { - initPts.push(...[p1, p2, p3, p4].map(p => p.clone().add(new three.Vector3(0, (gripHeight + br.Thickness) * (i - 1))))); - } - let cu = br.ContourCurve; - cu.AddVertexAt(2, initPts.map(p => AsVector2(p))); - br.ContourCurve = cu; - } - this.ParseHighSealing(br, config.leftEdge, config.rightEdge, config.topEdge, config.bottomEdge, br.BoardType === BoardType.Layer); - } -} - -exports.TemplateWineRackRecord = class TemplateWineRackRecord extends exports.TemplateRecord { - constructor() { - super(); - this.option = { ...DefaultWineRackConfig }; - this.name = "酒格(自动)"; - } - get Option() { - return Object.assign({}, this.option); - } - set Option(option) { - this.WriteAllObjectRecord(); - Object.assign(this.option, option); - ExtendsBoardThickness(this, option.boardThick); - } - async Update() { - await super.Update(); - let bh = this.GetParam("BH")?.value; - if (bh) - this.option.boardThick = bh; - let bh2 = this.GetParam("BH2")?.value; - if (bh2) - this.option.brThick2 = bh2; - let wineRack; - if (this.option.type === EWineRackType.Oblique) - wineRack = DrawObliqueWineRackTool.GetInstance(); - else - wineRack = DrawUprightWineRackTool.GetInstance(); - let sbrs = this.PositioningSupportBoards; - let space = new ISpaceParse(sbrs, this._CacheSpaceCS); - space.ParseOK = true; - space.SpaceBox = new Box3Ext(new three.Vector3(), this._CacheSpaceSize); - wineRack.Parse(space, this.Option); - let nbrs = wineRack.boardlist; - for (let i = nbrs.length; i < this.Objects.length; i++) - this.Objects[i].Object.Erase(); - for (let i = 0; i < nbrs.length; i++) { - if (i < this.Objects.length) { - let br = this.Objects[i].Object; - br.Erase(false); - br.CopyFrom(nbrs[i]); - br.SpaceOCS = this._CacheSpaceCS; - } - else { - this._db.ModelSpace.Append(nbrs[i]); - this.Objects.push(nbrs[i].Id); - nbrs[i].SpaceOCS = this._CacheSpaceCS; - } - } - } - //#region -------------------------File------------------------- - //对象应该实现dataIn和DataOut的方法,为了对象的序列化和反序列化 - //对象从文件中读取数据,初始化自身 - ReadFile(file) { - let ver = file.Read(); - super.ReadFile(file); - this.option.type = file.Read(); - this.option.arrayType = file.Read(); - this.option.fullType = file.Read(); - this.option.isFull = file.Read(); - this.option.fullDir = file.Read(); - this.option.isLock = file.Read(); - this.option.heightCount = file.Read(); - this.option.widthCount = file.Read(); - this.option.isTotalDepth = file.Read(); - this.option.depth = file.Read(); - this.option.calcDepth = file.Read(); - this.option.gripWidth = file.Read(); - this.option.boardThick = file.Read(); - this.option.grooveWidthAdd = file.Read(); - this.option.leftEdge = file.Read(); - this.option.rightEdge = file.Read(); - this.option.topEdge = file.Read(); - this.option.bottomEdge = file.Read(); - this.option.frontCut = file.Read(); - this.option.leftCut = file.Read(); - this.option.rightCut = file.Read(); - this.option.topCut = file.Read(); - this.option.grooveLengthAdd = file.Read(); - this.option.isDrawLy = file.Read(); - this.option.isDrawVer = file.Read(); - this.option.brThick2 = file.Read(); - if (ver > 1) - this.option.followNarrow = file.Read(); - } - //对象将自身数据写入到文件. - WriteFile(file) { - file.Write(2); - super.WriteFile(file); - file.Write(this.option.type); - file.Write(this.option.arrayType); - file.Write(this.option.fullType); - file.Write(this.option.isFull); - file.Write(this.option.fullDir); - file.Write(this.option.isLock); - file.Write(this.option.heightCount); - file.Write(this.option.widthCount); - file.Write(this.option.isTotalDepth); - file.Write(this.option.depth); - file.Write(this.option.calcDepth); - file.Write(this.option.gripWidth); - file.Write(this.option.boardThick); - file.Write(this.option.grooveWidthAdd); - file.Write(this.option.leftEdge); - file.Write(this.option.rightEdge); - file.Write(this.option.topEdge); - file.Write(this.option.bottomEdge); - file.Write(this.option.frontCut); - file.Write(this.option.leftCut); - file.Write(this.option.rightCut); - file.Write(this.option.topCut); - file.Write(this.option.grooveLengthAdd); - file.Write(this.option.isDrawLy); - file.Write(this.option.isDrawVer); - file.Write(this.option.brThick2); - file.Write(this.option.followNarrow); - } -}; -exports.TemplateWineRackRecord = __decorate([ - Factory -], exports.TemplateWineRackRecord); - /** * 更新视口实体的时机: * ->在布局状态下才应该更新,否则则标记为需要更新(或者不需要标记) @@ -35012,6 +35165,10 @@ exports.RoomWallLine = class RoomWallLine extends exports.RoomWallBase { let inv = this.OCSInv; let thisParam = new GetLineParam(this); const BuildLeftFace = (curve) => { + let materialIndex = 0; + if (curve[CURVE_FACE_TYPE_KEY] === exports.WallFaceType.Outside) { + materialIndex = 1; + } if (curve instanceof exports.Line) { let tapes = [new Tape(0, 1, 0, this._Height)]; let curveParam = new GetLineParam(curve); @@ -35046,12 +35203,16 @@ exports.RoomWallLine = class RoomWallLine extends exports.RoomWallBase { let endX = curveParam.Length * 1e-3 * tape.end; let startZ = tape.bottom * 1e-3; let endZ = tape.top * 1e-3; - geo.faces.push(new three.Face3(startIndex, startIndex + 2, startIndex + 1, parse.LeftDir), new three.Face3(startIndex + 1, startIndex + 2, startIndex + 3, parse.LeftDir)); + geo.faces.push(new three.Face3(startIndex, startIndex + 2, startIndex + 1, parse.LeftDir, undefined, materialIndex), new three.Face3(startIndex + 1, startIndex + 2, startIndex + 3, parse.LeftDir, undefined, materialIndex)); geo.faceVertexUvs[0].push([new three.Vector2(startX, startZ), new three.Vector2(startX, endZ), new three.Vector2(endX, startZ)], [new three.Vector2(endX, startZ), new three.Vector2(startX, endZ), new three.Vector2(endX, endZ)]); } } }; const BuildRightFace = (curve) => { + let materialIndex = 0; + if (curve[CURVE_FACE_TYPE_KEY] === exports.WallFaceType.Outside) { + materialIndex = 1; + } if (curve instanceof exports.Line) { let tapes = [new Tape(0, 1, 0, this._Height)]; let curveParam = new GetLineParam(curve); @@ -35086,7 +35247,7 @@ exports.RoomWallLine = class RoomWallLine extends exports.RoomWallBase { let endX = curveParam.Length * 1e-3 * tape.end; let startZ = tape.bottom * 1e-3; let endZ = tape.top * 1e-3; - geo.faces.push(new three.Face3(startIndex, startIndex + 1, startIndex + 2, curveParam.RightDir), new three.Face3(startIndex + 1, startIndex + 3, startIndex + 2, curveParam.RightDir)); + geo.faces.push(new three.Face3(startIndex, startIndex + 1, startIndex + 2, curveParam.RightDir, undefined, materialIndex), new three.Face3(startIndex + 1, startIndex + 3, startIndex + 2, curveParam.RightDir, undefined, materialIndex)); geo.faceVertexUvs[0].push([new three.Vector2(startX, startZ), new three.Vector2(endX, startZ), new three.Vector2(startX, endZ)], [new three.Vector2(endX, startZ), new three.Vector2(endX, endZ), new three.Vector2(startX, endZ)]); } } @@ -36203,7 +36364,8 @@ class RoomRegionParse { for (let r of routes) r.curve[CURVE_FACE_TYPE_KEY] = exports.WallFaceType.Outside; //我们需要返回这个轮廓,以便在ue中可以绘制真正的屋顶 - con.contour.Curve.Z = maxZ; + con.contour.Curve["MaxZ"] = maxZ; + con.contour.Curve["MinZ"] = minZ; roofs.push(con.contour.Curve); } else if (con.contour.Curve.ColorIndex === 1) //内空区域 diff --git a/api.cjs.js.map b/api.cjs.js.map index d49cf79..78e0f58 100644 --- a/api.cjs.js.map +++ b/api.cjs.js.map @@ -1 +1 @@ -{"version":3,"file":"api.cjs.js","sources":["../src/Geometry/CoordinateSystem.ts","../src/Common/SystemEnum.ts","../src/GraphicsSystem/RenderType.ts","../src/ApplicationServices/HostApplicationServices.ts","../src/Common/Dispose.ts","../src/Common/Status.ts","../src/Geometry/Box.ts","../src/DatabaseServices/AutoRecord.ts","../src/DatabaseServices/CADFactory.ts","../src/DatabaseServices/ObjectId.ts","../src/DatabaseServices/CADFiler.ts","../src/DatabaseServices/AllObjectData.ts","../src/DatabaseServices/EraseEntityData.ts","../src/DatabaseServices/CADObject.ts","../src/DatabaseServices/HistorycRecord.ts","../src/Add-on/testEntity/USE_WORLD_UV.ts","../src/DatabaseServices/SymbolTableRecord.ts","../src/DatabaseServices/MaterialTableRecord.ts","../src/DatabaseServices/PhysicalMaterialRecord.ts","../src/DatabaseServices/Entity/Entity.ts","../src/Common/eval.ts","../src/Common/StoreageKeys.ts","../src/Common/Utils.ts","../src/Geometry/GeUtils.ts","../src/Common/Matrix4Utils.ts","../src/Editor/ObjectSnapMode.ts","../src/Geometry/Orbit.ts","../src/Common/ArrayExt.ts","../src/DatabaseServices/Shape2.ts","../src/Geometry/CreatePolylinePath.ts","../src/GLSL/GoochShader.ts","../src/Common/ColorPalette.ts","../src/Editor/BufferGeometry2GeometryCacheMap.ts","../src/Geometry/BufferGeometryUtils.ts","../src/DatabaseServices/Entity/Curve.ts","../src/DatabaseServices/Entity/DragPointType.ts","../src/Geometry/Plane.ts","../src/DatabaseServices/Entity/Line.ts","../src/DatabaseServices/Entity/Ellipse.ts","../src/DatabaseServices/Entity/Circle.ts","../src/DatabaseServices/SplineConver2Polyline.ts","../src/DatabaseServices/Spline.ts","../src/Geometry/CurveIntersection.ts","../src/Geometry/CurveMap.ts","../src/Geometry/RegionParse.ts","../src/Geometry/CreateContour2.ts","../src/GraphicsSystem/BoolOperateUtils.ts","../src/DatabaseServices/Contour.ts","../src/GraphicsSystem/OffsetPolyline.ts","../src/DatabaseServices/PointInPolyline.ts","../src/DatabaseServices/Entity/Polyline.ts","../src/GraphicsSystem/IntersectWith.ts","../src/DatabaseServices/Entity/Arc.ts","../src/Geometry/Count.ts","../src/Common/CurveUtils.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/DatabaseServices/3DSolid/Hole.ts","../src/DatabaseServices/3DSolid/CylinderHole.ts","../src/UI/Store/BoardInterface.ts","../src/Add-on/DrawDrilling/HoleUtils.ts","../src/Geometry/BoardUVGenerator.ts","../src/Geometry/PointShapeUtils.ts","../src/Common/Toaster.ts","../src/UI/Components/RightPanel/RightPanelInterface.ts","../src/UI/Store/BoardFindInterface.ts","../src/UI/Store/DoorInterface.ts","../src/UI/Store/LatticeInterface.ts","../src/UI/Store/WineRackInterface.ts","../src/Editor/OrderType.ts","../src/Editor/DefaultConfig.ts","../src/Nest/Common/Util.ts","../src/Common/Log.ts","../src/Geometry/SweepGeometry.ts","../src/Geometry/OBB/obb.ts","../src/DatabaseServices/3DSolid/SweepSolid.ts","../src/DatabaseServices/Hardware/HardwareTopline.ts","../src/Add-on/LookOverBoardInfos/LookOverBoardInfosTool.ts","../src/Common/Report.ts","../src/Common/ShowSelectObjects.ts","../src/Geometry/CreateWireframe.ts","../src/Geometry/SimpleExtrudeEdgeGeometry.ts","../src/Common/CSGIntersect.ts","../src/csg/core/math/IsMirrot.ts","../src/csg/core/math/Polygon3.ts","../src/csg/core/Geometry2CSG.ts","../src/Geometry/BSPGroupParse.ts","../src/Geometry/FastOffset.ts","../src/Geometry/ExtrudeMeshGeomBuilder/SplitCurveParams.ts","../src/Geometry/ExtrudeMeshGeomBuilder/ExtrudeEdgeGeometry2.ts","../src/DatabaseServices/Entity/GenUVForWorld.ts","../src/DatabaseServices/Entity/Extrude.ts","../src/DatabaseServices/3DSolid/ExtrudeHole.ts","../src/Common/AddEntityDrawObject.ts","../src/DatabaseServices/Entity/CompositeEntity.ts","../src/DatabaseServices/Hardware/HardwareCompositeEntity.ts","../src/Geometry/DrillParse/Face.ts","../src/Geometry/DrillParse/BoardGetFace.ts","../src/Common/Singleton.ts","../src/GraphicsSystem/ToolPath/OptimizeToolPath.ts","../src/GraphicsSystem/ToolPath/FeedingToolPath.ts","../src/Production/Convert2PtsBul.ts","../src/Production/Product.ts","../src/GraphicsSystem/ParseEdgeSealDir.ts","../src/GraphicsSystem/CalcEdgeSealing.ts","../src/GraphicsSystem/ToolPath/VKnifToolPath.ts","../src/DatabaseServices/Entity/Board.ts","../src/DatabaseServices/Room/ParseService/RangeUtils.ts","../src/DatabaseServices/Room/ParseService/CurveTrim.ts","../src/Geometry/Matrix2.ts","../src/Common/EntityUpdateWrap.ts","../src/Nest/Common/ClipperCpp.ts","../src/DatabaseServices/Room/Entity/RoomBase.ts","../src/DatabaseServices/Room/Entity/Wall/Hole/RoomHoleBase.ts","../src/DatabaseServices/Room/Entity/Wall/Hole/RoomHolePolyline.ts","../src/DatabaseServices/Room/Entity/Wall/WallSnapMode.ts","../src/DatabaseServices/Room/Entity/Wall/RoomWallBase.ts","../src/DatabaseServices/Room/Entity/Wall/RoomWallArc.ts","../src/DatabaseServices/Room/ParseService/Hole/RoomWallPlaceIHoleHelper.ts","../src/Reactor/RoomHoleReactor.ts","../src/Add-on/Purge.ts","../src/DatabaseServices/CreateObjectData.ts","../src/DatabaseServices/RemoveObjectData.ts","../src/DatabaseServices/SymbolTable.ts","../src/DatabaseServices/BlockTable.ts","../src/DatabaseServices/ObjectCollection.ts","../src/DatabaseServices/BlockTableRecord.ts","../src/DatabaseServices/ObjectAllDataHistoryRecord.ts","../src/DatabaseServices/CommandHistoryRecord.ts","../src/DatabaseServices/CameraSnapshoot/CameraSnapshootRecord.ts","../src/DatabaseServices/DeepCloneFiler.ts","../src/DatabaseServices/GroupTable.ts","../src/Editor/CommandState.ts","../src/DatabaseServices/HistoricManage.ts","../src/DatabaseServices/Lights/Light.ts","../src/DatabaseServices/Lights/AmbientLight.ts","../src/DatabaseServices/Lights/SunLightHelper.ts","../src/DatabaseServices/Lights/DirectionalLight.ts","../src/DatabaseServices/Lights/HemisphereLight.ts","../src/DatabaseServices/MaterialTable.ts","../src/DatabaseServices/ProcessingGroup/ProcessingGroupTable.ts","../src/DatabaseServices/Template/TemplateTable.ts","../src/DatabaseServices/Texture.ts","../src/DatabaseServices/TextureTable.ts","../src/DatabaseServices/WblockCloneFiler.ts","../src/DatabaseServices/Database.ts","../src/DatabaseServices/FaceEntity.ts","../src/DatabaseServices/GroupTableRecord.ts","../src/DatabaseServices/Text/Text.ts","../src/Editor/VisualSpaceBox.ts","../src/GraphicsSystem/CameraUpdate.ts","../src/DatabaseServices/ViewportEntity.ts","../src/DatabaseServices/3DSolid/Cylineder.ts","../src/DatabaseServices/3DSolid/RevolveSolid.ts","../src/DatabaseServices/Dimension/Dimension.ts","../src/DatabaseServices/Dimension/GetDimLineMaterial.ts","../src/DatabaseServices/Dimension/2LineAngularDimension.ts","../src/DatabaseServices/Dimension/AlignedDimension.ts","../src/DatabaseServices/Dimension/ArcDimension.ts","../src/DatabaseServices/Dimension/RadiusDimension.ts","../src/DatabaseServices/Dimension/DiameterDimension.ts","../src/DatabaseServices/Dimension/LinearDimension.ts","../src/DatabaseServices/Entity/BoxSolid.ts","../src/Add-on/testEntity/BoxLine.ts","../src/DatabaseServices/Entity/EntityRef.ts","../src/DatabaseServices/Entity/Point.ts","../src/DatabaseServices/Lights/PointLightHelper.ts","../src/DatabaseServices/Lights/PointLight.ts","../src/DatabaseServices/Lights/RectAreaLightHelper.ts","../src/DatabaseServices/Lights/RectAreaLight.ts","../src/DatabaseServices/Lights/SpotLightHelper.ts","../src/DatabaseServices/Lights/SpotLight.ts","../src/DatabaseServices/ProcessingGroup/ProcessingGroupRecord.ts","../src/DatabaseServices/Room/Entity/Flat/RoomFlatBase.ts","../src/DatabaseServices/Room/Entity/Flat/RoomFlatFloor.ts","../src/DatabaseServices/Room/Entity/Flat/RoomFlatTop.ts","../src/DatabaseServices/Room/Entity/Region/RoomRegion.ts","../src/DatabaseServices/Room/Entity/Wall/Hole/RoomHoleLine.ts","../src/Geometry/SpaceParse/ISpaceParse.ts","../src/DatabaseServices/Template/Action/TemplateAction.ts","../src/Editor/PromptResult.ts","../src/Add-on/FilletUtils.ts","../src/DatabaseServices/Template/Action/TemplateFilletAction.ts","../src/UI/Components/ApplyGoodInfo.tsx","../src/DatabaseServices/Template/Action/TemplateMaterialAction.ts","../src/DatabaseServices/Template/Param/TemplateParamType.ts","../src/DatabaseServices/Template/Param/TemplateParam.ts","../src/Geometry/SpaceParse/ClampSpaceParse.ts","../src/Geometry/SpaceParse/ClampSpaceParseFix.ts","../src/DatabaseServices/Template/Positioning/Positioning.ts","../src/DatabaseServices/Template/Positioning/PositioningClampSpace.ts","../src/DatabaseServices/Template/Positioning/PositioningTemporary.ts","../src/DatabaseServices/Template/TemplateType.ts","../src/DatabaseServices/Template/TemplateRecord.ts","../src/DatabaseServices/Template/Action/TempateThicknessAction.ts","../src/DatabaseServices/Template/Action/TemplateMoveAction.ts","../src/DatabaseServices/Template/Action/TemplateSetSealAction.ts","../src/DatabaseServices/Template/Action/TemplateStretchGripAction.ts","../src/DatabaseServices/Template/Action/TemplateStretchScaleBoxAction.ts","../src/DatabaseServices/Template/Positioning/PositioningBoardSpace.ts","../src/Add-on/DrawBoard/BuildBoardTool.ts","../src/DatabaseServices/Template/ProgramTempate/TemplateBoard.ts","../src/DatabaseServices/Template/ProgramTempate/TemplateBehindBoard.ts","../src/Add-on/LatticeDrawer/LatticeDrawerTool.ts","../src/DatabaseServices/Template/ProgramTempate/TemplateLatticeRecord.ts","../src/GraphicsSystem/GripScene.ts","../src/Editor/SelectFilter.ts","../src/Editor/SelectBox.ts","../src/Editor/PointPick.ts","../src/Add-on/DrawBoard/ActivityLayerBoardTool.ts","../src/DatabaseServices/Template/ProgramTempate/TemplateLayerBoard.ts","../src/DatabaseServices/Template/ProgramTempate/TemplateLeftRightBoardRecord.ts","../src/DatabaseServices/Template/ProgramTempate/TemplateSizeBoard.ts","../src/Add-on/DrawBoard/BuildTopBottomBoardTool.ts","../src/DatabaseServices/Template/ProgramTempate/TemplateTopBottomBoard.ts","../src/DatabaseServices/Template/ProgramTempate/TemplateVerticalBoard.ts","../src/DatabaseServices/Template/ProgramTempate/TemplateVisualSpace.ts","../src/Add-on/DrawWineRack/DrawWinRackTool.ts","../src/Add-on/DrawWineRack/DrawObliqueWineRackTool.ts","../src/Add-on/DrawWineRack/DrawUprightWineRackTool.ts","../src/DatabaseServices/Template/ProgramTempate/TemplateWineRackRecord.ts","../src/DatabaseServices/ViewportEntity/ViewportEntity2.ts","../src/DatabaseServices/Room/Entity/Wall/RoomWallLine.ts","../src/DatabaseServices/Room/ParseService/GetCurveParam.ts","../src/Nest/Common/Area.ts","../src/Nest/Common/Vector2.ts","../src/Nest/Common/Box2.ts","../src/Nest/Core/Path.ts","../src/Nest/Core/NestCache.ts","../src/Nest/Converter/Path2Polyline.ts","../src/Nest/Converter/Curves2Points.ts","../src/DatabaseServices/Room/ParseService/ParseRegionTextPos.ts","../src/DatabaseServices/Room/ParseService/RegionReplacement.ts","../src/DatabaseServices/Room/ParseService/RoomRegionParse.ts","../src/DatabaseServices/Room/ParseService/RoomWallExtendAndBreak.ts","../src/DatabaseServices/Room/ParseService/RoomWallParse.ts"],"sourcesContent":["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(m = new Matrix4): Matrix4\r\n {\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","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\r\nexport enum FractionDigitsType\r\n{\r\n zero = 0,\r\n one = 1,\r\n two = 2,\r\n three = 3,\r\n four = 4,\r\n five = 5,\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 PlaceFace = 8,//排版面\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\r\nexport function IsPhysical(renderType: RenderType)\r\n{\r\n return renderType === RenderType.Physical || renderType === RenderType.Physical2 || renderType === RenderType.PhysicalPrint || renderType === RenderType.Physical2Print;\r\n}\r\n","import { MeshBasicMaterial, MeshStandardMaterial, Texture } from 'three';\r\nimport { FractionDigitsType } from '../Common/SystemEnum';\r\nimport { ICursorConfig } from '../Editor/ICursorConfig';\r\nimport { RenderType } from '../GraphicsSystem/RenderType';\r\nimport { DrillingOption } from '../UI/Store/drillInterface';\r\n\r\nexport class IHostApplicationServices\r\n{\r\n DefaultMeshMaterial?: MeshBasicMaterial | MeshStandardMaterial;\r\n @ProxyValue isShowLightShadow: boolean = true;//灯光阴影 (除太阳光外)\r\n ShowHistoryLog: boolean = true;\r\n\r\n @ProxyValue Physical2EdgeColor = 7;//真实视图带线框的线框颜色 默认白色\r\n @ProxyValue ConceptualEdgeColor = 7;//概念线框的颜色\r\n\r\n DrawWallBottomFace = false;//绘制底面\r\n\r\n private __ProxyObject__: any;//代理对象,当代理对象存在时,获取内部的值指向代理对象\r\n static __ProxyKeys__: string[] = [];//代理对象,当代理对象存在时,获取内部的值指向代理对象\r\n get ProxyObject() { return this.__ProxyObject__; }\r\n set ProxyObject(obj: any)\r\n {\r\n this.__ProxyObject__ = obj;\r\n\r\n for (let key of IHostApplicationServices.__ProxyKeys__)\r\n {\r\n let v = this.__ProxyObject__[key];\r\n if (v === undefined)\r\n throw \"程序内部错误:未能代理变量!\";\r\n }\r\n }\r\n\r\n //#region _RenderType 渲染类型\r\n @ProxyValue _renderType: RenderType = RenderType.Wireframe;\r\n //#endregion\r\n\r\n //#region 排钻数据\r\n @ProxyValue DrillConfigs: Map = new Map;\r\n //#endregion\r\n\r\n //#region 开启排钻反应器\r\n @ProxyValue openDrillingReactor = true;\r\n //#endregion\r\n\r\n //#region 封边数据\r\n @ProxyValue sealingColorMap: [string, string][] = [];\r\n //#endregion\r\n\r\n //#endregion 显示纹路\r\n @ProxyValue showLines = false;\r\n //#endregion\r\n\r\n //#region\r\n @ProxyValue uese: string;\r\n //#endregion\r\n\r\n //#region 偏心轮过滤\r\n @ProxyValue forceFilterPxl: boolean = false;\r\n //#endregion\r\n\r\n @ProxyValue 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 statTk: false,//统计通孔排钻\r\n statSt: false,//统计双头排钻\r\n };\r\n\r\n @ProxyValue viewSize = {\r\n minViewHeight: 1e-3,\r\n maxViewHeight: 3e6,\r\n zoomSpeed: 0.6\r\n };\r\n\r\n @ProxyValue cursorSize: ICursorConfig = {\r\n D2: 1000,\r\n D3: 100,\r\n SquareSize: 10,\r\n };\r\n\r\n @ProxyValue dimTextHeight = 60;\r\n @ProxyValue lineWidth = 2; //打印线框\r\n @ProxyValue fractionDigitsType: FractionDigitsType = FractionDigitsType.two;\r\n\r\n private constructor() { };\r\n\r\n private static _SingleInstance: IHostApplicationServices;\r\n static GetInstance(): IHostApplicationServices\r\n {\r\n if (this._SingleInstance) return this._SingleInstance;\r\n this._SingleInstance = new IHostApplicationServices;\r\n return this._SingleInstance;\r\n }\r\n\r\n //加载贴图,将在index.ts中设置实现的函数\r\n async LoadDefaultExr(): Promise { return; }\r\n async LoadMetalEnv(): Promise { return; }\r\n}\r\n\r\nexport let HostApplicationServices = IHostApplicationServices.GetInstance();\r\n\r\n\r\n//将属性字段指向代理对象\r\nfunction ProxyValue(\r\n target: any,\r\n propertyKey: string,\r\n descriptor?: PropertyDecorator)\r\n{\r\n let privateKey = '__' + propertyKey;\r\n IHostApplicationServices.__ProxyKeys__.push(propertyKey);\r\n\r\n Object.defineProperty(target, propertyKey,\r\n {\r\n set: function (value)\r\n {\r\n if (this.ProxyObject)\r\n this.ProxyObject[propertyKey] = value;\r\n else\r\n this[privateKey] = value;\r\n },\r\n get: function ()\r\n {\r\n if (this.ProxyObject)\r\n return this.ProxyObject[propertyKey];\r\n return this[privateKey];\r\n },\r\n enumerable: true,\r\n configurable: true\r\n }\r\n );\r\n}\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","\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","import { Box3, Vector3 } 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 BoxIsSolid(this, 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\r\nlet size = new Vector3;\r\nexport function BoxIsSolid(box: Box3, minSize = 1)\r\n{\r\n box.getSize(size);\r\n return size.x > minSize && size.y > minSize && size.z > minSize;\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","\r\n//const UE_REX_DEL = /_.*/g;\r\n\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.replace(UE_REX_DEL, \"\"), C);\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 { 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 _Object?: T) { }\r\n\r\n get IsErase(): boolean\r\n {\r\n return !this._Object || this._Object.IsErase;\r\n }\r\n\r\n set Object(obj: T)\r\n {\r\n this._Object = obj;\r\n }\r\n get Object(): T | undefined\r\n {\r\n return this._Object;\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 { Vec3 } from '../Geometry/IVec3';\r\nimport { CADFactory } from './CADFactory';\r\nimport { CADObject } from './CADObject';\r\nimport { Database } from './Database';\r\nimport { Entity } from './Entity/Entity';\r\nimport { ISerialize } from './ISerialize';\r\nimport { ObjectId } from './ObjectId';\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 if (!obj)\r\n console.error(\"未注册类名:\", className);\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 WriteVec3(v3: Vec3)\r\n {\r\n this._datas.push(v3.x, v3.y, v3.z);\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)// id?.Object 为什么没有这么写? 这么写会精简图纸,但是不确定会不会引发新的问题? 其他地方有没有可能依赖这个特性实现一些功能? 比如排钻,如果排钻被删除,我们依然知道排钻的顺序?(曾经拥有?) 暂时不优化似乎也没事?\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 { 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","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 if (this.objectId)\r\n this.objectId.Object = undefined;//解除绑定(关联bug:绘制关联切割板后删除切割板,在pu时调用了这个,此时obj被删除但是还会被拷贝,导致错误崩溃)\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() as ObjectId;\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 let id = file.ReadObjectId() as ObjectId;\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) 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 f.database = this._db;//这样保证了关联的数据(例如材质)\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 { Factory } from './CADFactory';\r\nimport { CADFiler } from './CADFiler';\r\nimport { ISerialize } from './ISerialize';\r\n\r\n/**\r\n * 历史记录,用于撤销和重做的数据.\r\n */\r\n@Factory\r\nexport class HistorycRecord\r\n{\r\n //指定撤销时所需要的数据\r\n undoData: ISerialize;\r\n //制定重做时所需要的数据\r\n redoData: ISerialize;\r\n userData: ISerialize;\r\n\r\n //#region -------------------------File-------------------------\r\n //对象应该实现dataIn和DataOut的方法,为了对象的序列化和反序列化\r\n\r\n //对象从文件中读取数据,初始化自身\r\n ReadFile(file: CADFiler)\r\n {\r\n let ver = file.Read();\r\n this.undoData = file.ReadObject();\r\n this.redoData = file.ReadObject();\r\n this.userData = file.ReadObject();\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(1);\r\n file.WriteObject(this.undoData);\r\n file.WriteObject(this.redoData);\r\n file.WriteObject(this.userData);\r\n }\r\n //#endregion\r\n}\r\n","\r\nexport const USE_WORLD_UV = \"USE_WORLD_UV\";\r\nexport const U_WORLD_REP = \"u_w_rep\";\r\nexport const V_WORLD_REP = \"v_w_rep\";\r\n\r\nexport const U_WORLD_MOVE = \"u_w_move\";\r\nexport const V_WORLD_MOVE = \"v_w_move\";\r\n\r\nexport const U_WORLD_RO = \"v_w_ro\";\r\n\r\nexport const U_REP = \"u_rep\";\r\nexport const V_REP = \"v_rep\";\r\n\r\nexport const U_MOVE = \"u_move\";\r\nexport const V_MOVE = \"v_move\";\r\n\r\nexport const U_RO = \"v_ro\";\r\n","import { CADObject } from \"./CADObject\";\r\nimport { CADFiler } from \"./CADFiler\";\r\nimport { SymbolTable } from \"./SymbolTable\";\r\nimport { Status } from \"../Common/Status\";\r\n\r\nexport class SymbolTableRecord extends CADObject\r\n{\r\n protected name: string = \"\";\r\n get Name()\r\n {\r\n return this.name;\r\n }\r\n set Name(name: string)\r\n {\r\n if (this.name === name) return;\r\n this.WriteAllObjectRecord();\r\n if (this.Owner)\r\n {\r\n let symbolTable = this.Owner.Object as SymbolTable;\r\n if (!symbolTable.ChangeRecordName(this, name))\r\n return;\r\n }\r\n this.name = name;\r\n }\r\n\r\n Add(obj: CADObject, isCheckObjectCleanly = true): Status\r\n {\r\n return Status.False;\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.name);\r\n }\r\n\r\n ReadFile(file: CADFiler)\r\n {\r\n super.ReadFile(file);\r\n file.Read();\r\n this.name = file.Read();\r\n }\r\n\r\n}\r\n","import { SymbolTableRecord } from \"./SymbolTableRecord\";\r\nimport { Factory } from \"./CADFactory\";\r\n\r\n@Factory\r\nexport class MaterialTableRecord extends SymbolTableRecord\r\n{\r\n}\r\n","import { Color, FrontSide, MeshPhysicalMaterial, Side } from \"three\";\r\nimport { USE_WORLD_UV, U_WORLD_MOVE, U_WORLD_REP, U_WORLD_RO, V_WORLD_MOVE, V_WORLD_REP } from \"../Add-on/testEntity/USE_WORLD_UV\";\r\nimport { HostApplicationServices } from \"../ApplicationServices/HostApplicationServices\";\r\nimport { AutoRecord } from \"./AutoRecord\";\r\nimport { Factory } from \"./CADFactory\";\r\nimport { CADFiler } from \"./CADFiler\";\r\nimport { MaterialType } from \"./IMaterialDefaultParam\";\r\nimport { MaterialTableRecord } from \"./MaterialTableRecord\";\r\nimport { ObjectId } from \"./ObjectId\";\r\nimport { TextureTableRecord } from \"./Texture\";\r\n\r\n\r\nexport interface IGoodProps\r\n{\r\n name: string;\r\n material: string;\r\n color: string;\r\n}\r\n\r\nexport enum UVType\r\n{\r\n LocalUV = 0,\r\n WorldUV = 1,\r\n}\r\n\r\n\r\n//有关于pbr材质的属性解释说明: https://knowledge.autodesk.com/zh-hans/support/3ds-max/learn-explore/caas/CloudHelp/cloudhelp/2021/CHS/3DSMax-Lighting-Shading/files/GUID-18087194-B2A6-43EF-9B80-8FD1736FAE52-htm.html\r\n\r\n@Factory\r\nexport class PhysicalMaterialRecord extends MaterialTableRecord\r\n{\r\n @AutoRecord type: MaterialType = \"木纹\";\r\n @AutoRecord ref: string = \"\";//参考材质,当存在这个变量时,使用ue材质\r\n\r\n //基础色\r\n @AutoRecord color: string = \"#ffffff\";//基础色\r\n //#region 基础色附加 默认折叠\r\n @AutoRecord baseColorLuminance = 0;//基础色亮度 默认0 范围±1\r\n @AutoRecord baseColorLightColor = new Color(0.5, 0.5, 0.5);//基础色_亮部颜色 默认0.5灰色 范围RGB颜色\r\n @AutoRecord baseColorDarkColor = new Color(0, 0, 0);//基础色_暗部颜色 默认 0黑色 范围RGB颜色\r\n @AutoRecord baseColorSaturability = 1;//基础色饱和度 默认1 范围0-10;\r\n //#endregion\r\n\r\n //透明\r\n @AutoRecord transparent: boolean = false; //透明度 0-1\r\n @AutoRecord opacity: number = 1;//不透明度.\r\n //#region 透明度附加 默认折叠\r\n @AutoRecord opacityContrast = 1; //不透明度对比 默认1\r\n @AutoRecord opacityBorder = 1; //不透明度边界 默认1\r\n @AutoRecord opacityMaximum = 1; //不透明度最大值 默认1\r\n @AutoRecord opacityMinimum = 0.3; // 不透明度最小值 默认0.3\r\n //#endregion\r\n\r\n //折射\r\n @AutoRecord refraction = 1; //玻璃折射 默认1\r\n\r\n @AutoRecord matalness: number = 0;//金属性 0-1\r\n @AutoRecord bumpScale: number = 0;//凹凸比例 UE:法线强度 默认0 范围0-20\r\n @AutoRecord roughness: number = 0.2; //粗糙度 0-1\r\n @AutoRecord specular: number = 1; //高光 范围0-1\r\n @AutoRecord selfLuminous: number = 0;//自发光强度 0-200\r\n\r\n @AutoRecord useMap: boolean = true;\r\n @AutoRecord map: ObjectId;//纹理贴图\r\n //#region 法线贴图和粗糙贴图默认折叠\r\n @AutoRecord useBumpMap: boolean = true;\r\n @AutoRecord bumpMap: ObjectId;//凹凸贴图\r\n @AutoRecord useRoughnessMap: boolean = true;\r\n @AutoRecord roughnessMap: ObjectId;//粗糙贴图\r\n //#endregion\r\n\r\n @AutoRecord IsFull: boolean = false;//完全平铺板(此时修改板的uv)\r\n @AutoRecord side: Side = FrontSide; //双面\r\n\r\n @AutoRecord UVType = UVType.LocalUV;\r\n\r\n\r\n //#region 菲涅尔 默认折叠(绒毛?) 反射?(皮革 布料中可用)\r\n @AutoRecord fresnelPO = 1;//菲涅尔对比度 默认1 范围-1至10\r\n @AutoRecord fresnelST = 1;//菲涅尔强度 默认1 范围0至20\r\n @AutoRecord fresnelLuminance = 1;//菲涅尔亮度 默认1 范围0至20\r\n @AutoRecord fresnelLightColor = new Color(1, 1, 1);//菲涅尔亮部颜色 默认白色 范围RGB\r\n @AutoRecord fresnelDarkColor = new Color(1, 1, 1);//菲涅尔暗部颜色 默认白色 范围RGB\r\n //#endregion\r\n\r\n @AutoRecord sharpen = 1;//锐化 默认1 范围0-20 默认折叠\r\n\r\n get UseWorldUV() { return this.UVType === UVType.WorldUV; }\r\n set UseWorldUV(b: boolean) { this.UVType = b ? UVType.WorldUV : UVType.LocalUV; }\r\n\r\n @AutoRecord UWroldRep = 1;\r\n @AutoRecord VWroldRep = 1;\r\n @AutoRecord UWroldRo = 0;\r\n @AutoRecord UWorldMove = 0;\r\n @AutoRecord VWorldMove = 0;\r\n\r\n @AutoRecord depthTest: boolean = true;//深度测试(默认true)(弃用(不在UI上显示)\r\n\r\n private _goodsInfo: IGoodProps = {\r\n name: \"\",\r\n color: \"\",\r\n material: \"\",\r\n };\r\n private material = new MeshPhysicalMaterial({});\r\n async Update()\r\n {\r\n this.material[USE_WORLD_UV] = this.UseWorldUV;\r\n if (this.material[USE_WORLD_UV])\r\n {\r\n this.material[U_WORLD_REP] = this.UWroldRep;\r\n this.material[V_WORLD_REP] = this.VWroldRep;\r\n\r\n this.material[U_WORLD_RO] = this.UWroldRo;\r\n\r\n this.material[U_WORLD_MOVE] = this.UWorldMove;\r\n this.material[V_WORLD_MOVE] = this.VWorldMove;\r\n }\r\n\r\n if (!this.material.color)\r\n this.material.color = new Color(this.color);\r\n else\r\n this.material.color.set(this.color);\r\n\r\n this.material.transparent = this.transparent;\r\n\r\n if (this.type === \"玻璃\")\r\n {\r\n this.material.metalness = 0.2;\r\n this.material.reflectivity = Math.abs(this.refraction);\r\n } else\r\n this.material.metalness = this.matalness;\r\n\r\n this.material.side = this.side;\r\n\r\n this.material.opacity = Math.max(0.1, this.opacity);\r\n this.material.depthTest = this.depthTest;\r\n this.material.bumpScale = this.bumpScale;\r\n this.material.roughness = this.roughness;\r\n\r\n\r\n if (this.material.metalness > 0.9)\r\n HostApplicationServices.LoadMetalEnv().then(env =>\r\n {\r\n this.material.envMap = env;\r\n this.material.needsUpdate = true;\r\n });\r\n else\r\n HostApplicationServices.LoadDefaultExr().then(exr =>\r\n {\r\n this.material.envMap = exr;\r\n this.material.needsUpdate = true;\r\n });\r\n\r\n this.material.needsUpdate = true;\r\n if (this.useMap && this.map && !this.map.IsErase)\r\n {\r\n let map = this.map.Object as TextureTableRecord;\r\n let texture = map.GetThreeTexture();\r\n await map.WaitUpdate();\r\n this.material.map = texture;\r\n this.material.needsUpdate = true;\r\n }\r\n else\r\n this.material.map = undefined;\r\n\r\n if (this.type === \"自发光\")\r\n {\r\n this.material.emissiveIntensity = this.selfLuminous;\r\n this.material.emissive.copy(this.material.color);\r\n this.material.emissiveMap = this.material.map;\r\n }\r\n else\r\n {\r\n this.material.emissiveIntensity = 1;\r\n this.material.emissive.setRGB(0, 0, 0);\r\n this.material.emissiveMap = undefined;\r\n }\r\n\r\n if (this.useMap && this.useBumpMap && this.bumpMap && !this.bumpMap.IsErase)\r\n {\r\n let map = this.bumpMap.Object as TextureTableRecord;\r\n let texture = map.GetThreeTexture();\r\n await map.WaitUpdate();\r\n this.material.bumpMap = texture;\r\n this.material.needsUpdate = true;\r\n }\r\n else\r\n this.material.bumpMap = undefined;\r\n\r\n if (this.useMap && this.roughnessMap && this.roughnessMap && !this.roughnessMap.IsErase)\r\n {\r\n let map = this.roughnessMap.Object as TextureTableRecord;\r\n let texture = map.GetThreeTexture();\r\n await map.WaitUpdate();\r\n this.material.roughnessMap = texture;\r\n this.material.needsUpdate = true;\r\n }\r\n else\r\n this.material.roughnessMap = undefined;\r\n\r\n this.material.needsUpdate = true;\r\n\r\n this.AsyncUpdated();\r\n }\r\n get Material(): MeshPhysicalMaterial\r\n {\r\n return this.material;\r\n }\r\n get GoodsInfo()\r\n {\r\n return this._goodsInfo;\r\n }\r\n set GoodsInfo(info: IGoodProps)\r\n {\r\n if (info.color === this._goodsInfo.color\r\n && info.material === this._goodsInfo.material\r\n && info.name === this._goodsInfo.name\r\n )\r\n return;\r\n\r\n this.WriteAllObjectRecord();\r\n Object.assign(this._goodsInfo, info);\r\n }\r\n //#region -------------------------File-------------------------\r\n ReadFile(file: CADFiler)\r\n {\r\n super.ReadFile(file);\r\n let ver = file.Read();\r\n if (ver === 1)\r\n this.name = file.Read();\r\n this.color = file.Read();\r\n this.transparent = file.Read();\r\n this.matalness = file.Read();\r\n this.opacity = file.Read();\r\n this.depthTest = file.Read();\r\n this.map = file.ReadObjectId();\r\n this.bumpMap = file.ReadObjectId();\r\n this.bumpScale = file.Read();\r\n this.roughnessMap = file.ReadObjectId();\r\n this.roughness = file.Read();\r\n this.useMap = file.Read();\r\n this.useBumpMap = file.Read();\r\n this.useRoughnessMap = file.Read();\r\n if (ver <= 2)\r\n file.Read();\r\n if (ver > 2)\r\n {\r\n this._goodsInfo.name = file.Read();\r\n this._goodsInfo.material = file.Read();\r\n this._goodsInfo.color = file.Read();\r\n }\r\n\r\n if (ver > 3)\r\n this.IsFull = file.Read();\r\n\r\n if (ver > 4)\r\n {\r\n this.baseColorLuminance = file.Read();\r\n this.baseColorLightColor.r = file.Read();\r\n this.baseColorLightColor.g = file.Read();\r\n this.baseColorLightColor.b = file.Read();\r\n\r\n this.baseColorDarkColor.r = file.Read();\r\n this.baseColorDarkColor.g = file.Read();\r\n this.baseColorDarkColor.b = file.Read();\r\n\r\n this.baseColorSaturability = file.Read();\r\n\r\n this.opacityContrast = file.Read();\r\n this.opacityBorder = file.Read();\r\n this.opacityMaximum = file.Read();\r\n this.opacityMinimum = file.Read();\r\n\r\n this.specular = file.Read();\r\n this.selfLuminous = file.Read();\r\n\r\n this.fresnelPO = file.Read();\r\n this.fresnelST = file.Read();\r\n this.fresnelLuminance = file.Read();\r\n\r\n this.fresnelLightColor.r = file.Read();\r\n this.fresnelLightColor.g = file.Read();\r\n this.fresnelLightColor.b = file.Read();\r\n\r\n this.fresnelDarkColor.r = file.Read();\r\n this.fresnelDarkColor.g = file.Read();\r\n this.fresnelDarkColor.b = file.Read();\r\n\r\n this.sharpen = file.Read();\r\n\r\n if (ver > 5)\r\n this.UVType = file.Read();\r\n\r\n if (ver > 6)\r\n this.type = file.Read();\r\n if (ver > 7)\r\n this.ref = file.Read();\r\n\r\n if (ver > 8)\r\n {\r\n this.UWroldRep = file.Read();\r\n this.VWroldRep = file.Read();\r\n this.UWroldRo = file.Read();\r\n this.UWorldMove = file.Read();\r\n this.VWorldMove = file.Read();\r\n }\r\n if (ver > 9)\r\n {\r\n this.refraction = file.Read();\r\n this.side = file.Read();\r\n }\r\n }\r\n\r\n this.Update();\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.color);\r\n file.Write(this.transparent);\r\n file.Write(this.matalness);\r\n file.Write(this.opacity);\r\n file.Write(this.depthTest);\r\n file.WriteHardObjectId(this.map);\r\n file.WriteHardObjectId(this.bumpMap);\r\n file.Write(this.bumpScale);\r\n file.WriteHardObjectId(this.roughnessMap);\r\n file.Write(this.roughness);\r\n file.Write(this.useMap);\r\n file.Write(this.useBumpMap);\r\n file.Write(this.useRoughnessMap);\r\n file.Write(this._goodsInfo.name);\r\n file.Write(this._goodsInfo.material);\r\n file.Write(this._goodsInfo.color);\r\n file.Write(this.IsFull);\r\n\r\n //ver 5\r\n file.Write(this.baseColorLuminance);\r\n file.Write(this.baseColorLightColor.r);\r\n file.Write(this.baseColorLightColor.g);\r\n file.Write(this.baseColorLightColor.b);\r\n\r\n file.Write(this.baseColorDarkColor.r);\r\n file.Write(this.baseColorDarkColor.g);\r\n file.Write(this.baseColorDarkColor.b);\r\n\r\n file.Write(this.baseColorSaturability);\r\n\r\n file.Write(this.opacityContrast);\r\n file.Write(this.opacityBorder);\r\n file.Write(this.opacityMaximum);\r\n file.Write(this.opacityMinimum);\r\n\r\n file.Write(this.specular);\r\n file.Write(this.selfLuminous);\r\n\r\n file.Write(this.fresnelPO);\r\n file.Write(this.fresnelST);\r\n file.Write(this.fresnelLuminance);\r\n\r\n file.Write(this.fresnelLightColor.r);\r\n file.Write(this.fresnelLightColor.g);\r\n file.Write(this.fresnelLightColor.b);\r\n\r\n file.Write(this.fresnelDarkColor.r);\r\n file.Write(this.fresnelDarkColor.g);\r\n file.Write(this.fresnelDarkColor.b);\r\n\r\n file.Write(this.sharpen);\r\n\r\n //ver 6\r\n file.Write(this.UVType);\r\n\r\n //ver 7\r\n file.Write(this.type);\r\n\r\n //ver8\r\n file.Write(this.ref);\r\n\r\n //ver9\r\n file.Write(this.UWroldRep);\r\n file.Write(this.VWroldRep);\r\n file.Write(this.UWroldRo);\r\n file.Write(this.UWorldMove);\r\n file.Write(this.VWorldMove);\r\n\r\n //ver10\r\n file.Write(this.refraction);\r\n file.Write(this.side);\r\n }\r\n //#endregion\r\n}\r\n","import { 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 { Box3Ext } from '../../Geometry/Box';\r\nimport { equaln, equalv3, GetBox, IdentityMtx4, UpdateBoundingSphere } from '../../Geometry/GeUtils';\r\nimport { Vec3 } from '../../Geometry/IVec3';\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 { HistorycRecord } from '../HistorycRecord';\r\nimport { ISerialize } from '../ISerialize';\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 HasEdgeRenderType = false;//拥有封边检查绘制模式\r\n protected HasPlaceFaceRenderType = false;//拥有排版面绘制模式\r\n\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 CacheDrawObject() { return this._CacheDrawObject; }\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 CopyInRenderTpye: RenderType; //记录在哪种RenderType下copy的\r\n set Material(materialId: ObjectId)\r\n {\r\n if (materialId === this._MaterialId) return;\r\n\r\n if (this._db && materialId?.Object)//我们放宽校验,当图形未加入到图纸时,我们允许它任意设置材质\r\n {\r\n if (!(materialId.Object instanceof PhysicalMaterialRecord))\r\n throw \"程序内部错误!设置材质错误:该对象不是材质\";\r\n\r\n if (materialId.Object.Db !== this.Db)\r\n throw \"程序内部错误!设置材质错误:不同图纸间材质\";\r\n }\r\n\r\n this.WriteAllObjectRecord();\r\n this._MaterialId = materialId;\r\n for (let [type, obj] of this._CacheDrawObject)\r\n this.UpdateDrawObjectMaterial(type, obj);\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 let undoRec = this.UndoRecord();\r\n if (undoRec)\r\n {\r\n let hisRec = new HistorycRecord();\r\n hisRec.redoData = new EntityColorHistoryRecord(color);\r\n hisRec.undoData = new EntityColorHistoryRecord(this._Color);\r\n undoRec.WriteObjectHistoryPath(this, hisRec);\r\n }\r\n\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()\r\n {\r\n for (let [, obj] of this._CacheDrawObject)\r\n return GetBox(obj);\r\n return GetBox(this.GetDrawObjectFromRenderType());\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 Move(v: Vec3)\r\n {\r\n if (equaln(v.x, 0) && equaln(v.y, 0) && equaln(v.z, 0)) return;\r\n\r\n this.WriteAllObjectRecord();\r\n\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 this._SpaceOCS.elements[12] += v.x;\r\n this._SpaceOCS.elements[13] += v.y;\r\n this._SpaceOCS.elements[14] += v.z;\r\n this.Update(UpdateDraw.Matrix);\r\n return this;\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 get Z() { return this._Matrix.elements[14]; }\r\n set Z(z: number)\r\n {\r\n if (equaln(this.Z, z)) return;\r\n this.Move({ x: 0, y: 0, z: z - this.Z });\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.Move({ x: 0, y: 0, z: -this.Z });\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\r\n protected get CaseShadow()\r\n {\r\n if (!this.MeshMaterial) return true;\r\n return !this.MeshMaterial.transparent || this.MeshMaterial.opacity === 1;\r\n }\r\n\r\n protected get ReceiveShadow()\r\n {\r\n return this.CaseShadow;\r\n }\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 = HostApplicationServices._renderType;\r\n let obj = this.GetDrawObjectFromRenderType(HostApplicationServices._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 if (renderType === RenderType.Edge && !this.HasEdgeRenderType)\r\n renderType = RenderType.Conceptual;\r\n if (renderType === RenderType.PlaceFace && !this.HasPlaceFaceRenderType)\r\n renderType = RenderType.Wireframe;\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 {\r\n this.DeferUpdate();\r\n // if (this.__ReadFileIng__) //!警告\r\n // console.error(\"在读取文件时更新实体的显示!\");\r\n }\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(HostApplicationServices._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 static _xa = new Vector3;\r\n static _ya = new Vector3;\r\n static _za = new Vector3;\r\n /**\r\n * 使用统一的方法设置对象的矩阵.\r\n * 需要对缩放矩形进行重载.避免对象矩阵不是单位矩阵\r\n */\r\n ApplyMatrix(m: Matrix4): this\r\n {\r\n this.WriteAllObjectRecord();\r\n\r\n m.extractBasis(Entity._xa, Entity._ya, Entity._za);\r\n if (\r\n equaln(Entity._xa.lengthSq(), 1, 1e-4) &&\r\n equaln(Entity._ya.lengthSq(), 1, 1e-4) &&\r\n equaln(Entity._za.lengthSq(), 1, 1e-4)\r\n )\r\n {\r\n this._Matrix.multiplyMatrices(m, this._Matrix);\r\n this._SpaceOCS.multiplyMatrices(m, this._SpaceOCS);\r\n if (!equalv3(Entity._xa.cross(Entity._ya).normalize(), Entity._za))\r\n this.ApplyMirrorMatrix(m);\r\n }\r\n else\r\n this.ApplyScaleMatrix(m);\r\n this.Update(UpdateDraw.Matrix);\r\n return this;\r\n }\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 /**\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 GetGripPoints(): Vector3[]\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 GetStretchPoints(): Array\r\n {\r\n return [];\r\n }\r\n\r\n /**\r\n * 拉伸夹点,用于Stretch命令\r\n * @param {Array} indexList 拉伸点索引列表.\r\n * @param {Vector3} vec 移动向量\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 override 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.__ReadFileIng__ = false;\r\n this.Update();\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 {\r\n let id = file.ReadHardObjectId();\r\n if (id) this.ProcessingGroupList.push(id);\r\n }\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 if (undoData instanceof EntityColorHistoryRecord)\r\n this.ColorIndex = undoData.color;\r\n }\r\n\r\n override 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\r\n@Factory\r\nexport class EntityColorHistoryRecord implements ISerialize\r\n{\r\n constructor(public color: number) { }\r\n ReadFile(file: CADFiler): this\r\n {\r\n this.color = file.Read();\r\n return this;\r\n }\r\n WriteFile(file: CADFiler): this\r\n {\r\n file.Write(this.color);\r\n return this;\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, defaultParam);\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 HistoryWs = \"HistoryWs\",\r\n}\r\n","import { Object3D } from \"three\";\r\nimport { Entity } from \"../DatabaseServices/Entity/Entity\";\r\nimport { ObjectId } from \"../DatabaseServices/ObjectId\";\r\nimport { equaln } from \"../Geometry/GeUtils\";\r\nimport { safeEval } from \"./eval\";\r\nimport { StoreageKeys } from \"./StoreageKeys\";\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 (Math.abs(v) < Math.pow(0.1, fractionDigits) * 0.49) return \"0\";\r\n if (!fractionDigits)\r\n return v.toFixed(0);\r\n else\r\n return v.toFixed(fractionDigits).replace(/[.]?0+$/, \"\");\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\nimport { Vec3 } from './IVec3';\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\nexport const ZAxisN = new Vector3(0, 0, -1);\r\n\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: Vec3, v2: Vec3, 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 * @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 * @param {Vector3} v1\r\n * @param {Vector3} v2\r\n * @param {Vector3} [ref] 参考向量,如果为世界坐标系则为0,0,1\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\nlet tempBox = new Box3();\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 = false): 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 //@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 tempBox.copy(geo.boundingBox).applyMatrix4(o.matrixWorld);\r\n box.union(tempBox);\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 {\r\n geo.computeBoundingSphere();\r\n geo.computeBoundingBox();//样条线更新位置和更新点位置后,无法被选中\r\n }\r\n}\r\n\r\n\r\nexport type compareVectorFn = (v1: Vector, v2: Vector) => 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 ComparePointFnGenerate(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: Vector): 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, Quaternion, 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} mtx 矩阵\r\n * @param {number} col 列索引,0x 1y 2z 3org\r\n * @param {Vector3} v 向量或点\r\n */\r\nexport function SetMtxVector(mtx: Matrix4, col: number, v: Vector3)\r\n{\r\n let index = col * 4;\r\n mtx.elements[index] = v.x;\r\n mtx.elements[index + 1] = v.y;\r\n mtx.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 scaleMtx = new Matrix4().makeScale(scale, scale, scale);\r\n if (center) scaleMtx.setPosition(center.clone().multiplyScalar(1 - scale));\r\n return scaleMtx;\r\n}\r\n\r\n//缩放矩阵 不等比例\r\nexport function MakeScaleMatrix(scaleX: number, scaleY: number, scaleZ: number, center?: Vector3)\r\n{\r\n let scaleMtx = new Matrix4().makeScale(scaleX, scaleY, scaleZ);\r\n if (center) scaleMtx.setPosition(center.clone().applyMatrix4(scaleMtx).sub(center).negate());\r\n return scaleMtx;\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, index = 1): Matrix4\r\n{\r\n let cs = new CoordinateSystem().applyMatrix4(mtx);\r\n if (index === 0)\r\n cs.XAxis.negate();\r\n else if (index === 1)\r\n cs.YAxis.negate();\r\n else\r\n cs.ZAxis.negate();\r\n\r\n return cs.getMatrix4(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 cacheVec.z = 0;\r\n\r\n cacheVec.applyMatrix4(mtx);\r\n\r\n vec.x = cacheVec.x;\r\n vec.y = cacheVec.y;\r\n}\r\n\r\nexport function MakeMirrorMtx(planeNormal: Vector3, pos?: Vector3)\r\n{\r\n let mirrorMtx = new Matrix4();\r\n let xAxis = new Vector3(1 - 2 * planeNormal.x ** 2, -2 * planeNormal.x * planeNormal.y, -2 * planeNormal.x * planeNormal.z);\r\n let yAxis = new Vector3(-2 * planeNormal.x * planeNormal.y, 1 - 2 * planeNormal.y ** 2, -2 * planeNormal.y * planeNormal.z);\r\n let zAxis = new Vector3(-2 * planeNormal.x * planeNormal.z, -2 * planeNormal.y * planeNormal.z, 1 - 2 * planeNormal.z ** 2);\r\n mirrorMtx.makeBasis(xAxis, yAxis, zAxis);\r\n\r\n if (pos)\r\n mirrorMtx.setPosition(pos.clone().applyMatrix4(mirrorMtx).sub(pos).negate());\r\n\r\n return mirrorMtx;\r\n}\r\n\r\n/**\r\n * 对向量进行方向变换 (如果是pos 请使用pos.applyMatrix4)\r\n * @param vec 向量\r\n * @param m 矩阵\r\n * @returns vec\r\n */\r\nexport function TransformVector(vec: T, m: Matrix4): T\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\nexport function MakeRotateMatrix4(cen: Vector3, axis: Vector3, angle: number, roMtx: Matrix4 = new Matrix4)\r\n{\r\n roMtx.makeRotationAxis(axis, angle);\r\n roMtx.setPosition(cen.clone().applyMatrix4(roMtx).negate().add(cen));\r\n return roMtx;\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\nlet p = new Vector3;\r\nlet s = new Vector3;\r\nlet q = new Quaternion;\r\n//归一化矩阵 避免轴不是非标准向量\r\nexport function NormalMatrix(mtx: Matrix4)\r\n{\r\n mtx.decompose(p, q, s);\r\n s.set(1, 1, 1);\r\n mtx.compose(p, q, s);\r\n return mtx;\r\n}\r\n\r\n//四舍五入\r\nexport function RoundMatrix(mtx: Matrix4, fuzz = 1e-6)\r\n{\r\n let el = mtx.elements;\r\n for (let i = 0; i < 16; i++)\r\n {\r\n let re = Math.round(el[i]);\r\n if (equaln(re, el[i], fuzz))\r\n el[i] = re;\r\n }\r\n return mtx;\r\n}\r\n\r\nexport const tempMatrix1 = new Matrix4;\r\n\r\nexport const ZMirrorMatrix = MakeMirrorMtx(new Vector3(0, 0, 1));\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 { MathUtils, Vector3 } from \"three\";\r\nimport { equaln, YAxis, ZAxis } 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","/**\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\nexport function FindLast(arr: T[], searchFn: (item: T) => boolean)\r\n{\r\n for (let i = arr.length; i--;)\r\n if (searchFn(arr[i]))\r\n return i;\r\n return -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] 校验对象相等函数,如果相等 则删除e2\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//因为多段线的数据关系,我们需要保留下一段的数据\r\nexport function ArrayRemoveDupSavePre(baseCompareArray: any[], arrs: (any[])[])\r\n{\r\n let index = 0;//set index\r\n let pre = 0;//前一个点\r\n for (let next = 1; next <= baseCompareArray.length; next++)\r\n {\r\n if (baseCompareArray[pre] !== baseCompareArray[next])\r\n {\r\n baseCompareArray[index] = baseCompareArray[pre];\r\n\r\n for (let arr of arrs)\r\n arr[index] = arr[pre];\r\n\r\n index++;\r\n }\r\n\r\n pre++;\r\n }\r\n\r\n baseCompareArray.length = index;\r\n for (let arr of arrs)\r\n arr.length = index;\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","import { EllipseCurve, Shape, Vector2 } from \"three\";\r\nimport { clamp } from \"../Common/Utils\";\r\nimport { equalv2 } from \"../Geometry/GeUtils\";\r\nimport { Arc } from \"./Entity/Arc\";\r\n\r\nlet tempArc: Arc;\r\nexport class Shape2 extends Shape\r\n{\r\n getPoints(divisions: number = 12, optimizeArc = true): Vector2[]\r\n {\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] as EllipseCurve;\r\n let resolution = divisions;\r\n\r\n //@ts-ignore\r\n if (curve && curve.isEllipseCurve)\r\n {\r\n if (optimizeArc)\r\n {\r\n if (!tempArc) tempArc = new Arc;\r\n else tempArc.ClearDraw();\r\n\r\n tempArc.IsClockWise = curve.aClockwise;\r\n tempArc.StartAngle = curve.aStartAngle;\r\n tempArc.EndAngle = curve.aEndAngle;\r\n tempArc.Radius = Math.abs(curve.xRadius);\r\n\r\n //根据圆弧的角度,来确定绘制个数\r\n let count = Math.max(2, Math.abs(Math.ceil((tempArc.AllAngle) / Math.PI)) * divisions);\r\n\r\n resolution = clamp(Math.ceil(tempArc.Length / 20), count, 60);\r\n }\r\n else\r\n resolution = divisions * 2;\r\n }\r\n else\r\n {\r\n //@ts-ignore\r\n resolution = (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\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 { Shape, Vector2 } from 'three';\r\nimport { Shape2 } from '../DatabaseServices/Shape2';\r\nimport { angle, equaln, equalv2, polar } from './GeUtils';\r\n\r\n//解析二维圆弧\r\nclass Arc2d\r\n{\r\n _StartAn: number;\r\n _EndAn: number;\r\n _Center: Vector2;\r\n _Radius: number;\r\n constructor(p1: Vector2, p2: Vector2, bul: number)\r\n {\r\n p1 = p1.clone();\r\n p2 = p2.clone();\r\n\r\n //a (* 2 (atan b))\r\n let a = Math.atan(bul) * 2;\r\n //r (/ (distance p1 p2) 2 (sin a))\r\n let r = p1.distanceTo(p2) / 2 / Math.sin(a);\r\n //c (polar p1 (+ (- (/ pi 2) a) (angle p1 p2)) r)\r\n let c = polar(p1.clone(), Math.PI / 2 - a + angle(p2.clone().sub(p1)), r);\r\n\r\n this._Radius = Math.abs(r);\r\n\r\n this._StartAn = angle(p1.sub(c));\r\n this._EndAn = angle(p2.sub(c));\r\n\r\n this._Center = c;\r\n }\r\n}\r\n\r\n//创建轮廓 通过点表和凸度\r\nexport function CreatePolylinePath(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 prePt = pts[i];\r\n let nextPt = pts[i + 1];\r\n if (equaln(buls[i], 0, 1e-8) || equalv2(prePt, nextPt, 1e-2))\r\n {\r\n shape.lineTo(nextPt.x, nextPt.y);\r\n }\r\n else\r\n {\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(prePt, 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\nexport function CreateShapeFromPoints()\r\n{\r\n\r\n}\r\n","import { FrontSide, 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, side = FrontSide): ShaderMaterialParameters\r\n{\r\n return {\r\n uniforms: {\r\n \"SurfaceColor\": { value: color }\r\n },\r\n \r\n side,\r\n polygonOffset: true,\r\n polygonOffsetFactor: 1,\r\n polygonOffsetUnits: 1\r\n };\r\n}\r\n","import { Color, DoubleSide, FrontSide, LineBasicMaterial, LineDashedMaterial, MeshBasicMaterial, ShaderMaterial, Side, Vector2, Vector3 } from 'three';\r\nimport { LineMaterial } from 'three/examples/jsm/lines/LineMaterial';\r\nimport { HostApplicationServices } from '../ApplicationServices/HostApplicationServices';\r\nimport { GetGoodShaderSimple } from '../GLSL/GoochShader';\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 UseLogBuf = false;\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 private static _WallLineMtlMap = new Map();\r\n static GetWallLineMtl(color: number): LineDashedMaterial\r\n {\r\n if (this._WallLineMtlMap.has(color)) return this._WallLineMtlMap.get(color);\r\n let mtl = new LineDashedMaterial({\r\n color: this.GetColor(color),\r\n dashSize: 10,\r\n gapSize: 10,\r\n });\r\n this._WallLineMtlMap.set(color, mtl);\r\n return mtl;\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, side: Side = FrontSide)\r\n {\r\n let key = `${color}${side}`;\r\n if (this._ConceptualMaterial.has(key))\r\n return this._ConceptualMaterial.get(key);\r\n\r\n let shaderParams = GetGoodShaderSimple(new Vector3().fromArray(this.GetColor(color).toArray()), side);\r\n let mtl = new ShaderMaterial(shaderParams);\r\n this._ConceptualMaterial.set(key, mtl);\r\n return mtl;\r\n }\r\n\r\n static UpdateConceptualMaterial(useLogBuf: boolean)\r\n {\r\n \r\n }\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 \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, color: this.GetColor(color) });\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 mtl = this._BasicTransparentMaterialMap2.get(key);\r\n if (mtl) return mtl;\r\n mtl = new MeshBasicMaterial({ transparent: true, opacity: opacity, color: this.GetColor(color) });\r\n this._BasicTransparentMaterialMap2.set(key, mtl);\r\n return mtl;\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 private static _ConceptualEdgeMaterial: LineBasicMaterial;\r\n static GetConceptualEdgeMaterial()\r\n {\r\n if (!this._ConceptualEdgeMaterial)\r\n this._ConceptualEdgeMaterial = new LineBasicMaterial({ color: this.GetColor(HostApplicationServices.ConceptualEdgeColor).clone(), side: DoubleSide });\r\n\r\n return this._ConceptualEdgeMaterial;\r\n }\r\n static UpdateConceptualEdgeMaterial()\r\n {\r\n if (this._ConceptualEdgeMaterial)\r\n this._ConceptualEdgeMaterial.color.copy(this.GetColor(HostApplicationServices.ConceptualEdgeColor));\r\n }\r\n private static _Physical2EdgeMaterial: LineBasicMaterial;\r\n static GetPhysical2EdgeMaterial()\r\n {\r\n if (!this._Physical2EdgeMaterial)\r\n this._Physical2EdgeMaterial = new LineBasicMaterial({ color: this.GetColor(HostApplicationServices.Physical2EdgeColor).clone(), side: DoubleSide });\r\n\r\n return this._Physical2EdgeMaterial;\r\n }\r\n static UpdatePhysical2EdgeMaterial()\r\n {\r\n if (this._Physical2EdgeMaterial)\r\n this._Physical2EdgeMaterial.color.copy(this.GetColor(HostApplicationServices.Physical2EdgeColor));\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","import { BufferGeometry, Geometry } from \"three\";\r\n\r\nexport const BufferGeometry2GeometryCacheMap = new WeakMap();\r\nglobalThis.fuck = BufferGeometry2GeometryCacheMap;\r\n","import { BufferAttribute, BufferGeometry, Shape, ShapeGeometry, Vector3 } 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 * @param ignoreBoxError 忽略更新点后盒子错误的问题\r\n * @returns 当成功时返回true,更新失败时返回false\r\n */\r\n export function UpdatePts(geo: BufferGeometry, pts: Vector3[], ignoreBoxError = false): 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 || (ignoreBoxError && 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//此时这个Geometry.Dispose后在进行重新生成会比较后,否则属性没有被回收导致内存泄漏\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 { BufferGeometry, Curve as TCurve, Line, Line as TLine, Material, Object3D, Vector3 } from 'three';\r\nimport { Line2 } from 'three/examples/jsm/lines/Line2';\r\nimport { LineGeometry } from 'three/examples/jsm/lines/LineGeometry';\r\nimport { arrayRemoveDuplicateBySort, arraySortByNumber } from '../../Common/ArrayExt';\r\nimport { ColorMaterial } from '../../Common/ColorPalette';\r\nimport { Status } from '../../Common/Status';\r\nimport { BufferGeometryUtils } from '../../Geometry/BufferGeometryUtils';\r\nimport { equaln, equalv3, updateGeometry } 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 get Shape(): TCurve { throw \"未实现\"; }\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 * @param {(number | Vector3)} param\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 */\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 override OnlyRenderType = true;\r\n\r\n //样条线重载了这个,得到了更高的绘制精度\r\n protected GetDrawCount() { return 30; }\r\n\r\n /**\r\n * @param {RenderType} [renderType=RenderType.Wireframe]\r\n */\r\n protected override InitDrawObject(renderType: RenderType = RenderType.Wireframe): Object3D\r\n {\r\n let pts = this.Shape.getPoints(this.GetDrawCount());\r\n if (renderType === RenderType.WireframePrint)\r\n {\r\n let array: number[] = [];\r\n for (let p of pts) array.push(p.x, p.y, 0);\r\n let geometry = new LineGeometry().setPositions(array);\r\n return new Line2(geometry, ColorMaterial.PrintLineMatrial);\r\n }\r\n let geo = new BufferGeometry().setFromPoints(pts);\r\n return new TLine(geo, ColorMaterial.GetLineMaterial(this._Color));\r\n }\r\n\r\n /**\r\n * 重载:更新绘制的实体\r\n * @param {RenderType} type\r\n * @param {Object3D} obj\r\n */\r\n override UpdateDrawObject(type: RenderType, obj: Object3D)\r\n {\r\n let pts = this.Shape.getPoints(this.GetDrawCount());\r\n let plObj = obj as TLine;\r\n let geo = plObj.geometry as BufferGeometry | LineGeometry;\r\n if (geo instanceof LineGeometry)\r\n {\r\n let array: number[] = [];\r\n for (let p of pts) array.push(p.x, p.y, 0);\r\n (geo as LineGeometry).setPositions(array);\r\n }\r\n else\r\n {\r\n //@ts-ignore\r\n for (let p of pts) p.z = 0;\r\n if (!BufferGeometryUtils.UpdatePts(geo, pts as unknown as Vector3[]))\r\n updateGeometry(plObj, new BufferGeometry().setFromPoints(pts));\r\n }\r\n }\r\n\r\n /**\r\n * 重载:更新实体材质\r\n */\r\n override 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 override 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","export enum DragPointType\r\n{\r\n Grip = 0,\r\n Stretch = 1\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, 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 { Box3Ext } from '../../Geometry/Box';\r\nimport { BufferGeometryUtils } from '../../Geometry/BufferGeometryUtils';\r\nimport { AsVector2, equaln, equalv3, isParallelTo, MoveMatrix, updateGeometry } 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 let ocsInv = this.OCSInv;\r\n let sp = this.StartPoint.setZ(0).applyMatrix4(ocsInv);\r\n let ep = this.EndPoint.setZ(0).applyMatrix4(ocsInv);\r\n this._StartPoint.copy(sp);\r\n this._EndPoint.copy(ep);\r\n this.Update();\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\r\n InitDrawObject(renderType: RenderType = RenderType.Wireframe): Object3D\r\n {\r\n let pts = [this._StartPoint, this._EndPoint];\r\n if (renderType === RenderType.WireframePrint)\r\n {\r\n let array: number[] = [];\r\n for (let p of pts) array.push(p.x, p.y, p.z);\r\n let geometry = new LineGeometry().setPositions(array);\r\n return new Line2(geometry, ColorMaterial.PrintLineMatrial);\r\n }\r\n let geo = new BufferGeometry().setFromPoints(pts);\r\n return new TLine(geo, ColorMaterial.GetLineMaterial(this._Color));\r\n }\r\n\r\n /**\r\n * 重载:更新绘制的实体\r\n * @param {RenderType} type\r\n * @param {Object3D} obj\r\n */\r\n UpdateDrawObject(type: RenderType, obj: Object3D)\r\n {\r\n let pts = [this._StartPoint, this._EndPoint];\r\n let plObj = obj as TLine;\r\n let geo = plObj.geometry as BufferGeometry | LineGeometry;\r\n if (geo instanceof LineGeometry)\r\n {\r\n let array: number[] = [];\r\n for (let p of pts) array.push(p.x, p.y, p.z);\r\n (geo as LineGeometry).setPositions(array);\r\n }\r\n else\r\n {\r\n if (!BufferGeometryUtils.UpdatePts(geo, pts as unknown as Vector3[]))\r\n updateGeometry(plObj, new BufferGeometry().setFromPoints(pts));\r\n }\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.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(): Vector3[]\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 || curve.constructor.name === \"RoomWallLine\")\r\n {\r\n return IntersectLineAndLine(this, curve as Line, intType, tolerance);\r\n }\r\n if (curve instanceof Arc || curve.constructor.name === \"RoomWallArc\")\r\n {\r\n return IntersectLineAndArc(this, curve as Arc, 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.SetStartEndPoint(\r\n pts[i],\r\n pts[i + 1]\r\n );\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 || cu.constructor.name === \"RoomWallLine\")\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.SetStartEndPoint(\r\n this.StartPoint.add(derv),\r\n this.EndPoint.add(derv)\r\n );\r\n return [newLine];\r\n }\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 /**\r\n * 返回对象在自身坐标系下的Box\r\n */\r\n get BoundingBoxInOCS(): Box3Ext\r\n {\r\n return new Box3Ext().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 override _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 override 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.OCSNoClone);\r\n }\r\n\r\n get EndPoint(): Vector3\r\n {\r\n return this._EndPoint.clone().applyMatrix4(this.OCSNoClone);\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 SetStartEndPoint(s: Vector3, e: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n let inv = this.OCSInv;\r\n this._StartPoint.copy(s).applyMatrix4(inv);\r\n this._EndPoint.copy(e).applyMatrix4(inv);\r\n this.Update();\r\n }\r\n\r\n //#endregion\r\n}\r\n","import { MathUtils, Matrix3, Matrix4, Shape, Vector3 } from 'three';\r\nimport { arrayLast, arrayRemoveDuplicateBySort } from '../../Common/ArrayExt';\r\nimport { getArcOrCirNearPts, getDeterminantFor2V, getTanPtsOnEllipse, Pts2Polyline } from '../../Common/CurveUtils';\r\nimport { Status } from '../../Common/Status';\r\nimport { ObjectSnapMode } from '../../Editor/ObjectSnapMode';\r\nimport { angle, angleTo, AsVector2, equaln, equalv3, MoveMatrix, rotatePoint } from '../../Geometry/GeUtils';\r\nimport { IntersectEllipse, IntersectEllipseAndCircleOrArc, IntersectEllipseAndLine, IntersectOption, IntersectPolylineAndCurve, reverseIntersectOption } from '../../GraphicsSystem/IntersectWith';\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 { Line } from './Line';\r\nimport { Polyline } from './Polyline';\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\r\n protected ApplyScaleMatrix(m: Matrix4): this\r\n {\r\n //或许我们应该在缩放一下轴尺寸 但是先不做了\r\n let p = this.Position;\r\n p.applyMatrix4(m);\r\n this.Position = p;\r\n return this;\r\n }\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\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 vec.set(0, -1, 0);\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\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.ColorIndex = this.ColorIndex;\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 { 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, equalv2, MoveMatrix, polar, ZeroVec } from '../../Geometry/GeUtils';\r\nimport { Orbit } from '../../Geometry/Orbit';\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, fuzz = 1e-5)\r\n {\r\n return equaln(pt.distanceToSquared(this.Center), this._Radius * this._Radius, fuzz);\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 BoundingBoxInOCS(): Box3Ext\r\n {\r\n return new Box3Ext(new Vector3(-this.Radius, -this.Radius), new Vector3(this.Radius, this.Radius));\r\n }\r\n\r\n get BoundingBox(): Box3Ext\r\n {\r\n let z = this.Normal;\r\n let x = new Vector3;\r\n let y = new Vector3;\r\n Orbit.ComputUpDirection(z, y, x);\r\n let m = new Matrix4().makeBasis(x, y, z).setPosition(this.Center);\r\n //使用任意轴坐标系 以便我们正确的对齐世界坐标系\r\n return this.BoundingBoxInOCS.applyMatrix4(m);\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);\r\n if (equalv2(pt, ZeroVec, 1e-8))\r\n return this.GetPointAtParam(0);\r\n\r\n let a = Math.atan2(pt.y, pt.x);\r\n return polar(new Vector3, a, this._Radius).applyMatrix4(this._Matrix);\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","import { Vec2, Vector2, Vector3 } from \"three\";\r\nimport { arrayLast } from \"../Common/ArrayExt\";\r\nimport { orientation } from \"../Geometry/DoIntersect\";\r\nimport { AsVector2, AsVector3, equaln, equalv2 } from \"../Geometry/GeUtils\";\r\nimport { Arc } from \"./Entity/Arc\";\r\nimport { Curve } from \"./Entity/Curve\";\r\nimport { Line } from \"./Entity/Line\";\r\nimport { Polyline, PolylineProps } from \"./Entity/Polyline\";\r\nimport { Spline } from \"./Spline\";\r\n\r\nexport function SplineConver2Polyline(spl: Spline, tolerance = 0.1): Polyline\r\n{\r\n let cu = spl.Shape;\r\n\r\n let cacheParam = new Map();\r\n let cacheTange = new Map();\r\n\r\n const GetPointAtParam = (param: number) =>\r\n {\r\n let p = cacheParam.get(param);\r\n if (p) return p;\r\n\r\n p = cu.getPoint(param);\r\n cacheParam.set(param, p);\r\n return p;\r\n };\r\n\r\n const GetTangentAtParam = (param: number) =>\r\n {\r\n let t = cacheTange.get(param);\r\n if (t) return t;\r\n\r\n if (equaln(param, 1))\r\n {\r\n if (spl.CloseMark)\r\n t = cu.getPoint(1e-4).sub(GetPointAtParam(param)).normalize();\r\n else\r\n t = GetPointAtParam(param).clone().sub(cu.getPoint(1 - 1e-4)).normalize();\r\n }\r\n else\r\n t = cu.getPoint(param + 1e-4).sub(GetPointAtParam(param)).normalize();\r\n cacheTange.set(param, t);\r\n return t;\r\n };\r\n\r\n let count = spl.EndParam;\r\n let stepx = 1 / count;\r\n\r\n let curves: Curve[] = [];\r\n for (let i = 0; i < 1;)\r\n {\r\n let step = 0.25 * stepx;//0.5的时候也可以有不错的收敛,但是在0.25的时候会有比较贴合的效果\r\n while (true)\r\n {\r\n let param1 = i;\r\n let param2 = Math.min(1, i + step);\r\n\r\n let x = param2 - param1;\r\n let midp1 = GetPointAtParam(param1 + x * 0.25);\r\n let midp2 = GetPointAtParam(param1 + x * 0.75);\r\n\r\n let p1 = GetPointAtParam(param1);\r\n let p2 = GetPointAtParam(param2);\r\n\r\n let t1 = GetTangentAtParam(param1);\r\n let t2 = GetTangentAtParam(param2);\r\n\r\n let [c1, c2] = ComputeBiarc(p1, p2, t1, t2);\r\n\r\n // TestDraw(new Point(midp1));\r\n // TestDraw(new Point(midp2));\r\n\r\n // TestDraw(new Point(c1.GetPointAtParam(0.5)));\r\n // TestDraw(new Point(c2.GetPointAtParam(0.5)));\r\n\r\n if (\r\n c1.GetClosestPointTo(midp1, false).distanceTo(midp1) < tolerance &&\r\n c2.GetClosestPointTo(midp2, false).distanceTo(midp2) < tolerance\r\n )\r\n {\r\n curves.push(c1, c2);\r\n break;\r\n }\r\n else\r\n step = step * 0.5;\r\n }\r\n i += step;\r\n }\r\n\r\n let polyline = Polyline.Combine(curves, 1e-3);\r\n polyline.ApplyMatrix(spl.OCSNoClone);\r\n polyline.ColorIndex = spl.ColorIndex;\r\n return polyline;\r\n}\r\n\r\n//传入的一定是碎点,不是碎点,没有6个点请不要进来\r\nfunction PointsSimplify2Polyline(pts: Vector3[], tolerance = 0.1): Polyline\r\n{\r\n let tolSq = tolerance * tolerance;\r\n let cacheTange = new Map();\r\n\r\n let ptsCount = pts.length;\r\n\r\n const GetIndexAtParam = (param: number) =>\r\n {\r\n if (param === 1) return pts.length - 1;\r\n return Math.floor(ptsCount * param);\r\n };\r\n const GetPointAtParam = (param: number) =>\r\n {\r\n return pts[GetIndexAtParam(param)];\r\n };\r\n\r\n const GetTangentAtParam = (param: number) =>\r\n {\r\n let t = cacheTange.get(param);\r\n if (t) return t;\r\n\r\n let index = Math.floor(ptsCount * param);\r\n if (equaln(param, 1) || index + 1 >= pts.length)\r\n t = arrayLast(pts).clone().sub(pts[pts.length - 1]).normalize();\r\n else\r\n t = pts[index + 1].clone().sub(pts[index]).normalize();\r\n cacheTange.set(param, t);\r\n return t;\r\n };\r\n\r\n let stepx = 1;\r\n\r\n let curves: Curve[] = [];\r\n for (let i = 0; i < 1;)\r\n {\r\n let step = 0.25 * stepx;//0.5的时候也可以有不错的收敛,但是在0.25的时候会有比较贴合的效果\r\n while (true)\r\n {\r\n let param1 = i;\r\n let param2 = Math.min(1, i + step);\r\n\r\n let index1 = GetIndexAtParam(param1);\r\n let index2 = GetIndexAtParam(param2);\r\n if ((index2 - index1) < 4)//当点个数等于4时,我们计算双圆弧插值必然成功.(但是也失去了意义)\r\n {\r\n if (index2 - index1 > 0)\r\n {\r\n let lineD: PolylineProps[] = [];\r\n for (let i = index1; i <= index2; i++)\r\n lineD.push({ pt: AsVector2(pts[i]), bul: 0 });\r\n curves.push(new Polyline(lineD));\r\n }\r\n break;\r\n }\r\n\r\n let x = param2 - param1;\r\n let midp1 = GetPointAtParam(param1 + x * 0.25);\r\n let midp2 = GetPointAtParam(param1 + x * 0.75);\r\n\r\n let p1 = pts[index1];\r\n let p2 = pts[index2];\r\n\r\n let t1 = GetTangentAtParam(param1);\r\n let t2 = GetTangentAtParam(param2);\r\n\r\n let [c1, c2] = ComputeBiarc(p1, p2, t1, t2);\r\n\r\n if (\r\n c1.GetClosestPointTo(midp1, false).distanceToSquared(midp1) < tolSq &&\r\n c2.GetClosestPointTo(midp2, false).distanceToSquared(midp2) < tolSq\r\n )\r\n {\r\n curves.push(c1, c2);\r\n break;\r\n }\r\n else\r\n step = step * 0.5;\r\n }\r\n i += step;\r\n }\r\n\r\n let polyline = Polyline.Combine(curves, 1e-3);\r\n return polyline;\r\n}\r\n\r\n/**\r\n * 将碎点简化为多段线,(尝试转换为简单圆弧,或者使用双圆弧插值)\r\n * @param pts 点表\r\n * @param [tolerance=0.1] 容差\r\n * @param [parseArc=true] 解析成简单圆弧\r\n * @param [lineLengthSq=2000]\r\n * @returns 多段线\r\n */\r\nexport function PointsSimplify2PolylineAndParseArc(pts: Vector2[], buls: number[] = undefined, tolerance = 0.1, parseArc = true, lineLengthSq = 2000): Polyline\r\n{\r\n let tolSq = tolerance * tolerance;\r\n let ptsCount = pts.length;\r\n\r\n const CreateLineOrArc = (startIndex: number, endIndex: number) =>\r\n {\r\n if (!buls || equaln(buls[startIndex], 0, 1e-4))\r\n return new Line(AsVector3(pts[startIndex]), AsVector3(pts[endIndex]));\r\n else\r\n return new Arc().ParseFromBul(AsVector3(pts[startIndex]), AsVector3(pts[endIndex]), buls[startIndex]);\r\n };\r\n\r\n let retPolyline = new Polyline;\r\n let start = 0;\r\n for (let next = start + 1; next <= ptsCount; next++)\r\n {\r\n if (next === ptsCount || pts[next].distanceToSquared(pts[next - 1]) > lineLengthSq || (buls && !equaln(buls[next - 1], 0, 1e-4)))//长度大于50,我们才认为它是一条直线\r\n {\r\n //1.将start->next-1部分组成圆弧\r\n if (parseArc || (next - start) < 6)\r\n while (start < next - 1)\r\n {\r\n if ((next - 1) - start === 1)//直线\r\n {\r\n retPolyline.Join(CreateLineOrArc(start, next - 1));\r\n break;\r\n }\r\n\r\n //第一个三角形的方向\r\n let firstDir = orientation(pts[start], pts[start + 1], pts[start + 2]);\r\n let to = start;\r\n for (; to + 3 < next; to++)\r\n {\r\n let dir = orientation(pts[to + 1], pts[to + 2], pts[to + 3]);\r\n if (dir !== firstDir)\r\n break;\r\n }\r\n\r\n if (start === to)//三个点\r\n {\r\n retPolyline.Join(CreateLineOrArc(start, start + 1));\r\n retPolyline.Join(CreateLineOrArc(start + 1, start + 2));\r\n start = to + 2;\r\n continue;\r\n }\r\n else if ((to - start) < 3)\r\n {\r\n retPolyline.Join(PointsSimplify2Polyline(pts.slice(start, to + 2 + 1).map(AsVector3)));\r\n }\r\n else\r\n {\r\n let sp = pts[start];\r\n let ep = pts[to + 2];\r\n let mp = pts[Math.floor((start + to + 2) / 2)];\r\n let arc = new Arc().FromThreePoint(AsVector3(sp), AsVector3(mp), AsVector3(ep));\r\n\r\n let c = to + 2 - start;\r\n\r\n let p1 = AsVector3(pts[start + Math.floor(c * 0.25)]);\r\n let p2 = AsVector3(pts[start + Math.floor(c * 0.75)]);\r\n if (arc.GetClosestPointTo(p1, false).distanceToSquared(p1) < tolSq\r\n && arc.GetClosestPointTo(p2, false).distanceToSquared(p2) < tolSq)\r\n retPolyline.Join(arc);\r\n else\r\n retPolyline.Join(PointsSimplify2Polyline(pts.slice(start, to + 2 + 1).map(AsVector3)));\r\n }\r\n\r\n start = to + 2;//闪烁到圆弧终点\r\n\r\n if (start === next - 2)\r\n {\r\n retPolyline.Join(PointsSimplify2Polyline(pts.slice(start, next).map(AsVector3)));\r\n start = next;\r\n break;\r\n };\r\n }\r\n else\r\n retPolyline.Join(PointsSimplify2Polyline(pts.slice(start, next).map(AsVector3)));\r\n\r\n //2.加入直线\r\n if (next !== ptsCount)\r\n retPolyline.Join(CreateLineOrArc(next - 1, next));\r\n start = next;\r\n }\r\n }\r\n\r\n return retPolyline;\r\n}\r\n\r\nexport function SmartPointsSimply2Polyline(pts: Vector2[], buls: number[] = undefined, tolerance = 0.1, lineLengthSq = 2000)\r\n{\r\n let pl1 = PointsSimplify2PolylineAndParseArc(pts, buls, tolerance, true, lineLengthSq);\r\n let pl2 = PointsSimplify2PolylineAndParseArc(pts, buls, tolerance, false, lineLengthSq);\r\n\r\n if (pl1.EndParam < pl2.EndParam)\r\n return pl1;\r\n else\r\n return pl2;\r\n}\r\n\r\n/**\r\n * 简化多段线,返回结果比较好的多段线\r\n * @param pl\r\n * @param [tolerance=0.1]\r\n * @param [lineLengthSq=2000]\r\n * @returns 返回undefined时,简化失败\r\n */\r\nexport function SmartPolylineSimply2Polyline(pl: Polyline, tolerance = 0.1, lineLengthSq = 2000): Polyline | undefined\r\n{\r\n if (pl.EndParam < 3) return;\r\n\r\n let ld = pl.LineData;\r\n let pts: Vector2[] = [ld[0].pt];\r\n let buls: number[] = [ld[0].bul];\r\n let prep = pts[0];\r\n for (let i = 1; i < ld.length; i++)\r\n {\r\n let d = ld[i];\r\n let p = d.pt;\r\n if (!equalv2(p, prep, 1e-3))\r\n {\r\n pts.push(p);\r\n buls.push(d.bul);\r\n prep = p;\r\n }\r\n }\r\n\r\n if (pl.CloseMark && !equalv2(pts[0], arrayLast(pts)))\r\n pts.push(pts[0].clone());\r\n\r\n let npl = SmartPointsSimply2Polyline(pts, pl.LineData.map(p => p.bul), tolerance, lineLengthSq);\r\n npl.ApplyMatrix(pl.OCSNoClone);\r\n npl.ColorIndex = pl.ColorIndex;\r\n return npl;\r\n}\r\n\r\n//types\r\nfunction Vec2(x: number, y: number)\r\n{\r\n this.x = x;\r\n this.y = y;\r\n}\r\n\r\nlet c_Epsilon = 0.0001;\r\n\r\n// math functions\r\nfunction Sqr(val: number)\r\n{\r\n return val * val;\r\n}\r\nfunction IsEqualEps(lhs: number, rhs: number)\r\n{\r\n return Math.abs(lhs - rhs) <= c_Epsilon;\r\n}\r\n\r\nfunction ToNumber_Safe(input: number)\r\n{\r\n let output = Number(input);\r\n return isNaN(output) ? 0 : output;\r\n}\r\n\r\nfunction Vec2_Add(lhs: Vec2, rhs: Vec2)\r\n{\r\n return new Vec2(lhs.x + rhs.x, lhs.y + rhs.y);\r\n}\r\nfunction Vec2_Sub(lhs: Vec2, rhs: Vec2)\r\n{\r\n return new Vec2(lhs.x - rhs.x, lhs.y - rhs.y);\r\n}\r\nfunction Vec2_Scale(lhs: { x: number; y: number; }, scale: number)\r\n{\r\n return new Vec2(lhs.x * scale, lhs.y * scale);\r\n}\r\nfunction Vec2_AddScaled(lhs: Vec2, rhs: Vec2, scale: number)\r\n{\r\n return new Vec2(lhs.x + rhs.x * scale, lhs.y + rhs.y * scale);\r\n}\r\n\r\nfunction Vec2_Dot(lhs: Vec2, rhs: Vec2)\r\n{\r\n return lhs.x * rhs.x + lhs.y * rhs.y;\r\n}\r\n\r\nfunction Vec2_MagSqr(val: { x: number; y: number; })\r\n{\r\n return val.x * val.x + val.y * val.y;\r\n}\r\n\r\nfunction CreateArcFromEdge(p1: Vec2, t1: Vec2, p2: Vec2, fromP1: boolean): Arc | Line\r\n{\r\n let chord = Vec2_Sub(p2, p1);\r\n let n1 = new Vec2(-t1.y, t1.x);\r\n let chordDotN1 = Vec2_Dot(chord, n1);\r\n\r\n if (IsEqualEps(chordDotN1, 0))\r\n return new Line(AsVector3(p1), AsVector3(p2));\r\n else\r\n {\r\n let radius = Vec2_MagSqr(chord) / (2 * chordDotN1);\r\n let center = Vec2_AddScaled(p1, n1, radius);\r\n\r\n let p1Offset = Vec2_Sub(p1, center);\r\n let p2Offset = Vec2_Sub(p2, center);\r\n\r\n let p1Ang1 = Math.atan2(p1Offset.y, p1Offset.x);\r\n let p2Ang1 = Math.atan2(p2Offset.y, p2Offset.x);\r\n if (p1Offset.x * t1.y - p1Offset.y * t1.x > 0)\r\n return new Arc(AsVector3(center), Math.abs(radius), p1Ang1, p2Ang1, !fromP1);\r\n else\r\n return new Arc(AsVector3(center), Math.abs(radius), p1Ang1, p2Ang1, fromP1);\r\n }\r\n}\r\n\r\n/**\r\n * 计算双圆弧插值的圆弧\r\n * @param p1 起点\r\n * @param p2 终点\r\n * @param t1 起点切线\r\n * @param t2 终点切线\r\n * @returns 两个圆弧(或者其中一个是直线)\r\n */\r\nexport function ComputeBiarc(p1: Vec2, p2: Vec2, t1: Vec2, t2: Vec2): [Arc | Line, Arc | Line]\r\n{\r\n let v = Vec2_Sub(p2, p1);\r\n let vMagSqr = Vec2_MagSqr(v);\r\n\r\n let vDotT1 = Vec2_Dot(v, t1);\r\n\r\n if (true)//自动d1 d2=d1\r\n {\r\n let t = Vec2_Add(t1, t2);\r\n let tMagSqr = Vec2_MagSqr(t);\r\n\r\n let equalTangents = IsEqualEps(tMagSqr, 4.0);\r\n\r\n let perpT1 = IsEqualEps(vDotT1, 0.0);\r\n if (equalTangents && perpT1) //2个半圆\r\n {\r\n let angle = Math.atan2(v.y, v.x);\r\n let center1 = Vec2_AddScaled(p1, v, 0.25);\r\n let center2 = Vec2_AddScaled(p1, v, 0.75);\r\n let radius = Math.sqrt(vMagSqr) * 0.25;\r\n let cross = v.x * t1.y - v.y * t1.x;\r\n\r\n return [\r\n new Arc(AsVector3(center1), radius, angle, angle + Math.PI, cross < 0),\r\n new Arc(AsVector3(center2), radius, angle, angle + Math.PI, cross > 0)\r\n ];\r\n }\r\n else\r\n {\r\n let vDotT = Vec2_Dot(v, t);\r\n\r\n let d1: number;\r\n if (equalTangents)\r\n d1 = vMagSqr / (4 * vDotT1);\r\n else\r\n {\r\n let denominator = 2 - 2 * Vec2_Dot(t1, t2);\r\n let discriminant = Sqr(vDotT) + denominator * vMagSqr;\r\n d1 = (Math.sqrt(discriminant) - vDotT) / denominator;\r\n }\r\n\r\n let joint = Vec2_Scale(Vec2_Sub(t1, t2), d1);\r\n joint = Vec2_Add(joint, p1);\r\n joint = Vec2_Add(joint, p2);\r\n joint = Vec2_Scale(joint, 0.5);\r\n\r\n return [\r\n CreateArcFromEdge(p1, t1, joint, true),\r\n CreateArcFromEdge(p2, t2, joint, false)\r\n ];\r\n }\r\n }\r\n\r\n //使用自定义d1\r\n else\r\n {\r\n let d1_min = -500;\r\n let d1_max = 500;\r\n let d1 = d1_min + (d1_max - d1_min) * ToNumber_Safe(60) / 100.0;\r\n\r\n let vDotT2 = Vec2_Dot(v, t2);\r\n let t1DotT2 = Vec2_Dot(t1, t2);\r\n let denominator = (vDotT2 - d1 * (t1DotT2 - 1));\r\n\r\n if (IsEqualEps(denominator, 0.0))\r\n {\r\n //第二个圆弧是半圆\r\n let joint = Vec2_AddScaled(p1, t1, d1);\r\n joint = Vec2_AddScaled(joint, t2, vDotT2 - d1 * t1DotT2);\r\n\r\n return [\r\n CreateArcFromEdge(p1, t1, joint, true),\r\n CreateArcFromEdge(p2, t2, joint, false)\r\n ];\r\n }\r\n else\r\n {\r\n let d2 = (0.5 * vMagSqr - d1 * vDotT1) / denominator;\r\n\r\n let invLen = 1.0 / (d1 + d2);\r\n\r\n let joint = Vec2_Scale(Vec2_Sub(t1, t2), d1 * d2);\r\n joint = Vec2_AddScaled(joint, p2, d1);\r\n joint = Vec2_AddScaled(joint, p1, d2);\r\n joint = Vec2_Scale(joint, invLen);\r\n\r\n return [\r\n CreateArcFromEdge(p1, t1, joint, true),\r\n CreateArcFromEdge(p2, t2, joint, false)\r\n ];\r\n }\r\n }\r\n}\r\n","import { CatmullRomCurve3, Matrix3, Vector3 } from 'three';\r\nimport { arrayLast } from '../Common/ArrayExt';\r\nimport { ObjectSnapMode } from '../Editor/ObjectSnapMode';\r\nimport { AsVector2, AsVector3, equalv3 } from '../Geometry/GeUtils';\r\nimport { Factory } from './CADFactory';\r\nimport { CADFiler } from './CADFiler';\r\nimport { Curve } from './Entity/Curve';\r\nimport { Polyline } from './Entity/Polyline';\r\nimport { SplineConver2Polyline } from './SplineConver2Polyline';\r\n\r\n\r\nconst DrawSplitCount = 120;\r\n\r\n@Factory\r\nexport class Spline extends Curve\r\n{\r\n private _ClosedMark: boolean = false;\r\n constructor(private _PointList: Vector3[] = [])\r\n {\r\n super();\r\n }\r\n\r\n get Shape()\r\n {\r\n return new CatmullRomCurve3(this.Points, this._ClosedMark);\r\n }\r\n\r\n get Length()\r\n {\r\n //TODO:这个的性能挺低的(因为还需要重新获取一遍点表(如果我们有绘制对象,应该用绘制对象的点表来计算长度))\r\n return this.Shape.getLength();\r\n }\r\n\r\n get Points()\r\n {\r\n return this._PointList;\r\n }\r\n set Points(pts: Vector3[])\r\n {\r\n if (pts.length < 2) return;\r\n this.WriteAllObjectRecord();\r\n let ocsInv = this.OCSInv;\r\n this._PointList = pts.map(p => p.clone().applyMatrix4(ocsInv));\r\n\r\n if (pts.length > 2 && equalv3(this._PointList[0], arrayLast(this._PointList), 1e-3))\r\n {\r\n this._PointList.pop();\r\n this._ClosedMark = true;\r\n }\r\n\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 if (this._ClosedMark === v) return;\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\r\n get EndParam()\r\n {\r\n return this._ClosedMark ? this._PointList.length : this._PointList.length - 1;\r\n }\r\n\r\n GetClosestPointTo(pt: Vector3, extend: boolean): Vector3\r\n {\r\n return this.Convert2Polyline().GetClosestPointTo(pt, extend);\r\n }\r\n\r\n GetOffsetCurves(offsetDist: number): Array\r\n {\r\n if (offsetDist === 0) return [];\r\n let pld = this._PointList.map(p =>\r\n {\r\n return { pt: AsVector2(p), bul: 0 };\r\n });\r\n\r\n let pl = new Polyline(pld);\r\n let pls = pl.GetOffsetCurves(offsetDist);\r\n\r\n return pls.map(pl =>\r\n {\r\n let pts = pl.LineData.map(p => AsVector3(p.pt));\r\n let spl = new Spline(pts);\r\n spl.OCS = this._Matrix;\r\n spl._ClosedMark = this._ClosedMark;\r\n return spl;\r\n });\r\n }\r\n\r\n GetGripPoints()\r\n {\r\n return this._PointList.map(p => p.clone().applyMatrix4(this.OCSNoClone));\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 vec = vec.clone().applyMatrix4(this.OCSInv.setPosition(0, 0, 0)).setZ(0);\r\n this.WriteAllObjectRecord();\r\n for (let index of indexList)\r\n this._PointList[index].add(vec);\r\n this.Update();\r\n }\r\n MoveStretchPoints(indexList: Array, vec: Vector3)\r\n {\r\n vec = vec.clone().applyMatrix4(this.OCSInv.setPosition(0, 0, 0)).setZ(0);\r\n this.WriteAllObjectRecord();\r\n for (let index of indexList)\r\n this._PointList[index].add(vec);\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\r\n protected GetDrawCount()\r\n {\r\n return this.EndParam * DrawSplitCount;\r\n }\r\n\r\n Convert2Polyline(): Polyline\r\n {\r\n return SplineConver2Polyline(this);\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 if (ver > 1)\r\n this._ClosedMark = file.Read();\r\n }\r\n WriteFile(file: CADFiler)\r\n {\r\n super.WriteFile(file);\r\n file.Write(2);//ver\r\n file.Write(this._PointList.length);\r\n this._PointList.forEach(p => file.Write(p.toArray()));\r\n file.Write(this._ClosedMark);\r\n }\r\n}\r\n","import { Box3, Vector3 } from \"three\";\r\nimport { arrayPushArray } from \"../Common/ArrayExt\";\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 //交点参数集\r\n intersect2: Map = new Map();\r\n\r\n intersect3: [Curve, Curve, Vector3[]][] = [];\r\n\r\n /**\r\n * @param {Curve[]} cus 请注意数组的顺序会被更改,如果你在意数组的顺序,请拷贝数组后传进来\r\n * @memberof CurveIntersection\r\n */\r\n constructor(cus: Curve[], parseIntersectionParam = false, intType = IntersectOption.ExtendNone, protected fuzz = 1e-6, parseRecord = false)\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 (parseRecord)\r\n this.intersect3.push([c1, c2, pts]);\r\n\r\n if (parseIntersectionParam)\r\n {\r\n this.AppendIntersectionParams(c1, ints.map(i => [i.thisParam, i.pt]));\r\n this.AppendIntersectionParams(c2, ints.map(i => [i.argParam, i.pt]));\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, Vector3][])\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 arrayPushArray(arr, 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) || (p.thisParam < 0 ? 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) || (p.argParam < 0 ? 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 { 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 for (let hashpart of hashparts)\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\nconst _overlap_ = \"_overlap_\";\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 = [];//外轮廓和内轮廓重叠时,只有外轮廓有数据,可以使用RegionParse.RegionsIsOverlap来取得\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\r\n maxWalk[_overlap_] = true;\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 //大小圈重叠\r\n static RegionsIsOverlap(Route: Route[])\r\n {\r\n return Boolean(Route[_overlap_]);\r\n }\r\n\r\n private 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 private 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 protected 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 > 1e-4 && param < 0.9999)\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\nexport function 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 { arrayPushArray } from \"../Common/ArrayExt\";\r\nimport { Contour } from \"../DatabaseServices/Contour\";\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 { Spline } from \"../DatabaseServices/Spline\";\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 CreateContours(curves: Curve[], fuzz = 1e-4): Contour[]\r\n{\r\n let contours: Contour[] = [];\r\n let extendsMinDistSq = fuzz * fuzz;\r\n //炸开多段线(防止自交多段线)\r\n let newCurves: Curve[] = [];\r\n for (let cu of curves)\r\n {\r\n if (cu instanceof Circle)\r\n contours.push(Contour.CreateContour(cu.Clone()));//避免将原始曲线传递给板,导致撤销这个圆失败\r\n else if (cu instanceof Polyline)\r\n arrayPushArray(newCurves, cu.Explode());\r\n else if (cu instanceof Spline)\r\n {\r\n let pl = cu.Convert2Polyline();\r\n if (pl.IsClose)\r\n contours.push(Contour.CreateContour(pl, false));\r\n else\r\n newCurves.push(pl);\r\n }\r\n else if (cu instanceof Ellipse)\r\n Contour.CreateContour(cu.Convert2Polyline(), false);\r\n else\r\n newCurves.push(cu);\r\n }\r\n\r\n let intersect = new CurveIntersection2(newCurves, 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 arrayPushArray(ipts, 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 arrayPushArray(tempCus, c.Explode());\r\n else\r\n tempCus.push(c);\r\n }\r\n\r\n arrayPushArray(curves2, 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 let contour = Contour.CreateContour(curves, false);\r\n if (contour)\r\n contours.push(contour);\r\n }\r\n return contours;\r\n}\r\n\r\nexport function CreateContour2(curves: Curve[], fuzz = 1e-4): Contour | undefined\r\n{\r\n return CreateContours(curves, fuzz)[0];\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.ExtendNone);\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 { 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 { CreateContour2 } from \"../Geometry/CreateContour2\";\r\nimport { Route } from \"../Geometry/CurveMap\";\r\nimport { equaln, equalv2, 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 //同心圆\r\n if (this._Curve instanceof Circle && target._Curve instanceof Circle && equalv2(this._Curve.Center, target._Curve.Center, 1e-3))\r\n {\r\n if (this._Curve.Radius > target._Curve.Radius)\r\n return { intersectionList: [target._Curve], unionList: [this._Curve] };\r\n else\r\n return { intersectionList: [this._Curve], unionList: [target._Curve] };\r\n }\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.ExtendNone, 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.ExtendNone, 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) ?? CreateContour2(cs);\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.ExtendNone, 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//也许有一天这个中点算法需要改一下, 使用.MidPoint比较稳妥\r\nfunction fastCurveInCurve(sourceCu: Polyline | Circle, targetCu: Curve)\r\n{\r\n return sourceCu.PtInCurve(targetCu.Midpoint);\r\n}\r\n\r\n//当交点小于等于1时\r\nexport function fastCurveInCurve2(sourceCu: Polyline | Circle, targetCu: Curve)\r\n{\r\n return sourceCu.PtInCurve(targetCu.StartPoint) ||\r\n sourceCu.PtInCurve(targetCu.Midpoint);\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 ep?: Vector3;\r\n preCurve?: Curve;\r\n nextCurve?: Curve;\r\n paddingCurve?: Curve[];\r\n}\r\n\r\nexport class CurveTreeNode\r\n{\r\n children: this[];\r\n box: Box3;\r\n used: boolean;\r\n\r\n Create(curve: Curve, box?: Box3): this { return new (this.constructor)(curve, box) as this; }\r\n\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.ExtendNone)\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(this.Create(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: this[] = [];\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 this.RepairResultPolylineClosemark();\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 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.nextCurve = curveNext;\r\n curveResNext.preCurve = 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.ExtendNone, 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.ExtendNone);\r\n let ipts2 = cu2.IntersectWith(l2, IntersectOption.ExtendNone);\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.preCurve && d.preCurve instanceof Arc)\r\n {\r\n let a = d.preCurve;\r\n if (Math.sign(a.Bul) !== this._OffsetDistSign && a.AllAngle > 1e-6)\r\n {\r\n let ipts = a.IntersectWith(l1, IntersectOption.ExtendNone);\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.nextCurve && d.nextCurve instanceof Arc)\r\n {\r\n let a = d.nextCurve;\r\n if (Math.sign(a.Bul) !== this._OffsetDistSign && a.AllAngle > 1e-6)\r\n {\r\n let ipts = a.IntersectWith(l2, IntersectOption.ExtendNone);\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, 8e-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 private RepairResultPolylineClosemark()\r\n {\r\n if (!this._RetCurves.length) return;\r\n\r\n if (this._Polyline.CloseMark)\r\n {\r\n if (!equalv2(this._Polyline.LineData[0].pt, arrayLast(this._Polyline.LineData).pt, 8e-2))//缺省一个点\r\n {\r\n for (let pl of this._RetCurves)\r\n {\r\n if (pl.IsClose && //封闭\r\n equaln(arrayLast(pl.LineData).bul, 0, 1e-5) &&//是直线\r\n equalv2(pl.LineData[0].pt, arrayLast(pl.LineData).pt, 8e-2))//首尾重复(一般已经是了)\r\n {\r\n pl.LineData.pop();//移除最后一点\r\n pl.CloseMark = true;\r\n }\r\n }\r\n }\r\n else\r\n {\r\n for (let pl of this._RetCurves)\r\n {\r\n if (pl.IsClose)\r\n pl.CloseMark = true;\r\n }\r\n }\r\n }\r\n else if (this._IsClose)\r\n {\r\n for (let pl of this._RetCurves)\r\n {\r\n let firstP = pl.LineData[0].pt;\r\n let lastP = arrayLast(pl.LineData).pt;\r\n if (equalv2(firstP, lastP, 8e-2))\r\n lastP.copy(firstP);\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\nexport function EntityEncode2(c1: Curve, c2: Curve)\r\n{\r\n return EntityEncode(c1) & EntityEncode(c2);\r\n}\r\n\r\n//表示这个是一个正常的曲线,不是0长度的线,也不是0长度的圆弧\r\nexport function 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 { Vec2, 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.GetBulgeAt(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\nexport function IsPointInPolygon(pt: Vec2, pts: Vec2[])\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","import { Box3, Matrix3, Matrix4, Shape, Vec2, Vector2, Vector3 } from 'three';\r\nimport { arrayLast, arrayRemoveDuplicateBySort, changeArrayStartIndex } from '../../Common/ArrayExt';\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 { CreatePolylinePath } from '../../Geometry/CreatePolylinePath';\r\nimport { AsVector2, AsVector3, equaln, equalv2, equalv3, MatrixIsIdentityCS } from '../../Geometry/GeUtils';\r\nimport { IntersectOption, IntersectPolylineAndCurve } from '../../GraphicsSystem/IntersectWith';\r\nimport { OffsetPolyline } from '../../GraphicsSystem/OffsetPolyline';\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\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 UpdateOCSTo(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.OCSNoClone, 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.NumberOfVertices,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 let inv = this.OCSInv;\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(inv);\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 let inv = this.OCSInv;\r\n for (let i = 0; i < oldPts.length; i++)\r\n {\r\n let newP = oldPts[i].applyMatrix4(inv);\r\n let newBul = -this.GetBulgeAt(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\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\r\n GetBulgeAt(index: number): number\r\n {\r\n return this._LineData[index].bul;\r\n }\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\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 FromPoints2d(pts: Vec2[]): this\r\n {\r\n this.WriteAllObjectRecord();\r\n this._LineData.length = 0;\r\n for (let p of pts)\r\n this._LineData.push({ pt: AsVector2(p), bul: 0 });\r\n this.Update();\r\n return this;\r\n }\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.GetBulgeAt(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.GetBulgeAt(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 */\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.OCSNoClone);\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 cuCount = paramFloor > this.EndParam ? this.EndParam : paramFloor;\r\n\r\n let dist = 0;\r\n //首先计算完整曲线的长度\r\n for (let i = 0; i < cuCount; i++)\r\n {\r\n dist += this.GetCurveAtIndex(i).Length;\r\n }\r\n\r\n //参数已经大于索引,证明参数在线外.\r\n if (paramFloor !== cuCount)\r\n {\r\n dist += this.GetCurveAtParam(param).GetDistAtParam(param - cuCount);\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 if (equaln(dist, 0)) return 0;\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 let normal = pl.Normal;\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 {\r\n let dir = equalv3(normal, cu.Normal.negate(), 1e-3) ? -1 : 1;\r\n bul = cu.Bul * dir;\r\n }\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 //偏移\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-5))\r\n curve = new Line(AsVector3(d1.pt), AsVector3(d2.pt)).ApplyMatrix(this.OCSNoClone);\r\n else\r\n curve = new Arc().ParseFromBul(d1.pt, d2.pt, d1.bul).ApplyMatrix(this.OCSNoClone);\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.ExtendNone);\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(): Shape\r\n {\r\n let { pts, buls } = this.PtsBuls;\r\n return CreatePolylinePath(pts, buls);\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.GetBulgeAt(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\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 ptCount = this._LineData.length;\r\n\r\n let frontIndex = cuIndex - 1;\r\n if (this._ClosedMark)\r\n frontIndex = FixIndex(frontIndex, ptCount);\r\n\r\n if (frontIndex >= 0 && this.GetBulgeAt(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 !== ptCount - 1) && this.GetBulgeAt(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 ptCount = this._LineData.length;\r\n\r\n for (let index of indexList)\r\n {\r\n if (index >= ptCount)\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, ptCount);\r\n nextIndex = FixIndex(nextIndex, ptCount);\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 count = file.Read();\r\n for (let i = 0; i < count; 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 { ComparePointFnGenerate, 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 ExtendNone = 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(ComparePointFnGenerate(\"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.ExtendNone;\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 { Box3, Matrix3, Matrix4, Vector2, Vector3 } from 'three';\r\nimport { getArcOrCirNearPts, getCircleCenter, GetTanPtsOnArcOrCircle } from '../../Common/CurveUtils';\r\nimport { reviseMirrorMatrix, SetMtxVector, TransformVector } from '../../Common/Matrix4Utils';\r\nimport { Status } from '../../Common/Status';\r\nimport { ObjectSnapMode } from '../../Editor/ObjectSnapMode';\r\nimport { Box3Ext } from '../../Geometry/Box';\r\nimport { angle, AsVector3, clampRad, equaln, equalv2, equalv3, MoveMatrix, polar, ZeroVec } from '../../Geometry/GeUtils';\r\nimport { Orbit } from '../../Geometry/Orbit';\r\nimport { IntersectArcAndArc, IntersectCircleAndArc, IntersectEllipseAndCircleOrArc, IntersectLineAndArc, IntersectOption, IntersectPolylineAndCurve, reverseIntersectOption } from '../../GraphicsSystem/IntersectWith';\r\nimport { Factory } from '../CADFactory';\r\nimport { CADFiler } from '../CADFiler';\r\nimport { Shape2 } from '../Shape2';\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 = ZeroVec, 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 Shape2();\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 SetMtxVector(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 private get BoundingBoxPtsInOCS()\r\n {\r\n let pts = [\r\n polar(new Vector3(), this._StartAngle, this._Radius),\r\n polar(new Vector3(), this._EndAngle, this._Radius),\r\n ];\r\n\r\n if (this.ParamOnCurve(this.GetParamAtAngle(0)))\r\n pts.push(new Vector3(this._Radius, 0));\r\n\r\n if (this.ParamOnCurve(this.GetParamAtAngle(Math.PI / 2)))\r\n pts.push(new Vector3(0, this._Radius));\r\n\r\n if (this.ParamOnCurve(this.GetParamAtAngle(Math.PI)))\r\n pts.push(new Vector3(-this._Radius, 0));\r\n\r\n if (this.ParamOnCurve(this.GetParamAtAngle(Math.PI * 3 / 2)))\r\n pts.push(new Vector3(0, -this._Radius));\r\n return pts;\r\n }\r\n\r\n private static _X = new Vector3;\r\n private static _Y = new Vector3;\r\n private static _Z = new Vector3;\r\n private static _Mtx = new Matrix4;\r\n get BoundingBox(): Box3\r\n {\r\n Arc._Z.setFromMatrixColumn(this._Matrix, 2);\r\n Orbit.ComputUpDirection(Arc._Z, Arc._Y, Arc._X);\r\n\r\n Arc._Mtx.makeBasis(Arc._X, Arc._Y, Arc._Z).setPosition(this._Matrix.elements[12], this._Matrix.elements[13], this._Matrix.elements[14]);\r\n\r\n let pts = [\r\n polar(new Vector3(), this._StartAngle, this._Radius),\r\n polar(new Vector3(), this._EndAngle, this._Radius),\r\n ];\r\n\r\n let ocsInv = this.OCSInv;\r\n\r\n for (let p of [new Vector3(this._Radius), new Vector3(0, this._Radius), new Vector3(-this._Radius), new Vector3(0, -this._Radius)])\r\n {\r\n p.applyMatrix4(Arc._Mtx).applyMatrix4(ocsInv);\r\n if (this.ParamOnCurve(this.GetParamAtAngle(angle(p))))\r\n pts.push(p);\r\n }\r\n\r\n for (let p of pts)\r\n p.applyMatrix4(this.OCSNoClone);\r\n\r\n return new Box3Ext().setFromPoints(pts);\r\n }\r\n\r\n /**\r\n * 返回对象在自身坐标系下的Box\r\n */\r\n get BoundingBoxInOCS(): Box3Ext\r\n {\r\n return new Box3Ext().setFromPoints(this.BoundingBoxPtsInOCS);\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 // if (equaln(v, this._StartAngle)) return;//优化导致测试用例失败\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 // if (equaln(v, this._EndAngle)) return;//优化导致测试用例失败\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.OCSNoClone);\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 private static __PointTemp__ = new Vector3;\r\n GetAngleAtPoint(pt: Vector3)\r\n {\r\n return angle(Arc.__PointTemp__.copy(pt).applyMatrix4(this.OCSInv));\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 || curve.constructor.name === \"RoomWallArc\")\r\n {\r\n return IntersectArcAndArc(this, curve as Arc, intType);\r\n }\r\n if (curve instanceof Line || curve.constructor.name === \"RoomWallLine\")\r\n {\r\n return SwapParam(IntersectLineAndArc(curve as Line, 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 * ref http://www.lee-mac.com/bulgeconversion.html\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 //a (* 2 (atan b))\r\n let a = Math.atan(bul) * 2;\r\n //r (/ (distance p1 p2) 2 (sin a))\r\n let r = p1.distanceTo(p2) / 2 / Math.sin(a);\r\n //c (polar p1 (+ (- (/ pi 2) a) (angle p1 p2)) r)\r\n let c = polar(p1.clone(), Math.PI / 2 - a + angle(p2.clone().sub(p1)), r);\r\n\r\n this._Radius = Math.abs(r);\r\n\r\n this._StartAngle = angle(p1.sub(c));\r\n this._EndAngle = angle(p2.sub(c));\r\n\r\n this._Clockwise = bul < 0;\r\n\r\n this.Center = c.applyMatrix4(this.OCSNoClone);\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 this;\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 if (!center)\r\n {\r\n this.ParseFromBul(pt1.applyMatrix4(this.OCSNoClone), pt3.applyMatrix4(this.OCSNoClone), 1e-3);//faker line\r\n return this;\r\n };\r\n\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 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 index = indexList[0];\r\n\r\n if (index > 2)\r\n this.Center = this.Center.add(vec);\r\n else\r\n {\r\n let p1 = polar(new Vector3, this._StartAngle, this._Radius);\r\n let p2 = polar(new Vector3, this.GetAngleAtParam(0.5), this._Radius);\r\n let p3 = polar(new Vector3, this._EndAngle, this._Radius);\r\n\r\n vec = TransformVector(vec.clone(), this.OCSInv).setZ(0);\r\n\r\n [p1, p2, p3][index].add(vec);\r\n\r\n let center = getCircleCenter(p1, p2, p3);\r\n if (!center)//三点共线 使用faker arc\r\n {\r\n this.ParseFromBul(p1.applyMatrix4(this.OCSNoClone), p3.applyMatrix4(this.OCSNoClone), 1e-3);\r\n this.Update();\r\n return;\r\n }\r\n\r\n //起始角度 端点角度\r\n this._StartAngle = angle(p1.clone().sub(center));\r\n this._EndAngle = angle(p3.clone().sub(center));\r\n if (equaln(this._StartAngle, this._EndAngle, 1e-5))//差不多也是三点共线,只不过逃逸了\r\n {\r\n this.ParseFromBul(p1.applyMatrix4(this.OCSNoClone), p3.applyMatrix4(this.OCSNoClone), 1e-3);\r\n this.Update();\r\n return;\r\n }\r\n\r\n //用圆心和其中一个点求距离得到半径:\r\n this._Radius = center.distanceTo(p1);\r\n\r\n this.Center = center.clone().applyMatrix4(this.OCS);\r\n\r\n //求出向量p1->p2,p1->p3\r\n let v1 = p2.clone().sub(p1);\r\n let v2 = p3.clone().sub(p1);\r\n\r\n this._Clockwise = v1.cross(v2).z < 0;\r\n\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 pt = pt.clone().applyMatrix4(this.OCSInv);\r\n if (equalv2(pt, ZeroVec, 1e-8))\r\n return this.GetPointAtParam(0);\r\n\r\n let a = angle(pt);\r\n let param = this.GetParamAtAngle(a);\r\n if (extend || this.ParamOnCurve(param))\r\n return polar(new Vector3, a, this._Radius).applyMatrix4(this._Matrix);\r\n\r\n if (param < 0) return this.GetPointAtParam(0);\r\n else return this.GetPointAtParam(1);\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\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 { 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 { Spline } from '../DatabaseServices/Spline';\r\nimport { Count } from '../Geometry/Count';\r\nimport { CurveMap, Vertice } from '../Geometry/CurveMap';\r\nimport { AsVector2, AsVector3, equaln, equalv2, equalv3, isIntersect, isParallelTo, isPerpendicularityTo, XAxis, YAxis, ZeroVec } 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, arrayRemoveDuplicateBySort, arrayRemoveIf, 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 (equaln(temp, 0, 1e-5))\r\n {\r\n return;\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 cirAng = Math.PI * 2 - cirAng;\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 else if (cu instanceof Spline)\r\n return GetPointAtCurveDir(cu.Convert2Polyline(), pt);\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.GetBulgeAt(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.OCSNoClone;\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 arrayRemoveIf(cus, c => c.Length < LINK_FUZZ);\r\n\r\n let cir: Circle;\r\n arrayRemoveDuplicateBySort(cus, (c1, c2) =>\r\n {\r\n if (cir) return true;\r\n\r\n let status = c1.Join(c2, false, LINK_FUZZ);\r\n if (status === Status.ConverToCircle)\r\n {\r\n let arc = c1 as Arc;\r\n cir = new Circle(arc.Center, arc.Radius);\r\n return true;\r\n }\r\n return status === Status.True;\r\n });\r\n\r\n if (cir)\r\n {\r\n cus.length = 0;\r\n cus.push(cir);\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 const IsNorZeroVector = (v: Vector3) => v && !equalv3(v, ZeroVec, 1e-3);\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 || c instanceof Circle)\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 if (IsNorZeroVector(v))\r\n {\r\n v.normalize().cross(firstV);\r\n if (IsNorZeroVector(v))//避免平行向量\r\n {\r\n normal = v.normalize();\r\n break;\r\n }\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 (IsNorZeroVector(fv))//先判断零向量\r\n firstV = fv.normalize();//再归一化\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(), 1e-5))\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(), 1e-2))\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))\r\n 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 let rects: Polyline[] = [];\r\n let endParam = outline.EndParam;\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 let res2 = c2.IntersectWith2(outline, IntersectOption.ExtendThis);\r\n let pars: number[] = [];\r\n for (let i of res) pars.push(i.argParam);\r\n for (let i of res2) pars.push(i.argParam);\r\n for (let i = 0; i < pars.length; i++)\r\n {\r\n let p = pars[i];\r\n if (p < 0) p = 0;//请参照测试用例\r\n else if (p > endParam) p = endParam;//请参照测试用例\r\n else p = Math.floor(p);\r\n\r\n pars[i] = p;\r\n }\r\n pars.sort((a, b) => a - b);\r\n arrayRemoveDuplicateBySort(pars);\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 { 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 { Box3, Matrix3, Matrix4, Path, Shape as TShape, Vector3 } from 'three';\r\nimport { arrayRemoveIf } from '../Common/ArrayExt';\r\nimport { ObjectSnapMode } from '../Editor/ObjectSnapMode';\r\nimport { IntersectBox2 } from '../Geometry/Box';\r\nimport { equaln } from '../Geometry/GeUtils';\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\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 // TestDraw(this._Outline.Curve.Clone()); //测试代码\r\n // TestDraw(targetShape._Outline.Curve.Clone());\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 {\r\n console.warn(\"未知情况\");//qiannianzhou_lvzhijia.test.ts触发这个 本质是轮廓+轮廓会产生新的洞!\r\n\r\n //TODO: 这是个BUG\r\n // let f = new CADFiler;\r\n // f.Write(3);\r\n // c.Curve.ColorIndex = 1;\r\n // f.WriteObject(c.Curve);\r\n // f.WriteObject(ic.Curve);\r\n // ic.Curve.ColorIndex = 2;\r\n // f.WriteObject(unions.holes[0].Curve);\r\n // unions.holes[0].Curve.ColorIndex = 3;\r\n // copyTextToClipboard(f.ToString());\r\n }\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.UpdateOCSTo(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 { Matrix4 } from 'three';\r\nimport { IntersectBox2 } from '../Geometry/Box';\r\nimport { BoolOpeartionType } from '../GraphicsSystem/BoolOperateUtils';\r\nimport { CADFiler } from './CADFiler';\r\nimport { Shape } from './Shape';\r\n\r\n\r\nexport class ShapeManager\r\n{\r\n constructor(private _ShapeList: Shape[] = [])\r\n {\r\n\r\n }\r\n\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 if (type === RenderType.Physical)\r\n {\r\n let mesh = obj as Mesh;\r\n mesh.material = this.MeshMaterial;\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 BrName = \"brName\",\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 DrawNumber = \"drawNumber\",\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 { AutoRecord } from '../AutoRecord';\r\nimport { Factory } from '../CADFactory';\r\nimport { CADFiler } from '../CADFiler';\r\nimport { Entity } from '../Entity/Entity';\r\nimport { ObjectId } from '../ObjectId';\r\n\r\n@Factory\r\nexport class Hole extends Entity\r\n{\r\n @AutoRecord FId: ObjectId;\r\n @AutoRecord MId: ObjectId;//层板钉:{mid=层板} 排钻:{mid=面}\r\n protected _Height: number;\r\n @AutoRecord OtherHalfTongKong: ObjectId;\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 Clone()\r\n {\r\n let ent = super.Clone();\r\n ent.OtherHalfTongKong = null;\r\n return ent;\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 if (ver >= 6)\r\n {\r\n this.OtherHalfTongKong = file.ReadSoftObjectId();\r\n }\r\n\r\n }\r\n WriteFile(file: CADFiler)\r\n {\r\n super.WriteFile(file);\r\n file.Write(6);//ver\r\n file.Write(this._Height);\r\n file.WriteSoftObjectId(this.FId);\r\n file.WriteSoftObjectId(this.MId);\r\n file.WriteSoftObjectId(this.OtherHalfTongKong);\r\n }\r\n}\r\n","import { BufferGeometry, CylinderBufferGeometry, Float32BufferAttribute, LineSegments, Matrix3, Matrix4, Mesh, Object3D, Shape as TShape, Vector3 } from \"three\";\r\nimport { ColorMaterial } from '../../Common/ColorPalette';\r\nimport { DisposeThreeObj, Object3DRemoveAll } from '../../Common/Dispose';\r\nimport { FixIndex } from \"../../Common/Utils\";\r\nimport { ObjectSnapMode } from \"../../Editor/ObjectSnapMode\";\r\nimport { Box3Ext } from \"../../Geometry/Box\";\r\nimport { RenderType } from \"../../GraphicsSystem/RenderType\";\r\nimport { CADFactory, Factory } from '../CADFactory';\r\nimport { CADFiler } from '../CADFiler';\r\nimport { Circle } from \"../Entity/Circle\";\r\nimport { Hole } from \"./Hole\";\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 return this.BoundingBoxInOCS.applyMatrix4(this._Matrix);\r\n }\r\n\r\n /**\r\n * 返回对象在自身坐标系下的Box\r\n */\r\n get BoundingBoxInOCS(): Box3Ext\r\n {\r\n return new Box3Ext(new Vector3(-this._Radius, -this._Radius, 0), new Vector3(this._Radius, this._Radius, this._Height));\r\n }\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 Erase(isErase: boolean = true)\r\n {\r\n if (isErase === this.IsErase) return;\r\n super.Erase(isErase);\r\n if (!isErase) return;\r\n\r\n if (this.OtherHalfTongKong && !this.OtherHalfTongKong.IsErase)\r\n {\r\n let cy = this.OtherHalfTongKong.Object as this;\r\n cy.Type = GangDrillType.Ymj;\r\n cy.OtherHalfTongKong = null;\r\n }\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 { 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 = 0, //正面\r\n Reverse = 1, //反面\r\n Arbitrary = 2 //任意\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 ISealingData extends IHighSealedItem\r\n{\r\n length: number;\r\n type?: string;\r\n shop?: string;\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\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\n\r\nexport interface LightConfigOption extends IBaseOption\r\n{\r\n Intensity: number;\r\n lightColor: string;\r\n temperature: number;\r\n IndirectLightingIntensity: number;\r\n SpecularScale: number;\r\n CaseShadow: boolean;\r\n}\r\n\r\nexport interface PointLightOption extends LightConfigOption\r\n{\r\n SourceRadius: number;\r\n SoftSourceRadius: number;\r\n SourceLength: number;\r\n}\r\n\r\nexport interface SpotLightOption extends LightConfigOption\r\n{\r\n Angle: number;\r\n InnerConeAngle: number;\r\n SourceRadius: number;\r\n SoftSourceRadius: number;\r\n SourceLength: number;\r\n AttenuationRadius: number;\r\n ShowHelper: boolean;\r\n}\r\n\r\nexport interface RectAreaLightOption extends LightConfigOption\r\n{\r\n Width: number;\r\n Height: number;\r\n BarnDoorAngle: number;\r\n BarnDoorLength: number;\r\n AttenuationRadius: number;\r\n ShowHelper: boolean;\r\n}\r\n\r\nexport interface RightPlaneLightOption\r\n{\r\n version: number;\r\n ShowHemiLight: boolean;\r\n SkyLightColor: string;\r\n SkyLightIntensity: number;\r\n SkyLightIndirectLightingIntensity: number;\r\n ShowSunLight: boolean;\r\n SunLightIntensity: number;\r\n SunLightIndirectLightingIntensity: number;\r\n SunLightColor: string;\r\n SunLightTemperature: number;\r\n SunLightElevationDeg: number;\r\n SunLightRotateDeg: number;\r\n ShowExposure: boolean;\r\n AutoExposure: boolean;\r\n ExposureCompensation: number;\r\n SunTime: string;\r\n}\r\n\r\nexport interface ModifyTextsConfigOption\r\n{\r\n changeTexts: [string, string][];\r\n}\r\n\r\nexport interface KJLImportConfigOption extends IBaseOption\r\n{\r\n materials: MaterialMapOption[];\r\n isImportVirtualModel: boolean;\r\n}\r\nexport interface MaterialMapOption\r\n{\r\n id: string; //引用材质ID\r\n kjlName: string; //酷家乐基础材质名称\r\n}\r\n\r\nexport interface ViewportConfigOption\r\n{\r\n view: number;\r\n wireFrame: string;\r\n}\r\n\r\nexport interface Viewport2ConfigOption\r\n{\r\n align: string;\r\n view1: number,\r\n view2: number,\r\n wireFrame: string[],\r\n}\r\nexport interface Viewport3ConfigOption\r\n{\r\n align: string;\r\n view: number[],\r\n wireFrame: string[],\r\n}\r\n\r\nexport interface Viewport4ConfigOption\r\n{\r\n view: number[],\r\n wireFrame: string[],\r\n}\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\n\r\nexport interface SingleBoardOption extends BoardConfigOption\r\n{\r\n rotateX: number;\r\n rotateY: number;\r\n rotateZ: number;\r\n drawNumber?: 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 name: string;\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 RadioType\r\n{\r\n lefttop = \"1\",\r\n leftbottom = \"2\",\r\n righttop = \"3\",\r\n rightbottom = \"4\",\r\n}\r\n\r\nexport interface IBatchModifyPanelOption extends IBaseOption\r\n{\r\n length: string;\r\n width: string;\r\n thick: string;\r\n position: RadioType;\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\r\nexport interface CommonPanelConfigOption\r\n{\r\n orderType: string;\r\n}\r\n","import { Box3, Matrix4, Vector3 } from \"three\";\r\nimport { HostApplicationServices } from \"../../ApplicationServices/HostApplicationServices\";\r\nimport { EBoardKeyList } from \"../../Common/BoardKeyList\";\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 { 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 { angle, clampRad, isParallelTo, rotatePoint, ZAxis } from \"../../Geometry/GeUtils\";\r\nimport { DrillType } from \"../../UI/Store/BoardInterface\";\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 (HostApplicationServices.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 an = clampRad(an);\r\n\r\n if (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 an = clampRad(an);\r\n\r\n if (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 { 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 { 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","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 { 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 { EBoardKeyList } from \"../../Common/BoardKeyList\";\r\nimport { ComposingType, FaceDirection, IBaseOption, LinesType } from \"./BoardInterface\";\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 Include = \"//\",\r\n}\r\n","import { IBaseOption } from \"./BoardInterface\";\r\nimport { ITemplateParam } from \"./RightPanelStore/ITemplateParam\";\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 useRule: boolean;\r\n changeTemplateBoardNameOfOpenDir: boolean;//使用模块时,修改板件名称\r\n frontAndBackDrill: boolean; //正反面排孔\r\n}\r\n\r\n/**\r\n * 铰链数据接口\r\n */\r\nexport interface IHingeConfigOption extends IBaseOption\r\n{\r\n hingeCount: number; //铰链\r\n hindeTopDist: number;\r\n hindeBottomDist: number;\r\n useRule: boolean,\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?: ITemplateParam[];\r\n title?: string;\r\n isHandle?: boolean;\r\n isHinge?: boolean;\r\n tagName?: string;\r\n isKuGan?: boolean;\r\n diy_logo?: string;\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 \"./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 { EBoardKeyList } from \"../../Common/BoardKeyList\";\r\nimport { IBaseOption } from \"./BoardInterface\";\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 isExtendsBH2: boolean;//是否继承\r\n followNarrow: boolean;//酒格补板前缩跟随\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","export enum EOrderType\r\n{\r\n ByCreate = \"create_date desc\",\r\n ByCreate2 = \"create_date\",\r\n ByUpdate = \"update_date desc\",\r\n ByUpdate2 = \"update_date\",\r\n ByName = \"name\",\r\n ByName2 = \"name desc\",\r\n}\r\n","import { Curve2RecOption } from \"../Add-on/twoD2threeD/Modals/Curve2RecOption\";\r\nimport { IParseBoardNameOption, IRec2BrOption, IRect2Br2Option } from \"../Add-on/twoD2threeD/R2bInterface\";\r\nimport { EBoardKeyList } from \"../Common/BoardKeyList\";\r\nimport { IUpdateBoardInfosOption } from \"../UI/Components/Board/UpdateBoardInfointerface\";\r\nimport { EMetalsType, ICompHardwareOption, ICylMetalsOption, IExtMetalsOption, IToplineOption } from \"../UI/Components/RightPanel/RightPanelInterface\";\r\nimport { IKuGangDrawOption } from \"../UI/Components/Template/TemplateInterface\";\r\nimport { ECompareType, IBoardFindOption } from \"../UI/Store/BoardFindInterface\";\r\nimport { BehindBoardOption, BehindHeightPositon, BoardProcessOption, BoardType, BrRelativePos, ClosingStripOption, CommonPanelConfigOption, ComposingType, CurtailType, FaceDirection, IBatchModifyPanelOption, IBoardBatchCurtailOption, KJLImportConfigOption, LayerBoardOption, LayerNailOption, LinesType, ModifyTextsConfigOption, PointLightOption, RadioType, RectAreaLightOption, RightPlaneLightOption, SideBoardOption, SingleBoardOption, SpotLightOption, StripType, TBBoardOption, VerticalBoardOption, Viewport2ConfigOption, Viewport3ConfigOption, Viewport4ConfigOption, ViewportConfigOption } from \"../UI/Store/BoardInterface\";\r\nimport { DoorPosType, HandleHorPos, HandleVePos, IDoorConfigOption, IDrawerConfigOption, IHingeConfigOption } from \"../UI/Store/DoorInterface\";\r\nimport { IHSOption } from \"../UI/Store/HSInterface\";\r\nimport { ELatticeArrayType, ILatticeOption } from \"../UI/Store/LatticeInterface\";\r\nimport { EFullDir, EFullType, EWineRackType, EWRackArrayType, IWineRackOption } from \"../UI/Store/WineRackInterface\";\r\nimport { EOrderType } from \"./OrderType\";\r\n\r\nexport const DefaultLayerBoardConfig: LayerBoardOption = {\r\n version: 3,\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: 3,\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: 3,\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 isExtendsBH2: false,\r\n followNarrow: false,\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 DefaultViewportConfigOption: ViewportConfigOption = {\r\n view: 3,\r\n wireFrame: \"打印模式\",\r\n};\r\nObject.freeze(DefaultViewportConfigOption);\r\n\r\nexport const DefaultViewport2ConfigOption: Viewport2ConfigOption = {\r\n align: \"垂直\",\r\n wireFrame: [\"打印模式\", \"打印模式\"],\r\n view1: 1,\r\n view2: 3,\r\n};\r\nObject.freeze(DefaultViewport2ConfigOption);\r\n\r\nexport const DefaultViewport3ConfigOption: Viewport3ConfigOption = {\r\n align: \"V\",\r\n wireFrame: [\"打印模式\", \"打印模式\", \"打印模式\"],\r\n view: [4, 3, 7],\r\n};\r\nObject.freeze(DefaultViewport3ConfigOption);\r\n\r\nexport const DefaultViewport4ConfigOption: Viewport4ConfigOption = {\r\n view: [4, 1, 3, 7],\r\n wireFrame: [\"打印模式\", \"打印模式\", \"打印模式\", \"打印模式\"],\r\n};\r\nObject.freeze(DefaultViewport4ConfigOption);\r\n\r\nexport const DefaultModifyTextsOption: ModifyTextsConfigOption = {\r\n changeTexts: Array.from({ length: 5 }, () => [\"\", \"\"]),\r\n};\r\nObject.freeze(DefaultModifyTextsOption);\r\n\r\nexport const DefaultKJImportOption: KJLImportConfigOption = {\r\n version: 2,\r\n materials: [],\r\n isImportVirtualModel: true\r\n};\r\nObject.freeze(DefaultKJImportOption);\r\n\r\nexport const DefaultPointLightOption: PointLightOption = {\r\n version: 1,\r\n lightColor: \"#FFFFFF\",\r\n temperature: 6500,\r\n Intensity: 100,\r\n IndirectLightingIntensity: 1,\r\n SpecularScale: 1,\r\n SourceRadius: 10,\r\n SoftSourceRadius: 0,\r\n SourceLength: 0,\r\n CaseShadow: true,\r\n};\r\nObject.freeze(DefaultPointLightOption);\r\n\r\nexport const DefaultSpotLightOption: SpotLightOption = {\r\n version: 1,\r\n lightColor: \"#FFFFFF\",\r\n temperature: 6500,\r\n Intensity: 100,\r\n IndirectLightingIntensity: 1,\r\n SpecularScale: 1,\r\n SourceRadius: 0,\r\n SoftSourceRadius: 0,\r\n SourceLength: 0,\r\n Angle: 40,\r\n InnerConeAngle: 0,\r\n AttenuationRadius: 300,\r\n CaseShadow: true,\r\n ShowHelper: true,\r\n};\r\nObject.freeze(DefaultSpotLightOption);\r\n\r\nexport const DefaultRectAreaLightOption: RectAreaLightOption = {\r\n version: 1,\r\n lightColor: \"#FFFFFF\",\r\n temperature: 6500,\r\n Intensity: 100,\r\n IndirectLightingIntensity: 1,\r\n SpecularScale: 1,\r\n AttenuationRadius: 300,\r\n Width: 150,\r\n Height: 150,\r\n BarnDoorAngle: 90,\r\n BarnDoorLength: 20,\r\n CaseShadow: true,\r\n ShowHelper: true,\r\n};\r\nObject.freeze(DefaultRectAreaLightOption);\r\n\r\nexport const DefaultRightPlaneLightOption: RightPlaneLightOption = {\r\n version: 2,\r\n ShowHemiLight: true,\r\n ShowSunLight: true,\r\n SkyLightColor: \"#FFFFFF\",\r\n SkyLightIntensity: 1,\r\n SkyLightIndirectLightingIntensity: 1,\r\n SunLightIntensity: 50,\r\n SunLightIndirectLightingIntensity: 1,\r\n SunLightColor: \"#FFFFFF\",\r\n SunLightTemperature: 6500,\r\n SunLightElevationDeg: 60,\r\n SunLightRotateDeg: 300,\r\n ShowExposure: true,\r\n AutoExposure: false,\r\n ExposureCompensation: 0,\r\n SunTime: \"默认\",\r\n};\r\nObject.freeze(DefaultRightPlaneLightOption);\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 drawNumber: 1\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: 5,\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 useRule: false,\r\n changeTemplateBoardNameOfOpenDir: true,\r\n frontAndBackDrill: false,\r\n};\r\nObject.freeze(DefaultDoorOption);\r\nexport const DefaultHingeOption: IHingeConfigOption = {\r\n hingeCount: 0,\r\n hindeTopDist: 0,\r\n hindeBottomDist: 0,\r\n useRule: false,\r\n};\r\nObject.freeze(DefaultHingeOption);\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 DefaultBatchModifyPanelOption: IBatchModifyPanelOption = {\r\n version: 1,\r\n length: \"L\",\r\n width: \"W\",\r\n thick: \"H\",\r\n position: RadioType.lefttop,\r\n};\r\nObject.freeze(DefaultBatchModifyPanelOption);\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 forceUseUCS: false,\r\n ForceUseFrontViewCS: false,\r\n};\r\nObject.freeze(DefaultCurve2RecOption);\r\n\r\nexport const DefaultUpdateInfoOption: IUpdateBoardInfosOption = {\r\n version: 2,\r\n [EBoardKeyList.BrName]: \"\",\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 isChaiDan: true,\r\n condition: {\r\n [EBoardKeyList.BrName]: false,\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 isChaiDan: true,\r\n autoCutOption: { isAutoCut: false, isRelevance: false }\r\n }\r\n};\r\n\r\nObject.freeze(DefaultUpdateInfoOption);\r\n\r\nexport const DefaultKuGanOption: IKuGangDrawOption = {\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 upDist: 0,\r\n downDist: 0,\r\n};\r\nObject.freeze(DefaultKuGanOption);\r\n\r\n\r\nexport const DefaultParseBoardNameOPtion: IParseBoardNameOption = {\r\n version: 1,\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 isBack: true,\r\n backName: \"背板\",\r\n isAloneStripName: true,//收口条名字独立\r\n};\r\nObject.freeze(DefaultParseBoardNameOPtion);\r\n\r\nexport const DefaultR2bOption: IRec2BrOption = {\r\n version: 5,\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 ...DefaultParseBoardNameOPtion,\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 backBrTemplateId: \"\",\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 closeStripThickness: 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\r\nexport const DefaultHSOption: IHSOption = {\r\n version: 1,\r\n isAll: true,\r\n isHide: true,\r\n isDelete: false,\r\n behind: false,\r\n layer: false,\r\n vertial: false,\r\n footer: false,\r\n tbBoard: false,\r\n specialShape: false,\r\n hole: false,\r\n door: false,\r\n drawer: false,\r\n closingStrip: false,\r\n winerack: false,\r\n wood: false,\r\n nails: false,\r\n topline: false,\r\n handle: false,\r\n hinge: false,\r\n hwComposity: false,\r\n lattice: false,\r\n dim: false,\r\n curve: false,\r\n line: false,\r\n polyline: false,\r\n circle: false,\r\n arc: false\r\n};\r\n\r\nexport const DefaultCommonPanelOption: CommonPanelConfigOption = {\r\n orderType: EOrderType.ByUpdate,\r\n};\r\nObject.freeze(DefaultCommonPanelOption);\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 true => t2 , false => t1\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","\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\nexport const ReportErrorWrap = {\r\n ReportError: undefined,\r\n IsProduction: false,\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(4);\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(4);\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 { 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 { Box3, 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 { UpdateDraw } from \"../../Common/Status\";\r\nimport { ObjectSnapMode } from \"../../Editor/ObjectSnapMode\";\r\nimport { equaln, 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.GetConceptualEdgeMaterial())\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.GetPhysical2EdgeMaterial())\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.GetConceptualEdgeMaterial())\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.GetPhysical2EdgeMaterial())\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\r\n get BoundingBox()\r\n {\r\n let geom = this.MeshGeometry;\r\n\r\n if (!geom)\r\n {\r\n console.error(\"SweepSolid无法建模\");\r\n return new Box3;\r\n }\r\n\r\n if (!geom.boundingBox)\r\n geom.computeBoundingBox();\r\n\r\n return geom.boundingBox.clone().applyMatrix4(this._Matrix);\r\n }\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 ApplyMatrix(m: Matrix4)\r\n {\r\n this.WriteAllObjectRecord();\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 if (!equalv3(xA.clone().cross(yA).normalize(), zA))\r\n this.ApplyMirrorMatrix(m);\r\n else\r\n {\r\n this._Matrix.multiplyMatrices(m, this._Matrix);\r\n this._SpaceOCS.multiplyMatrices(m, this._SpaceOCS);\r\n this.Update(UpdateDraw.Matrix);\r\n }\r\n }\r\n else\r\n {\r\n this.ApplyScaleMatrix(m);\r\n }\r\n return this;\r\n }\r\n protected ApplyMirrorMatrix(m: Matrix4)\r\n {\r\n if (!this.Id)\r\n {\r\n this._Matrix.multiplyMatrices(m, this._Matrix);\r\n return this;\r\n }\r\n let ocsInv = this.OCSInv;\r\n this._PathCurve.ApplyMatrix(this.OCS).ApplyMatrix(m).ApplyMatrix(ocsInv);\r\n\r\n let mtx = this._PathCurve.OCS;\r\n let mtxInv = new Matrix4().getInverse(mtx);\r\n this._PathCurve.ApplyMatrix(mtxInv);\r\n this._SpaceOCS.copy(this._Matrix);\r\n this._Matrix.multiplyMatrices(this._Matrix, mtx);\r\n\r\n this.Update(UpdateDraw.Geometry);\r\n return this;\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(): Curve[]\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(): Curve[]\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 { HostApplicationServices } from \"../../ApplicationServices/HostApplicationServices\";\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 { GetBoardSealingData, GetSealedBoardContour } from \"../../GraphicsSystem/CalcEdgeSealing\";\r\nimport { IHardwareType, Production } from \"../../Production/Product\";\r\nimport { HoleInBoard } from \"../DrawDrilling/HoleUtils\";\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: (key: string, block: Board, size: number) => void; getHoles?: (name: string, hole: CylinderHole) => void; };\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 let holes = ids.map(id => id.Object).filter(h => h) as Hole[];\r\n\r\n if (!holes[0] || !HoleInBoard(holes, b))\r\n continue;\r\n\r\n let isTk = false;\r\n let spliteName: string;\r\n let hole: Hole;\r\n let pxlCount = 0;\r\n findHole:\r\n for (let objId of ids)\r\n {\r\n let gd = objId.Object as CylinderHole | ExtrudeHole;\r\n if (!gd || gd.IsErase) break;\r\n\r\n const group = gd.GroupId?.Object as GroupRecord;\r\n\r\n if (!group)\r\n {\r\n Toaster({ message: `柜名:${b.BoardProcessOption.cabinetName} 板名:${b.Name} 的排钻的编组丢失,统计排钻个数时会丢失该个数!`, timeout: 5000, intent: Intent.DANGER });\r\n break;\r\n }\r\n\r\n if (gd instanceof CylinderHole)\r\n {\r\n switch (gd.Type)\r\n {\r\n case GangDrillType.Pxl:\r\n pxlCount++;\r\n break;\r\n case GangDrillType.Ljg:\r\n case GangDrillType.Ymj:\r\n break;\r\n case GangDrillType.TK:\r\n isTk = true;\r\n break;\r\n case GangDrillType.Wood:\r\n case GangDrillType.WoodPXL:\r\n spliteName = \"木销\";\r\n break;\r\n default:\r\n break findHole;\r\n }\r\n options?.getHoles && options?.getHoles(spliteName || group.Name || \"未命名\", gd);\r\n }\r\n else\r\n {\r\n if (gd.isThrough)\r\n isTk = true;\r\n }\r\n if (!spliteName)\r\n spliteName = group.Name || \"未命名\";\r\n if (!hole)\r\n hole = gd;\r\n }\r\n\r\n if (spliteName && hole)\r\n {\r\n if (isTk && HostApplicationServices.chaidanOption.statTk)\r\n {\r\n addDrillToMap(\"通孔\" + spliteName, hole);\r\n }\r\n else if (pxlCount === 2 && HostApplicationServices.chaidanOption.statSt)\r\n {\r\n addDrillToMap(\"双头\" + spliteName, hole);\r\n }\r\n else\r\n {\r\n addDrillToMap(spliteName, hole);\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 = GetBoardSealingData(GetSealedBoardContour(b, true, true));\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 && options.sealGruopKey)\r\n {\r\n options.sealGruopKey(k, b, data.size);\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","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","import { BufferGeometry, Float32BufferAttribute, Geometry, Line, LineBasicMaterial, LineSegments, Matrix4, Object3D, Vector3 } from \"three\";\r\nimport { ColorMaterial } from \"../Common/ColorPalette\";\r\nimport { FixIndex } from \"../Common/Utils\";\r\nimport { ExtrudeHole } from \"../DatabaseServices/3DSolid/ExtrudeHole\";\r\nimport { Contour } from \"../DatabaseServices/Contour\";\r\nimport { Board } from \"../DatabaseServices/Entity/Board\";\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 { MatrixIsIdentityCS, MoveMatrix } from \"./GeUtils\";\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\n//使用lineseg来生成拉伸的边框,避免生成过多的实体导致的drawcall次数增多\r\nexport function FastWireframe(br: ExtrudeSolid, color = 0, divCount = 6, optArc = true): Line[]\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(divCount, optArc);\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.OCSNoClone);\r\n\r\n let edge = new LineSegments(edgeGeo, material);\r\n edge.applyMatrix4(cu.OCSNoClone);\r\n\r\n let result = [line, edge];\r\n\r\n let ocsInv = br.OCSInv;\r\n\r\n if (br.Grooves.length < 100)\r\n for (let g of br.Grooves)\r\n {\r\n let m = ocsInv.clone().multiply(g.OCSNoClone);\r\n let lines = FastWireframe(g, color, 3, false);\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\n\r\nlet tempP = new Vector3;\r\nexport function FastExtrudeEdgeGeometry(ext: ExtrudeSolid, color = 0, divCount = 6, optArc = true, coords: number[] = [], inv: Matrix4 = undefined)\r\n{\r\n color = color || ext.ColorIndex;\r\n\r\n let thickness = ext.Thickness;\r\n\r\n let cu = ext.ContourCurve;\r\n let pts = cu.Shape.getPoints(divCount, optArc);\r\n\r\n let startIndex = coords.length / 3;\r\n\r\n for (let i = 0; i < pts.length; i++)\r\n {\r\n let p = pts[i];\r\n let nextp = pts[FixIndex(i + 1, pts)];\r\n //底面\r\n coords.push(p.x, p.y, 0, nextp.x, nextp.y, 0);\r\n //顶面\r\n coords.push(p.x, p.y, thickness, nextp.x, nextp.y, thickness);\r\n\r\n if (p[\"_mask_\"])//侧面\r\n coords.push(p.x, p.y, 0, p.x, p.y, thickness);\r\n }\r\n\r\n let m = inv ? (ext.Grooves.length ? inv.clone() : inv).multiply(cu.OCSNoClone) : cu.OCSNoClone;\r\n\r\n if (!MatrixIsIdentityCS(m))\r\n {\r\n let count = coords.length / 3;\r\n for (let i = startIndex; i < count; i++)\r\n {\r\n let a = i * 3;\r\n let b = a + 1;\r\n let c = a + 2;\r\n\r\n tempP.set(coords[a], coords[b], coords[c]);\r\n tempP.applyMatrix4(m);\r\n coords[a] = tempP.x;\r\n coords[b] = tempP.y;\r\n coords[c] = tempP.z;\r\n }\r\n }\r\n\r\n let ocsInv = inv ? (inv.multiply(ext.OCSInv)) : ext.OCSInv;\r\n optArc = ext.Grooves.length < 100;\r\n for (let g of ext.Grooves)\r\n {\r\n FastExtrudeEdgeGeometry(g, color, divCount, optArc, coords, ocsInv.clone().multiply(g.OCSNoClone));\r\n }\r\n\r\n return coords;\r\n}\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, Vector3 } from \"three\";\r\nimport { arrayLast, arrayPushArray } from \"../Common/ArrayExt\";\r\nimport { FixIndex } from \"../Common/Utils\";\r\nimport { equalv3 } from \"./GeUtils\";\r\n\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 arrayPushArray(pts, GenerateExtrudeEdgeGeometryPoints(cs, height));\r\n let geo = new BufferGeometry().setFromPoints(pts);\r\n return geo;\r\n}\r\n\r\n//拉伸点表成为Geom\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\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 geom3 from \"@jscad/modeling/src/geometries/geom3\";\r\nimport { Geom3 } from \"@jscad/modeling/src/geometries/types\";\r\nimport { Mat4 } from \"@jscad/modeling/src/maths/mat4\";\r\nimport { Vec3 } from \"@jscad/modeling/src/maths/vec3\";\r\nimport { intersect } from \"@jscad/modeling/src/operations/booleans\";\r\nimport { Matrix4 } from \"three\";\r\n\r\nexport interface Geom3Res\r\n{\r\n polygons: Array<{\r\n vertices: Array,\r\n plane: [number, number, number, number];\r\n }>;\r\n}\r\n\r\nexport function CSGIntersect(csg1: Geom3, csg2: Geom3, csg2tranfrom: Matrix4): Geom3Res\r\n{\r\n //因为内部使用geom3进行box cache 所以我们新建了一个geom3 避免被cache导致错误\r\n let csg1Clone = geom3.create(csg1.polygons.concat());\r\n let csg2Clone = geom3.create(csg2.polygons.concat());\r\n csg2Clone.transforms = csg2tranfrom.elements as Mat4;\r\n return intersect(csg1Clone, csg2Clone) as unknown as Geom3Res;\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","import { Matrix4 } from \"three\";\r\nimport { arrayLast, arrayRemoveDuplicateBySort } from \"../../../Common/ArrayExt\";\r\nimport { equalv3 } from \"../../../Geometry/GeUtils\";\r\nimport { EPS, _CSGDEBUG } from \"../constants\";\r\nimport { IsMirror } from \"./IsMirrot\";\r\nimport { Plane } from \"./Plane\";\r\nimport { Vector3D } from \"./Vector3\";\r\nimport { Vertex3D } from \"./Vertex3\";\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 arrayRemoveDuplicateBySort(backVertices, (v1, v2) => equalv3(v1.pos, v2.pos, EPS));\r\n if (backVertices.length > 2 && equalv3(backVertices[0].pos, arrayLast(backVertices).pos, EPS))\r\n backVertices.pop();\r\n arrayRemoveDuplicateBySort(frontVertices, (v1, v2) => equalv3(v1.pos, v2.pos, EPS));\r\n if (frontVertices.length > 2 && equalv3(frontVertices[0].pos, arrayLast(frontVertices).pos, EPS))\r\n frontVertices.pop();\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 /**\r\n * 是一个凸多边形\r\n * @param vertices 顶点列表\r\n * @param planenormal 平面法线\r\n * @returns true:是凸多边形 false:不是凸多边形\r\n */\r\n static verticesConvex(vertices: Vertex3D[], planenormal: Vector3D): boolean\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 geom3, { Geom3 } from \"@jscad/modeling/src/geometries/geom3\";\r\nimport { create, Poly3 } from \"@jscad/modeling/src/geometries/poly3\";\r\nimport { Vec3 } from \"@jscad/modeling/src/maths/vec3\";\r\nimport { BufferGeometry, Face3, Geometry, Vector2, Vector3 } from \"three\";\r\nimport { Geom3Res } from \"../../Common/CSGIntersect\";\r\nimport { AsVector2, AsVector3, 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 = AsVector3(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 = AsVector3(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(AsVector3(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 AsVector2(firstVertex.uv),\r\n AsVector2(poly.vertices[i + 1].uv),\r\n AsVector2(poly.vertices[i + 2].uv)\r\n ]);\r\n }\r\n }\r\n return geo;\r\n}\r\n\r\nexport function Geometry2CSG2(geometry: Geometry | BufferGeometry): Geom3\r\n{\r\n if (geometry instanceof BufferGeometry)\r\n geometry = new Geometry().fromBufferGeometry(geometry);\r\n\r\n let polygons: Poly3[] = [];\r\n for (let i = 0; i < geometry.faces.length; i++)\r\n {\r\n let face = geometry.faces[i];\r\n let vertices: Vec3[] = [];\r\n if (face instanceof Face3)\r\n {\r\n vertices.push(geometry.vertices[face.a].toArray() as Vec3);\r\n vertices.push(geometry.vertices[face.b].toArray() as Vec3);\r\n vertices.push(geometry.vertices[face.c].toArray() as Vec3);\r\n }\r\n polygons.push(create(vertices));\r\n }\r\n return geom3.create(polygons);\r\n}\r\n\r\nexport function CSG2Geometry2(csg: Geom3 | Geom3Res): Geometry\r\n{\r\n let geo = new Geometry;\r\n for (let poly of csg.polygons)\r\n {\r\n //@ts-ignore\r\n let normal = new Vector3().fromArray(poly.plane);\r\n\r\n let startIndex = geo.vertices.length;\r\n for (let v of poly.vertices)\r\n geo.vertices.push(new Vector3().fromArray(v));\r\n\r\n for (let i = poly.vertices.length - 3; i >= 0; i--)\r\n {\r\n let f = new Face3(\r\n startIndex,\r\n startIndex + i + 1,\r\n startIndex + i + 2,\r\n normal);\r\n\r\n geo.faces.push(f);\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","import { Poly3 } from \"@jscad/modeling/src/geometries/types\";\r\nimport { Vec3 } from \"@jscad/modeling/src/maths/vec3\";\r\nimport { Vector3 } from \"three\";\r\nimport { Geom3Res } from \"../Common/CSGIntersect\";\r\nimport { ToFixed } from \"../Common/Utils\";\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?: Geom3Res, 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: Poly3)\r\n {\r\n let strs = poly.vertices.map(p => this.GenerateP(p));\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().fromArray(v3);\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: Map = new Map();\r\n private GenerateP(v: Vec3)\r\n {\r\n let str = v.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 { Vec2, Vector2, Vector3 } from \"three\";\r\nimport { FixIndex } from \"../Common/Utils\";\r\nimport { AsVector3 } from \"./GeUtils\";\r\n\r\n/**\r\n * 快速的对点表进行偏移\r\n * @param contour\r\n * @param [offsetDist=1]\r\n * @param [ignoreSpike=true] 忽略尖角优化(如果不忽略,那么尖角将会变钝(有点奇怪))\r\n * @returns 偏移后的点表\r\n */\r\nexport function FastOffset(contour: Vector3[], offsetDist = 1, ignoreSpike = true): Vector3[]\r\n{\r\n let res: Vector3[] = [];\r\n\r\n for (let i = 0; i < contour.length; i++)\r\n {\r\n let v = AsVector3(getBevelVec(contour[i], contour[FixIndex(i - 1, contour)], contour[FixIndex(i + 1, contour)]));\r\n // TestDraw(new Line(contour[i], contour[i].clone().add(v)), 3);\r\n let p = v.multiplyScalar(offsetDist).add(contour[i]);\r\n res.push(p);\r\n }\r\n return res;\r\n}\r\n\r\n//Ref:threejs ExtrudeGeometry源码\r\nfunction getBevelVec(inPt: Vec2, inPrev: Vec2, inNext: Vec2, ignoreSpike = true): Vector2\r\n{\r\n\r\n // computes for inPt the corresponding point inPt' on a new contour\r\n // shifted by 1 unit (length of normalized vector) to the left\r\n // if we walk along contour clockwise, this new contour is outside the old one\r\n //\r\n // inPt' is the intersection of the two lines parallel to the two\r\n // adjacent edges of inPt at a distance of 1 unit on the left side.\r\n\r\n let v_trans_x: number, v_trans_y: number, shrink_by: number; // resulting translation vector for inPt\r\n\r\n // good reading for geometry algorithms (here: line-line intersection)\r\n // http://geomalgorithms.com/a05-_intersect-1.html\r\n\r\n const v_prev_x = inPt.x - inPrev.x,\r\n v_prev_y = inPt.y - inPrev.y;\r\n const v_next_x = inNext.x - inPt.x,\r\n v_next_y = inNext.y - inPt.y;\r\n\r\n const v_prev_lensq = (v_prev_x * v_prev_x + v_prev_y * v_prev_y);\r\n\r\n // check for collinear edges\r\n const collinear0 = (v_prev_x * v_next_y - v_prev_y * v_next_x);\r\n\r\n if (Math.abs(collinear0) > Number.EPSILON)\r\n {\r\n // not collinear\r\n // length of vectors for normalizing\r\n const v_prev_len = Math.sqrt(v_prev_lensq);\r\n const v_next_len = Math.sqrt(v_next_x * v_next_x + v_next_y * v_next_y);\r\n // shift adjacent points by unit vectors to the left\r\n const ptPrevShift_x = (inPrev.x - v_prev_y / v_prev_len);\r\n const ptPrevShift_y = (inPrev.y + v_prev_x / v_prev_len);\r\n\r\n const ptNextShift_x = (inNext.x - v_next_y / v_next_len);\r\n const ptNextShift_y = (inNext.y + v_next_x / v_next_len);\r\n // scaling factor for v_prev to intersection point\r\n const sf = ((ptNextShift_x - ptPrevShift_x) * v_next_y -\r\n (ptNextShift_y - ptPrevShift_y) * v_next_x) /\r\n (v_prev_x * v_next_y - v_prev_y * v_next_x);\r\n\r\n // vector from inPt to intersection point\r\n\r\n v_trans_x = (ptPrevShift_x + v_prev_x * sf - inPt.x);\r\n v_trans_y = (ptPrevShift_y + v_prev_y * sf - inPt.y);\r\n\r\n // Don't normalize!, otherwise sharp corners become ugly\r\n // but prevent crazy spikes\r\n const v_trans_lensq = (v_trans_x * v_trans_x + v_trans_y * v_trans_y);\r\n if (v_trans_lensq <= 2 || ignoreSpike)\r\n return new Vector2(v_trans_x, v_trans_y);\r\n else\r\n shrink_by = Math.sqrt(v_trans_lensq / 2);\r\n }\r\n else\r\n {\r\n // handle special case of collinear edges\r\n let direction_eq = false; // assumes: opposite\r\n\r\n if (v_prev_x > Number.EPSILON)\r\n {\r\n if (v_next_x > Number.EPSILON)\r\n direction_eq = true;\r\n }\r\n else\r\n {\r\n if (v_prev_x < - Number.EPSILON)\r\n {\r\n if (v_next_x < - Number.EPSILON)\r\n direction_eq = true;\r\n }\r\n else\r\n {\r\n if (Math.sign(v_prev_y) === Math.sign(v_next_y))\r\n direction_eq = true;\r\n }\r\n }\r\n\r\n if (direction_eq || ignoreSpike)\r\n {\r\n // console.log(\"Warning: lines are a straight sequence\");\r\n v_trans_x = - v_prev_y;\r\n v_trans_y = v_prev_x;\r\n shrink_by = Math.sqrt(v_prev_lensq);\r\n }\r\n else\r\n {\r\n // console.log(\"Warning: lines are a straight spike\");\r\n v_trans_x = v_prev_x;\r\n v_trans_y = v_prev_y;\r\n shrink_by = Math.sqrt(v_prev_lensq / 2);\r\n }\r\n }\r\n return new Vector2(v_trans_x / shrink_by, v_trans_y / shrink_by);\r\n}\r\n","import { Vector3 } from \"three\";\r\nimport { arraySortByNumber } from \"../../Common/ArrayExt\";\r\nimport { clamp } from \"../../Common/Utils\";\r\nimport { Arc } from \"../../DatabaseServices/Entity/Arc\";\r\nimport { Circle } from \"../../DatabaseServices/Entity/Circle\";\r\nimport { ExtrudeContourCurve } from \"../../DatabaseServices/Entity/Extrude\";\r\nimport { AsVector3 } from \"../GeUtils\";\r\n\r\nconst ARC_SplitLength = 4;//圆的分段长度\r\nconst Arc_MinSplitCount = 12;//圆的最小分段个数\r\nconst ARC_MaxSplitCount = 360;//圆的最大分段个数\r\n\r\n/**\r\n *\r\n * @param cu\r\n */\r\nexport function SplitCurveParams(cu: ExtrudeContourCurve): number[]\r\n{\r\n let xparams: number[] = [];\r\n if (cu instanceof Circle)\r\n {\r\n let splitCount = cu.Radius / ARC_SplitLength;\r\n splitCount = clamp(Math.floor(splitCount), Arc_MinSplitCount, ARC_MaxSplitCount);\r\n for (let i = 0; i < splitCount; i++)\r\n xparams.push(i / splitCount);\r\n }\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.GetBulgeAt(i) !== 0)\r\n {\r\n let arc = cu.GetCurveAtIndex(i) as Arc;\r\n let splitCount = arc.Radius / ARC_SplitLength;\r\n splitCount = clamp(Math.floor(splitCount), Arc_MinSplitCount, ARC_MaxSplitCount);\r\n if (splitCount === 0)\r\n 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)\r\n continue;\r\n\r\n for (let p of params)\r\n {\r\n if (p > 1e-5 && p < 0.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\nexport function SplitCurvePoints(cu: ExtrudeContourCurve): Vector3[]\r\n{\r\n let pts: Vector3[] = [];\r\n if (cu instanceof Circle)\r\n {\r\n let splitCount = cu.Radius / ARC_SplitLength;\r\n splitCount = clamp(Math.floor(splitCount), Arc_MinSplitCount, ARC_MaxSplitCount);\r\n for (let i = 0; i < splitCount; i++)\r\n pts.push(cu.GetPointAtParam(i / splitCount));\r\n }\r\n\r\n else\r\n //分段1\r\n for (let i = 0; i < cu.EndParam; i++)\r\n {\r\n pts.push(AsVector3(cu.GetPoint2dAt(i)).applyMatrix4(cu.OCSNoClone));\r\n if (cu.GetBulgeAt(i) !== 0)\r\n {\r\n let arc = cu.GetCurveAtIndex(i) as Arc;\r\n let splitCount = arc.Radius / ARC_SplitLength;\r\n splitCount = clamp(Math.floor(splitCount), Arc_MinSplitCount, ARC_MaxSplitCount);\r\n if (splitCount === 0)\r\n continue;\r\n\r\n let divParam = 1 / splitCount;\r\n for (let j = 1; j < splitCount - 1; j++)\r\n {\r\n let p = arc.GetPointAtParam(divParam * j);\r\n pts.push(p);\r\n }\r\n }\r\n }\r\n pts.push(cu.EndPoint);\r\n return pts;\r\n}\r\n\r\nexport function SplitArcParams(arc: Arc): number[]\r\n{\r\n let splitCount = arc.Radius / ARC_SplitLength;\r\n splitCount = clamp(Math.floor(splitCount), Arc_MinSplitCount, ARC_MaxSplitCount);\r\n if (splitCount === 0)\r\n return [];\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)\r\n return [];\r\n\r\n return params.filter(p => p > 1e-5 && p < 9.99999);\r\n}\r\n","import Flatbush from 'flatbush';\r\nimport { Box3, BufferGeometry, Float32BufferAttribute, MathUtils, Matrix4, Shape as TShape, ShapeUtils, Vector3 } from \"three\";\r\nimport { arrayPushArray, arrayRemoveDuplicateBySort, arraySortByNumber } from \"../../Common/ArrayExt\";\r\nimport { curveLinkGroup } from \"../../Common/CurveUtils\";\r\nimport { FixIndex } from \"../../Common/Utils\";\r\nimport { Contour, fastCurveInCurve2 } from \"../../DatabaseServices/Contour\";\r\nimport { Board } from \"../../DatabaseServices/Entity/Board\";\r\nimport { Circle } from \"../../DatabaseServices/Entity/Circle\";\r\nimport { Curve } from \"../../DatabaseServices/Entity/Curve\";\r\nimport { ExtrudeContourCurve, ExtrudeSolid, MaxDrawGrooveCount } 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\nimport { SplitCurveParams } from './SplitCurveParams';\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: ExtrudeContourCurve): 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.UpdateOCSTo(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时,表示它是一个洞(如果有多层时,使用IsHole判断)\r\n\r\n box: Box3;\r\n area: number;\r\n constructor(public contour: Contour, public children: ContourTreeNode[] = []) { }\r\n\r\n SetParent(node: ContourTreeNode)\r\n {\r\n if (this.parent)\r\n throw \"ContourTreeNode重复设置父对象\";\r\n this.parent = node;\r\n node.children.push(this);\r\n }\r\n\r\n get Depth(): number\r\n {\r\n let depth = 0;\r\n let parent = this.parent;\r\n while (parent)\r\n {\r\n depth++;\r\n parent = parent.parent;\r\n\r\n if (depth > 10)\r\n throw \"ContourTreeNode嵌套超过10层\";\r\n }\r\n return depth;\r\n }\r\n\r\n get IsHole(): boolean\r\n {\r\n return this.Depth % 2 === 1;\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.concat();\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 arrayPushArray(vertices, 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 if (contourNodes.length < 2) return;\r\n\r\n let fb = new Flatbush(contourNodes.length);\r\n for (let node of contourNodes)\r\n {\r\n node.box = node.contour.BoundingBox;\r\n node.area = node.contour.Area;\r\n fb.add(node.box.min.x, node.box.min.y, node.box.max.x, node.box.max.y);\r\n }\r\n fb.finish();\r\n\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\r\n let ids = fb.search(node1.box.min.x, node1.box.min.y, node1.box.max.x, node1.box.max.y);\r\n ids.sort((i1, i2) => contourNodes[i1].area - contourNodes[i2].area);\r\n for (let id of ids)\r\n {\r\n if (id === i) continue;\r\n\r\n let node2 = contourNodes[id];\r\n if (node2.parent === node1 || node2.area < node1.area) continue;//避免自己的儿子成为自己的父亲\r\n\r\n if (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\nexport class 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\r\n if (pre < this.end)//避免最后一个切割元素小于终点时没有补上最后一个\r\n ret.push(new Tape(pre, this.end, this.bottom, this.top));\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\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: ExtrudeContourCurve,\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 = equaln(vs[0].x, vs[1].x, 1e-2);\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(arr: number[], el: number): number\r\n{\r\n let m = 0;\r\n let n = arr.length - 1;\r\n while (m <= n)\r\n {\r\n let k = (n + m) >> 1;\r\n let cmp = (el - arr[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: ExtrudeContourCurve, cu2: ExtrudeContourCurve, reverseParse = false): [CurveParamRangeRelation, CurveParamRangeRelation]\r\n{\r\n let ins = GetIntersection(cu1, cu2);\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\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 let a1 = cu1.Area, a2 = cu2.Area;\r\n\r\n if (a2 > a1 && cu2.PtInCurve(cu1.StartPoint))//cu2包含cu1\r\n c1Res.container.push([0, cu1.EndParam]);\r\n else\r\n c1Res.outer.push([0, cu1.EndParam]);\r\n\r\n if (a1 > a2 && cu1.PtInCurve(cu2.StartPoint))//cu1包含cu2\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 if (ins.length === 1)\r\n {\r\n let a1 = cu1.Area, a2 = cu2.Area;\r\n\r\n if (a2 > a1 && fastCurveInCurve2(cu2, cu1))//cu2包含cu1\r\n c1Res.container.push([0, cu1.EndParam]);\r\n else\r\n c1Res.outer.push([0, cu1.EndParam]);\r\n\r\n if (a1 > a2 && fastCurveInCurve2(cu1, cu2))//cu1包含cu2\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 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: ExtrudeContourCurve, 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\r\n\r\n/**\r\n *\r\n * @param orgStart 被裁剪范围的起点(如果起点大于终点,那么表示 s->end + 0->e)\r\n * @param orgEnd\r\n * @param clipStart\r\n * @param clipEnd\r\n * @param end\r\n * @returns\r\n */\r\nexport function SubtractRange(orgStart: number, orgEnd: number, clipStart: number, clipEnd: number, end: number): Range[]\r\n{\r\n if (orgStart < 0\r\n || orgEnd < 0\r\n || orgEnd > end\r\n || orgStart > end\r\n || clipStart < 0\r\n || clipEnd < 0\r\n || clipStart > end\r\n || clipEnd > end) return [];\r\n\r\n if (orgStart > orgEnd)\r\n return SubtractRange(orgStart, end, clipStart, clipEnd, end).concat(SubtractRange(0, orgEnd, clipStart, clipEnd, end));\r\n if (clipStart > clipEnd)\r\n {\r\n let arr = SubtractRange(orgStart, orgEnd, clipStart, end, end);\r\n let rem: [number, number][] = [];\r\n for (let s of arr)\r\n arrayPushArray(rem, SubtractRange(s[0], s[1], 0, clipEnd, end));\r\n return rem;\r\n }\r\n\r\n if (clipStart >= orgEnd || clipEnd <= orgStart)\r\n return [[orgStart, orgEnd]];\r\n\r\n if (clipStart <= orgStart)// c1 a1 b1\r\n {\r\n if (clipEnd >= orgEnd) return [];\r\n return [[clipEnd, orgEnd]];\r\n }\r\n\r\n if (clipEnd < orgEnd)\r\n return [[orgStart, clipStart], [clipEnd, orgEnd]];\r\n return [[orgStart, clipStart]];\r\n}\r\n\r\nexport function 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 arrayPushArray(temps, SubtractRange2(r, sr, end));\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, rotateUv: boolean = false)\r\n {\r\n this.GenerateMeshData(br, rotateUv);\r\n }\r\n\r\n protected GenerateMeshData(br: ExtrudeSolid, rotateUv: boolean)\r\n {\r\n this.edgeAndLidBuilder = new EdgeGeometryBuild(this.br.Thickness);\r\n rotateUv = rotateUv || (br instanceof Board && br.BoardProcessOption.lines === LinesType.Reverse);\r\n\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 if (grooves.length < MaxDrawGrooveCount)//只能绘制1000个以下的造型\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.UpdateOCSTo(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.UpdateOCSTo(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.ExtendNone);\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 { Box3, BufferAttribute, BufferGeometry, Material, Matrix4, Mesh, Vector3 } from \"three\";\r\nimport { USE_WORLD_UV, U_WORLD_MOVE, U_WORLD_REP, V_WORLD_MOVE, V_WORLD_REP } from \"../../Add-on/testEntity/USE_WORLD_UV\";\r\nimport { XAxis, XAxisN, YAxis, YAxisN, ZAxis, ZAxisN } from \"../../Geometry/GeUtils\";\r\nimport { Orbit } from \"../../Geometry/Orbit\";\r\n\r\nconst DIRS = [XAxis, YAxis, ZAxis, XAxisN, YAxisN, ZAxisN];\r\nfunction GetFaceDir(direction: Vector3): Vector3\r\n{\r\n let absx = Math.abs(direction.x);\r\n let absy = Math.abs(direction.y);\r\n let absz = Math.abs(direction.z);\r\n\r\n let face = - 1.0;\r\n if (absx > absz)\r\n {\r\n if (absx > absy)\r\n face = direction.x > 0 ? 0 : 3;\r\n else\r\n face = direction.y > 0 ? 1 : 4;\r\n }\r\n else\r\n {\r\n if (absz > absy)\r\n face = direction.z > 0 ? 2 : 5;\r\n else\r\n face = direction.y > 0 ? 1 : 4;\r\n }\r\n return DIRS[face];\r\n}\r\n\r\nexport class GenUVForWorld\r\n{\r\n InvMtxMap = new Map();\r\n\r\n private _Z = new Vector3;\r\n private _X = new Vector3;\r\n private _Y = new Vector3;\r\n private _Box = new Box3;\r\n private _Box2 = new Box3;\r\n GetMtxInv(normalX: number, normalY: number, normalZ: number)\r\n {\r\n this._Z.set(normalX, normalY, normalZ);\r\n let n = GetFaceDir(this._Z);\r\n let mtx = this.InvMtxMap.get(n);\r\n if (mtx)\r\n return mtx;\r\n\r\n this._Z.copy(n);\r\n Orbit.ComputUpDirection(this._Z, this._Y, this._X);\r\n mtx = new Matrix4().makeBasis(this._X, this._Y, this._Z);\r\n mtx.getInverse(mtx);\r\n\r\n this.InvMtxMap.set(n, mtx);\r\n return mtx;\r\n }\r\n\r\n GenUV(mesh: Mesh)\r\n {\r\n if (Array.isArray(mesh.material))\r\n {\r\n let geo = mesh.geometry;\r\n if (!geo.boundingBox)\r\n geo.computeBoundingBox();\r\n let normals = geo.getAttribute(\"normal\") as BufferAttribute;\r\n let pos = geo.getAttribute(\"position\") as BufferAttribute;\r\n let uvs = geo.getAttribute(\"uv\") as BufferAttribute;\r\n for (let i = 0; i < mesh.material.length; i++)\r\n {\r\n let mtl = mesh.material[i];\r\n if (mtl[USE_WORLD_UV])\r\n {\r\n this._Box.makeEmpty();\r\n let g = mesh.geometry.groups[i];\r\n for (let y = 0; y < g.count; y++)\r\n {\r\n let index = (y + g.start) * 3;\r\n this._X.set(pos.array[index], pos.array[index + 1], pos.array[index + 2]);\r\n this._Box.expandByPoint(this._X);\r\n }\r\n\r\n for (let y = 0; y < g.count; y++)\r\n {\r\n let index = (y + g.start) * 3;\r\n let mtx = this.GetMtxInv(normals.array[index], normals.array[index + 1], normals.array[index + 2]);\r\n\r\n this._X.set(pos.array[index], pos.array[index + 1], pos.array[index + 2]);\r\n\r\n this._X.applyMatrix4(mtx);\r\n\r\n this._Box2.copy(this._Box).applyMatrix4(mtx);\r\n\r\n //@ts-ignore\r\n uvs.array[(y + g.start) * 2] = (((this._X.x - (this._Box2.min.x + this._Box2.max.x) * 0.5)) * 1e-2 + mtl[U_WORLD_MOVE]) * mtl[U_WORLD_REP] + 0.5;\r\n //@ts-ignore\r\n uvs.array[(y + g.start) * 2 + 1] = (((this._X.y - (this._Box2.min.y + this._Box2.max.y) * 0.5)) * 1e-2 - mtl[V_WORLD_MOVE]) * mtl[V_WORLD_REP] + 0.5;\r\n }\r\n uvs.needsUpdate = true;\r\n }\r\n }\r\n }\r\n\r\n else\r\n {\r\n let mtl = mesh.material;\r\n if (mtl[USE_WORLD_UV])\r\n this.GenGeoUV(mesh.geometry, mtl, 1e-2);\r\n }\r\n }\r\n\r\n GenGeoUV(geo: BufferGeometry, mtl: Material, scale = 1e-3)\r\n {\r\n if (!geo.boundingBox)\r\n geo.computeBoundingBox();\r\n\r\n let normals = geo.getAttribute(\"normal\") as BufferAttribute;\r\n let pos = geo.getAttribute(\"position\") as BufferAttribute;\r\n let uvs = geo.getAttribute(\"uv\") as BufferAttribute;\r\n for (let y = 0; y < pos.count; y++)\r\n {\r\n let index = y * 3;\r\n let mtx = this.GetMtxInv(normals.array[index], normals.array[index + 1], normals.array[index + 2]);\r\n\r\n this._X.set(pos.array[index], pos.array[index + 1], pos.array[index + 2]);\r\n\r\n this._X.applyMatrix4(mtx);\r\n\r\n this._Box.copy(geo.boundingBox);\r\n this._Box.applyMatrix4(mtx);\r\n\r\n //@ts-ignore\r\n uvs.array[y * 2] = (((this._X.x - (this._Box.min.x + this._Box.max.x) * 0.5)) * scale + mtl[U_WORLD_MOVE]) * mtl[U_WORLD_REP] + 0.5;\r\n //@ts-ignore\r\n uvs.array[y * 2 + 1] = (((this._X.y - (this._Box.min.y + this._Box.max.y) * 0.5)) * scale + mtl[V_WORLD_MOVE]) * mtl[V_WORLD_REP] + 0.5;\r\n }\r\n uvs.needsUpdate = true;\r\n }\r\n}\r\n","import { Geom3 } from '@jscad/modeling/src/geometries/types';\r\nimport Flatbush from 'flatbush';\r\nimport { Box3, BoxGeometry, BufferGeometry, ExtrudeGeometry, ExtrudeGeometryOptions, Float32BufferAttribute, Geometry, InstancedInterleavedBuffer, InterleavedBufferAttribute, Line as TLine, LineSegments, Matrix3, Matrix4, Mesh, Object3D, 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, arrayPushArray, arrayRemoveIf, arrayRemoveOnce, arraySortByNumber, arraySum } from \"../../Common/ArrayExt\";\r\nimport { ColorMaterial } from \"../../Common/ColorPalette\";\r\nimport { CSGIntersect } from '../../Common/CSGIntersect';\r\nimport { equalCurve, PolylineSpliteRect } from \"../../Common/CurveUtils\";\r\nimport { DisposeThreeObj, Object3DRemoveAll } from \"../../Common/Dispose\";\r\nimport { Log } from \"../../Common/Log\";\r\nimport { reviseMirrorMatrix, SetMtxVector, tempMatrix1, TransformVector, Vector2ApplyMatrix4 } from \"../../Common/Matrix4Utils\";\r\nimport { Status, UpdateDraw } from \"../../Common/Status\";\r\nimport { Geometry2CSG2 } 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 { FastExtrudeEdgeGeometry, FastWireframe } from \"../../Geometry/CreateWireframe\";\r\nimport { EdgesGeometry } from \"../../Geometry/EdgeGeometry\";\r\nimport { ExtrudeGeometryBuilder } from \"../../Geometry/ExtrudeMeshGeomBuilder/ExtrudeEdgeGeometry2\";\r\nimport { AsVector2, 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 { GenUVForWorld } from './GenUVForWorld';\r\nimport { Line } from \"./Line\";\r\nimport { Polyline } from \"./Polyline\";\r\nimport { Region } from \"./Region\";\r\n\r\nexport type ExtrudeContourCurve = Polyline | Circle;\r\nexport type ExtrudeContour = Polyline | Circle | ExtrudeSolid | Region;\r\n\r\nexport const MaxDrawGrooveCount = 1000;//最大的绘制槽个数(但是还是会绘制线)\r\n\r\n\r\n@Factory\r\nexport class ExtrudeSolid extends Entity\r\n{\r\n /*\r\n y-----------\r\n ^ |\r\n | ↑ |\r\n | | | height\r\n | ↓ |\r\n | |\r\n 0---width->x\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 * 出于优化考虑,可能未初始化,请注意调用this.ContourCurve\r\n * 形状位于WCS 0点位置,不随OCS变化而变化\r\n */\r\n protected contourCurve: ExtrudeContourCurve;\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 set Material(materialId: ObjectId)\r\n {\r\n let oldMaterial = this.Material ?? this._db?.DefaultMaterial.objectId;\r\n super.Material = materialId;\r\n\r\n let isf_old = Boolean((oldMaterial?.Object as PhysicalMaterialRecord)?.IsFull);\r\n let isf_new = Boolean((materialId?.Object as PhysicalMaterialRecord)?.IsFull);\r\n if (isf_old !== isf_new)\r\n this.Update();\r\n else if ((materialId?.Object as PhysicalMaterialRecord)?.UseWorldUV)\r\n {\r\n if (this._MeshGeometry)\r\n this.GenWorldUV(this._MeshGeometry);\r\n }\r\n }\r\n\r\n get Material() { return super.Material; }\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 if (this.width > 0 && this.height > 0 && this.thickness > 0)\r\n return new Box3Ext(new Vector3, new Vector3(this.width, this.height, this.thickness));\r\n else\r\n return new Box3Ext().setFromPoints([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\r\n for (let g of this.grooves)\r\n {\r\n g._SpaceOCS.copy(this._SpaceOCS);//因为在镜像的时候 没有设置这个会导致错误 所以拷贝一下\r\n g.objectId = new ObjectId;\r\n g.ApplyMatrix(m);\r\n g.objectId = undefined;\r\n }\r\n\r\n //由于修改矩阵会导致矩阵错误\r\n this.csg = undefined;\r\n this.AutoUpdate = updateBak;\r\n\r\n let te = m.elements;\r\n let scaleXSq = te[0] * te[0] + te[1] * te[1] + te[2] * te[2];\r\n let scaleYSq = te[4] * te[4] + te[5] * te[5] + te[6] * te[6];\r\n let scaleZSq = te[8] * te[8] + te[9] * te[9] + te[10] * te[10];\r\n\r\n if (!equaln(scaleXSq, 1, 1e-4) || !equaln(scaleYSq, 1, 1e-4) || !equaln(scaleZSq, 1, 1e-4))\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.OCSNoClone);\r\n cu.ApplyMatrix(m);\r\n cu.ApplyMatrix(this.OCSInv);\r\n this.CheckContourCurve();\r\n return this;\r\n }\r\n protected ApplyMirrorMatrix(m: Matrix4)\r\n {\r\n this.WriteAllObjectRecord();\r\n const curve = this.ContourCurve;\r\n if (curve instanceof Polyline && !equalv3(curve.Position, ZeroVec))\r\n {\r\n let pts = curve.LineData;\r\n if (equalv2(pts[0].pt, arrayLast(pts).pt))\r\n pts.pop();\r\n let ocs = curve.OCSNoClone;\r\n for (let p of pts)\r\n {\r\n Vector2ApplyMatrix4(ocs, p.pt);\r\n }\r\n curve.OCS = IdentityMtx4;\r\n }\r\n let nor = this.Normal.applyMatrix4(this.SpaceOCSInv.setPosition(ZeroVec));\r\n if (equaln(Math.abs(nor.z), 1))\r\n {\r\n reviseMirrorMatrix(this._Matrix, 1);\r\n if (curve instanceof Circle)\r\n {\r\n curve.ApplyMatrix(new Matrix4().makeRotationX(Math.PI));\r\n }\r\n else\r\n {\r\n reviseMirrorMatrix(curve.OCSNoClone, 1);\r\n }\r\n\r\n this.SetContourCurve(curve);\r\n }\r\n else if (equaln(Math.abs(nor.x), 1))\r\n {\r\n reviseMirrorMatrix(this._Matrix, 2);\r\n this._Matrix.setPosition(this.Position.add(this.Normal.multiplyScalar(-this.Thickness)));\r\n }\r\n else\r\n {\r\n reviseMirrorMatrix(this._Matrix, 0);\r\n if (curve instanceof Circle)\r\n {\r\n curve.ApplyMatrix(new Matrix4().makeRotationY(Math.PI));\r\n }\r\n else\r\n {\r\n reviseMirrorMatrix(curve.OCSNoClone, 0);\r\n }\r\n\r\n this.SetContourCurve(curve);\r\n }\r\n\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: ExtrudeContourCurve)\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坐标系0点\r\n */\r\n SetContourCurve(curve: ExtrudeContourCurve)\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\r\n let x = new Vector3().setFromMatrixColumn(ocs, 0);\r\n let y = new Vector3().setFromMatrixColumn(ocs, 1);\r\n let z = new Vector3().setFromMatrixColumn(ocs, 2);\r\n let z1 = x.cross(y);\r\n\r\n let isMirror = equaln(ocs.elements[10], -1, 1e-4) || !equalv3(z, z1);\r\n let isRotate = !equaln(ocs.elements[0], 1);\r\n\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 ocsInv = this.OCSInv;\r\n let x = TransformVector(xAxis.clone(), ocsInv).setZ(0).normalize();\r\n if (equalv3(ZeroVec, x, 1e-5)) return this;\r\n\r\n this.WriteAllObjectRecord();\r\n\r\n let a = Math.atan2(x.y, x.x);\r\n\r\n x.transformDirection(this._Matrix);\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 this.ContourCurve.ApplyMatrix(tempMatrix1.makeRotationZ(-a));//复用了这个矩阵\r\n this.CheckContourCurve();\r\n if (this.contourCurve instanceof Polyline)\r\n this.contourCurve.UpdateOCSTo(IdentityMtx4);\r\n\r\n this.Update();\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 = 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, 1e-3))\r\n holes.push(Contour.CreateContour(g.ContourCurve.Clone().ApplyMatrix(this.OCSInv.multiply(g.OCSNoClone)), 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 arrayPushArray(grooves, gs);\r\n }\r\n if (grooves.length === 0) return false;\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 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.OCSNoClone);\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.OCSNoClone);\r\n pts.push(\r\n ...l.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform)\r\n );\r\n }\r\n\r\n if (this.grooves.length < 100)\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.OCSNoClone); });\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.GetBulgeAt(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\r\n private csg: Geom3;\r\n get CSG(): Geom3\r\n {\r\n if (this.csg) return this.csg;\r\n\r\n this.csg = Geometry2CSG2(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\r\n //0不平行 1同向,2反向 () 这里保证判断平行和判断方向相反的判断方式是一样的 #I3BUSY\r\n const __eqfuzz__ = 1e-3;\r\n let parType = equalv3(n1, n2, __eqfuzz__) ? 1 : equalv3(n1, n2.clone().negate(), __eqfuzz__) ? 2 : 0;\r\n\r\n if (parType > 0)\r\n {\r\n target = target.Clone().ClearDraw();\r\n if (parType === 2)\r\n {\r\n let mtx = target._Matrix;\r\n SetMtxVector(mtx, 2, n1);\r\n let p = n1.setFromMatrixColumn(mtx, 3);\r\n p.add(n2.multiplyScalar(target.thickness));\r\n SetMtxVector(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 ibox.getSize(size);\r\n if (size.x < 1 || size.y < 1 || size.z < 0.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 //必须修正向量,否则会出错 #I3BUSY\r\n xv.normalize();\r\n yv.normalize();\r\n zv.normalize();\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 interCSG = CSGIntersect(this.CSG, target.CSG, this.OCSInv.multiply(target.OCSNoClone));\r\n\r\n //测试绘制\r\n // TestDraw(new Mesh(CSG2Geometry2(interBSP), ColorMaterial.GetConceptualMaterial(1, DoubleSide)));\r\n\r\n let topology = new BSPGroupParse(interCSG);\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: ExtrudeContourCurve[] = [];\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 if (this.grooves.length < 2) return;\r\n //生命周期:初始化->used->undefined\r\n type ExtData = {\r\n index: number;\r\n used: boolean;\r\n box: Box3;\r\n };\r\n\r\n //构建二维空间索引\r\n let ocsInv = this.OCSInv;\r\n let mtx = new Matrix4;\r\n let fb = new Flatbush(this.grooves.length);\r\n for (let i = 0; i < this.grooves.length; i++)\r\n {\r\n let g = this.grooves[i];\r\n mtx.multiplyMatrices(ocsInv, g.OCSNoClone);\r\n let cu = g.ContourCurve.Clone().ApplyMatrix(mtx);\r\n let box = cu.BoundingBox;\r\n g.TempData = { index: i, used: false, box };\r\n fb.add(box.min.x, box.min.y, box.max.x, box.max.y);\r\n }\r\n fb.finish();\r\n\r\n let retGs: ExtrudeSolid[] = [];//新的槽列表\r\n\r\n for (let i = 0; i < this.grooves.length; i++)\r\n {\r\n let startG = this.grooves[i];\r\n\r\n if (startG.TempData === undefined)//已经被使用\r\n continue;\r\n\r\n retGs.push(startG);\r\n\r\n let stack = [startG];\r\n\r\n for (let j = 0; j < stack.length; j++)\r\n {\r\n let g = stack[j];\r\n let gd = g.TempData as ExtData;//能入栈的都是未被使用的\r\n\r\n let ids = fb.search(gd.box.min.x - 1e-2, gd.box.min.y - 1e-2, gd.box.max.x + 1e-2, gd.box.max.y + 1e-2, (id =>\r\n {\r\n if (id <= i) return false;//(id比它小(如果能合并 早就合并了))\r\n let gd = this.grooves[id].TempData as ExtData;\r\n return gd && !gd.used;//判断被使用\r\n }));\r\n\r\n for (let id of ids)\r\n {\r\n let ng = this.grooves[id];\r\n if (equaln(startG.knifeRadius, ng.knifeRadius, 1e-3) && startG.Join(ng) === Status.True)\r\n {\r\n (ng.TempData as ExtData).used = true;\r\n stack.push(ng);\r\n }\r\n }\r\n\r\n g.TempData = undefined;//总是保证被使用的造型这个数据为空\r\n }\r\n }\r\n\r\n if (retGs.length !== this.grooves.length)\r\n {\r\n this.grooves = retGs;\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 (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\r\n //分裂后重新将排钻实体设置给不同的实体\r\n HandleSpliteEntitys(splitEntitys: this[]) { }\r\n\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\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.GetConceptualEdgeMaterial())\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\r\n Object.defineProperty(mesh, \"castShadow\", {\r\n get: () => this.CaseShadow\r\n });\r\n Object.defineProperty(mesh, \"receiveShadow\", {\r\n get: () => this.CaseShadow\r\n });\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\r\n Object.defineProperty(mesh, \"castShadow\", {\r\n get: () => this.CaseShadow\r\n });\r\n Object.defineProperty(mesh, \"receiveShadow\", {\r\n get: () => this.CaseShadow\r\n });\r\n\r\n return new Object3D().add(\r\n mesh,\r\n new LineSegments(this.EdgeGeometry, ColorMaterial.GetPhysical2EdgeMaterial())\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 if (this.__CacheSplitExtrudes)\r\n for (let e of this.__CacheSplitExtrudes)\r\n e._MaterialId = this._MaterialId;\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 if (grooves.length < 1000)\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 this.GenWorldUV(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 if (grooves.length < MaxDrawGrooveCount)\r\n this._EdgeGeometry = builder.EdgeGeometry;\r\n this.UpdateUV(null, null);\r\n this.GenWorldUV(this._MeshGeometry);\r\n\r\n return this._MeshGeometry;\r\n }\r\n\r\n private _EdgeGeometry: EdgesGeometry | BufferGeometry;\r\n 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\r\n if (this._EdgeGeometry)\r\n return this._EdgeGeometry;\r\n\r\n //这里我们超过100就用这个,为了性能 和MaxDrawGrooveCount不一致\r\n if (this.grooves.length > 100 || this.grooves.every(g => equaln(g.thickness, this.thickness)) || this.grooves.length === 0)\r\n {\r\n let coords = FastExtrudeEdgeGeometry(this, this.ColorIndex, 20, true);\r\n let edgeGeo = new BufferGeometry();\r\n edgeGeo.setAttribute('position', new Float32BufferAttribute(coords, 3));\r\n this._EdgeGeometry = edgeGeo;\r\n return this._EdgeGeometry;\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 mtl = (this.Material?.Object as PhysicalMaterialRecord) ?? this.Db?.DefaultMaterial;\r\n\r\n if (mtl?.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\r\n GenWorldUV(geo: BufferGeometry)\r\n {\r\n let mtl = (this.Material?.Object as PhysicalMaterialRecord) ?? this.Db?.DefaultMaterial;\r\n\r\n if (mtl?.UseWorldUV)\r\n {\r\n let gen = new GenUVForWorld;\r\n gen.GenGeoUV(geo, mtl.Material);\r\n }\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.GetConceptualEdgeMaterial())\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\r\n Object.defineProperty(mesh, \"castShadow\", {\r\n get: () => this.CaseShadow\r\n });\r\n Object.defineProperty(mesh, \"receiveShadow\", {\r\n get: () => this.CaseShadow\r\n });\r\n\r\n return obj.add(\r\n mesh,\r\n new LineSegments(this.EdgeGeometry, ColorMaterial.GetPhysical2EdgeMaterial())\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 ExtrudeContourCurve;\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 { 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 { AsVector3, equaln, equalv2, equalv3, ZeroVec } from \"../../Geometry/GeUtils\";\r\nimport { GenerateExtrudeEdgeGeometry } from \"../../Geometry/SimpleExtrudeEdgeGeometry\";\r\nimport { ScaleUV } from \"../../Geometry/UVUtils\";\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 { ExtrudeContourCurve, ExtrudeSolid } from \"../Entity/Extrude\";\r\nimport { GenUVForWorld } from \"../Entity/GenUVForWorld\";\r\nimport { Polyline } from \"../Entity/Polyline\";\r\nimport { PhysicalMaterialRecord } from \"../PhysicalMaterialRecord\";\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: ExtrudeContourCurve = 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: ExtrudeContourCurve)\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 Erase(isErase: boolean = true)\r\n {\r\n if (isErase === this.IsErase) return;\r\n super.Erase(isErase);\r\n if (!isErase) return;\r\n\r\n if (this.OtherHalfTongKong && !this.OtherHalfTongKong.IsErase)\r\n {\r\n let cy = this.OtherHalfTongKong.Object as this;\r\n cy.isThrough = false;\r\n cy.OtherHalfTongKong = null;\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.OCSNoClone);\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: 6,\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\r\n let mtl = this.Material?.Object as PhysicalMaterialRecord ?? this.Db?.DefaultMaterial;\r\n if (mtl?.UseWorldUV)\r\n {\r\n let bgeo = new BufferGeometry().fromGeometry(geo);\r\n let gen = new GenUVForWorld();\r\n gen.GenGeoUV(bgeo, mtl.Material);\r\n return bgeo;\r\n }\r\n else\r\n ScaleUV(geo);\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.GetBulgeAt(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.OCSNoClone);\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.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.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.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.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.Conceptual || 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.Physical)\r\n {\r\n let mesh = obj as Mesh;\r\n mesh.material = this.MeshMaterial;\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 ExtrudeContourCurve;\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 { 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 { Matrix3, Matrix4, Object3D, Vector3 } from \"three\";\r\nimport { AddEntityDrawObject } from \"../../Common/AddEntityDrawObject\";\r\nimport { arrayPushArray, 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 abstract 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 /**\r\n * 返回对象在自身坐标系下的Box\r\n */\r\n override get BoundingBoxInOCS(): Box3Ext\r\n {\r\n //这个代码可能是错误的. 当复合实体是子实体时,复合实体的矩阵和世界坐标垂直,但是父实体没有垂直时,此时的结果是错误的 所以注释掉这个代码\r\n // if (\r\n // (equaln(this._Matrix.elements[0], 1, 1e-5) ||\r\n // equaln(this._Matrix.elements[1], 1, 1e-5) ||\r\n // equaln(this._Matrix.elements[2], 1, 1e-5)\r\n // //3\r\n // )\r\n // &&\r\n // (equaln(this._Matrix.elements[4], 1, 1e-5) ||\r\n // equaln(this._Matrix.elements[5], 1, 1e-5) ||\r\n // equaln(this._Matrix.elements[6], 1, 1e-5)\r\n // //7\r\n // )\r\n // &&\r\n // (equaln(this._Matrix.elements[8], 1, 1e-5) ||\r\n // equaln(this._Matrix.elements[9], 1, 1e-5) ||\r\n // equaln(this._Matrix.elements[10], 1, 1e-5)\r\n // )\r\n // )\r\n // return this.GetBoundingBoxInMtx(this.OCSInv);\r\n // else\r\n {\r\n let box = new Box3Ext;\r\n for (let e of this.Entitys)\r\n box.union(e.BoundingBoxInOCS.applyMatrix4(e.OCSNoClone));\r\n return box;\r\n }\r\n }\r\n\r\n //#region 绘制\r\n // OnlyRenderType = true; //我们现在不需要这样,因为我们每个绘制类型的Object的子实体都有子实体的渲染类型(唯一的缺点可能是渲染速度变慢了?)\r\n /**\r\n * 初始化绘制的threejs实体,子类型重载该函数初始化绘制实体.\r\n */\r\n override 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.OCSNoClone);\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\r\n //实体在被内嵌时,它绘制对象的世界矩阵会被影响,所以这里我们不直接计算它的盒子,而是用绘制对象的盒子来计算包围盒,避免错误\r\n //例如 复合扫略实体 的ZoomObject在这个实现下是错误的(因为扫略实体也是直接取绘制对象的包围盒)\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.OCSNoClone);\r\n // }\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\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 rtype = renderType;\r\n if (renderType === RenderType.Print && e.IsOnlyRender)\r\n rtype += 100;\r\n\r\n let o = e.GetDrawObjectFromRenderType(rtype);\r\n if (o)\r\n {\r\n o.traverse(obj => obj.userData = {});\r\n AddEntityDrawObject(obj, e, rtype);\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 {\r\n if (!e.Db) e.SetDatabase(this.Db);\r\n e.Material = id;\r\n }\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 arrayPushArray(pts, e.Clone().ApplyMatrix(this.OCSNoClone).GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform));\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 ApplyMirrorMatrix(m: Matrix4)\r\n {\r\n if (this.Id)\r\n this.Update(UpdateDraw.Geometry);\r\n return this;\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 { DefaultCompositeMetalsOption } from \"../../Editor/DefaultConfig\";\r\nimport { ICompHardwareOption } from \"../../UI/Components/RightPanel/RightPanelInterface\";\r\nimport { AutoRecord } from \"../AutoRecord\";\r\nimport { Factory } from \"../CADFactory\";\r\nimport { CADFiler } from \"../CADFiler\";\r\nimport { CompositeEntity } from \"../Entity/CompositeEntity\";\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 @AutoRecord RelevanceHardware: ObjectId[] = []; //当这个实体为复合板时,关联五金的信息\r\n /**\r\n *\r\n * @param [checkIsHole=false] true:只获取是孔的实体 false:返回所有实体\r\n * @param [checkFilter] 过滤函数\r\n * @returns\r\n */\r\n GetAllEntity(checkIsHole: boolean = false, checkFilter?: (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 (!checkIsHole || e.HardwareOption.isHole)\r\n holes.push(...e.GetAllEntity(checkIsHole, checkFilter).map(h => h.ApplyMatrix(this.OCSNoClone)));\r\n }\r\n else\r\n {\r\n if (!checkFilter || checkFilter(e))\r\n holes.push(e.Clone().ApplyMatrix(this.OCSNoClone));\r\n }\r\n }\r\n return holes;\r\n }\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 file.Read(),\r\n file.Read()\r\n ];\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 > 2)\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 this.RelevanceBoards.push(file.ReadSoftObjectId());\r\n }\r\n\r\n if (v > 3)\r\n {\r\n let count = file.Read();\r\n this.RelevanceHardware.length = 0;\r\n for (let i = 0; i < count; i++)\r\n this.RelevanceHardware.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(4);\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 file.Write(this.RelevanceHardware.length);\r\n for (let id of this.RelevanceHardware)\r\n file.WriteSoftObjectId(id);\r\n }\r\n}\r\n","import { Box3, Matrix4, Vector3 } from \"three\";\r\nimport { MatrixPlanarizere } from \"../../Common/Matrix4Utils\";\r\nimport { Contour } from \"../../DatabaseServices/Contour\";\r\nimport { Board } from \"../../DatabaseServices/Entity/Board\";\r\nimport { Polyline } from \"../../DatabaseServices/Entity/Polyline\";\r\nimport { Region } from \"../../DatabaseServices/Entity/Region\";\r\nimport { BoolOpeartionType } from \"../../GraphicsSystem/BoolOperateUtils\";\r\nimport { Box3Ext } from \"../Box\";\r\nimport { equaln, XAxis } from \"../GeUtils\";\r\nimport { BoardFaceType } from \"./BoardGetFace\";\r\n\r\nexport interface BoardFaceParams\r\n{\r\n type: BoardFaceType;\r\n length: number;\r\n width: number;\r\n localBoard: Board;\r\n matrix4: Matrix4;\r\n region?: Region;\r\n isRect?: boolean;\r\n drillType?: string;\r\n}\r\nexport class Face\r\n{\r\n type: BoardFaceType;\r\n Length: number;\r\n Width: number;\r\n private _Region: Region;\r\n LocalBoard: Board;\r\n InterBoard: Board; //提供侧面的作为相交面\r\n isEqualType: boolean = false;\r\n OCS: Matrix4 = new Matrix4();\r\n IsRect: boolean = true;\r\n DrillType: string;\r\n constructor(parameters?: BoardFaceParams)\r\n {\r\n if (parameters)\r\n {\r\n this.type = parameters.type;\r\n this._Region = parameters.region;\r\n this.LocalBoard = parameters.localBoard;\r\n this.OCS = parameters.matrix4;\r\n this.Length = parameters.length;\r\n this.Width = parameters.width;\r\n if (parameters.isRect !== undefined)\r\n this.IsRect = parameters.isRect;\r\n if (parameters.drillType)\r\n this.DrillType = parameters.drillType;\r\n else\r\n this.DrillType = this.LocalBoard.BoardProcessOption.drillType;\r\n }\r\n }\r\n get Region()\r\n {\r\n if (!this._Region)\r\n this._Region = Region.CreateFromCurves([new Polyline().Rectangle(this.Length, this.Width)]);\r\n return this._Region;\r\n }\r\n get OCSInv()\r\n {\r\n return new Matrix4().getInverse(this.OCS);\r\n }\r\n get Normal()\r\n {\r\n return new Vector3().setFromMatrixColumn(this.OCS, 2);\r\n }\r\n Intersect(f: Face): Face[]\r\n {\r\n //获得侧面和非侧面\r\n let [sideFace, noSideFace] = this.type === BoardFaceType.Side ? [this, f] : [f, this];\r\n\r\n //布尔面和被布尔面得差异矩阵\r\n let diffMtx = sideFace.OCSInv.multiply(noSideFace.OCS);\r\n MatrixPlanarizere(diffMtx);\r\n\r\n let isSuccess = false;\r\n\r\n let x = new Vector3().setFromMatrixColumn(diffMtx, 0);\r\n let ang = x.angleTo(XAxis);\r\n //盒子旋转0,90,180度不会被破坏\r\n let canUseBoxCalc = equaln(ang, 0) || equaln(ang, Math.PI / 2) || equaln(ang, Math.PI);\r\n\r\n let retBoxs: Box3Ext[] = [];\r\n let sizes: Vector3[] = [];\r\n\r\n //如果不是矩形,用布尔运算,如果\r\n if (!noSideFace.IsRect || !canUseBoxCalc)\r\n {\r\n let sideReg = sideFace.Region?.Clone();\r\n if (!sideReg || !noSideFace.Region) return [];\r\n\r\n let toReg = noSideFace.Region.Clone().ApplyMatrix(diffMtx);\r\n isSuccess = sideReg.BooleanOper(toReg, BoolOpeartionType.Intersection);\r\n for (let s of sideReg.ShapeManager.ShapeList)\r\n {\r\n let box = s.BoundingBox as Box3Ext;\r\n retBoxs.push(box);\r\n sizes.push(box.getSize(new Vector3()));\r\n }\r\n }\r\n else\r\n {\r\n let retBox = new Box3Ext(new Vector3(), new Vector3(sideFace.Length, sideFace.Width));\r\n\r\n let p1 = new Vector3().setFromMatrixPosition(diffMtx);\r\n let p2 = new Vector3(noSideFace.Length, noSideFace.Width).applyMatrix4(diffMtx);\r\n let box3 = new Box3Ext().setFromPoints([p1, p2]);\r\n\r\n if (retBox.intersectsBox(box3))\r\n {\r\n retBox.intersect(box3);\r\n let size = retBox.getSize(new Vector3());\r\n isSuccess = !equaln(size.x * size.y, 0);\r\n retBoxs = [retBox];\r\n sizes = [size];\r\n }\r\n }\r\n\r\n let newFaces: Face[] = [];\r\n\r\n if (isSuccess)\r\n {\r\n for (let i = 0; i < sizes.length; i++)\r\n {\r\n let newFace = new Face();\r\n //提供侧面的板件作为相交面\r\n newFace.LocalBoard = noSideFace.LocalBoard;\r\n newFace.InterBoard = sideFace.LocalBoard;\r\n\r\n newFace.Length = sizes[i].x;\r\n newFace.Width = sizes[i].y;\r\n\r\n let min = retBoxs[i].min;\r\n min.applyMatrix4(sideFace.OCS);\r\n\r\n //构建碰撞面坐标系\r\n newFace.OCS = sideFace.OCS.clone().setPosition(min);\r\n\r\n newFace.DrillType = sideFace.DrillType;\r\n //都是侧面\r\n if (this.type === f.type)\r\n newFace.isEqualType = true;\r\n newFaces.push(newFace);\r\n }\r\n }\r\n return newFaces;\r\n }\r\n IsIntersect(f: Face, fuzz = 1e-6, currentCoverBoxes: Box3[] = []): { isInt: boolean, coverBoxesList?: Box3[]; }\r\n {\r\n //获得侧面和非侧面\r\n let [sideFace, noSideFace] = this.type === BoardFaceType.Side ? [this, f] : [f, this];\r\n\r\n //布尔面和被布尔面得差异矩阵\r\n let diffMtx = sideFace.OCSInv.multiply(noSideFace.OCS);\r\n MatrixPlanarizere(diffMtx);\r\n\r\n let x = new Vector3().setFromMatrixColumn(diffMtx, 0);\r\n let ang = x.angleTo(XAxis);\r\n //盒子旋转0,90,180度不会被破坏\r\n let canUseBoxCalc = equaln(ang, 0) || equaln(ang, Math.PI / 2) || equaln(ang, Math.PI);\r\n\r\n //如果不是矩形,用布尔运算,如果\r\n if (!noSideFace.IsRect || !canUseBoxCalc)\r\n {\r\n let c1 = new Polyline().Rectangle(sideFace.Length, sideFace.Width);\r\n let c2 = noSideFace.LocalBoard.ContourCurve.Clone().ApplyMatrix(diffMtx);\r\n let box = c1.BoundingBox.intersect(c2.BoundingBox);\r\n\r\n let size = box.getSize(new Vector3);\r\n\r\n if (equaln(size.x * size.y, 0))\r\n return { isInt: false, coverBoxesList: currentCoverBoxes };\r\n\r\n let con1 = Contour.CreateContour(c1);\r\n let con2 = Contour.CreateContour(c2);\r\n let cs = con1.IntersectionBoolOperation(con2);\r\n let width = 0;\r\n let boxList: Box3[] = [];\r\n //当前碰撞区域如果遮光直接退出\r\n for (let c of cs)\r\n {\r\n let b = c.BoundingBox;\r\n b.getSize(size);\r\n width += size.x;\r\n if (width / sideFace.Length > fuzz)\r\n return { isInt: true };\r\n boxList.push(b);\r\n }\r\n if (currentCoverBoxes.length === 0)\r\n {\r\n return { isInt: false, coverBoxesList: boxList };\r\n }\r\n //与旧盒子合并后测试是否遮光\r\n width = 0;\r\n while (currentCoverBoxes.length > 0)\r\n {\r\n let b = currentCoverBoxes.pop();\r\n let isInt = false;\r\n for (let box of boxList)\r\n {\r\n if (box.intersectsBox(b))\r\n {\r\n isInt = true;\r\n box.union(b);\r\n break;\r\n }\r\n }\r\n if (!isInt)\r\n boxList.push(b);\r\n }\r\n\r\n for (let b of boxList)\r\n {\r\n b.getSize(size);\r\n width += size.x;\r\n if (width / sideFace.Length > fuzz)\r\n return { isInt: true };\r\n }\r\n\r\n return { isInt: false, coverBoxesList: boxList };\r\n }\r\n else\r\n {\r\n let retBox = new Box3Ext(new Vector3(), new Vector3(sideFace.Length, sideFace.Width));\r\n\r\n let p1 = new Vector3().setFromMatrixPosition(diffMtx);\r\n let p2 = new Vector3(noSideFace.Length, noSideFace.Width).applyMatrix4(diffMtx);\r\n let box3 = new Box3Ext().setFromPoints([p1, p2]);\r\n\r\n if (retBox.intersectsBox(box3))\r\n {\r\n retBox.intersect(box3);\r\n let size = retBox.getSize(new Vector3());\r\n if (equaln(size.x * size.y, 0) || size.y / sideFace.Width <= fuzz)\r\n return { isInt: false, coverBoxesList: currentCoverBoxes };\r\n\r\n if (size.x / sideFace.Length > fuzz)\r\n return { isInt: true };\r\n if (currentCoverBoxes.length === 0)\r\n {\r\n return { isInt: false, coverBoxesList: [retBox] };\r\n }\r\n for (let b of currentCoverBoxes)\r\n {\r\n if (b.intersectsBox(retBox))\r\n {\r\n b.union(retBox);\r\n retBox = null;\r\n break;\r\n }\r\n }\r\n if (retBox)\r\n currentCoverBoxes.push(retBox);\r\n let width = 0;\r\n for (let b of currentCoverBoxes)\r\n {\r\n b.getSize(size);\r\n width += size.x;\r\n if (width / sideFace.Length > fuzz)\r\n return { isInt: true };\r\n }\r\n\r\n return { isInt: false, coverBoxesList: currentCoverBoxes };\r\n }\r\n return { isInt: false, coverBoxesList: currentCoverBoxes };\r\n }\r\n }\r\n}\r\n","import { Matrix4, Vector3 } from \"three\";\r\nimport { MergeCurvelist } from \"../../Common/CurveUtils\";\r\nimport { MakeMirrorMtx } 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\n\r\n\r\nexport const CanDrawHoleFuzz = 0.1;\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 mtx = MakeMirrorMtx(ZAxis);\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, mtx),\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, zFuzz: number): 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(), 1e-5))\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, zFuzz);\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, 1e-5) && x.y > 0) || x.x < -1e-5)\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","\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 { Vector3 } from \"three\";\r\nimport { arrayRemoveIf } from \"../../Common/ArrayExt\";\r\nimport { ConverCircleToPolyline, curveLinkGroup, equalCurve, IRectInfo } 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, ComparePointFnGenerate, 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 = ComparePointFnGenerate(\"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 { HostApplicationServices } from \"../../ApplicationServices/HostApplicationServices\";\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 { ExtrudeContourCurve } 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 { 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: boolean): Curve[]\r\n {\r\n let outline = shape.Outline.Curve;\r\n if (isOut)\r\n outline = outline.Clone();\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 //理论上最大的宽度为1220,所以2000已经是种仁慈.\r\n //更好的算法应该是, 如果线不在outline里面, 那么已经算是错误的,但是理论上如果线已经往外偏太多了,就一定会使得这个判断生效\r\n if (offsetDist > 2000)\r\n throw \"无法加工的造型!已经超过了最大的走刀范围2000!\";\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 //是否和孤岛相交\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\r\n let vailHoles: Contour[] = [];\r\n\r\n //内偏(走刀方式)\r\n let outlineOffsetCusOfTool = GetOffsetCurves(outline, dir * knifRadius).filter(c => c.IsClose) as Curve[];\r\n let maxArea = Math.max(...(outlineOffsetCusOfTool.map(c => c.Area)));\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 holeOffsetCurve = holeOffsetCus[i];//网洞走刀曲线\r\n for (let j = 0; j < outlineOffsetCusOfTool.length; j++)\r\n {\r\n let outlineCurveOffsetInside = outlineOffsetCusOfTool[j];\r\n if (h.Curve.IntersectWith(outlineCurveOffsetInside, 0).length > 0)\r\n {\r\n if (!(equalCurve(holeOffsetCurve, outlineCurveOffsetInside) || isTargetCurInOrOnSourceCur(outlineCurveOffsetInside as Polyline, h.Curve)))\r\n {\r\n isVail = false;\r\n break;\r\n }\r\n else if (isTargetCurInOrOnSourceCur(h.Curve, outlineCurveOffsetInside as Polyline))\r\n {\r\n offsetCus.push(outlineCurveOffsetInside);\r\n isVail = false;\r\n break;\r\n }\r\n }\r\n else if (holeOffsetCurve.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 /**用于测试走刀路径 */\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 && HostApplicationServices.chaidanOption.useDefaultRad)\r\n modelings.forEach(m => m.knifeRadius = HostApplicationServices.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 < HostApplicationServices.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 */\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\r\n //获取造型走刀\r\n GetModelFeedPath(br: { Thickness: number, ContourCurve: ExtrudeContourCurve; }, modeling: IModeling): Curve[]\r\n {\r\n const brThickness = br.Thickness;\r\n let cus: Curve[] = [];\r\n let { shape, thickness, knifeRadius, addLen, addWidth, addDepth } = modeling;\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, modeling.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, true);\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\r\n /**\r\n * 获取所有的轮廓\r\n * @param cus\r\n * @param retCus 不能组成轮廓的线被添加到这里\r\n * @returns\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 return cons;\r\n }\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 (HostApplicationServices.chaidanOption.useDefaultRad)\r\n modelings[i].knifeRadius = HostApplicationServices.chaidanOption.radius;\r\n let m = modelings[i];\r\n let cu = m.shape.Outline.Curve;\r\n if (cu instanceof Circle && cu.Radius < HostApplicationServices.chaidanOption.modeling2HoleRad + 1e-6)\r\n continue;\r\n let cus = this.GetModelFeedPath(br, m);\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 < HostApplicationServices.chaidanOption.modeling2HoleRad + 1e-6)\r\n continue;\r\n if (HostApplicationServices.chaidanOption.useDefaultRad)\r\n m.knifeRadius = HostApplicationServices.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: ExtrudeContourCurve, 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","import { Vector2, Vector3 } from \"three\";\r\nimport { ConverCircleToPolyline } from \"../Common/CurveUtils\";\r\nimport { Vector2ApplyMatrix4 } from \"../Common/Matrix4Utils\";\r\nimport { Arc } from \"../DatabaseServices/Entity/Arc\";\r\nimport { Circle } from \"../DatabaseServices/Entity/Circle\";\r\nimport { Polyline } from \"../DatabaseServices/Entity/Polyline\";\r\nimport { equaln } from \"../Geometry/GeUtils\";\r\n\r\n\r\n/**轮廓(多段线Pts Bul)数据 */\r\nexport interface IContourData\r\n{\r\n pts: Vector2[];\r\n buls: number[];\r\n}\r\n\r\n\r\n//转换成多段线点表(pts bul)\r\nexport function ConverToPtsBul(cu: Polyline | Circle, isOutline = true): IContourData\r\n{\r\n let ptsBuls: IContourData;\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 ptsBuls = cu.PtsBuls;\r\n }\r\n let ocs = cu.OCSNoClone;\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//转换成多段线点表(pts bul)\r\nexport function ConverArcToPtsBul(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 result.pts.push(arc.StartPoint);\r\n result.buls.push(bul);\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","import { Box3, Matrix4, Vector2, Vector3 } from \"three\";\r\nimport { SCALAR } from \"../Add-on/DrawDrilling/HoleUtils\";\r\nimport { lookOverBoardInfosTool } from \"../Add-on/LookOverBoardInfos/LookOverBoardInfosTool\";\r\nimport { HostApplicationServices } from \"../ApplicationServices/HostApplicationServices\";\r\nimport { EBoardKeyList } from \"../Common/BoardKeyList\";\r\nimport { MergeCurvelist } from \"../Common/CurveUtils\";\r\nimport { IsDev } from \"../Common/Deving\";\r\nimport { ParseExpr, safeEval } from \"../Common/eval\";\r\nimport { Log } from \"../Common/Log\";\r\nimport { SendReport } from \"../Common/Report\";\r\nimport { ShowSelectObjects } from \"../Common/ShowSelectObjects\";\r\nimport { Intent, Toaster } from \"../Common/Toaster\";\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 { Contour } from \"../DatabaseServices/Contour\";\r\nimport { Arc } from \"../DatabaseServices/Entity/Arc\";\r\nimport { Board, I2DModeingItem, IKnifeInfo, IModeling } from \"../DatabaseServices/Entity/Board\";\r\nimport { Circle } from \"../DatabaseServices/Entity/Circle\";\r\nimport { ExtrudeContourCurve } 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 { Shape } from \"../DatabaseServices/Shape\";\r\nimport { CanDrawHoleFuzz } from \"../Geometry/DrillParse/BoardGetFace\";\r\nimport { angleTo, equaln, equalv3, IsBetweenA2B, isIntersect2, isParallelTo, MoveMatrix, XAxis } from \"../Geometry/GeUtils\";\r\nimport { GetBoardSealingData, 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, ISealingData } from \"../UI/Store/BoardInterface\";\r\nimport { Entity } from './../DatabaseServices/Entity/Entity';\r\nimport { ICompHardwareOption } from './../UI/Components/RightPanel/RightPanelInterface';\r\nimport { ConverArcToPtsBul, ConverToPtsBul, IContourData } from \"./Convert2PtsBul\";\r\n\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\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 interface IDrillingOption\r\n{\r\n position: Vector3;\r\n radius: number;\r\n type: GangDrillType;\r\n depth: number;\r\n face: FaceDirection;\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 brThickness: number;\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 orgContour = GetSealedBoardContour(br, true, true);\r\n if (!orgContour || equaln(orgContour.Area, 0))\r\n {\r\n Toaster({\r\n message: br.Name + \" 轮廓错误,可能存在轮廓自交,请检查后重新拆单!(错误的板已经选中,您可以按住鼠标中键查看该板!)(使用FISC命令可以修复自交轮廓!)\",\r\n timeout: 8000,\r\n intent: Intent.DANGER,\r\n });\r\n Report([br.__OriginalEnt__ ?? br], br.Name + \" 轮廓错误\");\r\n return undefined;\r\n }\r\n let sealedOutline = GetSealedBoardContour(br, false);\r\n\r\n if (!sealedOutline || equaln(sealedOutline.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.__OriginalEnt__ ?? br], br.Name + \"扣除封边轮廓有误\");\r\n return;\r\n }\r\n let offsetTanslation = sealedOutline.BoundingBox.min;\r\n sealedOutline.Position = sealedOutline.Position.sub(offsetTanslation);\r\n let sealedOutlinePtsBul = ConverToPtsBul(sealedOutline);//不分裂圆弧转点表\r\n //外轮廓去掉最后的闭合点\r\n sealedOutlinePtsBul.pts.pop();\r\n sealedOutlinePtsBul.buls.pop();\r\n let size = sealedOutline.BoundingBox.getSize(new Vector3);\r\n\r\n //不扣除封边的轮廓信息\r\n let originOutlinePtsBul = ConverToPtsBul(orgContour);\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 = ConverToPtsBul(br.ContourCurve);//不分裂圆弧转点表\r\n\r\n return {\r\n info: GetBoardInfo(br, size),\r\n originOutlin: originOutlinePtsBul,//拼错了 未扣封边的点表\r\n outline: sealedOutlinePtsBul, //扣完封边的点表\r\n sealing: GetBoardSealingData(orgContour),\r\n modeling,\r\n holes: GetBoardHolesData(br, offsetTanslation, orgContour),\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 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\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 < HostApplicationServices.chaidanOption.modeling2HoleRad + 1e-6)\r\n continue;\r\n if (HostApplicationServices.chaidanOption.useDefaultRad)\r\n m.knifeRadius = HostApplicationServices.chaidanOption.radius;\r\n\r\n data.push({\r\n outline: ConverToPtsBul(cu.Clone(), false),\r\n holes: m.shape.Holes.map(h => ConverToPtsBul(h.Curve.Clone(), 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 < HostApplicationServices.chaidanOption.modeling2HoleRad + 1e-6)\r\n continue;\r\n if (HostApplicationServices.chaidanOption.useDefaultRad)\r\n m.knifeRadius = HostApplicationServices.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: ExtrudeContourCurve) => ConverToPtsBul(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: ConverToPtsBul(cu.Clone(), false),\r\n holes: m.shape.Holes.map(h => ConverToPtsBul(h.Curve.Clone(), 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): ExtrudeContourCurve | undefined\r\n {\r\n let con: ExtrudeContourCurve = GetSpliteOutlineBySpliteSize(br);\r\n if (con)\r\n return con;\r\n\r\n con = br.ContourCurve;\r\n if (con instanceof Circle) return con.Clone();\r\n\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\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, \"L\");\r\n let spliteWidth = safeEval(br.BoardProcessOption.spliteWidth, param, \"W\");\r\n let spliteThickness = safeEval(br.BoardProcessOption.spliteThickness, param, \"H\");\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 //获得拆单轮廓(如果没有,那么将返回空,如果有,返回多段线)\r\n export function GetSpliteOutlineBySpliteSize(br: Board): Polyline | null\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: ExtrudeContourCurve): 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, CanDrawHoleFuzz)) 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, CanDrawHoleFuzz) ? FaceDirection.Front : FaceDirection.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 < HostApplicationServices.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: ExtrudeContourCurve, 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 (HostApplicationServices.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: ExtrudeContourCurve)\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: FaceDirection;\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 sp = position.clone().setZ(0).add(d.Normal.multiplyScalar(- CanDrawHoleFuzz).applyMatrix4(roMat));//加长线(以便加大容差)\r\n let ep = position.clone().setZ(0).add(d.Normal.multiplyScalar(d.Height + CanDrawHoleFuzz).applyMatrix4(roMat));//加长线\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.warn(\"侧孔与板无交点,无法加工该侧孔!\");\r\n return;\r\n }\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, CanDrawHoleFuzz) ? FaceDirection.Front : FaceDirection.Back;\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: ExtrudeContourCurve, 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 //区间没有交集\r\n if (!(Math.max(z0, 0) < (Math.min(z1, br.Thickness) - CanDrawHoleFuzz))) return;\r\n\r\n if (!(z0 < CanDrawHoleFuzz || z1 > (br.Thickness - CanDrawHoleFuzz)))//禁止在中间挖洞\r\n {\r\n Log(`警告:板:{${br.Name}}的孔嵌在板中间,无法加工,已经跳过!`);\r\n return;\r\n }\r\n\r\n if (!(outline.PtInCurve(p)))//在轮廓内\r\n {\r\n Log(`警告:板:{${br.Name}}的孔不在板轮廓内,无法加工,已经跳过!`);\r\n return;\r\n }\r\n\r\n if (groovesOutlines.some(g => g.PtInCurve(p)))//在洞内\r\n {\r\n Log(`警告:板:{${br.Name}}的孔在造型内,无法加工,已经跳过!`);\r\n return;\r\n }\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 ? FaceDirection.Back : FaceDirection.Front,\r\n angle: angle,\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 Log(`警告:板:${br.Name}的排钻嵌在板件内部,已经跳过!`);\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.model = ParseExpr(data.model, { L: size.x, W: size.y, H: size.z });\r\n data.factory = ParseExpr(data.factory, { L: size.x, W: size.y, H: size.z });\r\n data.brand = ParseExpr(data.brand, { 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\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: ConverToPtsBul(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\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 = ConverArcToPtsBul(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\r\n export function GetChaiDanFeedingPath(data: IChaiDanFeedingData)\r\n {\r\n const { thickness, boardContour, dir, addLen, addWidth, addDepth, knifeRadius, brThickness } = 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: brThickness, 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: ExtrudeContourCurve) => ConverToPtsBul(c, false));\r\n }\r\n}\r\n","import Flatbush from 'flatbush';\r\nimport { Box3, Vector3 } from \"three\";\r\nimport { Curve } from \"../DatabaseServices/Entity/Curve\";\r\nimport { XAxis, YAxis } from '../Geometry/GeUtils';\r\n\r\n/**\r\n * 分析曲线的上下左右位置的线\r\n * @param curves\r\n */\r\nexport function ParseEdgeSealDir(curves: Curve[]): [number, number, number, number]\r\n{\r\n let boxAll = new Box3;\r\n let boxs: Box3[] = [];\r\n\r\n let fb = new Flatbush(curves.length);\r\n\r\n for (let c of curves)\r\n {\r\n let box = c.BoundingBox;\r\n boxs.push(box);\r\n boxAll.union(box);\r\n\r\n fb.add(box.min.x, box.min.y, box.max.x, box.max.y);\r\n }\r\n\r\n fb.finish();\r\n\r\n let leftids = fb.search(boxAll.min.x - 1, boxAll.min.y - 1, boxAll.min.x + 1, boxAll.max.y + 1);\r\n let rightids = fb.search(boxAll.max.x - 1, boxAll.min.y - 1, boxAll.max.x + 1, boxAll.max.y + 1);\r\n let topids = fb.search(boxAll.min.x - 1, boxAll.max.y - 1, boxAll.max.x + 1, boxAll.max.y + 1);\r\n let bottomids = fb.search(boxAll.min.x - 1, boxAll.min.y - 1, boxAll.max.x + 1, boxAll.min.y + 1);\r\n\r\n const FindBestCurveIndex = (ids: number[], dirRef: Vector3) =>\r\n {\r\n if (ids.length === 1) return ids[0];\r\n\r\n let maxLength = -Infinity;\r\n let bestIndex = -1;\r\n for (let id of ids)\r\n {\r\n let c = curves[id];\r\n let dir = c.EndPoint.sub(c.StartPoint).normalize();\r\n let length = Math.abs(dir.dot(dirRef));//取模(模越长 表示和dirRef越平行(接近))\r\n if (length > maxLength)\r\n {\r\n bestIndex = id;\r\n maxLength = length;\r\n }\r\n }\r\n return bestIndex;\r\n };\r\n\r\n let left = FindBestCurveIndex(leftids, YAxis);\r\n let right = FindBestCurveIndex(rightids, YAxis);\r\n let top = FindBestCurveIndex(topids, XAxis);\r\n let bottom = FindBestCurveIndex(bottomids, XAxis);\r\n\r\n return [left, right, top, bottom];\r\n}\r\n","import { arrayPushArray } from \"../Common/ArrayExt\";\r\nimport { 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 { ExtrudeContourCurve } from \"../DatabaseServices/Entity/Extrude\";\r\nimport { Line } from \"../DatabaseServices/Entity/Line\";\r\nimport { Polyline } from \"../DatabaseServices/Entity/Polyline\";\r\nimport { CreateContour2 } from \"../Geometry/CreateContour2\";\r\nimport { angle, clampRad, equaln, equalv3, isParallelTo, SelectNearP, XAxis } from \"../Geometry/GeUtils\";\r\nimport { Production } from \"../Production/Product\";\r\nimport { IHighSealedItem, ISealingData } from \"../UI/Store/BoardInterface\";\r\nimport { IntersectOption } from \"./IntersectWith\";\r\nimport { ParseEdgeSealDir } from \"./ParseEdgeSealDir\";\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\nexport function CalcEdgeSealing(cus: Curve[], highSeals?: IHighSealedItem[])\r\n{\r\n if (cus.length <= 1) return;\r\n\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))//反向共线 later 在front内\r\n {\r\n //删除线\r\n cus.splice(laterIndex, 1);\r\n highSeals?.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))//反向共线 front 在 later内\r\n {\r\n //删除线\r\n cus.splice(i, 1);\r\n highSeals?.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 => refLine.PtOnCurve(p) && refLine2.PtOnCurve(p));\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 //删除线\r\n cus.splice(i, 1);\r\n highSeals?.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 highSeals?.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 if (cus.length < 2) return false;\r\n\r\n //后面线点无效,如果是起始线,则删除,否则缓存原始线,继续尝试连接\r\n if (par > 1 - 1e-6)\r\n {\r\n if (laterIndex === 0)\r\n {\r\n //删除线\r\n cus.shift();\r\n highSeals?.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\n//与GetBoardSealingCurves相关\r\nexport function GetBoardHighSeal(br: Board, sealcus: Curve[]): IHighSealedItem[]\r\n{\r\n if (br.BoardProcessOption[EBoardKeyList.SpliteHeight]\r\n && br.BoardProcessOption[EBoardKeyList.SpliteWidth]\r\n && br.BoardProcessOption[EBoardKeyList.SpliteThickness]\r\n )\r\n {\r\n return [\r\n { size: parseFloat(br.BoardProcessOption.sealedDown) },\r\n { size: parseFloat(br.BoardProcessOption.sealedRight) },\r\n { size: parseFloat(br.BoardProcessOption.sealedUp) },\r\n { size: parseFloat(br.BoardProcessOption.sealedLeft) },\r\n ];\r\n }\r\n\r\n let highSeals = br.BoardProcessOption.highSealed.filter(d => d.size !== null && d.size !== undefined);\r\n\r\n //若未设置高级封边,把上下左右封边存入高级封边\r\n if (sealcus.length !== highSeals.length || !br.IsSpecialShape)\r\n {\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 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\r\n an = clampRad(an);\r\n\r\n if ((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 //当存在拆单尺寸时\r\n if (br.BoardProcessOption[EBoardKeyList.SpliteHeight]\r\n && br.BoardProcessOption[EBoardKeyList.SpliteWidth]\r\n && br.BoardProcessOption[EBoardKeyList.SpliteThickness]\r\n )\r\n {\r\n const param = { L: br.Height, W: br.Width, H: br.Thickness };\r\n let width = safeEval(br.BoardProcessOption[EBoardKeyList.SpliteWidth], param, \"W\");\r\n let height = safeEval(br.BoardProcessOption[EBoardKeyList.SpliteHeight], param, \"L\");\r\n let cu = new Polyline().Rectangle(width, height);\r\n return cu.Explode();\r\n }\r\n\r\n let cu: ExtrudeContourCurve = 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 ExtrudeContourCurve;\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\nconst SEAL_VALUE_KEY = \"__highSeals__\";\r\n\r\n\r\n/**\r\n * 获取板件轮廓\r\n * 结果轮廓拆单用,统一逆时针数据\r\n * hasSealing 轮廓是否包含封边\r\n * 用户计算拆单侧孔面id\r\n *\r\n * //返回的曲线中 如果 hasSealing isParseSeal 那么将可以取出封边信息\r\n */\r\nexport function GetSealedBoardContour(br: Board, hasSealing: boolean, isParseSeal = false): Polyline | Circle | undefined\r\n{\r\n let area2 = br.ContourCurve.Area2;\r\n if (Math.abs(area2) < 10)\r\n return;\r\n\r\n let offsetCus: Curve[] = [];\r\n let curves = GetBoardSealingCurves(br);\r\n let dir = Math.sign(area2);\r\n\r\n let highSealsExpd: ISealingData[];//展开后的封边信息(仅在未扣除封边的分支中计算)\r\n if (hasSealing)\r\n {\r\n let highSeals: IHighSealedItem[];\r\n if (isParseSeal)\r\n {\r\n highSeals = GetBoardHighSeal(br, curves);\r\n highSealsExpd = [];\r\n }\r\n\r\n for (let i = 0; i < curves.length; i++)\r\n {\r\n let curve = curves[i];\r\n\r\n const PushCurve = (c: Curve) =>\r\n {\r\n offsetCus.push(c);\r\n highSealsExpd?.push({ size: highSeals[i].size, length: c.Length });\r\n };\r\n\r\n if (curve instanceof Polyline)\r\n for (let cu of curve.Explode())\r\n PushCurve(cu);\r\n else\r\n PushCurve(curve);\r\n }\r\n }\r\n else\r\n {\r\n let highSeals = GetBoardHighSeal(br, curves);\r\n\r\n //圆的dir始终等于1\r\n // if (cus[0] instanceof Circle)\r\n // dir = 1;\r\n\r\n //所有的封边都一样时\r\n if (highSeals.every(s => equaln(s.size, highSeals[0].size), 1e-3))\r\n {\r\n let brContour = br.ContourCurve;\r\n\r\n //当存在拆单尺寸时\r\n if (br.BoardProcessOption[EBoardKeyList.SpliteHeight]\r\n && br.BoardProcessOption[EBoardKeyList.SpliteWidth]\r\n && br.BoardProcessOption[EBoardKeyList.SpliteThickness]\r\n )\r\n {\r\n const param = { L: br.Height, W: br.Width, H: br.Thickness };\r\n let width = safeEval(br.BoardProcessOption[EBoardKeyList.SpliteWidth], param, \"W\");\r\n let height = safeEval(br.BoardProcessOption[EBoardKeyList.SpliteHeight], param, \"L\");\r\n brContour = new Polyline().Rectangle(width, height);\r\n }\r\n\r\n let retPl: ExtrudeContourCurve;\r\n\r\n if (!highSeals[0].size || equaln(highSeals[0].size, 0, 1e-3))\r\n {\r\n retPl = brContour.Clone();\r\n if (dir < 0)\r\n retPl.Reverse();\r\n }\r\n else\r\n {\r\n retPl = brContour.GetOffsetCurves(-highSeals[0].size * dir)[0] as ExtrudeContourCurve;\r\n\r\n if (retPl && !retPl.IsClose)\r\n {\r\n //某些情况下,这里会出现非闭合轮廓\r\n retPl = CreateContour2([retPl])?.Curve;\r\n }\r\n\r\n if (retPl && retPl.Area2 < 0)\r\n retPl.Reverse();\r\n }\r\n\r\n if (retPl) return retPl;\r\n }\r\n\r\n for (let i = 0; i < curves.length; i++)\r\n {\r\n let cs: Curve[];\r\n if (!highSeals[i].size)\r\n cs = [curves[i].Clone()];\r\n else\r\n cs = curves[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 arrayPushArray(offsetCus, c.Explode());\r\n else\r\n offsetCus.push(c);\r\n }\r\n }\r\n }\r\n\r\n if (offsetCus.length === 1 && offsetCus[0] instanceof Circle)\r\n {\r\n let cir = offsetCus[0];\r\n\r\n if (highSealsExpd) cir[SEAL_VALUE_KEY] = highSealsExpd;\r\n\r\n return cir;\r\n }\r\n\r\n if (!CalcEdgeSealing(offsetCus, highSealsExpd)) return;\r\n let pl = Polyline.FastCombine(offsetCus, LINK_FUZZ);\r\n if (pl && dir < 0)\r\n {\r\n pl.Reverse();\r\n highSealsExpd?.reverse();\r\n }\r\n\r\n if (highSealsExpd) pl[SEAL_VALUE_KEY] = highSealsExpd;\r\n\r\n return pl;\r\n}\r\n\r\nexport function GetBoardSealingData(curve: Polyline | Circle)\r\n{\r\n let sealData = curve[SEAL_VALUE_KEY] as ISealingData[];\r\n if (curve instanceof Circle)\r\n {\r\n sealData[0].length *= 0.5;\r\n sealData.push({ ...sealData[0] });\r\n }\r\n return sealData;\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 = GetBoardSealingCurves(br);\r\n\r\n //现在我们不管是否有拆单尺寸,我们总是关系封边值\r\n // let param = { L: br.Height, W: br.Width, H: br.Thickness };\r\n // let spliteHeight = safeEval(br.BoardProcessOption.spliteHeight, param, \"L\");\r\n // let spliteWidth = safeEval(br.BoardProcessOption.spliteWidth, param, \"W\");\r\n // let spliteThickness = safeEval(br.BoardProcessOption.spliteThickness, param, \"H\");\r\n // if ((spliteHeight && spliteWidth && spliteThickness) || !br.IsSpecialShape && cus.length === 4)\r\n\r\n if (!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).normalize();\r\n if (isParallelTo(derv, XAxis, 1e-4))\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 else\r\n {\r\n let [left, right, top, bottom] = ParseEdgeSealDir(cus);\r\n br.BoardProcessOption[EBoardKeyList.LeftSealed] = edges[left].size.toString();\r\n br.BoardProcessOption[EBoardKeyList.RightSealed] = edges[right].size.toString();\r\n br.BoardProcessOption[EBoardKeyList.UpSealed] = edges[top].size.toString();\r\n br.BoardProcessOption[EBoardKeyList.DownSealed] = edges[bottom].size.toString();\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 = Math.abs(feedingDepth * Math.tan(knifAngle));\r\n let cus = polyline.Explode();\r\n arrayRemoveIf(cus, c => c.Length < 0.01);\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.clone());\r\n }\r\n if (c2 instanceof Arc)\r\n c2 = new Line(curP.clone(), curP.clone().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 //向量与平分线,参照倒角代码\r\n let derv1 = c1.GetFistDeriv(0).normalize();\r\n let derv2 = c2.GetFistDeriv(0).normalize();\r\n let bisectorVec = derv1.clone().negate().add(derv2).multiplyScalar(0.5);\r\n\r\n let co1 = c1.GetOffsetCurves(x * Math.sign(derv1.cross(bisectorVec).z))[0];\r\n let co2 = c2.GetOffsetCurves(x * Math.sign(derv2.cross(bisectorVec).z))[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 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","import { Geometry, Line as TLine, LineSegments, Matrix3, Matrix4, Mesh, Object3D, ShapeGeometry, UVGenerator, Vector3 } from 'three';\r\nimport { Board2Regions } from '../../Add-on/BoardEditor/Board2Regions';\r\nimport { DeserializationBoard2DModeingData, DeserializationBoard3DModeingData, deserializationBoardData, SerializeBoard2DModeingData, SerializeBoard3DModeingData, serializeBoardData } from '../../Add-on/BoardEditor/SerializeBoardData';\r\nimport { CyHoleInBoard, InitRectBoardHoleOption, SetRectHighHole, TempRectHoleOption } from '../../Add-on/DrawDrilling/HoleUtils';\r\nimport { HostApplicationServices } from '../../ApplicationServices/HostApplicationServices';\r\nimport { arrayRemoveIf, arraySortByNumber, arraySum } from '../../Common/ArrayExt';\r\nimport { EBoardKeyList } from '../../Common/BoardKeyList';\r\nimport { ColorMaterial } from '../../Common/ColorPalette';\r\nimport { tempMatrix1, TransformVector, ZMirrorMatrix } from '../../Common/Matrix4Utils';\r\nimport { UpdateDraw } from '../../Common/Status';\r\nimport { ObjectSnapMode } from '../../Editor/ObjectSnapMode';\r\nimport { boardUVGenerator, boardUVGenerator2 } from '../../Geometry/BoardUVGenerator';\r\nimport { BufferGeometryUtils } from '../../Geometry/BufferGeometryUtils';\r\nimport { equaln, equalv3, IdentityMtx4, XAxis, XAxisN, YAxis, YAxisN, ZAxis, ZeroVec } from '../../Geometry/GeUtils';\r\nimport { PointShapeUtils } from '../../Geometry/PointShapeUtils';\r\nimport { GetBoardHighSeal, GetBoardSealingCurves, HandleRectBoardSealingData } from '../../GraphicsSystem/CalcEdgeSealing';\r\nimport { RenderType } from '../../GraphicsSystem/RenderType';\r\nimport { VData2Curve, VKnifToolPath } from '../../GraphicsSystem/ToolPath/VKnifToolPath';\r\nimport { BoardOpenDir, BoardProcessOption, BoardType, ComposingType, FaceDirection, IHighSealedItem, LinesType } from '../../UI/Store/BoardInterface';\r\nimport { CylinderHole } from '../3DSolid/CylinderHole';\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 { Arc } from './Arc';\r\nimport { Circle } from './Circle';\r\nimport { DragPointType } from './DragPointType';\r\nimport { Entity } from './Entity';\r\nimport { ExtrudeContourCurve, ExtrudeSolid } from './Extrude';\r\nimport { Polyline } from './Polyline';\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\n//排钻配置名是合法的\r\nfunction IsValidDriName(name: string): boolean\r\n{\r\n return name === \"不排\" || HostApplicationServices.DrillConfigs.has(name);\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 protected HasEdgeRenderType = true;\r\n protected HasPlaceFaceRenderType = true;\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\r\n //更新封边检查的显示\r\n if (!this.__ReadFileIng__ && key === EBoardKeyList.HighSealed)\r\n {\r\n let obj = this.CacheDrawObject.get(RenderType.Edge);\r\n if (obj)\r\n {\r\n this.UpdateDrawObject(RenderType.Edge, obj);\r\n obj.updateMatrixWorld(true);\r\n }\r\n }\r\n return true;\r\n }\r\n let result = Reflect.set(target, key, value, receiver);\r\n\r\n if (!this.__ReadFileIng__)//看起来使用 this.ReadFileIng 似乎也是没问题的\r\n {\r\n if (key === EBoardKeyList.Lines)\r\n this.Update(UpdateDraw.Geometry);\r\n else if (key === EBoardKeyList.ComposingFace)\r\n {\r\n let obj = this.CacheDrawObject.get(RenderType.PlaceFace);\r\n if (obj)\r\n {\r\n this.UpdateDrawObject(RenderType.PlaceFace, obj);\r\n obj.updateMatrixWorld(true);\r\n }\r\n }\r\n }\r\n\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.WriteAllObjectRecord();\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 = [...HostApplicationServices.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\r\n let dridatas: string[];\r\n let ocsInv: Matrix4;\r\n if (brs.some(br => br.__OriginalEnt__))\r\n {\r\n if (this._BoardProcessOption.highDrill\r\n && this._BoardProcessOption.highDrill.length > 1\r\n && !this._BoardProcessOption.highDrill.every(d => d === this._BoardProcessOption.drillType))\r\n dridatas = this._BoardProcessOption.highDrill;\r\n\r\n ocsInv = this.OCSInv;\r\n }\r\n\r\n //拆单或者bbs的时候会重新加入最新的原板件的排钻和层板钉数据\r\n for (let br of brs)\r\n {\r\n if (br.__OriginalEnt__)\r\n {\r\n br._Name = this._Name;\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 if (dridatas)\r\n {\r\n br.BoardProcessOption.highDrill = [];//因为上面用了拷贝,所以这里不能直接改它的数据(我们新建一个数组来改它,否则原始板件的数据就被改掉了)\r\n //矩阵对齐\r\n let m = br.OCS.premultiply(ocsInv);\r\n for (let i = 0; i < br.contourCurve.EndParam; i++)\r\n {\r\n let p = br.contourCurve.GetPointAtParam(i + 0.5);\r\n p.applyMatrix4(m);\r\n\r\n let cp = this.contourCurve.GetClosestPointTo(p, false);\r\n let cparam = this.contourCurve.GetParamAtPoint2(cp);\r\n if (cparam !== undefined)\r\n {\r\n let newDri = dridatas[Math.floor(cparam)];\r\n br._BoardProcessOption.highDrill[i] = newDri ?? br._BoardProcessOption.drillType;\r\n }\r\n else\r\n br._BoardProcessOption.highDrill[i] = br._BoardProcessOption.drillType;\r\n }\r\n }\r\n else//填充默认类型就好了\r\n br._BoardProcessOption.highDrill = Array(br.contourCurve.EndParam).fill(br._BoardProcessOption.drillType);\r\n\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.OCSNoClone));\r\n cu.Erase(false);//当内部造型超过100个时,不校验时,这个曲线就是erase的状态,所以设置这个状态,避免无法绘制出来\r\n if (cu instanceof Circle)//这里保证这个圆是正常坐标系 I3BUSY#note_4525213\r\n cu.OCS = new Matrix4().setPosition(cu.Position);\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.OCSNoClone));\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\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.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.ContourCurve = hole.Curve;\r\n subG.Thickness = model.thickness;\r\n\r\n g.AppendGroove(subG);\r\n }\r\n\r\n //不需要处理正反面的原因是因为Get时保留了曲线的高度,导致生成的槽位置已经在指定位置\r\n\r\n g.ApplyMatrix(this.OCSNoClone);\r\n\r\n this.grooves.push(g);\r\n }\r\n this.GrooveCheckAllAutoSplit();\r\n this.Update();\r\n }\r\n\r\n get Modeling2D()\r\n {\r\n return [...this._2DModelingList];\r\n }\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\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 if (this._2DModelingList.length === 0) return;\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 if (this._3DModelingList.length === 0) return;\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 if (this.grooves.length === 0) return;\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 && !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 YAxis,\r\n XAxisN,\r\n ZAxis\r\n );\r\n break;\r\n case BoardType.Vertical:\r\n roMat.makeBasis(\r\n YAxis,\r\n ZAxis,\r\n XAxis\r\n );\r\n break;\r\n case BoardType.Behind:\r\n roMat.makeBasis(\r\n XAxis,\r\n ZAxis,\r\n YAxisN\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 if (type === this._BoardType) return;\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 if (n === this._Name) return;\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: ExtrudeContourCurve)\r\n {\r\n //标识是否被初始化\r\n TempRectHoleOption.up = undefined;\r\n\r\n let needRename = !IsValidDriName(this.BoardProcessOption.drillType);\r\n if (!this.contourCurve || cu.EndParam !== this.contourCurve.EndParam || needRename)\r\n {\r\n let defaultType = this._BoardProcessOption.drillType;\r\n if (needRename)\r\n {\r\n defaultType = HostApplicationServices.DrillConfigs.size ? HostApplicationServices.DrillConfigs.entries().next().value[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 }\r\n\r\n /**\r\n * 在不改变Normal和实体显示的情况下,修改X轴的指向\r\n * @param xAxis\r\n */\r\n override SetXAxis(xAxis: Vector3, isKeepLines = false): this\r\n {\r\n let ocsInv = this.OCSInv;\r\n let x = TransformVector(xAxis.clone(), ocsInv).setZ(0).normalize();\r\n if (equalv3(ZeroVec, x, 1e-5)) return this;\r\n\r\n this.WriteAllObjectRecord();\r\n\r\n let highSeals: IHighSealedItem[];\r\n if (this.isRect)\r\n highSeals = GetBoardHighSeal(this, GetBoardSealingCurves(this));\r\n\r\n let a = Math.atan2(x.y, x.x);\r\n\r\n if (isKeepLines && this.BoardProcessOption.lines !== LinesType.CanReversal && (equaln(x.y, 1, 1e-5) || equaln(x.y, -1, 1e-5)))\r\n this.BoardProcessOption.lines = 1 - this.BoardProcessOption.lines;//翻转纹路 1=>0 0=>1\r\n\r\n x.transformDirection(this._Matrix);\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 this.ContourCurve.ApplyMatrix(tempMatrix1.makeRotationZ(-a));//复用了这个矩阵\r\n this.CheckContourCurve();\r\n if (this.contourCurve instanceof Polyline)\r\n this.contourCurve.UpdateOCSTo(IdentityMtx4);\r\n\r\n if (this.isRect)\r\n HandleRectBoardSealingData(this, highSeals);//这里不可以用缓存的曲线 否则分析错误,必须重新开始分析曲线\r\n\r\n this.Update();\r\n return this;\r\n }\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)\r\n {\r\n if (!this.Id)\r\n {\r\n // super.ApplyMirrorMatrix(m); //这个变更导致镜像错误 因为实体没有正常的被更新. 所以需要注意的是,如果需要镜像变更,需要给实体一个id!!!\r\n return this;\r\n }\r\n\r\n this.ContourCurve;//因为下面翻转孔面的代码,所以必须初始化这个\r\n\r\n let hasSplitSize = (this.BoardProcessOption[EBoardKeyList.SpliteHeight]\r\n && this.BoardProcessOption[EBoardKeyList.SpliteWidth]\r\n && this.BoardProcessOption[EBoardKeyList.SpliteThickness]\r\n );\r\n\r\n let highSeals = GetBoardHighSeal(this, GetBoardSealingCurves(this));\r\n\r\n super.ApplyMirrorMatrix(m);\r\n\r\n if (this.contourCurve.Area2 < 0)\r\n {\r\n this.contourCurve.Reverse();\r\n highSeals.reverse();\r\n this.BoardProcessOption.highSealed?.reverse();\r\n this.BoardProcessOption.highDrill?.reverse();\r\n\r\n if (hasSplitSize)\r\n {\r\n [\r\n this.BoardProcessOption.sealedUp,\r\n this.BoardProcessOption.sealedLeft,\r\n this.BoardProcessOption.sealedDown,\r\n this.BoardProcessOption.sealedRight,\r\n ]\r\n =\r\n [\r\n this.BoardProcessOption.sealedUp,\r\n this.BoardProcessOption.sealedRight,\r\n this.BoardProcessOption.sealedDown,\r\n this.BoardProcessOption.sealedLeft,\r\n ];\r\n }\r\n }\r\n else\r\n this.BoardProcessOption[EBoardKeyList.BigHole] = 1 - this.BoardProcessOption[EBoardKeyList.BigHole];//反转大孔面\r\n\r\n this.BoardProcessOption.highSealed = highSeals;\r\n\r\n if (!hasSplitSize && this.isRect)\r\n HandleRectBoardSealingData(this, highSeals);\r\n //重新构建SpaceOCS\r\n this._SpaceOCS.multiplyMatrices(this._Matrix, new Matrix4().getInverse(this.RotateMat));\r\n\r\n //\"左\",\"右\"互换\r\n if (this.Name.includes(\"左\"))\r\n this.Name = this.Name.replace(\"左\", \"右\");\r\n else if (this.Name.includes(\"右\"))\r\n this.Name = this.Name.replace(\"右\", \"左\");\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 _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\r\n //分裂后重新将排钻实体设置给不同的实体\r\n override HandleSpliteEntitys(splitEntitys: this[])\r\n {\r\n if (!splitEntitys.length) return;\r\n this.WriteAllObjectRecord();\r\n\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\r\n //如果没有开排钻反应器,那么需要重新关联排钻\r\n //排钻列表\r\n let dris: [ObjectId, ObjectId[][]][] = [];\r\n if (!HostApplicationServices.openDrillingReactor)\r\n {\r\n for (let d of this._DrillList)\r\n {\r\n dris.push(d);\r\n\r\n //离婚,分割财产\r\n let fbr = d[0]?.Object as Board;\r\n if (fbr)\r\n {\r\n fbr.WriteAllObjectRecord();\r\n fbr._DrillList.delete(this.Id);\r\n }\r\n }\r\n\r\n this._DrillList.clear();//开启反应器时,这个行为由排钻重排控制,没有开启时,我们暂时清空,下面会重新计算关联\r\n }\r\n\r\n //清除所有层板钉(因为下面会重新关联)(这个和排钻反应器没有关联,必须全部清除)\r\n this._LayerNails.length = 0;\r\n\r\n //所有的实体,包括自己\r\n let ents: this[] = [this].concat(splitEntitys);\r\n\r\n for (let en of ents)\r\n {\r\n let ocsInv = en.OCSInv;\r\n //把层板钉送给有缘人\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 if (en === this)\r\n {\r\n this._LayerNails.push(id);\r\n return false;\r\n }\r\n //异形换位,把排钻给别人\r\n if (n.MId === this.Id)\r\n n.MId = en.Id;\r\n else if (n.FId === this.Id)\r\n n.FId = en.Id;\r\n //新的板需要关联这个id\r\n en._LayerNails.push(id);\r\n return false;\r\n }\r\n return true;\r\n });\r\n\r\n //如果没有开排钻反应器,那么需要重新关联排钻\r\n if (!HostApplicationServices.openDrillingReactor)\r\n {\r\n for (let d of dris)\r\n {\r\n let [bid, drIdss] = d;\r\n let board = bid?.Object as Board;//另一个父亲\r\n\r\n drIdss = drIdss.filter(ids =>\r\n {\r\n if (!ids[0]?.Object || ids[0].IsErase) return false;\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 if (board)//重新拥有父亲的身份.\r\n board.AppendDrillList(en.Id, [ids]);\r\n\r\n en.AppendDrillList(bid, [ids]);//拥有新的母亲的身份\r\n\r\n for (let h of holes)\r\n {\r\n //成了别人的新娘\r\n if (h.FId === this.Id)\r\n h.FId = en.Id;\r\n if (h.MId === this.Id)\r\n h.MId = en.Id;\r\n }\r\n return false;\r\n }\r\n }\r\n else\r\n {\r\n //直接删除,毫不留情\r\n for (let id of ids)\r\n {\r\n let object = id?.Object;\r\n if (object && !object.IsErase)\r\n object.Erase();\r\n }\r\n return false;\r\n }\r\n return true;\r\n });\r\n\r\n d[1] = drIdss;\r\n }\r\n\r\n }\r\n\r\n }\r\n\r\n //删除无父母的排钻\r\n for (let d of dris)\r\n {\r\n for (let ids of d[1])\r\n for (let id of ids)\r\n {\r\n let object = id?.Object;\r\n if (object && !object.IsErase)\r\n object.Erase();\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 this.UpdateDrawObject(renderType, obj);\r\n }\r\n else if (renderType === RenderType.PlaceFace)\r\n {\r\n obj = new Object3D;\r\n this.UpdateDrawObject(renderType, 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\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 else if (renderType === RenderType.PlaceFace)\r\n {\r\n let isArbitrary = this._BoardProcessOption[EBoardKeyList.ComposingFace] === ComposingType.Arbitrary;\r\n\r\n obj.add(new Mesh(this.MeshGeometry, ColorMaterial.GetConceptualMaterial(8)),\r\n new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(7))\r\n );\r\n\r\n if (!isArbitrary)\r\n obj.add(this.GetPlaceFace());\r\n }\r\n this.HandleBoardMaterial(renderType, obj);\r\n\r\n return o;\r\n }\r\n\r\n private get PlaceColor() { return this._Color === 8 ? 9 : this._Color; }\r\n //获得绘制的放置网格\r\n GetPlaceFace(): Mesh\r\n {\r\n let shapeGeom = new ShapeGeometry(this.contourCurve.Shape);\r\n let isBack = this._BoardProcessOption[EBoardKeyList.ComposingFace] !== ComposingType.Positive;\r\n shapeGeom.applyMatrix4(this.contourCurve.OCSNoClone);\r\n shapeGeom.translate(0, 0, isBack ? -0.2 : this.thickness + 0.5);\r\n let mesh = new Mesh(shapeGeom, ColorMaterial.GetBasicMaterialDoubleSide(this.PlaceColor));\r\n return mesh;\r\n }\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) && HostApplicationServices.showLines && this.IsChaiDan)\r\n obj.add(...this.GetLinesDir());\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\r\n UpdateDrawObjectMaterial(renderType: RenderType, obj: Object3D)\r\n {\r\n super.UpdateDrawObjectMaterial(renderType, obj);\r\n\r\n if (renderType === RenderType.PlaceFace)\r\n {\r\n let face = obj.children[2] as Mesh;\r\n if (!face) return;\r\n face.material = ColorMaterial.GetBasicMaterialDoubleSide(this.PlaceColor);\r\n }\r\n\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\r\n CheckSealing(obj: Object3D)\r\n {\r\n let sealingInfo = new Map(HostApplicationServices.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\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 if (!polyline) continue;//多段线可能偏移失败\r\n\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 else if (snapMode === ObjectSnapMode.Mid)\r\n {\r\n for (let vm of this._2DModelingList)\r\n {\r\n let ps = vm.path.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform);\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 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 // if (this.width === 0 || this.height === 0) //板件变成0长度,无法绘制\r\n // this._isErase = true;\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\r\n file.Write(this._LayerNails.length);\r\n for (let nail of this._LayerNails)\r\n file.WriteHardObjectId(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 { arrayRemoveDuplicateBySort } from \"../../../Common/ArrayExt\";\r\n\r\ntype Range = [number, number];\r\n\r\nconst COMPARE_FUNC = (sparam: number, range: Range) => sparam - range[0];\r\n\r\n//寻找插入位置\r\nexport function InsertRangeIndex(ranges: Range[], sparam: number)\r\n{\r\n return InsertSortedIndex(ranges, sparam, COMPARE_FUNC);\r\n}\r\n\r\n//返回可以插入的位置\r\nexport function InsertSortedIndex(array: T[], element: E, comparefunc: (a: E, 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) // element > testelement\r\n leftbound = testindex + 1;\r\n else if (compareresult === 0)//因为函数 FindBestRange 会取index-1 来取范围\r\n leftbound = testindex + 1;\r\n else\r\n rightbound = testindex;\r\n }\r\n return leftbound;\r\n}\r\n\r\n/**\r\n * 插入范围,并且合并范围\r\n */\r\nexport function InsertRangeAndUnion(\r\n ranges: Range[],\r\n sparam: number,\r\n eparam: number,\r\n insertIndex = InsertRangeIndex(ranges, sparam)\r\n)\r\n{\r\n if (insertIndex !== 0 && (sparam - 1e-6) <= (ranges[insertIndex - 1][1]))//和前面一个范围合并\r\n {\r\n //传染\r\n let s = insertIndex;\r\n for (; s < ranges.length; s++)\r\n {\r\n let r = ranges[s];\r\n if ((r[0] - 1e-6) < eparam)\r\n {\r\n if (r[1] >= (eparam - 1e-6))\r\n {\r\n eparam = r[1];\r\n s++;\r\n break;\r\n }\r\n //else continue\r\n }\r\n else\r\n break;\r\n }\r\n ranges.splice(insertIndex, s - insertIndex);\r\n ranges[insertIndex - 1][1] = eparam;//合并成功\r\n }\r\n else if (insertIndex !== ranges.length && eparam + 1e-6 > ranges[insertIndex][0]) //和后面的合并\r\n {\r\n let nextRange = ranges[insertIndex];\r\n nextRange[0] = sparam;\r\n nextRange[1] = Math.max(eparam, nextRange[1]);\r\n\r\n eparam = nextRange[1];\r\n\r\n //传染\r\n insertIndex++;\r\n let s = insertIndex;\r\n for (; s < ranges.length; s++)\r\n {\r\n let r = ranges[s];\r\n if (r[0] <= (eparam + 1e-6))\r\n {\r\n if ((r[1] + 1e-6) >= eparam)\r\n {\r\n eparam = r[1];\r\n s++;\r\n break;\r\n }\r\n //else continue\r\n }\r\n else\r\n break;\r\n }\r\n ranges.splice(insertIndex, s - insertIndex);\r\n ranges[insertIndex - 1][1] = eparam;//合并成功\r\n }\r\n else\r\n {\r\n ranges.splice(insertIndex, 0, [sparam, eparam]);\r\n }\r\n\r\n return ranges;\r\n}\r\n\r\n//范围并集\r\nexport function RangeUnion(ranges: Range[])\r\n{\r\n arrayRemoveDuplicateBySort(ranges, (r1, r2) =>\r\n {\r\n if (r1[1] >= r2[1])\r\n return true;\r\n\r\n if (r1[1] >= r2[0])\r\n {\r\n r1[1] = r2[1];\r\n return true;\r\n }\r\n\r\n return false;\r\n });\r\n\r\n return ranges;\r\n}\r\n\r\n//范围交集\r\nexport function Intersection(range1: Range, range2: Range): Range | undefined\r\n{\r\n let min = Math.max(range1[0], range2[0]);\r\n let max = Math.min(range1[1], range2[1]);\r\n\r\n if (max > min) return [min, max];\r\n}\r\n","import { Box3, Vector3 } from \"three\";\r\nimport { arrayRemoveDuplicateBySort } from \"../../../Common/ArrayExt\";\r\nimport { equalv3 } from \"../../../Geometry/GeUtils\";\r\nimport { IntersectOption } from \"../../../GraphicsSystem/IntersectWith\";\r\nimport { equaln } from \"../../../Nest/Common/Util\";\r\nimport { Contour } from \"../../Contour\";\r\nimport { Arc } from \"../../Entity/Arc\";\r\nimport { Curve } from \"../../Entity/Curve\";\r\nimport { Line } from \"../../Entity/Line\";\r\nimport { Polyline } from \"../../Entity/Polyline\";\r\nimport { InsertRangeAndUnion, InsertRangeIndex } from \"./RangeUtils\";\r\n\r\n\r\nexport class CurveTrim\r\n{\r\n _TrimParams: [number, number][] = [];\r\n _IsErase = false;\r\n public _Box: Box3;\r\n constructor(public _curve: Line | Arc)\r\n {\r\n this._Box = _curve.BoundingBox.expandByVector(new Vector3(0.01, 0.01));\r\n }\r\n\r\n TrimBy(contour: Contour, box: Box3, saveSyntropy = false)\r\n {\r\n if (this._IsErase) return;\r\n\r\n //交点参数列表\r\n let iParams = this._curve.IntersectWith2(contour.Curve, IntersectOption.ExtendNone).map(p => p.thisParam).filter(p => p > 1e-6 && p < 0.999999);\r\n iParams.push(0, 1);\r\n iParams.sort((a, b) => a - b);\r\n arrayRemoveDuplicateBySort(iParams, (a1, a2) => equaln(a1, a2, 1e-6));\r\n\r\n if (iParams.length === 2)//[0,1]全包含 或者在外部\r\n {\r\n let p = this.GetPointAtParam(0.5);\r\n if (this.PointInContour(p, contour, box, saveSyntropy))\r\n this._IsErase = true;\r\n return;\r\n }\r\n\r\n for (let i = 0; i < iParams.length - 1; i++)\r\n {\r\n let sparam = iParams[i], eparam = iParams[i + 1];\r\n\r\n let insertIndex = InsertRangeIndex(this._TrimParams, iParams[i]);\r\n\r\n if (insertIndex !== 0 && this._TrimParams[insertIndex - 1][1] > eparam)//包含在已经被切割的范围内,那么直接不用重复判断 (只可能被前一段包含)\r\n continue;\r\n\r\n let midParam = (sparam + eparam) * 0.5;\r\n let p = this.GetPointAtParam(midParam);\r\n if (this.PointInContour(p, contour, box, saveSyntropy))\r\n {\r\n InsertRangeAndUnion(this._TrimParams, sparam, eparam, insertIndex);\r\n\r\n if (this._TrimParams.length === 1 && this._TrimParams[0][0] === 0 && this._TrimParams[0][1] === 1)\r\n {\r\n this._IsErase = true;\r\n return;\r\n }\r\n }\r\n }\r\n\r\n }\r\n\r\n PointInContour(p: Vector3, contour: Contour, contourBox: Box3, saveSyntropy = false)\r\n {\r\n return contourBox.containsPoint(p) && (contour.Curve.PtInCurve(p) && !contour.Curve.PtOnCurve(p));\r\n }\r\n\r\n TrimParam(sparam: number, eparam: number)\r\n {\r\n let insertIndex = InsertRangeIndex(this._TrimParams, sparam);\r\n\r\n if (insertIndex !== 0 && this._TrimParams[insertIndex - 1][1] > eparam)//包含在已经被切割的范围内,那么直接不用重复判断 (只可能被前一段包含)\r\n return;\r\n InsertRangeAndUnion(this._TrimParams, sparam, eparam, insertIndex);\r\n\r\n if (this._TrimParams.length === 1 && this._TrimParams[0][0] < 1e-6 && this._TrimParams[0][1] > (1 - 1e-6))\r\n {\r\n this._IsErase = true;\r\n }\r\n }\r\n\r\n GetPointAtParam(param: number): Vector3\r\n {\r\n return this._curve.GetPointAtParam(param);\r\n }\r\n\r\n get Curves(): Curve[]\r\n {\r\n return [];\r\n }\r\n}\r\n\r\nexport class CurveTrimLine extends CurveTrim\r\n{\r\n constructor(curve: Line,\r\n private derv: Vector3,\r\n private _Sp = curve.StartPoint,\r\n private _Fd = curve.GetFistDeriv(0))\r\n {\r\n super(curve);\r\n }\r\n\r\n override GetPointAtParam(param: number): Vector3\r\n {\r\n return this._Fd.clone().multiplyScalar(param).add(this._Sp);\r\n }\r\n\r\n override PointInContour(p: Vector3, contour: Contour, contourBox: Box3, saveSyntropy = false)\r\n {\r\n if (!contourBox.containsPoint(p)) return false;\r\n\r\n let pl = contour.Curve as Polyline;\r\n for (let i = 0; i < pl.EndParam; i++)\r\n {\r\n let cu = pl.GetCurveAtIndex(i);\r\n if (cu instanceof Line)\r\n {\r\n let d = cu.GetClosestAtPoint(p, true);\r\n if (cu.ParamOnCurve(d.param) && equalv3(d.closestPt, p, 1e-5))//点在线上\r\n {\r\n let derv = cu.GetFistDeriv(d.param).normalize();\r\n return equalv3(derv, this.derv, 1e-4) || (saveSyntropy && equalv3(derv.negate(), this.derv, 1e-4));//因为墙体为顺时针 轮廓为逆时针 所以这里相等=反向\r\n }\r\n }\r\n else\r\n {\r\n if (cu.PtOnCurve(p, 1e-5))\r\n {\r\n let derv = cu.GetFistDeriv(cu.GetParamAtPoint2(p)).normalize();\r\n return equalv3(this.derv, derv, 1e-4) || (saveSyntropy && equalv3(derv.negate(), this.derv, 1e-4));\r\n }\r\n }\r\n }\r\n\r\n return contour.Curve.PtInCurve(p);\r\n }\r\n\r\n override get Curves(): Line[]\r\n {\r\n if (this._IsErase) return [];\r\n\r\n if (this._TrimParams.length === 0) return [this._curve as Line];\r\n\r\n let lines: Line[] = [];\r\n\r\n if (this._TrimParams[0][0] !== 0)\r\n lines.push(new Line(this.GetPointAtParam(0), this.GetPointAtParam(this._TrimParams[0][0])));\r\n\r\n for (let i = 0; i < this._TrimParams.length - 1; i++)\r\n {\r\n let param1 = this._TrimParams[i][1];\r\n let param2 = this._TrimParams[i + 1][0];\r\n lines.push(new Line(this.GetPointAtParam(param1), this.GetPointAtParam(param2)));\r\n }\r\n\r\n if (this._TrimParams[this._TrimParams.length - 1][1] !== 1)\r\n lines.push(new Line(this.GetPointAtParam(this._TrimParams[this._TrimParams.length - 1][1]), this.GetPointAtParam(1)));\r\n\r\n return lines;\r\n }\r\n}\r\n\r\nexport class CurveTrimArc extends CurveTrim\r\n{\r\n constructor(\r\n public _curve: Arc,\r\n private _IsLeft = false\r\n )\r\n {\r\n super(_curve);\r\n }\r\n override PointInContour(p: Vector3, contour: Contour, contourBox: Box3, saveSyntropy = false)\r\n {\r\n if (!contourBox.containsPoint(p)) return false;\r\n\r\n let pl = contour.Curve as Polyline;\r\n let thisDerv = this._curve.GetFistDeriv(p).normalize();\r\n if (this._IsLeft) thisDerv.negate();\r\n\r\n for (let i = 0; i < pl.EndParam; i++)\r\n {\r\n let cu = pl.GetCurveAtIndex(i);\r\n if (cu instanceof Line)\r\n {\r\n let d = cu.GetClosestAtPoint(p, true);\r\n if (cu.ParamOnCurve(d.param) && equalv3(d.closestPt, p, 1e-5))//点在线上 //这个代码似乎是错误的,因为直线和圆弧不可能重合\r\n {\r\n let derv = cu.GetFistDeriv(d.param).normalize();\r\n return equalv3(derv, thisDerv, 1e-4) || (saveSyntropy && equalv3(derv.negate(), thisDerv, 1e-4));//因为墙体为顺时针 轮廓为逆时针 所以这里相等=反向\r\n }\r\n }\r\n else\r\n {\r\n if (cu.PtOnCurve(p, 1e-5))\r\n {\r\n let cuDerv = cu.GetFistDeriv(cu.GetParamAtPoint2(p)).normalize();\r\n return equalv3(thisDerv, cuDerv, 1e-4) || (saveSyntropy && equalv3(cuDerv.negate(), thisDerv, 1e-4));\r\n }\r\n }\r\n }\r\n\r\n return contour.Curve.PtInCurve(p);\r\n }\r\n\r\n override get Curves(): Arc[]\r\n {\r\n if (this._IsErase) return [];\r\n\r\n if (this._TrimParams.length === 0) return [this._curve];\r\n\r\n let arcs: Arc[] = [];\r\n let center = this._curve.Center;\r\n for (let i = 0; i < this._TrimParams.length - 1; i++)\r\n {\r\n let param1 = this._TrimParams[i][1];\r\n let param2 = this._TrimParams[i + 1][0];\r\n arcs.push(new Arc(center, this._curve.Radius, this._curve.GetAngleAtParam(param1), this._curve.GetAngleAtParam(param2), this._curve.IsClockWise));\r\n }\r\n\r\n if (this._TrimParams[0][0] !== 0)\r\n arcs.push(new Arc(center, this._curve.Radius, this._curve.StartAngle, this._curve.GetAngleAtParam(this._TrimParams[0][0]), this._curve.IsClockWise));\r\n\r\n if (this._TrimParams[this._TrimParams.length - 1][1] !== 1)\r\n arcs.push(new Arc(center, this._curve.Radius, this._curve.GetAngleAtParam(this._TrimParams[this._TrimParams.length - 1][1]), this._curve.EndAngle, this._curve.IsClockWise));\r\n\r\n return arcs;\r\n }\r\n}\r\n\r\nexport function CreateCurveTrim(cu: Line | Arc)\r\n{\r\n if (cu instanceof Line) return new CurveTrimLine(cu, undefined);\r\n else return new CurveTrimArc(cu);\r\n}\r\n","import { Matrix4, Vector2, Vector3 } 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 return this;\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 { Entity } from \"../DatabaseServices/Entity/Entity\";\r\n\r\nexport function EntityUpdateWrap(ent: Entity, exec: Function)\r\n{\r\n let bak = ent.AutoUpdate;\r\n ent.AutoUpdate = false;\r\n exec();\r\n ent.DeferUpdate();\r\n ent.AutoUpdate = bak;\r\n}\r\n\r\nexport function EntitysUpdateWrap(ens: Entity[], exec: Function)\r\n{\r\n let baks = ens.map(e => e.AutoUpdate);\r\n exec();\r\n for (let i = 0; i < ens.length; i++)\r\n {\r\n let en = ens[i];\r\n en.DeferUpdate();\r\n en.AutoUpdate = baks[i];\r\n }\r\n}\r\n","import * as clipperLib from \"js-angusj-clipper/web\"; // nodejs style require\r\n\r\nexport let clipperCpp: { lib?: clipperLib.ClipperLibWrapper; } = {};\r\nexport function InitClipperCpp(): Promise\r\n{\r\n if (clipperCpp.lib) return;\r\n if (!globalThis.document)\r\n globalThis.document = {} as any;\r\n return new Promise((res, rej) =>\r\n {\r\n clipperLib.loadNativeClipperLibInstanceAsync(\r\n // let it autodetect which one to use, but also available WasmOnly and AsmJsOnly\r\n \r\n clipperLib.NativeClipperLibRequestedFormat.AsmJsOnly\r\n\r\n ).then(c =>\r\n {\r\n clipperCpp.lib = c;\r\n res();\r\n // console.log(\"载入成功!\");//不再需要\r\n });\r\n });\r\n}\r\n","import { Factory } from \"../../CADFactory\";\r\nimport { Entity } from \"../../Entity/Entity\";\r\n\r\n\r\n/**\r\n * 户型元件的基类\r\n * 墙 平面(地板 天花)\r\n */\r\n@Factory\r\nexport class RoomBase extends Entity\r\n{\r\n}\r\n","import { equaln } from \"../../../../../Geometry/GeUtils\";\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 { RoomBase } from \"../../RoomBase\";\r\nimport { RoomWallBase } from \"../RoomWallBase\";\r\n\r\n\r\n/**\r\n * 墙上的洞\r\n *\r\n * 这个类接管了墙上的洞的绘制,以便可以直接在视图上操作这个洞(选择到洞,并且拖动) 但是同时我们也需要拿到原始墙的信息,保持材质(或者白墙? 独立材质?)\r\n */\r\n@Factory\r\nexport class RoomHoleBase extends RoomBase\r\n{\r\n @AutoRecord RelevancyWalls: ObjectId[] = [];//关联的墙体列表\r\n\r\n protected _Height = 800;\r\n\r\n constructor() { super(); }\r\n\r\n public get Height()\r\n {\r\n return this._Height;\r\n }\r\n public set Height(value)\r\n {\r\n if (equaln(value, this._Height, 1e-4)) return;\r\n this.WriteAllObjectRecord();\r\n this._Height = value;\r\n this.Update();\r\n }\r\n\r\n //#region -------------------------File-------------------------\r\n //对象从文件中读取数据,初始化自身\r\n protected override _ReadFile(file: CADFiler)\r\n {\r\n let ver = file.Read();\r\n super._ReadFile(file);\r\n this._Height = file.Read();\r\n\r\n if (ver > 1)\r\n {\r\n let count = file.Read();\r\n this.RelevancyWalls.length = 0;\r\n for (let i = 0; i < count; i++)\r\n {\r\n let id = file.ReadObjectId();\r\n if (id)\r\n this.RelevancyWalls.push(id as ObjectId);\r\n }\r\n }\r\n }\r\n //对象将自身数据写入到文件.\r\n override WriteFile(file: CADFiler)\r\n {\r\n file.Write(2);\r\n super.WriteFile(file);\r\n file.Write(this._Height);\r\n\r\n file.Write(this.RelevancyWalls.length);\r\n for (let id of this.RelevancyWalls)\r\n file.WriteObjectId(id);\r\n }\r\n //局部撤销\r\n override ApplyPartialUndo(undoData: CADObject)\r\n {\r\n super.ApplyPartialUndo(undoData);\r\n }\r\n //#endregion\r\n}\r\n","import { Face3, Geometry, LineSegments, Matrix3, Mesh, Object3D, ShapeUtils, Vector2, Vector3 } from \"three\";\r\nimport { arrayPushArray } from \"../../../../../Common/ArrayExt\";\r\nimport { ColorMaterial } from \"../../../../../Common/ColorPalette\";\r\nimport { ObjectSnapMode } from \"../../../../../Editor/ObjectSnapMode\";\r\nimport { Box3Ext } from \"../../../../../Geometry/Box\";\r\nimport { CreatePolylinePath } from \"../../../../../Geometry/CreatePolylinePath\";\r\nimport { AsVector3, equalv2, ZAxis } from \"../../../../../Geometry/GeUtils\";\r\nimport { RenderType } from \"../../../../../GraphicsSystem/RenderType\";\r\nimport { Factory } from \"../../../../CADFactory\";\r\nimport { CADFiler } from \"../../../../CADFiler\";\r\nimport { CADObject } from \"../../../../CADObject\";\r\nimport { Curve } from \"../../../../Entity/Curve\";\r\nimport { Line } from \"../../../../Entity/Line\";\r\nimport { Polyline } from \"../../../../Entity/Polyline\";\r\nimport { LEFT_ROTATE_MTX2 } from \"../../../ParseService/GetCurveParam\";\r\nimport { RoomWallBase } from \"../RoomWallBase\";\r\nimport { RoomWallLine } from \"../RoomWallLine\";\r\nimport { RoomHoleBase } from \"./RoomHoleBase\";\r\n\r\nenum HoleType\r\n{\r\n Door = 1,\r\n Window = 2,\r\n LWindow = 3,\r\n UWindow = 4,\r\n}\r\n\r\n/**\r\n * 折线洞 例如 转角窗 或者U型窗\r\n */\r\n@Factory\r\nexport class RoomHolePolyline extends RoomHoleBase\r\n{\r\n //虽然使用了三维的点,但是我们实际使用的是二维的点 z总是等于0\r\n private _Points: Vector3[] = [];\r\n private _FakerWalls: RoomWallBase[] = [];\r\n public set FakerWalls(_FakerWalls: RoomWallBase[])\r\n {\r\n this._FakerWalls = _FakerWalls;\r\n this.LidCurves = [];\r\n this.Regions = [];\r\n for (let w of this._FakerWalls)\r\n {\r\n arrayPushArray(this.LidCurves, w.LidCurves);\r\n if (w.Region)\r\n this.Regions.push(w.Region);\r\n w.OCSNoClone.elements[14] = this._Matrix.elements[14];\r\n w.Height = this.Height;\r\n\r\n if (w instanceof RoomWallLine && w.Length > 1e-6)\r\n w.UpdateOCSToMinBox();\r\n }\r\n }\r\n get FakerWalls(): RoomWallBase[] { return this._FakerWalls; }\r\n\r\n constructor() { super(); }\r\n\r\n override get BoundingBoxInOCS(): Box3Ext\r\n {\r\n let box = new Box3Ext;\r\n let inv = this.OCSInv;\r\n for (let w of this._FakerWalls)\r\n box.union(w.GetBoundingBoxInMtx(inv));\r\n return box;\r\n return new Box3Ext().copy(this.BoundingBox).applyMatrix4(this.OCSInv);\r\n }\r\n\r\n get Points() { return this._Points.map(p => p.clone().applyMatrix4(this.OCSNoClone)); }\r\n set Points(pts: Vector3[])\r\n {\r\n this.WriteAllObjectRecord();\r\n let inv = this.OCSInv;\r\n this._Points = pts.map(p => p.clone().applyMatrix4(inv).setZ(0));\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 let pts: Vector3[] = [];\r\n\r\n if (this.LidCurves)\r\n {\r\n let line = new Line;\r\n let inv = this.OCSInv;\r\n for (let lid of this.LidCurves)\r\n {\r\n let sp = lid.StartPoint.applyMatrix4(inv).setZ(0);\r\n let ep = lid.EndPoint.applyMatrix4(inv).setZ(0);\r\n\r\n line.StartPoint = sp.clone().applyMatrix4(this.OCSNoClone);\r\n line.EndPoint = sp.setZ(this._Height).applyMatrix4(this.OCSNoClone);\r\n\r\n arrayPushArray(pts, line.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform));\r\n\r\n line.StartPoint = ep.clone().applyMatrix4(this.OCSNoClone);\r\n line.EndPoint = ep.setZ(this._Height).applyMatrix4(this.OCSNoClone);\r\n\r\n arrayPushArray(pts, line.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform));\r\n }\r\n }\r\n\r\n if (this.Regions)\r\n {\r\n for (let region of this.Regions)\r\n {\r\n region.Z = this.Z;//我们拥有它\r\n\r\n arrayPushArray(pts, region.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform));\r\n\r\n region.Z += this._Height;\r\n\r\n arrayPushArray(pts, region.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform));\r\n }\r\n }\r\n return pts;\r\n }\r\n\r\n GetGripPoints(): Vector3[]\r\n {\r\n return this.Points;\r\n }\r\n\r\n MoveGripPoints(ids: number[], vec: Vector3)\r\n {\r\n\r\n }\r\n\r\n GetStretchPoints(): Array\r\n {\r\n return this.Points;\r\n }\r\n\r\n MoveStretchPoints(ids: Array, vec: Vector3)\r\n {\r\n }\r\n\r\n get FakerPoints()\r\n {\r\n let pts: Vector3[] = [];\r\n\r\n for (let w of this._FakerWalls)\r\n pts.push(w.StartPoint);\r\n if (this._FakerWalls.length)\r\n pts.push(this._FakerWalls[this._FakerWalls.length - 1].EndPoint);\r\n\r\n return pts;\r\n }\r\n //使用FakerWalls来更新这个洞的信息\r\n UpdatePoints(checkChange: boolean = false)\r\n {\r\n let pts = this.FakerPoints;\r\n\r\n this.WriteAllObjectRecord();\r\n\r\n if (pts.length === 2)\r\n {\r\n let x = pts[1].clone().sub(pts[0]).normalize();\r\n let z = ZAxis;\r\n let y = z.clone().cross(x).normalize();\r\n this._Matrix.makeBasis(x, y, z).setPosition(pts[0]);\r\n }\r\n else\r\n this._Matrix.setPosition(pts[1]);\r\n\r\n let ocsInv = this.OCSInv;\r\n for (let p of pts) p.applyMatrix4(ocsInv);\r\n\r\n this._Points = pts;\r\n this.Update();\r\n }\r\n\r\n //#region Draw\r\n LidCurves: Curve[];//窗户的开始和结束,我们接管了这个的绘制\r\n Regions: Polyline[];//窗户的区域,我们接管了这个的绘制(包括上面)\r\n\r\n override UpdateDrawGeometry()\r\n {\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 private _EdgeGeometry: Geometry;\r\n get EdgeGeometry()\r\n {\r\n if (this._EdgeGeometry) return this._EdgeGeometry;\r\n\r\n this._EdgeGeometry = new Geometry();\r\n\r\n let inv = this.OCSInv;\r\n\r\n let pts: Vector3[] = this._EdgeGeometry.vertices;\r\n\r\n if (this.LidCurves)\r\n for (let lid of this.LidCurves)\r\n {\r\n //TODO:是否真的需要切换到本地坐标系 (如果我们使用墙体上的曲线,那么需要 如果我们使用本地坐标系计算曲线 则不需要)\r\n let sp = lid.StartPoint.applyMatrix4(inv).setZ(0);\r\n let ep = lid.EndPoint.applyMatrix4(inv).setZ(0);\r\n\r\n pts.push(sp, sp.clone().setZ(this._Height),\r\n ep, ep.clone().setZ(this._Height),\r\n );\r\n }\r\n\r\n if (this.Regions)\r\n {\r\n for (let region of this.Regions)\r\n {\r\n region.Z = this.Z;//我们拥有它\r\n let lined = region.MatrixAlignTo2(this.OCSNoClone);\r\n\r\n if (region.CloseMark && !equalv2(lined.pts[0], lined.pts[lined.pts.length - 1], 1e-4))\r\n {\r\n lined.pts.push(lined.pts[0]);\r\n lined.buls.push(0);\r\n }\r\n\r\n let path = CreatePolylinePath(lined.pts, lined.buls);\r\n let rpts = path.getPoints(30);\r\n\r\n // let wallTopHeight = 0;\r\n // if (this.FakerHoles[0])\r\n // wallTopHeight = this.FakerHoles[0].Position.z + this.FakerHoles[0].Height - this.Position.z;\r\n\r\n for (let i = 1; i < rpts.length; i++)\r\n {\r\n let pre = AsVector3(rpts[i - 1]);\r\n let p = AsVector3(rpts[i]);\r\n\r\n pts.push(pre.setZ(0), p.setZ(0));\r\n pts.push(pre.clone().setZ(this._Height), p.clone().setZ(this._Height));\r\n\r\n // if (wallTopHeight)\r\n // pts.push(pre.clone().setZ(wallTopHeight), p.clone().setZ(wallTopHeight));\r\n }\r\n }\r\n }\r\n\r\n return this._EdgeGeometry;\r\n }\r\n\r\n private _MeshGeometry: Geometry;\r\n get MeshGeometry()\r\n {\r\n if (this._MeshGeometry) return this._MeshGeometry;\r\n\r\n this._MeshGeometry = new Geometry();\r\n\r\n let inv = this.OCSInv;\r\n let geo = this._MeshGeometry;\r\n\r\n if (this.LidCurves)\r\n for (let lid of this.LidCurves)\r\n {\r\n let startIndex = geo.vertices.length;\r\n\r\n //TODO:是否真的需要切换到本地坐标系 (如果我们使用墙体上的曲线,那么需要 如果我们使用本地坐标系计算曲线 则不需要)\r\n let p1 = lid.StartPoint.applyMatrix4(inv).setZ(0);\r\n let p2 = lid.EndPoint.applyMatrix4(inv).setZ(0);\r\n\r\n geo.vertices.push(p1.setZ(0), p2.setZ(0));\r\n geo.vertices.push(p1.clone().setZ(this._Height));\r\n geo.vertices.push(p2.clone().setZ(this._Height));\r\n\r\n let startX = 0;\r\n let endX = lid.Length * 1e-3;\r\n\r\n let startZ = 0;\r\n let endZ = this._Height * 1e-3;\r\n\r\n let normal = p2.clone().sub(p1).normalize();\r\n LEFT_ROTATE_MTX2.applyVector(normal);\r\n\r\n geo.faces.push(\r\n new Face3(startIndex, startIndex + 2, startIndex + 1, normal),\r\n new Face3(startIndex + 1, startIndex + 2, startIndex + 3, normal),\r\n );\r\n\r\n geo.faceVertexUvs[0].push(\r\n [new Vector2(startX, startZ), new Vector2(startX, endZ), new Vector2(endX, startZ)],\r\n [new Vector2(endX, startZ), new Vector2(startX, endZ), new Vector2(endX, endZ)],\r\n );\r\n }\r\n\r\n if (this.Regions)\r\n for (let region of this.Regions)\r\n {\r\n region.OCSNoClone.elements[14] = this._Matrix.elements[14];//我们拥有它\r\n let lined = region.MatrixAlignTo2(this.OCSNoClone);\r\n\r\n if (region.CloseMark && !equalv2(lined.pts[0], lined.pts[lined.pts.length - 1], 1e-4))\r\n {\r\n lined.pts.push(lined.pts[0]);\r\n lined.buls.push(0);\r\n }\r\n\r\n let path = CreatePolylinePath(lined.pts, lined.buls);\r\n let rpts = path.getPoints(30);\r\n\r\n let faces = ShapeUtils.triangulateShape(rpts, []);\r\n let startIndex = geo.vertices.length;\r\n for (let p of rpts) geo.vertices.push(new Vector3(p.x, p.y, 0));\r\n for (let p of rpts) geo.vertices.push(new Vector3(p.x, p.y, this._Height));\r\n\r\n let normal = this.Normal;\r\n let normaln = normal.clone().negate();\r\n for (let i = 0; i < faces.length; i++)\r\n {\r\n let [a, b, c] = faces[i];\r\n geo.faces.push(new Face3(startIndex + a, startIndex + b, startIndex + c, normal));\r\n let uvs = faces[i].map(index => rpts[index].clone().multiplyScalar(1e-3));\r\n geo.faceVertexUvs[0].push(uvs);\r\n\r\n geo.faces.push(new Face3(startIndex + rpts.length + c, startIndex + rpts.length + b, startIndex + rpts.length + a, normaln));\r\n geo.faceVertexUvs[0].push(uvs.concat().reverse().map(v => v.clone()));\r\n }\r\n }\r\n\r\n return this._MeshGeometry;\r\n }\r\n\r\n\r\n InitDrawObject(renderType: RenderType = RenderType.Wireframe): Object3D\r\n {\r\n 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\r\n let obj = new Object3D;\r\n if (renderType === RenderType.Wireframe || renderType === RenderType.Jig)\r\n {\r\n return new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(4));\r\n }\r\n else if (renderType === RenderType.Conceptual)\r\n {\r\n let mesh = new Mesh(this.MeshGeometry, ColorMaterial.GetConceptualMaterial(this.ColorIndex));\r\n let line = new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(this.ColorIndex));\r\n obj.add(mesh, line);\r\n }\r\n return obj;\r\n }\r\n\r\n /**\r\n * 重载:更新绘制的实体\r\n * @param {RenderType} renderType\r\n * @param {Object3D} obj\r\n */\r\n UpdateDrawObject(renderType: RenderType, obj: Object3D)\r\n {\r\n if (renderType === RenderType.Wireframe || renderType === RenderType.Jig)\r\n {\r\n let line = obj as LineSegments;\r\n if (line.geometry !== this.EdgeGeometry)\r\n {\r\n line.geometry.dispose();\r\n line.geometry = this.EdgeGeometry;\r\n }\r\n }\r\n else if (renderType === RenderType.Conceptual)\r\n {\r\n let mesh = obj.children[0] as Mesh;\r\n if (mesh.geometry !== this.MeshGeometry)\r\n {\r\n mesh.geometry.dispose();\r\n mesh.geometry = this.MeshGeometry;\r\n }\r\n\r\n let line = obj.children[1] as LineSegments;\r\n if (line.geometry !== this.EdgeGeometry)\r\n {\r\n line.geometry.dispose();\r\n line.geometry = this.EdgeGeometry;\r\n }\r\n }\r\n else if (renderType === RenderType.Physical)\r\n {\r\n let mesh = obj as Mesh;\r\n if (mesh.geometry !== this.MeshGeometry)\r\n {\r\n mesh.geometry.dispose();\r\n mesh.geometry = this.MeshGeometry;\r\n }\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 LineSegments;\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 //#endregion\r\n\r\n //#region -------------------------File-------------------------\r\n //对象从文件中读取数据,初始化自身\r\n protected override _ReadFile(file: CADFiler)\r\n {\r\n let ver = file.Read();\r\n super._ReadFile(file);\r\n\r\n this._Points.length = 0;\r\n let count = file.Read();\r\n for (let i = 0; i < count; i++)\r\n {\r\n let p = new Vector3(file.Read(), file.Read(), 0);\r\n this._Points.push(p);\r\n }\r\n }\r\n //对象将自身数据写入到文件.\r\n override WriteFile(file: CADFiler)\r\n {\r\n file.Write(1);\r\n super.WriteFile(file);\r\n\r\n file.Write(this._Points.length);\r\n for (let p of this._Points)\r\n {\r\n file.Write(p.x);\r\n file.Write(p.y);\r\n }\r\n }\r\n //局部撤销\r\n ApplyPartialUndo(undoData: CADObject)\r\n {\r\n super.ApplyPartialUndo(undoData);\r\n }\r\n //#endregion\r\n}\r\n","\r\nexport enum WallSnapMode\r\n{\r\n None = 0,\r\n Center = 1,\r\n Out = 2,\r\n All = 3\r\n}\r\n","import { Line as TLine, Mesh, Object3D } from \"three\";\r\nimport { ColorMaterial } from \"../../../../Common/ColorPalette\";\r\nimport { equaln } 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 { CADObject } from \"../../../CADObject\";\r\nimport { Arc } from \"../../../Entity/Arc\";\r\nimport { Curve } from \"../../../Entity/Curve\";\r\nimport { Line } from \"../../../Entity/Line\";\r\nimport { Polyline } from \"../../../Entity/Polyline\";\r\nimport { ObjectId } from \"../../../ObjectId\";\r\nimport { RoomBase } from \"../RoomBase\";\r\nimport { RoomHolePolyline } from \"./Hole/RoomHolePolyline\";\r\nimport { WallSnapMode } from \"./WallSnapMode\";\r\n\r\nexport const CURVE_FACE_TYPE_KEY = \"__CURVE_FACE_TYPE_KEY__\";//用来存储墙体类型的key\r\n\r\nexport enum WallFaceType\r\n{\r\n Inside = 0,//内部\r\n Pillar = 1,//柱子\r\n Outside = 2,//外墙\r\n}\r\n\r\ninterface HoleData\r\n{\r\n StartParam: number;\r\n EndParam: number;\r\n Bottom: number;\r\n Top: number;\r\n}\r\n\r\n@Factory\r\nexport abstract class RoomWallBase extends RoomBase\r\n{\r\n static SnapMode: WallSnapMode = WallSnapMode.All;\r\n\r\n @AutoRecord RelevancyHoles: ObjectId[] = [];\r\n Holes: HoleData[] = [];\r\n\r\n get RealHoles(): HoleData[]\r\n {\r\n return this.Holes.filter(h => h.EndParam > h.StartParam && h.Top > h.Bottom);\r\n }\r\n\r\n protected _Thickness = 120;\r\n protected _Height = 2700;\r\n\r\n get Height()\r\n {\r\n return this._Height;\r\n }\r\n set Height(_newHeight)\r\n {\r\n if (_newHeight <= 0.1 || equaln(this._Height, _newHeight)) return;\r\n this.WriteAllObjectRecord();\r\n this._Height = _newHeight;\r\n this.Update();\r\n }\r\n\r\n get Thickness() { return this._Thickness; }\r\n set Thickness(t: number)\r\n {\r\n if (t <= 0.1 || equaln(this._Thickness, t)) return;\r\n this.WriteAllObjectRecord();\r\n this._Thickness = t;\r\n this.Update();\r\n }\r\n\r\n\r\n //中心轴线\r\n get CenterAxisCurve(): Arc | Line { return; }\r\n\r\n //从曲线更新墙体\r\n UpdateCurve(cu: Curve) { }\r\n\r\n //绘制相关\r\n LeftCurves: (Arc | Line)[];\r\n RightCurves: (Arc | Line)[];\r\n LidCurves: (Arc | Line)[];\r\n Region: Polyline;\r\n\r\n UpdateDrawObjectMaterial(renderType: RenderType, obj: Object3D)\r\n {\r\n if (renderType === RenderType.Wireframe)\r\n {\r\n let l = obj.children[1] 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 //绘制相关_end\r\n\r\n //为了支持F后正确的保持洞\r\n override CopyFrom(obj: CADObject)\r\n {\r\n let bak = this.RelevancyHoles.concat();\r\n super.CopyFrom(obj);\r\n this.RelevancyHoles = bak;\r\n }\r\n\r\n //为了支持F,看起来不大行\r\n // override Clone(): this\r\n // {\r\n // let ent = super.Clone();\r\n // ent.Holes = this.Holes.concat();\r\n // return ent;\r\n // }\r\n\r\n //#region -------------------------File-------------------------\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._Thickness = file.Read();\r\n\r\n if (ver > 1)\r\n {\r\n let count = file.Read();\r\n this.RelevancyHoles.length = 0;\r\n for (let i = 0; i < count; i++)\r\n {\r\n let id = file.ReadObjectId();\r\n if (id)\r\n this.RelevancyHoles.push(id as ObjectId);\r\n }\r\n }\r\n\r\n if (ver > 2)\r\n {\r\n this._Height = file.Read();\r\n }\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(3);\r\n super.WriteFile(file);\r\n file.Write(this._Thickness);\r\n\r\n file.Write(this.RelevancyHoles.length);\r\n for (let id of this.RelevancyHoles)\r\n file.WriteObjectId(id);\r\n\r\n file.Write(this._Height);\r\n }\r\n //#endregion\r\n}\r\n\r\n// @ts-ignore\r\nexport interface RoomWallBase extends RoomBase, Curve { }\r\n\r\nexport const CURVE_MESH_NAMES = [\r\n \"Shape\",\r\n \"GetDrawCount\",\r\n\r\n \"Midpoint\",\r\n \"MidParam\",\r\n \"StartParam\",\r\n \"EndParam\",\r\n \"Area\",\r\n \"Area2\",\r\n \"Length\",\r\n \"IsClose\",\r\n \"IsClockWise\",\r\n\r\n \"GetPointAtParam\",\r\n \"GetPointAtDistance\",\r\n \"GetDistAtParam\",\r\n \"GetDistAtPoint\",\r\n \"GetParamAtPoint\",\r\n \"GetParamAtPoint2\",\r\n \"GetParamAtDist\",\r\n \"GetClosestAtPoint\",\r\n \"GetFistDeriv\",\r\n \"GetFistDerivAngle\",\r\n \"GetSplitCurves\",\r\n \"GetCurveAtParamRange\",\r\n \"GetSplitCurvesByPts\",\r\n \"Extend\",\r\n \"Join\",\r\n \"Reverse\",\r\n \"PtOnCurve\",\r\n \"PtOnCurve2\",\r\n \"PtOnCurve3\",\r\n \"ParamOnCurve\",\r\n \"GetOffsetCurves\",\r\n \"GetClosestPointTo\",\r\n \"IntersectWith\",\r\n \"IntersectWith2\",\r\n \"SplitParamSort\",\r\n\r\n \"SetStartEndPoint\",\r\n];\r\n\r\n// This can live anywhere in your codebase:\r\nexport function applyMixins(derivedCtor: any, constructor: any, methons = CURVE_MESH_NAMES)\r\n{\r\n for (let name of methons)\r\n Object.defineProperty(\r\n derivedCtor.prototype,\r\n name,\r\n Object.getOwnPropertyDescriptor(constructor.prototype, name) ?? Object.getOwnPropertyDescriptor(Curve.prototype, name) ?? Object.create(null)\r\n );\r\n}\r\n","import { BufferGeometry, Face3, Geometry, Line as TLine, LineSegments, MathUtils, Matrix3, Mesh, Object3D, ShapeUtils, Vector2, Vector3 } from \"three\";\r\nimport { HostApplicationServices } from \"../../../../ApplicationServices/HostApplicationServices\";\r\nimport { arrayPushArray } from \"../../../../Common/ArrayExt\";\r\nimport { ColorMaterial } from \"../../../../Common/ColorPalette\";\r\nimport { ObjectSnapMode } from \"../../../../Editor/ObjectSnapMode\";\r\nimport { BufferGeometryUtils } from \"../../../../Geometry/BufferGeometryUtils\";\r\nimport { SubtractRange, Tape } from \"../../../../Geometry/ExtrudeMeshGeomBuilder/ExtrudeEdgeGeometry2\";\r\nimport { SplitArcParams, SplitCurvePoints } from \"../../../../Geometry/ExtrudeMeshGeomBuilder/SplitCurveParams\";\r\nimport { AsVector2, AsVector3, clampRad, equaln, updateGeometry, ZeroVec } from \"../../../../Geometry/GeUtils\";\r\nimport { RenderType } from \"../../../../GraphicsSystem/RenderType\";\r\nimport { Factory } from \"../../../CADFactory\";\r\nimport { CADFiler } from \"../../../CADFiler\";\r\nimport { Arc } from \"../../../Entity/Arc\";\r\nimport { Curve } from \"../../../Entity/Curve\";\r\nimport { Line } from \"../../../Entity/Line\";\r\nimport { Polyline } from \"../../../Entity/Polyline\";\r\nimport { GetArcParam, GetLineParam } from \"../../ParseService/GetCurveParam\";\r\nimport { applyMixins, CURVE_MESH_NAMES, RoomWallBase } from \"./RoomWallBase\";\r\nimport { WallSnapMode } from \"./WallSnapMode\";\r\n\r\nconst SnapTempLine = new Line;\r\n@Factory\r\nexport class RoomWallArc extends RoomWallBase\r\n{\r\n constructor(_Center: Vector3 = new Vector3(),\r\n private _Radius = 0.1,\r\n private _StartAngle = 0.1,\r\n private _EndAngle = 0.1,\r\n /**\r\n * 曲线为顺时针\r\n */\r\n private _Clockwise = true,\r\n _Thickness = 120\r\n\r\n )\r\n {\r\n super();\r\n this._Matrix.setPosition(_Center);\r\n this._StartAngle = clampRad(_StartAngle);\r\n this._EndAngle = clampRad(_EndAngle);\r\n this.Thickness = _Thickness;\r\n }\r\n\r\n //中心轴线\r\n override get CenterAxisCurve(): Arc | Line\r\n {\r\n if (this._Radius < (this.Thickness * 0.6) || Math.abs(this.Bul) < 0.0015)\r\n return new Line(this.StartPoint, this.EndPoint);\r\n let arc = new Arc(\r\n ZeroVec,\r\n this._Radius,\r\n this._StartAngle,\r\n this._EndAngle,\r\n this._Clockwise\r\n );\r\n arc.OCSNoClone.copy(this.OCSNoClone);\r\n return arc;\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 let pts = [];\r\n pts = pts.concat(Arc.prototype.GetObjectSnapPoints.call(this, snapMode, pickPoint, lastPoint, viewXform));\r\n const CurveSnap = (curve: Curve) =>\r\n {\r\n let bakZ = curve.Z;\r\n //底部线\r\n arrayPushArray(pts, curve.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform));\r\n\r\n //顶部线\r\n curve.Z += this._Height;\r\n arrayPushArray(pts, curve.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform));\r\n curve.Z = bakZ;\r\n\r\n let spep = [curve.StartPoint, curve.EndPoint];\r\n for (let p of spep)\r\n {\r\n let l = new Line(p, p.clone().setZ(p.z + this._Height));\r\n arrayPushArray(pts, l.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform));\r\n }\r\n };\r\n\r\n if (this.LeftCurves && (RoomWallBase.SnapMode & WallSnapMode.Out) > 0)\r\n {\r\n this.LeftCurves.forEach(CurveSnap);\r\n this.RightCurves.forEach(CurveSnap);\r\n this.LidCurves.forEach(CurveSnap);\r\n }\r\n\r\n return pts;\r\n }\r\n\r\n GetGripPoints(): Array\r\n {\r\n let pts = [\r\n this.StartPoint,\r\n this.GetPointAtParam(0.5),\r\n this.EndPoint,\r\n this.Center.clone(),\r\n ];\r\n let count = pts.length;\r\n\r\n for (let i = 0; i < count; i++)\r\n pts.push(pts[i].clone().setZ(pts[i].z + this._Height));\r\n return pts;\r\n }\r\n\r\n MoveGripPoints(indexList: Array, vec: Vector3)\r\n {\r\n if (indexList.length > 0)\r\n {\r\n let index = indexList[0];\r\n if (index >= 4) index -= 4;\r\n Arc.prototype.MoveGripPoints.call(this, [index], vec);\r\n }\r\n }\r\n\r\n GetStretchPoints(): Vector3[]\r\n {\r\n return Arc.prototype.GetStretchPoints.call(this);\r\n }\r\n MoveStretchPoints(indexList: number[], vec: Vector3): void\r\n {\r\n return Arc.prototype.MoveStretchPoints.call(this, indexList, vec);\r\n }\r\n\r\n //#region //绘制\r\n\r\n\r\n UpdateDrawGeometry()\r\n {\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\r\n private _EdgeGeometry: BufferGeometry;\r\n private _MeshGeometry: Geometry;\r\n get EdgeGeometry()\r\n {\r\n if (this._EdgeGeometry) return this._EdgeGeometry;\r\n\r\n for (let hole of this.Holes)\r\n if (hole.StartParam > hole.EndParam)\r\n [hole.StartParam, hole.EndParam] = [hole.EndParam, hole.StartParam];\r\n\r\n let pts: Vector3[];\r\n if (!this.LeftCurves)\r\n {\r\n let sign = this._Clockwise ? -1 : 1;\r\n\r\n if (this.Length > 0.1)\r\n {\r\n let left = new Arc(ZeroVec, this._Radius - sign * this.Thickness * 0.5, this._StartAngle, this._EndAngle, this._Clockwise);\r\n let right = new Arc(ZeroVec, this._Radius + sign * this.Thickness * 0.5, this._StartAngle, this._EndAngle, this._Clockwise);\r\n\r\n let leftPts = left.Shape.getPoints(this.GetDrawCount()).map(AsVector3);\r\n let rightPts = right.Shape.getPoints(this.GetDrawCount()).map(AsVector3);\r\n\r\n let leftPts2 = leftPts.map(p => p.clone().setZ(this._Height));\r\n let rightPts2 = rightPts.map(p => p.clone().setZ(this._Height));\r\n\r\n pts = [\r\n leftPts[0], leftPts[0].clone().setZ(this._Height),\r\n leftPts[leftPts.length - 1], leftPts[leftPts.length - 1].clone().setZ(this._Height),\r\n\r\n rightPts[0], rightPts[0].clone().setZ(this._Height),\r\n rightPts[rightPts.length - 1], rightPts[rightPts.length - 1].clone().setZ(this._Height),\r\n\r\n leftPts.shift()];\r\n\r\n for (let p of leftPts) pts.push(p, p);\r\n rightPts.reverse();\r\n for (let p of rightPts) pts.push(p, p);\r\n pts.push(pts[0]);\r\n\r\n //顶部\r\n pts.push(leftPts2.shift());\r\n for (let p of leftPts2) pts.push(p, p);\r\n rightPts2.reverse();\r\n for (let p of rightPts2) pts.push(p, p);\r\n }\r\n else\r\n pts = [];\r\n }\r\n else\r\n {\r\n pts = [];\r\n let inv = this.OCSInv;\r\n const DrawCurve = (curve: Curve, _leftRanges: [number, number][], _rightRanges: [number, number][]) =>\r\n {\r\n if (curve instanceof Line)\r\n {\r\n let p1 = curve.StartPoint.applyMatrix4(inv);\r\n let p2 = curve.EndPoint.applyMatrix4(inv);\r\n pts.push(p1, p2);\r\n\r\n for (let range of _leftRanges)\r\n pts.push(p1.clone().setZ(range[0]), p1.clone().setZ(range[1]));\r\n for (let range of _rightRanges)\r\n pts.push(p2.clone().setZ(range[0]), p2.clone().setZ(range[1]));\r\n\r\n pts.push(p1.clone().setZ(this._Height), p2.clone().setZ(this._Height));\r\n }\r\n else//arc\r\n {\r\n let cpts = curve.Shape.getPoints(this.GetDrawCount()).map(AsVector3);\r\n let topPts = cpts.map(p => p.clone().setZ(this._Height));\r\n\r\n //底部\r\n pts.push(cpts[0]);\r\n for (let i = 1; i < cpts.length - 1; i++)\r\n {\r\n let p = cpts[i];\r\n pts.push(p, p);\r\n }\r\n pts.push(cpts[cpts.length - 1]);\r\n\r\n //顶部\r\n pts.push(topPts[0]);\r\n for (let i = 1; i < topPts.length - 1; i++)\r\n {\r\n let p = topPts[i];\r\n pts.push(p, p);\r\n }\r\n pts.push(topPts[topPts.length - 1]);\r\n\r\n //竖线\r\n for (let range of _leftRanges)\r\n pts.push(cpts[0].clone().setZ(range[0]), cpts[0].clone().setZ(range[1]));\r\n for (let range of _rightRanges)\r\n pts.push(cpts[cpts.length - 1].clone().setZ(range[0]), cpts[cpts.length - 1].clone().setZ(range[1]));\r\n }\r\n };\r\n\r\n let lidRanges: [number, number][] = [[0, this._Height]];\r\n let leftRanges = lidRanges;\r\n let rightRanges = lidRanges;\r\n for (let hole of this.Holes)\r\n {\r\n if (equaln(hole.StartParam, 0))\r\n {\r\n let newLeftRanges = [];\r\n for (let range of leftRanges)\r\n arrayPushArray(newLeftRanges, SubtractRange(range[0], range[1], hole.Bottom, hole.Top, 1e5));\r\n leftRanges = newLeftRanges;\r\n }\r\n\r\n if (equaln(hole.EndParam, 1))\r\n {\r\n let newRightRanges = [];\r\n for (let range of rightRanges)\r\n arrayPushArray(newRightRanges, SubtractRange(range[0], range[1], hole.Bottom, hole.Top, 1e5));\r\n rightRanges = newRightRanges;\r\n }\r\n }\r\n\r\n for (let i = 0; i < this.LeftCurves.length; i++)\r\n {\r\n let curve = this.LeftCurves[i];\r\n DrawCurve(curve, i === 0 ? leftRanges : lidRanges, (i === this.LeftCurves.length - 1) ? rightRanges : lidRanges);\r\n }\r\n for (let i = 0; i < this.RightCurves.length; i++)\r\n {\r\n let curve = this.RightCurves[i];\r\n DrawCurve(curve, i === 0 ? leftRanges : lidRanges, (i === this.RightCurves.length - 1) ? rightRanges : lidRanges);\r\n }\r\n for (let i = 0; i < this.LidCurves.length; i++)\r\n {\r\n let curve = this.LidCurves[i];\r\n DrawCurve(curve, lidRanges, lidRanges);\r\n }\r\n }\r\n\r\n this._EdgeGeometry = BufferGeometryUtils.CreateFromPts(pts);\r\n return this._EdgeGeometry;\r\n }\r\n get MeshGeometry()\r\n {\r\n if (this._MeshGeometry) return this._MeshGeometry;\r\n\r\n this._MeshGeometry = new Geometry;\r\n\r\n let geo = this._MeshGeometry;\r\n let normal = this.Normal;\r\n let normaln = normal.clone().negate();\r\n let center = this.Center;\r\n let inv = this.OCSInv;\r\n\r\n let thisParam = new GetArcParam(this as unknown as Arc);\r\n\r\n const BuildLeftFace = (curve: Curve) =>\r\n {\r\n \r\n\r\n if (curve instanceof Line)\r\n {\r\n let tapes = [new Tape(0, 1, 0, this._Height)];\r\n let curveParam = new GetLineParam(curve);\r\n let holes = this.RealHoles;\r\n if (holes.length)\r\n {\r\n for (let hole of holes)\r\n {\r\n let start = equaln(hole.StartParam, 0) ? 0 : MathUtils.clamp(curveParam.GetParamAtPoint(thisParam.GetPointAtParam(hole.StartParam)), 0, 1);\r\n let end = equaln(hole.EndParam, 1) ? 1 : MathUtils.clamp(curveParam.GetParamAtPoint(thisParam.GetPointAtParam(hole.EndParam)), 0, 1);\r\n if (start > end) [start, end] = [end, start];\r\n let holeTape = new Tape(start, end, hole.Bottom, hole.Top);\r\n\r\n let newTapes: Tape[] = [];\r\n for (let tape of tapes)\r\n arrayPushArray(newTapes, tape.Clip(holeTape));\r\n\r\n tapes = newTapes;\r\n }\r\n }\r\n\r\n for (let tape of tapes)\r\n {\r\n let startIndex = geo.vertices.length;\r\n\r\n let p1 = curveParam.GetPointAtParam(tape.start).applyMatrix4(inv);\r\n let p2 = curveParam.GetPointAtParam(tape.end).applyMatrix4(inv);\r\n geo.vertices.push(p1.setZ(tape.bottom), p2.setZ(tape.bottom));\r\n geo.vertices.push(p1.clone().setZ(tape.top));\r\n geo.vertices.push(p2.clone().setZ(tape.top));\r\n\r\n let startX = curveParam.Length * 1e-3 * tape.start;\r\n let endX = curveParam.Length * 1e-3 * tape.end;\r\n\r\n let startZ = tape.bottom * 1e-3;\r\n let endZ = tape.top * 1e-3;\r\n\r\n geo.faces.push(\r\n new Face3(startIndex, startIndex + 2, startIndex + 1, curveParam.LeftDir),\r\n new Face3(startIndex + 1, startIndex + 2, startIndex + 3, curveParam.LeftDir),\r\n );\r\n\r\n geo.faceVertexUvs[0].push(\r\n [new Vector2(startX, startZ), new Vector2(startX, endZ), new Vector2(endX, startZ)],\r\n [new Vector2(endX, startZ), new Vector2(startX, endZ), new Vector2(endX, endZ)],\r\n );\r\n }\r\n }\r\n else\r\n {\r\n let arc = curve as Arc;\r\n\r\n let tapes = [new Tape(0, 1, 0, this._Height)];\r\n let curveParam = new GetArcParam(arc);\r\n\r\n let holes = this.RealHoles;\r\n if (holes.length)\r\n {\r\n for (let hole of holes)\r\n {\r\n let start = equaln(hole.StartParam, 0) ? 0 : MathUtils.clamp(curveParam.GetParamAtPoint(thisParam.GetPointAtParam(hole.StartParam)), 0, 1);\r\n let end = equaln(hole.EndParam, 1) ? 1 : MathUtils.clamp(curveParam.GetParamAtPoint(thisParam.GetPointAtParam(hole.EndParam)), 0, 1);\r\n if (start === end) continue;\r\n if (start > end) [start, end] = [end, start];\r\n let holeTape = new Tape(start, end, hole.Bottom, hole.Top);\r\n\r\n let newTapes: Tape[] = [];\r\n for (let tape of tapes)\r\n arrayPushArray(newTapes, tape.Clip(holeTape));\r\n\r\n tapes = newTapes;\r\n }\r\n }\r\n\r\n if (this.Holes.length)\r\n {\r\n let length = arc.Length;\r\n let params: number[] = SplitArcParams(arc);\r\n\r\n //需要合并顶点,所以建立一个map\r\n let cacheIndex: { [key: string]: number; } = {};\r\n const GetIndex = (param: number, z: number) =>\r\n {\r\n let key = `${param}_${z}`;\r\n let index = cacheIndex[key];\r\n if (index === undefined)\r\n {\r\n index = geo.vertices.length;\r\n cacheIndex[key] = index;\r\n geo.vertices.push(curveParam.GetPointAtParam(param).applyMatrix4(inv).setZ(z));\r\n }\r\n return index;\r\n };\r\n\r\n for (let tapeaaaaa of tapes)\r\n {\r\n for (let tape of tapeaaaaa.Split(params))\r\n {\r\n let p1Index = GetIndex(tape.start, tape.bottom);\r\n let p2Index = GetIndex(tape.end, tape.bottom);\r\n let p3Index = GetIndex(tape.start, tape.top);\r\n let p4Index = GetIndex(tape.end, tape.top);\r\n\r\n let startX = length * 1e-3 * tape.start;\r\n let endX = length * 1e-3 * tape.end;\r\n\r\n let startZ = tape.bottom * 1e-3;\r\n let endZ = tape.top * 1e-3;\r\n\r\n let dir = arc.GetPointAtParam((tape.start + tape.end) * 0.5).applyMatrix4(inv).sub(center).subScalar(arc.Radius);\r\n\r\n geo.faces.push(\r\n new Face3(p1Index, p3Index, p2Index, dir),\r\n new Face3(p2Index, p3Index, p4Index, dir),\r\n );\r\n\r\n geo.faceVertexUvs[0].push(\r\n [new Vector2(startX, startZ), new Vector2(startX, endZ), new Vector2(endX, startZ)],\r\n [new Vector2(endX, startZ), new Vector2(startX, endZ), new Vector2(endX, endZ)],\r\n );\r\n }\r\n }\r\n }\r\n else\r\n {\r\n let startIndex = geo.vertices.length;\r\n\r\n let pts = curve.Shape.getPoints(this.GetDrawCount()).map(AsVector3);\r\n let pts2 = pts.map(p => p.clone().setZ(this._Height));\r\n arrayPushArray(geo.vertices, pts);\r\n arrayPushArray(geo.vertices, pts2);\r\n\r\n let count = pts.length;\r\n let length = curve.Length * 1e-3;\r\n let divLength = length / pts.length;\r\n for (let i = 1; i < count; i++)\r\n {\r\n let pre = i - 1;\r\n\r\n let preX = pre * divLength;\r\n let nowX = i * divLength;\r\n\r\n let dir = pts[i].clone().add(pts[pre]).multiplyScalar(0.5).sub(center).subScalar(arc.Radius);\r\n geo.faces.push(\r\n new Face3(startIndex + i, startIndex + pre, startIndex + pre + count, dir),\r\n new Face3(startIndex + i + count, startIndex + i, startIndex + pre + count, dir),\r\n );\r\n geo.faceVertexUvs[0].push(\r\n [new Vector2(nowX, 0), new Vector2(preX, 0), new Vector2(preX, this._Height * 1e-3)],\r\n [new Vector2(nowX, this._Height * 1e-3), new Vector2(nowX, 0), new Vector2(preX, this._Height * 1e-3)],\r\n );\r\n }\r\n }\r\n }\r\n };\r\n const BuildRightFace = (curve: Curve) =>\r\n {\r\n \r\n\r\n if (curve instanceof Line)\r\n {\r\n let tapes = [new Tape(0, 1, 0, this._Height)];\r\n let curveParam = new GetLineParam(curve);\r\n\r\n let holes = this.RealHoles;\r\n if (holes.length)\r\n {\r\n for (let hole of holes)\r\n {\r\n let start = equaln(hole.StartParam, 0) ? 0 : curveParam.GetParamAtPoint(thisParam.GetPointAtParam(hole.StartParam));\r\n let end = equaln(hole.EndParam, 1) ? 1 : curveParam.GetParamAtPoint(thisParam.GetPointAtParam(hole.EndParam));\r\n if (start > end) [start, end] = [end, start];\r\n let holeTape = new Tape(start, end, hole.Bottom, hole.Top);\r\n\r\n let newTapes: Tape[] = [];\r\n for (let tape of tapes)\r\n arrayPushArray(newTapes, tape.Clip(holeTape));\r\n\r\n tapes = newTapes;\r\n }\r\n }\r\n\r\n for (let tape of tapes)\r\n {\r\n let startIndex = geo.vertices.length;\r\n\r\n let p1 = curveParam.GetPointAtParam(tape.start).applyMatrix4(inv);\r\n let p2 = curveParam.GetPointAtParam(tape.end).applyMatrix4(inv);\r\n geo.vertices.push(p1.setZ(tape.bottom), p2.setZ(tape.bottom));\r\n geo.vertices.push(p1.clone().setZ(tape.top));\r\n geo.vertices.push(p2.clone().setZ(tape.top));\r\n\r\n let startX = curveParam.Length * 1e-3 * tape.start;\r\n let endX = curveParam.Length * 1e-3 * tape.end;\r\n\r\n let startZ = tape.bottom * 1e-3;\r\n let endZ = tape.top * 1e-3;\r\n\r\n geo.faces.push(\r\n new Face3(startIndex, startIndex + 1, startIndex + 2, curveParam.RightDir),\r\n new Face3(startIndex + 1, startIndex + 3, startIndex + 2, curveParam.RightDir),\r\n );\r\n\r\n geo.faceVertexUvs[0].push(\r\n [new Vector2(startX, startZ), new Vector2(endX, startZ), new Vector2(startX, endZ)],\r\n [new Vector2(endX, startZ), new Vector2(endX, endZ), new Vector2(startX, endZ)],\r\n );\r\n }\r\n }\r\n else\r\n {\r\n let arc = curve as Arc;\r\n\r\n let tapes = [new Tape(0, 1, 0, this._Height)];\r\n let curveParam = new GetArcParam(arc);\r\n\r\n let holes = this.RealHoles;\r\n if (holes.length)\r\n {\r\n for (let hole of holes)\r\n {\r\n let start = equaln(hole.StartParam, 0) ? 0 : curveParam.GetParamAtPoint(thisParam.GetPointAtParam(hole.StartParam));\r\n let end = equaln(hole.EndParam, 1) ? 1 : curveParam.GetParamAtPoint(thisParam.GetPointAtParam(hole.EndParam));\r\n if (start > end) [start, end] = [end, start];\r\n let holeTape = new Tape(start, end, hole.Bottom, hole.Top);\r\n\r\n let newTapes: Tape[] = [];\r\n for (let tape of tapes)\r\n arrayPushArray(newTapes, tape.Clip(holeTape));\r\n\r\n tapes = newTapes;\r\n }\r\n\r\n let length = arc.Length;\r\n let params: number[] = SplitArcParams(arc);\r\n\r\n //需要合并顶点,所以建立一个map\r\n let cacheIndex: { [key: string]: number; } = {};\r\n const GetIndex = (param: number, z: number) =>\r\n {\r\n let key = `${param}_${z}`;\r\n let index = cacheIndex[key];\r\n if (index === undefined)\r\n {\r\n index = geo.vertices.length;\r\n cacheIndex[key] = index;\r\n geo.vertices.push(curveParam.GetPointAtParam(param).applyMatrix4(inv).setZ(z));\r\n }\r\n return index;\r\n };\r\n\r\n for (let tapeaaaaa of tapes)\r\n {\r\n for (let tape of tapeaaaaa.Split(params))\r\n {\r\n let p1Index = GetIndex(tape.start, tape.bottom);\r\n let p2Index = GetIndex(tape.end, tape.bottom);\r\n let p3Index = GetIndex(tape.start, tape.top);\r\n let p4Index = GetIndex(tape.end, tape.top);\r\n\r\n let startX = length * 1e-3 * tape.start;\r\n let endX = length * 1e-3 * tape.end;\r\n\r\n let startZ = tape.bottom * 1e-3;\r\n let endZ = tape.top * 1e-3;\r\n\r\n let dir = arc.GetPointAtParam((tape.start + tape.end) * 0.5).applyMatrix4(inv).sub(center).subScalar(arc.Radius).negate();\r\n\r\n geo.faces.push(\r\n new Face3(p1Index, p2Index, p3Index, dir),\r\n new Face3(p2Index, p4Index, p3Index, dir),\r\n );\r\n\r\n geo.faceVertexUvs[0].push(\r\n [new Vector2(startX, startZ), new Vector2(endX, startZ), new Vector2(startX, endZ)],\r\n [new Vector2(endX, startZ), new Vector2(endX, endZ), new Vector2(startX, endZ)],\r\n );\r\n }\r\n }\r\n }\r\n else\r\n {\r\n let arc = curve as Arc;\r\n let startIndex = geo.vertices.length;\r\n\r\n let pts = curve.Shape.getPoints(this.GetDrawCount()).map(AsVector3);\r\n let pts2 = pts.map(p => p.clone().setZ(this._Height));\r\n arrayPushArray(geo.vertices, pts);\r\n arrayPushArray(geo.vertices, pts2);\r\n\r\n let length = curve.Length * 1e-3;\r\n let divLength = length / pts.length;\r\n\r\n let count = pts.length;\r\n for (let i = 1; i < count; i++)\r\n {\r\n let pre = i - 1;\r\n\r\n let preX = pre * divLength;\r\n let nowX = i * divLength;\r\n\r\n let dir = pts[i].clone().add(pts[pre]).multiplyScalar(0.5).sub(center).subScalar(arc.Radius);\r\n geo.faces.push(\r\n new Face3(startIndex + pre, startIndex + i, startIndex + pre + count, dir),\r\n new Face3(startIndex + i, startIndex + i + count, startIndex + pre + count, dir),\r\n );\r\n geo.faceVertexUvs[0].push(\r\n [new Vector2(preX, 0), new Vector2(nowX, 0), new Vector2(preX, this._Height * 1e-3)],\r\n [new Vector2(nowX, 0), new Vector2(nowX, this._Height * 1e-3), new Vector2(preX, this._Height * 1e-3)],\r\n );\r\n }\r\n }\r\n }\r\n };\r\n const BuildRegionFace = (region: Polyline) =>\r\n {\r\n let ocsInv = this.OCSInv;\r\n let pts = SplitCurvePoints(region).map(p => AsVector2(p.applyMatrix4(ocsInv)));\r\n\r\n let faces = ShapeUtils.triangulateShape(pts, []);\r\n\r\n //top\r\n let startIndex = geo.vertices.length;\r\n for (let p of pts) geo.vertices.push(new Vector3(p.x, p.y, this._Height));\r\n if (HostApplicationServices.DrawWallBottomFace) for (let p of pts) geo.vertices.push(new Vector3(p.x, p.y, 0));\r\n\r\n for (let i = 0; i < faces.length; i++)\r\n {\r\n let [a, b, c] = faces[i];\r\n geo.faces.push(new Face3(startIndex + a, startIndex + b, startIndex + c, normal));\r\n let uvs = faces[i].map(index => pts[index].clone());\r\n geo.faceVertexUvs[0].push(uvs);\r\n\r\n if (HostApplicationServices.DrawWallBottomFace)\r\n {\r\n geo.faces.push(new Face3(startIndex + pts.length + c, startIndex + pts.length + b, startIndex + pts.length + a, normaln));\r\n geo.faceVertexUvs[0].push(uvs.concat().reverse().map(v => v.clone()));\r\n }\r\n }\r\n\r\n // //todo:为了优化显示 我们可以把侧面也画出来 (应该使用和酷家乐一样的技术 在视线对准时,隐藏整个墙)\r\n // let d = this._EndPoint.clone().sub(this._StartPoint).normalize();\r\n // let pre = pts[pts.length - 1];\r\n // let tempV = new Vector3;\r\n // for (let i = 0; i < pts.length; i++)\r\n // {\r\n // let p = pts[i];\r\n // tempV.set(p.x - pre.x, p.y - pre.y, 0).normalize();\r\n // //todo:盖子会重复绘制\r\n // if (!isParallelTo(d, tempV, 1e-3) && !isPerpendicularityTo(d, tempV, 1e-3))\r\n // {\r\n // startIndex = geo.vertices.length;\r\n // geo.vertices.push(AsVector3(pre), AsVector3(p));\r\n // geo.vertices.push(AsVector3(pre).setZ(this._Height));\r\n // geo.vertices.push(AsVector3(p).setZ(this._Height));\r\n\r\n // LEFT_ROTATE_MTX2.applyVector(tempV);\r\n // tempV.negate();\r\n\r\n // let n = tempV.clone();\r\n\r\n // geo.faces.push(\r\n // new Face3(startIndex, startIndex + 1, startIndex + 2, n),\r\n // new Face3(startIndex + 1, startIndex + 3, startIndex + 2, n),\r\n // );\r\n\r\n // geo.faceVertexUvs[0].push(\r\n // [new Vector2(), new Vector2(0, 0), new Vector2(0, 0)],\r\n // [new Vector2(0, 0), new Vector2(0, 0), new Vector2(0, 0)],\r\n // );\r\n // }\r\n\r\n // pre = p;\r\n // }\r\n };\r\n\r\n if (!this.LeftCurves)\r\n {\r\n let sign = this._Clockwise ? -1 : 1;\r\n if (this.Length > 0.1)\r\n {\r\n let left = new Arc(ZeroVec, this._Radius - sign * this.Thickness * 0.5, this._StartAngle, this._EndAngle, this._Clockwise);\r\n let right = new Arc(ZeroVec, this._Radius + sign * this.Thickness * 0.5, this._StartAngle, this._EndAngle, this._Clockwise);\r\n left.OCS = this.OCSNoClone;\r\n right.OCS = this.OCSNoClone;\r\n\r\n BuildLeftFace(left);\r\n BuildRightFace(right);\r\n let lid1 = new Line(left.StartPoint, right.StartPoint);\r\n let lid2 = new Line(right.EndPoint, left.EndPoint);\r\n BuildRightFace(lid1);\r\n BuildRightFace(lid2);\r\n\r\n let region = Polyline.Combine([left, lid2, right, lid1]);\r\n if (region) BuildRegionFace(region);\r\n }\r\n }\r\n else\r\n {\r\n this.LeftCurves.forEach(BuildLeftFace);\r\n this.RightCurves.forEach(BuildRightFace);\r\n this.LidCurves.forEach(BuildRightFace);\r\n\r\n if (this.Region) BuildRegionFace(this.Region);\r\n }\r\n\r\n geo.computeVertexNormals();\r\n geo.verticesNeedUpdate = true;\r\n geo.uvsNeedUpdate = true;\r\n\r\n return this._MeshGeometry;\r\n }\r\n\r\n InitDrawObject(renderType: RenderType = RenderType.Wireframe): Object3D\r\n {\r\n if (renderType === RenderType.Physical)\r\n {\r\n let mesh = new Mesh(this.MeshGeometry, this.MeshMaterial);\r\n mesh.castShadow = true;\r\n return mesh;\r\n }\r\n\r\n let obj = new Object3D;\r\n if (renderType === RenderType.Wireframe || renderType === RenderType.Jig)\r\n {\r\n let pts = this.Shape.getPoints(this.GetDrawCount()).map(AsVector3);\r\n let geo = new BufferGeometry().setFromPoints(pts);\r\n let axisLine = new TLine(geo, ColorMaterial.GetWallLineMtl(1));\r\n axisLine.computeLineDistances();\r\n obj.add(axisLine);\r\n\r\n let outline = new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(this.ColorIndex));\r\n obj.add(outline);\r\n }\r\n else if (renderType === RenderType.Conceptual)\r\n {\r\n let mesh = new Mesh(this.MeshGeometry, ColorMaterial.GetConceptualMaterial(this.ColorIndex));\r\n obj.add(mesh);\r\n\r\n let outline = new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(this.ColorIndex));\r\n obj.add(outline);\r\n }\r\n return obj;\r\n }\r\n\r\n /**\r\n * 重载:更新绘制的实体\r\n * @param {RenderType} renderType\r\n * @param {Object3D} obj\r\n */\r\n UpdateDrawObject(renderType: RenderType, obj: Object3D)\r\n {\r\n if (renderType === RenderType.Wireframe || renderType === RenderType.Jig)\r\n {\r\n let [axisLine, outline] = obj.children as [TLine, TLine];\r\n\r\n let pts = this.Shape.getPoints(this.GetDrawCount()).map(AsVector3);\r\n if (!BufferGeometryUtils.UpdatePts(axisLine.geometry, pts))\r\n updateGeometry(axisLine, BufferGeometryUtils.CreateFromPts(pts));\r\n axisLine.computeLineDistances();\r\n\r\n // if (this._Radius <= this.Thickness * 0.5)\r\n // return; //会退化成直线 所以不return了\r\n\r\n if (outline.geometry !== this.EdgeGeometry)\r\n {\r\n outline.geometry.dispose();\r\n outline.geometry = this.EdgeGeometry;\r\n }\r\n }\r\n else if (renderType === RenderType.Conceptual)\r\n {\r\n let mesh = obj.children[0] as Mesh;\r\n if (mesh.geometry !== this.MeshGeometry)\r\n {\r\n mesh.geometry.dispose();\r\n mesh.geometry = this.MeshGeometry;\r\n }\r\n\r\n let outline = obj.children[1] as LineSegments;\r\n if (outline.geometry !== this.EdgeGeometry)\r\n {\r\n outline.geometry.dispose();\r\n outline.geometry = this.EdgeGeometry;\r\n }\r\n }\r\n else if (renderType === RenderType.Physical)\r\n {\r\n let mesh = obj as Mesh;\r\n if (mesh.geometry !== this.MeshGeometry)\r\n {\r\n mesh.geometry.dispose();\r\n mesh.geometry = this.MeshGeometry;\r\n }\r\n }\r\n }\r\n //#endregion\r\n\r\n //#region -------------------------File-------------------------\r\n //对象应该实现dataIn和DataOut的方法,为了对象的序列化和反序列化\r\n\r\n //对象从文件中读取数据,初始化自身\r\n protected override _ReadFile(file: CADFiler)\r\n {\r\n super._ReadFile(file);\r\n let ver = file.Read();\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 //对象将自身数据写入到文件.\r\n override 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\nconst ARC_MEHTON_NAMES = [\r\n \"Center\",\r\n \"Normal\",\r\n \"BoundingBoxPtsInOCS\",\r\n \"Radius\",\r\n \"IsClockWise\",\r\n \"StartAngle\",\r\n \"EndAngle\",\r\n\r\n \"StartPoint\",\r\n \"EndPoint\",\r\n\r\n \"ApplyScaleMatrix\",\r\n \"ApplyMirrorMatrix\",\r\n\r\n \"GetParamAtAngle\",\r\n \"GetParamAtAngle2\",\r\n \"GetAngleAtParam\",\r\n \"GetAngleAtPoint\",\r\n\r\n \"AllAngle\",\r\n \"Bul\",\r\n\r\n \"ComputeAnlge\",\r\n \"ParseFromBul\",\r\n \"FromThreePoint\",\r\n];\r\n\r\n//@ts-ignore\r\nexport interface RoomWallArc extends RoomWallBase, Arc { }\r\napplyMixins(RoomWallArc, Arc, ARC_MEHTON_NAMES.concat(CURVE_MESH_NAMES));\r\n","import Flatbush from 'flatbush';\r\nimport { Vector2, Vector3 } from 'three';\r\nimport { CURVE_FACE_TYPE_KEY, RoomWallBase, WallFaceType } from \"../../Entity/Wall/RoomWallBase\";\r\nimport { CreateGetCurveParam, GetCurveParam } from \"../GetCurveParam\";\r\nimport { InsertSortedIndex, Intersection } from '../RangeUtils';\r\n\r\ntype Range = [number, number];\r\n\r\nexport interface WallRange extends Range\r\n{\r\n left: WallFaceType;\r\n right: WallFaceType;\r\n}\r\n\r\nexport class RoomWallPlaceIHoleHelper\r\n{\r\n protected _ParamGets: GetCurveParam[] = [];\r\n protected _ParamRanges: ([number, number][])[] = [];\r\n protected _Fb: Flatbush;\r\n\r\n constructor(public _Walls: RoomWallBase[])\r\n {\r\n this.GenFb();\r\n this.ParseWallCanPlaceHoleRange();\r\n }\r\n\r\n FindBestPlace(p: Vector3)\r\n {\r\n let ids = this._Fb.neighbors(p.x, p.y, 50, 200);//50个 200距离\r\n\r\n let minDist = Infinity;\r\n let minId = -1;\r\n let cpParam: number;\r\n for (let id of ids)\r\n {\r\n if (this._ParamRanges[id].length === 0)\r\n continue; //没有可以放置的区域\r\n\r\n let paramGet = this._ParamGets[id];\r\n let param = paramGet.GetParamAtPoint(p);\r\n if (param < 0 || param > 1) continue;//不在墙上\r\n let cp = paramGet.GetPointAtParam(param);\r\n\r\n if (p.z < cp.z - 1 || p.z > cp.z + 2800) continue;//线在上墙就行\r\n\r\n let dist = Vector2.prototype.distanceToSquared.call(cp, p);\r\n if (dist < minDist)\r\n {\r\n minDist = dist;\r\n minId = id;\r\n cpParam = param;\r\n }\r\n }\r\n if (minId === -1 || minDist > 90000)//300*300=90000\r\n return;\r\n\r\n let range = FindBestRange(cpParam, this._ParamRanges[minId]) as unknown as WallRange;\r\n if (range)\r\n return {\r\n wall: this._Walls[minId],\r\n range,\r\n cpParam,\r\n getParam: this._ParamGets[minId]\r\n };\r\n }\r\n\r\n private GenFb()\r\n {\r\n if (!this._Walls.length) return;\r\n\r\n this._Fb = new Flatbush(this._Walls.length);\r\n for (let wall of this._Walls)\r\n {\r\n let box = wall.BoundingBox;\r\n this._Fb.add(box.min.x, box.min.y, box.max.x, box.max.y);\r\n }\r\n this._Fb.finish();\r\n }\r\n\r\n ParseWallCanPlaceHoleRange()\r\n {\r\n for (let wall of this._Walls)\r\n {\r\n let param = CreateGetCurveParam(wall);\r\n this._ParamGets.push(param);\r\n this._ParamRanges.push(ParseWallRange(wall, param));\r\n }\r\n }\r\n}\r\n\r\n\r\n//找到一个合适的位置放置直线洞\r\nexport function FindBestRange(param: number, ranges: [number, number][], fuzz = 1e-5): [number, number]\r\n{\r\n //二分搜索\r\n let index = InsertSortedIndex(ranges, param, (v, range) => v - range[0] + fuzz);\r\n\r\n let range = ranges[index - 1];\r\n\r\n //参数在范围内\r\n if (range && (range[0] - fuzz) <= param && param <= (range[1] + fuzz))\r\n return range;\r\n\r\n // //参数在范围外\r\n // if (index === 0)\r\n // {\r\n // return ranges[0];\r\n // }\r\n // else if (index === ranges.length)\r\n // {\r\n // return ranges[ranges.length - 1];\r\n // }\r\n // else\r\n // {\r\n // let nextRange = ranges[index + 1];\r\n // if (nextRange[0] - param < param - range[1])\r\n // return nextRange;\r\n // else\r\n // return range;\r\n // }\r\n}\r\n\r\nexport function ParseWallRange(wall: RoomWallBase, getParam = CreateGetCurveParam(wall))\r\n{\r\n let leftParams: [number, number][] = wall.LeftCurves.map(c =>\r\n {\r\n let range = [getParam.GetParamAtPoint(c.StartPoint), getParam.GetParamAtPoint(c.EndPoint)] as [number, number];\r\n range[CURVE_FACE_TYPE_KEY] = c[CURVE_FACE_TYPE_KEY];\r\n return range;\r\n });\r\n let rightParams: [number, number][] = wall.RightCurves.map(c =>\r\n {\r\n let range = [getParam.GetParamAtPoint(c.StartPoint), getParam.GetParamAtPoint(c.EndPoint)] as [number, number];\r\n range[CURVE_FACE_TYPE_KEY] = c[CURVE_FACE_TYPE_KEY];\r\n return range;\r\n });\r\n\r\n leftParams.sort((a, b) => a[0] - b[0]);\r\n rightParams.sort((a, b) => a[0] - b[0]);\r\n\r\n let ranges: [number, number][] = [];\r\n for (let seg1 of rightParams)\r\n {\r\n let [min, max] = seg1;\r\n for (let seg2 of leftParams)\r\n {\r\n let [min2, max2] = seg2;\r\n if (min > max2) continue;\r\n if (max < min2) break;\r\n\r\n let range = Intersection(seg1, seg2);\r\n if (range)\r\n {\r\n ranges.push(range);\r\n range[\"left\"] = seg2[CURVE_FACE_TYPE_KEY];\r\n range[\"right\"] = seg1[CURVE_FACE_TYPE_KEY];\r\n }\r\n }\r\n }\r\n\r\n return ranges as unknown as WallRange[];\r\n}\r\n","import { MathUtils } from \"three\";\r\nimport { Arc } from \"../api\";\r\nimport { arrayLast } from \"../Common/ArrayExt\";\r\nimport { CADObject } from \"../DatabaseServices/CADObject\";\r\nimport { Curve } from \"../DatabaseServices/Entity/Curve\";\r\nimport { RoomHolePolyline } from \"../DatabaseServices/Room/Entity/Wall/Hole/RoomHolePolyline\";\r\nimport { RoomWallArc } from \"../DatabaseServices/Room/Entity/Wall/RoomWallArc\";\r\nimport { RoomWallBase } from \"../DatabaseServices/Room/Entity/Wall/RoomWallBase\";\r\nimport { RoomWallLine } from \"../DatabaseServices/Room/Entity/Wall/RoomWallLine\";\r\nimport { CreateGetCurveParam } from \"../DatabaseServices/Room/ParseService/GetCurveParam\";\r\nimport { FindBestRange, ParseWallRange } from \"../DatabaseServices/Room/ParseService/Hole/RoomWallPlaceIHoleHelper\";\r\nimport { RoomWallParse } from \"../DatabaseServices/Room/ParseService/RoomWallParse\";\r\nimport { CurveMap } from \"../Geometry/CurveMap\";\r\nimport { equalv2 } from \"../Geometry/GeUtils\";\r\n\r\n\r\n/**\r\n * 更新墙与洞的关联性\r\n */\r\nexport async function UpdateRelevanceWallHole(ents: CADObject[])\r\n{\r\n let updated = new Set();\r\n\r\n //更新墙,顺便更新洞\r\n const UpdateWall = (wall: RoomWallBase) =>\r\n {\r\n if (updated.has(wall)) return;\r\n updated.add(wall);//避免重入\r\n\r\n //先更新洞,因为洞可能会修复位置\r\n for (let holeId of wall.RelevancyHoles)//更新关联的洞\r\n {\r\n if (holeId.IsErase) continue;\r\n\r\n let hole = holeId.Object;\r\n if (wall.IsErase)\r\n hole.Erase();\r\n\r\n UpdateHole(hole);//这里如果只更新洞,那么有可能关联的其他的墙会逃逸\r\n }\r\n\r\n UpdateWallHolesDataAndUpdateDraw(wall);\r\n };\r\n\r\n //更新洞,顺便更新关联的墙?\r\n const UpdateHole = (hole: RoomHolePolyline) =>\r\n {\r\n if (updated.has(hole)) return;\r\n updated.add(hole);//避免重入\r\n\r\n //先更新洞,因为洞可能会修复位置\r\n UpdateHoleFakerWallsAndUpdateDraw(hole);\r\n\r\n for (let wallId of hole.RelevancyWalls)\r\n {\r\n if (wallId.IsErase) continue;\r\n\r\n let wall = wallId.Object as RoomWallBase;\r\n if (updated.has(wall)) continue;\r\n\r\n UpdateWall(wall);\r\n }\r\n };\r\n\r\n\r\n for (let en of ents)\r\n {\r\n if (en instanceof RoomWallBase)\r\n UpdateWall(en);\r\n else if (en instanceof RoomHolePolyline)\r\n UpdateHole(en);\r\n }\r\n}\r\n\r\n\r\n/**\r\n * 更新墙的洞的数据,并且更新绘制\r\n */\r\nexport function UpdateWallHolesDataAndUpdateDraw(wall: RoomWallBase)\r\n{\r\n wall.Holes = [];\r\n\r\n let getParam = CreateGetCurveParam(wall);\r\n\r\n let z = wall.OCSNoClone.elements[14];\r\n for (let hole of wall.RelevancyHoles)\r\n {\r\n if (hole.IsErase)\r\n {\r\n wall.Holes.push({ StartParam: 0, EndParam: 0, Bottom: 0, Top: 0 });\r\n continue;\r\n }\r\n\r\n let holeObj = hole.Object as RoomHolePolyline;\r\n let index = holeObj.RelevancyWalls.indexOf(wall.Id);\r\n if (index < 0) continue;\r\n\r\n let sp = holeObj.Points[index];\r\n let ep = holeObj.Points[index + 1];\r\n\r\n let startParam = getParam.GetParamAtPoint(sp);\r\n let endParam = getParam.GetParamAtPoint(ep);\r\n if (startParam > endParam) [startParam, endParam] = [endParam, startParam];\r\n let bottom = holeObj.Position.z - z;\r\n let top = holeObj.Height + bottom;\r\n\r\n wall.Holes.push({ StartParam: startParam, EndParam: endParam, Bottom: bottom, Top: top });\r\n }\r\n\r\n wall.Update();\r\n return wall;\r\n}\r\n\r\n\r\n/**\r\n * 更新网洞的绘制\r\n * 在墙移动的时候,或者网洞变化的时候 这个网洞的绘制就需要被更新\r\n */\r\nexport function UpdateHoleFakerWallsAndUpdateDraw(hole: RoomHolePolyline)\r\n{\r\n if (hole.IsErase) return;\r\n\r\n let fakerWalls = hole.RelevancyWalls.map(w => w.Object.Clone());\r\n\r\n let pts = hole.Points;\r\n if (pts.length < 2)\r\n {\r\n hole.Erase();\r\n return;\r\n }\r\n\r\n if (pts.length === 2)\r\n {\r\n\r\n let p1 = pts[0];\r\n let p2 = pts[1];\r\n\r\n let wall = fakerWalls[0];\r\n let orgWall = hole.RelevancyWalls[0].Object;\r\n let paramGet = CreateGetCurveParam(orgWall);\r\n\r\n let ranges = ParseWallRange(orgWall, paramGet);\r\n\r\n let [p1Param, p1Closeto] = paramGet.GetParamAtPoint2(p1);\r\n let [p2Param, p2Closeto] = paramGet.GetParamAtPoint2(p2);\r\n\r\n let range1 = FindBestRange(p1Param, ranges);\r\n let range2 = FindBestRange(p2Param, ranges);\r\n\r\n if (p1Closeto && p2Closeto)\r\n {\r\n if (range1 && range1 === range2)\r\n {\r\n wall.StartPoint = p1;\r\n wall.EndPoint = p2;\r\n\r\n if (wall instanceof RoomWallArc && p1Param > p2Param)\r\n (wall as unknown as Arc).IsClockWise = !wall.IsClockWise;\r\n }\r\n else\r\n {\r\n let range = range1 ?? range2 ?? FindBestRange((p1Param + p2Param) * 0.5, ranges);\r\n if (!range)\r\n {\r\n hole.Erase();\r\n return;\r\n }\r\n\r\n p1Param = MathUtils.clamp(p1Param, range[0], range[1]);\r\n p2Param = MathUtils.clamp(p2Param, range[0], range[1]);\r\n\r\n wall.StartPoint = paramGet.GetPointAtParam(p1Param);\r\n wall.EndPoint = paramGet.GetPointAtParam(p2Param);\r\n\r\n if (wall instanceof RoomWallArc && p1Param > p2Param)\r\n (wall as unknown as Arc).IsClockWise = !wall.IsClockWise;\r\n }\r\n }\r\n else\r\n {\r\n let index = orgWall.RelevancyHoles.indexOf(hole.Id);\r\n let holeData = orgWall.Holes[index];\r\n if (!holeData)\r\n {\r\n hole.Erase();\r\n return;\r\n };\r\n\r\n if (p2Param > p1Param)\r\n {\r\n p1Param = holeData.StartParam;\r\n p2Param = holeData.EndParam;\r\n }\r\n else\r\n {\r\n p1Param = holeData.EndParam;\r\n p2Param = holeData.StartParam;\r\n }\r\n\r\n let range = FindBestRange(p1Param, ranges) ?? FindBestRange(p1Param, ranges) ?? FindBestRange((p1Param + p2Param) * 0.5, ranges);\r\n if (!range)\r\n {\r\n hole.Erase();\r\n return;\r\n }\r\n\r\n p1Param = MathUtils.clamp(p1Param, range[0], range[1]);\r\n p2Param = MathUtils.clamp(p2Param, range[0], range[1]);\r\n\r\n wall.StartPoint = paramGet.GetPointAtParam(p1Param);\r\n wall.EndPoint = paramGet.GetPointAtParam(p2Param);\r\n\r\n if (wall instanceof RoomWallArc && p1Param > p2Param)\r\n (wall as unknown as Arc).IsClockWise = !wall.IsClockWise;\r\n }\r\n\r\n new RoomWallParse(false, undefined, false).Parse(fakerWalls);\r\n hole.FakerWalls = fakerWalls;\r\n\r\n let newPts = hole.FakerPoints;\r\n if (pts.some((p, i) => !equalv2(p, newPts[i], 1e-4)))\r\n hole.UpdatePoints();\r\n hole.Update();\r\n return;\r\n }\r\n\r\n //pts.length >2\r\n let curvemap = new CurveMap();\r\n for (let w of fakerWalls)\r\n curvemap.AddCurveToMap(w as unknown as Curve, false, false, false);\r\n\r\n if (curvemap._Vertices.length !== pts.length)\r\n {\r\n hole.Erase();\r\n return;\r\n }\r\n\r\n if (pts.length === 3)\r\n {\r\n let v = curvemap._Vertices.find(v => v.routes.length === 2);\r\n if (!v)//拐角点丢失\r\n {\r\n hole.Erase();\r\n return;\r\n }\r\n\r\n let r1 = v.routes.find(r => r.curve === fakerWalls[0] as unknown as Curve);\r\n let r2 = v.routes.find(r => r.curve === fakerWalls[1] as unknown as Curve);\r\n if (!r1.isReverse) fakerWalls[0].Reverse();\r\n if (r2.isReverse) fakerWalls[1].Reverse();\r\n\r\n // if (!equalv2(v.position, pts[1], 1e-4))//拐角点不再对齐\r\n // {\r\n // let length1 = GetHoleLengthOfIndex(hole, 0);\r\n // let length2 = GetHoleLengthOfIndex(hole, 1);\r\n\r\n // fakerWalls[0].StartPoint = fakerWalls[0].GetPointAtDistance(fakerWalls[0].Length - length1);\r\n // fakerWalls[1].EndPoint = fakerWalls[1].GetPointAtDistance(length2);\r\n // }\r\n // else//拐角点仍然对齐\r\n {\r\n {\r\n let length1 = GetHoleLengthOfIndex(hole, 0);\r\n let orgWall = hole.RelevancyWalls[0].Object;\r\n let ranges = ParseWallRange(orgWall);\r\n if (!r1.isReverse)\r\n length1 = Math.min(length1, orgWall.Length * ranges[0][1]);\r\n else\r\n length1 = Math.min(length1, orgWall.Length * (1 - arrayLast(ranges)[0]));\r\n\r\n fakerWalls[0].StartPoint = fakerWalls[0].GetPointAtDistance(fakerWalls[0].Length - length1);\r\n }\r\n\r\n {\r\n let length2 = GetHoleLengthOfIndex(hole, 1);\r\n let orgWall = hole.RelevancyWalls[1].Object;\r\n let ranges = ParseWallRange(orgWall);\r\n if (r2.isReverse)\r\n length2 = Math.min(length2, orgWall.Length * (1 - arrayLast(ranges)[0]));\r\n else\r\n length2 = Math.min(length2, orgWall.Length * ranges[0][1]);\r\n\r\n fakerWalls[1].EndPoint = fakerWalls[1].GetPointAtDistance(length2);\r\n }\r\n }\r\n }\r\n else if (pts.length === 4)\r\n {\r\n let v1 = curvemap._Vertices.find(v => v.routes.length === 2 && v.routes.some(r => r.curve === fakerWalls[0] as unknown as Curve));\r\n let v2 = curvemap._Vertices.find(v => v.routes.length === 2 && v.routes.some(r => r.curve === fakerWalls[2] as unknown as Curve));\r\n\r\n if (!v1 || !v2)\r\n {\r\n hole.Erase();\r\n return;\r\n }\r\n\r\n let r1 = v1.routes.find(r => r.curve === fakerWalls[0] as unknown as Curve);\r\n let r2 = v2.routes.find(r => r.curve === fakerWalls[2] as unknown as Curve);\r\n\r\n let r3 = v1.routes.find(r => r.curve === fakerWalls[1] as unknown as Curve);\r\n if (r3.isReverse) fakerWalls[1].Reverse();\r\n\r\n if (!r1.isReverse) fakerWalls[0].Reverse();\r\n if (r2.isReverse) fakerWalls[2].Reverse();\r\n\r\n {\r\n let length1 = GetHoleLengthOfIndex(hole, 0);\r\n let length2 = GetHoleLengthOfIndex(hole, 2);\r\n\r\n {\r\n let orgWall = hole.RelevancyWalls[0].Object;\r\n let ranges = ParseWallRange(orgWall);\r\n if (!r1.isReverse)\r\n length1 = Math.min(length1, orgWall.Length * ranges[0][1]);\r\n else\r\n length1 = Math.min(length1, orgWall.Length * (1 - arrayLast(ranges)[0]));\r\n\r\n fakerWalls[0].StartPoint = fakerWalls[0].GetPointAtDistance(fakerWalls[0].Length - length1);\r\n }\r\n\r\n {\r\n let orgWall = hole.RelevancyWalls[2].Object;\r\n let ranges = ParseWallRange(orgWall);\r\n if (r3.isReverse)\r\n length2 = Math.min(length2, orgWall.Length * (1 - arrayLast(ranges)[0]));\r\n else\r\n length2 = Math.min(length2, orgWall.Length * ranges[0][1]);\r\n\r\n fakerWalls[2].EndPoint = fakerWalls[2].GetPointAtDistance(length2);\r\n }\r\n }\r\n }\r\n\r\n new RoomWallParse(false, undefined, false).Parse(fakerWalls);\r\n hole.FakerWalls = fakerWalls;\r\n\r\n let newPts = hole.FakerPoints;\r\n if (pts.some((p, i) => !equalv2(p, newPts[i], 1e-4)))\r\n hole.UpdatePoints();\r\n hole.Update();\r\n}\r\n\r\n\r\nexport function GetHoleLengthOfIndex(hole: RoomHolePolyline, index: number): number\r\n{\r\n if (hole.RelevancyWalls && hole.RelevancyWalls[index]?.Object)\r\n {\r\n let wall = hole.RelevancyWalls[index].Object;\r\n\r\n if (wall instanceof RoomWallLine)\r\n return hole.Points[index].distanceTo(hole.Points[index + 1]);\r\n else if (wall instanceof RoomWallArc)\r\n {\r\n let p1 = hole.Points[index];\r\n let p2 = hole.Points[index + 1];\r\n\r\n let param1 = wall.GetParamAtPoint(p1.clone().setZ(wall.Z));\r\n let param2 = wall.GetParamAtPoint(p2.clone().setZ(wall.Z));\r\n\r\n if (!isNaN(param1) && !isNaN(param2))\r\n return Math.abs(wall.GetDistAtParam(param1) - wall.GetDistAtParam(param2));\r\n\r\n let b = p1.distanceTo(p2);\r\n if (b < 1e-4) return 0;\r\n let r = wall.Radius;\r\n let l = 2 * Math.asin(b / (2 * r)) * r;//http://zhidao.baidu.com/question/553357442/answer/1393358387\r\n return l;\r\n }\r\n }\r\n return 0;\r\n}\r\n","import { arrayRemoveIf } from \"../Common/ArrayExt\";\r\nimport { Database } from \"../DatabaseServices/Database\";\r\nimport { Entity } from \"../DatabaseServices/Entity/Entity\";\r\nimport { TemplateRecord } from \"../DatabaseServices/Template/TemplateRecord\";\r\n\r\nexport function Purge(db: Database): void\r\n{\r\n db.hm.Clear();\r\n let bakEnable = db.hm.Enable;\r\n db.hm.Enable = false;\r\n\r\n //应该避免占位空间被PU(占位空间内没有实体,也没有子层)\r\n arrayRemoveIf(db.TemplateTable.Objects, t =>\r\n {\r\n if (!t || t.IsErase) return true;\r\n\r\n let allEnts: Entity[] = [];\r\n t.Traverse(ct =>\r\n {\r\n for (let id of ct.Objects)\r\n {\r\n if (id.Object)\r\n allEnts.push(id.Object as Entity);\r\n }\r\n });\r\n\r\n if (allEnts.length && allEnts.every(e => e.IsErase))\r\n {\r\n t.Erase();\r\n t.Traverse(ct => ct.Erase());//PU所有子层\r\n return true;\r\n }\r\n\r\n //否则PU本层\r\n t.Purge();\r\n });\r\n\r\n //再次清理,避免子模块没了之后,父模块还引用它\r\n for (let t of db.TemplateTable.Objects)\r\n t.Children = t.Children.filter(c => !c.IsErase);\r\n\r\n arrayRemoveIf(db.GroupTable.Objects, g =>\r\n {\r\n if (!g || g.IsErase) return true;\r\n g.Purge();\r\n return g.Entitys.length === 0;\r\n });\r\n\r\n //由于我们现在Goodbye会将Object清空,所以为了模块能正确的pu,我们把这个延后了\r\n arrayRemoveIf(db.ModelSpace.Entitys, e =>\r\n {\r\n let isErase = e.IsErase;\r\n if (isErase) e.GoodBye();\r\n return isErase;\r\n });\r\n\r\n arrayRemoveIf(db.Lights.Entitys, e =>\r\n {\r\n let isErase = e.IsErase;\r\n if (isErase) e.GoodBye();\r\n return isErase;\r\n });\r\n\r\n arrayRemoveIf(db.LayoutSpace.Entitys, e =>\r\n {\r\n let isErase = e.IsErase;\r\n if (isErase) e.GoodBye();\r\n return isErase;\r\n });\r\n\r\n arrayRemoveIf(db.ProcessingGroupTable.Objects, e =>\r\n {\r\n if (!e || e.IsErase) return true;\r\n e.Purge();\r\n return e.Objects.length === 0;\r\n });\r\n db.hm.Enable = bakEnable;\r\n}\r\n\r\n//裁剪树 有时候会有不好的行为,仅在copy.ts中使用\r\nexport function PurgeTemplateTreeRoot(db: Database)\r\n{\r\n for (let t of db.TemplateTable.Objects)\r\n {\r\n if (t.IsRoot && t.Objects.length === 0)\r\n {\r\n t.Erase();\r\n\r\n let children = t.Children.concat();//必须备份,否则子实体设置Parent=undefined时错误\r\n t.Children = [];\r\n for (let ctId of children)\r\n {\r\n let ct = ctId.Object as TemplateRecord;\r\n ct.Parent = undefined;\r\n }\r\n }\r\n }\r\n arrayRemoveIf(db.TemplateTable.Objects, t => t.IsErase);\r\n}\r\n","import { Factory } from './CADFactory';\r\nimport { CADFiler } from './CADFiler';\r\nimport { CADObject } from './CADObject';\r\nimport { Database } from './Database';\r\n\r\n@Factory\r\nexport class CreateObjectData extends CADObject\r\n{\r\n private CADFiler: CADFiler = new CADFiler();\r\n\r\n //用于记录创建的对象\r\n CreateObject: CADObject;\r\n\r\n /**\r\n * 如果是实体新建,那么不需要调用`Save`,历史记录会在命令结束的时候调用.\r\n * 如果是实体删除,那么请自行调用`Save`.\r\n */\r\n constructor(public Object?: CADObject)\r\n {\r\n super();\r\n }\r\n\r\n //记录数据,在命令结束的时候记录\r\n Save()\r\n {\r\n if (this.Object && this.CADFiler.Data.length === 0)\r\n {\r\n this.CADFiler.Data.length = 0;\r\n this.CADFiler.WriteObject(this.Object);\r\n }\r\n return this;\r\n }\r\n\r\n GetObject(db: Database): CADObject\r\n {\r\n this.CADFiler.Reset();\r\n this.CADFiler.database = db;\r\n this.Object = this.CADFiler.ReadObject();\r\n this.CADFiler.Reset();\r\n return this.Object;\r\n }\r\n\r\n //#region -----------------------------File-----------------------------\r\n //对象应该实现dataIn和DataOut的方法,为了对象的序列化和反序列化\r\n //对象从文件中读取数据,初始化自身\r\n ReadFile(file: CADFiler)\r\n {\r\n file.Read();//ver;\r\n let data = file.Read();\r\n this.CADFiler.Data = data;\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(1);//ver\r\n file.Write(this.CADFiler.Data);\r\n }\r\n //#endregion -----------------------------File End-----------------------------\r\n}\r\n","import { Factory } from './CADFactory';\r\nimport { CADFiler } from './CADFiler';\r\nimport { CADObject } from './CADObject';\r\n\r\n@Factory\r\nexport class RemoveObjectData extends CADObject\r\n{\r\n private index: T;\r\n\r\n RemoveObject: CADObject;//用于记录被删除的对象\r\n constructor(index?: T)\r\n {\r\n super();\r\n this.index = index;\r\n }\r\n get Index()\r\n {\r\n return this.index;\r\n }\r\n\r\n //#region -----------------------------File-----------------------------\r\n //对象应该实现dataIn和DataOut的方法,为了对象的序列化和反序列化\r\n\r\n //对象从文件中读取数据,初始化自身\r\n ReadFile(file: CADFiler)\r\n {\r\n file.Read();//ver\r\n this.index = file.Read();\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(1);\r\n file.Write(this.index);\r\n }\r\n //局部撤销\r\n ApplyPartialUndo(file: CADObject)\r\n { }\r\n //#endregion -----------------------------File End-----------------------------\r\n}\r\n","import { observable } from \"mobx\";\r\nimport { Status } from \"../Common/Status\";\r\nimport { Factory } from \"./CADFactory\";\r\nimport { CADFiler } from \"./CADFiler\";\r\nimport { CADObject } from \"./CADObject\";\r\nimport { CreateObjectData } from \"./CreateObjectData\";\r\nimport { HistorycRecord } from \"./HistorycRecord\";\r\nimport { RemoveObjectData } from \"./RemoveObjectData\";\r\nimport { SymbolTableRecord } from \"./SymbolTableRecord\";\r\n\r\n@Factory\r\nexport class SymbolTable extends CADObject\r\n{\r\n /**\r\n * 符号列表,支持迭代,请勿直接修改数据\r\n */\r\n @observable Symbols = new Map();\r\n\r\n Add(record: SymbolTableRecord, isCheckObjectCleanly = true): Status\r\n {\r\n if (this.Symbols.has(record.Name))\r\n return Status.DuplicateRecordName;\r\n\r\n if (!isCheckObjectCleanly)\r\n record.SetDefaultDb(this._db);\r\n else if (this._db)\r\n record.SetOwnerDatabase(this._db);\r\n\r\n record.Owner = this.objectId;\r\n\r\n this.Symbols.set(record.Name, record);\r\n return Status.True;\r\n }\r\n\r\n Remove(record: SymbolTableRecord)\r\n {\r\n let selfRecord = this.Symbols.get(record.Name);\r\n if (selfRecord === record)\r\n {\r\n let undoRec = this.UndoRecord();\r\n if (undoRec)\r\n {\r\n let hisRec = new HistorycRecord();\r\n hisRec.undoData = new CreateObjectData(selfRecord).Save();\r\n hisRec.redoData = new RemoveObjectData(selfRecord.Name);\r\n\r\n undoRec.WriteObjectHistoryPath(this, hisRec);\r\n }\r\n\r\n this.Symbols.delete(record.Name);\r\n }\r\n }\r\n\r\n GetAt(name: string): SymbolTableRecord | undefined\r\n {\r\n return this.Symbols.get(name);\r\n }\r\n\r\n Has(name: string)\r\n {\r\n return this.Symbols.has(name);\r\n }\r\n\r\n AllocateName(name: string): string\r\n {\r\n for (let i = 1; i < this.Symbols.size + 2; i++)\r\n {\r\n let newName = `${name}${i}`;\r\n if (!this.Has(newName))\r\n return newName;\r\n }\r\n }\r\n\r\n ChangeRecordName(record: SymbolTableRecord, newName: string): boolean\r\n {\r\n if (this.Has(newName)) return false;\r\n this.Symbols.delete(record.Name);\r\n this.Symbols.set(newName, record);\r\n return true;\r\n }\r\n\r\n //#region -------------------------File-------------------------\r\n ReadFile(file: CADFiler)\r\n {\r\n super.ReadFile(file);\r\n let ver = file.Read();\r\n let count = file.Read();\r\n this.Symbols.clear();\r\n for (let i = 0; i < count; i++)\r\n {\r\n if (ver === 1)\r\n file.Read();\r\n let record = file.ReadObject() as SymbolTableRecord;\r\n if (record)\r\n this.Symbols.set(record.Name, record);\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.Symbols.size);\r\n for (let [key, record] of this.Symbols)\r\n {\r\n file.WriteObject(record);\r\n }\r\n }\r\n\r\n //局部撤销\r\n ApplyPartialUndo(undoData: CADObject)\r\n {\r\n if (undoData instanceof CreateObjectData)\r\n {\r\n let record = undoData.GetObject(this._db) as SymbolTableRecord;\r\n this.Symbols.set(record.Name, record);\r\n undoData.CreateObject = record;\r\n }\r\n else if (undoData instanceof RemoveObjectData)\r\n {\r\n let obj = this.Symbols.get(undoData.Index as string);\r\n this.Symbols.delete(undoData.Index as string);\r\n undoData.RemoveObject = obj;\r\n }\r\n // else if (undoData instanceof RenameObjectData)\r\n // {\r\n // let record = this.GetAt(undoData._oldName);\r\n // this.Symbols.delete(undoData._oldName);\r\n // this.Symbols.set(undoData._newName, record);\r\n // }\r\n }\r\n}\r\n","import { SymbolTable } from \"./SymbolTable\";\r\nimport { Factory } from \"./CADFactory\";\r\n\r\n@Factory\r\nexport class BlockTable extends SymbolTable\r\n{\r\n\r\n}\r\n","import { Factory } from './CADFactory';\r\nimport { CADFiler } from './CADFiler';\r\nimport { CADObject } from './CADObject';\r\nimport { CreateObjectData } from './CreateObjectData';\r\nimport { HistorycRecord } from './HistorycRecord';\r\nimport { RemoveObjectData } from './RemoveObjectData';\r\n\r\n@Factory\r\nexport class ObjectCollection extends CADObject\r\n{\r\n Objects: T[] = [];\r\n\r\n Destroy()\r\n {\r\n super.Destroy();\r\n this.Objects.length = 0;\r\n }\r\n\r\n /**\r\n * @param object\r\n * @param isCheckObjectCleanly 检查对象是否清白,如果对象不清白,那么将会被拒绝加入到集合.\r\n */\r\n Append(object: T, isCheckObjectCleanly = true)\r\n {\r\n if (isCheckObjectCleanly && object.Id)\r\n {\r\n console.warn(\"尝试加入已经分配id的对象!\");\r\n return;\r\n }\r\n if (this._db && !object.Id)\r\n object.SetOwnerDatabase(this._db);\r\n else\r\n object.SetDatabase(this._db);\r\n\r\n this.Objects.push(object);\r\n this.AppendEvent(object);\r\n\r\n let undoRec = this.UndoRecord();\r\n if (undoRec)\r\n {\r\n let hisRec = new HistorycRecord();\r\n hisRec.redoData = new CreateObjectData(object);\r\n hisRec.undoData = new RemoveObjectData(this.Objects.length - 1);\r\n\r\n undoRec.WriteObjectHistoryPath(this, hisRec);\r\n }\r\n\r\n return object.Id;\r\n }\r\n AppendEvent(obj: T)\r\n {\r\n\r\n }\r\n Remove(obj: T)\r\n {\r\n let index = this.Objects.indexOf(obj);\r\n this.RemoveIndex(index);\r\n }\r\n\r\n RemoveIndex(index: number)\r\n {\r\n if (index === -1)\r\n return;\r\n let obj = this.Objects[index];\r\n this.Objects.splice(index, 1);\r\n\r\n let undoRec = this.UndoRecord();\r\n if (undoRec)\r\n {\r\n let hisRec = new HistorycRecord();\r\n hisRec.undoData = new CreateObjectData(obj).Save();\r\n hisRec.redoData = new RemoveObjectData(index);\r\n\r\n undoRec.WriteObjectHistoryPath(this, hisRec);\r\n }\r\n if (obj)\r\n obj.GoodBye();\r\n\r\n return obj;\r\n }\r\n\r\n //#region -----------------------------File-----------------------------\r\n //对象应该实现dataIn和DataOut的方法,为了对象的序列化和反序列化\r\n\r\n //对象从文件中读取数据,初始化自身\r\n ReadFile(file: CADFiler)\r\n {\r\n this.Objects.length = 0;\r\n super.ReadFile(file);\r\n let cout = file.Read();\r\n for (let i = 0; i < cout; i++)\r\n {\r\n let obj = file.ReadObject() as T;\r\n if (obj) this.Objects.push(obj);\r\n }\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n super.WriteFile(file);\r\n file.Write(this.Objects.length);\r\n for (let obj of this.Objects)\r\n file.WriteObject(obj);\r\n }\r\n //局部撤销\r\n ApplyPartialUndo(undoData: CADObject)\r\n {\r\n if (undoData instanceof CreateObjectData)\r\n {\r\n let obj = undoData.GetObject(this._db) as T;\r\n this.Objects.push(obj);\r\n this.AppendEvent(obj);\r\n undoData.CreateObject = obj;\r\n }\r\n else if (undoData instanceof RemoveObjectData)\r\n {\r\n let obj = this.RemoveIndex(undoData.Index);\r\n undoData.RemoveObject = obj;\r\n }\r\n }\r\n //#endregion -----------------------------File End-----------------------------\r\n}\r\n","import { end } from 'xaop';\r\nimport { Status } from '../Common/Status';\r\nimport { Factory } from './CADFactory';\r\nimport { CADFiler } from './CADFiler';\r\nimport { Database } from './Database';\r\nimport { Entity } from './Entity/Entity';\r\nimport { ObjectCollection } from './ObjectCollection';\r\nimport { SymbolTableRecord } from './SymbolTableRecord';\r\n\r\n@Factory\r\nexport class BlockTableRecord extends SymbolTableRecord\r\n{\r\n EntityCol = new ObjectCollection();\r\n constructor()\r\n {\r\n super();\r\n end(this.EntityCol, this.EntityCol.AppendEvent, (e: Entity) => { this.AppendEvent(e); });\r\n }\r\n\r\n SetOwnerDatabase(db: Database)\r\n {\r\n super.SetOwnerDatabase(db);\r\n this.EntityCol.SetOwnerDatabase(db);\r\n return this;\r\n }\r\n\r\n get Entitys()\r\n {\r\n return this.EntityCol.Objects;\r\n }\r\n Add(obj: Entity, isCheckObjectCleanly = true): Status\r\n {\r\n this.Append(obj, isCheckObjectCleanly);\r\n return Status.True;\r\n }\r\n\r\n Append(entity: Entity, isCheckObjectCleanly = true)\r\n {\r\n this.EntityCol.Append(entity, isCheckObjectCleanly);\r\n entity.Owner = this.objectId;\r\n }\r\n\r\n AppendEvent(entity: Entity)\r\n {\r\n }\r\n\r\n Remove(entity: Entity)\r\n {\r\n this.EntityCol.Remove(entity);\r\n }\r\n\r\n Destroy()\r\n {\r\n super.Destroy();\r\n this.EntityCol.Destroy();\r\n }\r\n\r\n //#region -------------------------File-------------------------\r\n //对象从文件中读取数据,初始化自身\r\n ReadFile(file: CADFiler)\r\n {\r\n let ver = file.Read();\r\n super.ReadFile(file);\r\n this.EntityCol.ReadFile(file);\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(1);\r\n super.WriteFile(file);\r\n this.EntityCol.WriteFile(file);\r\n }\r\n //#endregion\r\n}\r\n","import { AllObjectData } from \"./AllObjectData\";\r\nimport { Factory } from './CADFactory';\r\nimport { CADFiler } from './CADFiler';\r\nimport { HistorycRecord } from './HistorycRecord';\r\nimport { ObjectId } from './ObjectId';\r\n\r\n@Factory\r\nexport class ObjectAllDataHistoryRecord extends HistorycRecord\r\n{\r\n constructor(public RecordEntityId?: ObjectId)\r\n {\r\n super();\r\n if (RecordEntityId)\r\n this.undoData = new AllObjectData(this.RecordEntityId.Object);\r\n }\r\n\r\n WriteRedo()\r\n {\r\n this.redoData = new AllObjectData(this.RecordEntityId.Object);\r\n }\r\n\r\n //#region -------------------------File-------------------------\r\n //对象从文件中读取数据,初始化自身\r\n ReadFile(file: CADFiler)\r\n {\r\n let ver = file.Read();\r\n super.ReadFile(file);\r\n this.RecordEntityId = file.ReadObjectId();\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(1);\r\n super.WriteFile(file);\r\n file.WriteObjectId(this.RecordEntityId);\r\n }\r\n //#endregion\r\n}\r\n","import { Factory } from './CADFactory';\r\nimport { CADFiler } from './CADFiler';\r\nimport { CADObject } from './CADObject';\r\nimport { CreateObjectData } from './CreateObjectData';\r\nimport { EraseEntityData } from \"./EraseEntityData\";\r\nimport { HistorycRecord } from './HistorycRecord';\r\nimport { ObjectAllDataHistoryRecord } from './ObjectAllDataHistoryRecord';\r\nimport { ObjectId } from './ObjectId';\r\n\r\n/**\r\n * 命令的历史记录\r\n */\r\n@Factory\r\nexport class CommandHistoryRecord extends CADObject\r\n{\r\n constructor(public CommandName = \"\")\r\n {\r\n super();\r\n }\r\n //历史记录表\r\n private _HistoryList = new Map();\r\n private _CreateObjects = new Map();\r\n\r\n get HistoryList(): Map\r\n {\r\n return this._HistoryList;\r\n }\r\n\r\n private GetObjectHistoryList(id: ObjectId)\r\n {\r\n if (!this._HistoryList.has(id))\r\n this._HistoryList.set(id, []);\r\n return this._HistoryList.get(id);\r\n }\r\n\r\n EndCommand()\r\n {\r\n for (let [id, hrs] of this._HistoryList)\r\n {\r\n let hr = this.GetObjectAllDataRecord(hrs);\r\n if (hr)\r\n hr.WriteRedo();\r\n }\r\n\r\n for (let [, hr] of this._CreateObjects)\r\n {\r\n let h = hr.redoData as CreateObjectData;\r\n h.Save();\r\n }\r\n }\r\n\r\n //获取对象快照记录(如果有的话)\r\n GetObjectAllDataRecord(historyList: HistorycRecord[]): ObjectAllDataHistoryRecord | undefined\r\n {\r\n if (historyList.length > 0)\r\n {\r\n let hr = historyList[historyList.length - 1];\r\n if (hr instanceof ObjectAllDataHistoryRecord)\r\n return hr;\r\n }\r\n }\r\n\r\n //对象写入历史记录\r\n WriteObjectHistoryPath(obj: CADObject, history: HistorycRecord)\r\n {\r\n if (!obj || this._CreateObjects.has(obj))//某些时候obj可能为空\r\n return;\r\n\r\n let hrs = this.GetObjectHistoryList(obj.Id);\r\n if (this.GetObjectAllDataRecord(hrs))\r\n return;\r\n\r\n if (history.redoData instanceof CreateObjectData)\r\n this._CreateObjects.set(history.redoData.Object, history);\r\n\r\n hrs.push(history);\r\n }\r\n\r\n WriteObjectSnapshoot(obj: CADObject): void\r\n {\r\n if (!obj.Id)\r\n {\r\n console.warn(\"错误!CreateObjectHistory\");\r\n return;\r\n }\r\n\r\n if (this._CreateObjects.has(obj))\r\n return;\r\n\r\n let hrs = this.GetObjectHistoryList(obj.Id);\r\n if (this.GetObjectAllDataRecord(hrs))\r\n return;\r\n\r\n let hr = new ObjectAllDataHistoryRecord(obj.Id);\r\n hrs.push(hr);\r\n }\r\n\r\n CreateEraseHistory(obj: CADObject, isErase: boolean)\r\n {\r\n let hr = new HistorycRecord();\r\n hr.undoData = new EraseEntityData(!isErase);\r\n hr.redoData = new EraseEntityData(isErase);\r\n this.WriteObjectHistoryPath(obj, hr);\r\n }\r\n\r\n //#region -------------------------File-------------------------\r\n //对象应该实现dataIn和DataOut的方法,为了对象的序列化和反序列化\r\n\r\n\r\n //对象从文件中读取数据,初始化自身\r\n ReadFile(file: CADFiler)\r\n {\r\n let ver = file.Read();\r\n this.CommandName = file.Read();\r\n let cout = file.Read();\r\n\r\n this._HistoryList.clear();\r\n for (let i = 0; i < cout; i++)\r\n {\r\n let id = file.ReadObjectId();\r\n let length = file.Read();\r\n let hrs: HistorycRecord[] = [];\r\n this._HistoryList.set(id, hrs);\r\n for (let j = 0; j < length; j++)\r\n {\r\n let hr = file.ReadObject() as HistorycRecord;\r\n hrs.push(hr);\r\n }\r\n }\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(1);\r\n file.Write(this.CommandName);\r\n file.Write(this._HistoryList.size);\r\n for (let [id, hrs] of this._HistoryList)\r\n {\r\n file.WriteObjectId(id);\r\n file.Write(hrs.length);\r\n for (let hr of hrs)\r\n {\r\n file.WriteObject(hr);\r\n }\r\n }\r\n }\r\n //#endregion\r\n}\r\n","import { RenderType } from \"../../GraphicsSystem/RenderType\";\r\nimport { Factory } from \"../CADFactory\";\r\nimport { CADFiler } from \"../CADFiler\";\r\nimport { CADObject } from \"../CADObject\";\r\n\r\n@Factory\r\nexport class CameraSnapshootRecord extends CADObject\r\n{\r\n Name: string = \"\";\r\n _CameraData = new CADFiler;\r\n\r\n get RenderType(): RenderType\r\n {\r\n return this._CameraData.Data[7];\r\n }\r\n\r\n //#region -------------------------File-------------------------\r\n\r\n //对象从文件中读取数据,初始化自身\r\n ReadFile(file: CADFiler)\r\n {\r\n let ver = file.Read();\r\n this._CameraData.Data = file.Read();\r\n this.Name = file.Read();\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(1);\r\n file.Write(this._CameraData.Data);\r\n file.Write(this.Name);\r\n }\r\n //#endregion\r\n}\r\n","import { CADFiler } from \"./CADFiler\";\r\nimport { ObjectId, RelevancyType } from \"./ObjectId\";\r\n\r\nexport class DeepCloneFiler extends CADFiler\r\n{\r\n constructor(public idMaping = new Map())\r\n {\r\n super();\r\n }\r\n\r\n ReadObjectId()\r\n {\r\n let index = this.Read();\r\n if (index <= 0) return;\r\n\r\n let id = this.idMaping.get(index);\r\n if (id) return id;\r\n\r\n id = new ObjectId();\r\n this.idMaping.set(index, id);\r\n\r\n return id;\r\n }\r\n\r\n ReadSoftObjectId()\r\n {\r\n let id = this.ReadObjectId();\r\n if (id)\r\n id._RelevancyType = RelevancyType.Soft;\r\n return id;\r\n }\r\n\r\n ReadHardObjectId()\r\n {\r\n let id = this.ReadObjectId();\r\n if (id)\r\n id._RelevancyType = RelevancyType.Hard;\r\n return id;\r\n }\r\n\r\n hardObjectIds: Set = new Set();\r\n cloned: Set = new Set();\r\n WriteHardObjectId(id: ObjectId)\r\n {\r\n if (id && id.Index >= 100 && !this.cloned.has(id.Index)) //当存在id时,表示对象正在被拷贝,或者已经拷贝完成\r\n this.hardObjectIds.add(id.Index);\r\n\r\n return this.WriteObjectId(id);\r\n }\r\n}\r\n","import { Factory } from \"./CADFactory\";\r\nimport { GroupRecord } from \"./GroupTableRecord\";\r\nimport { ObjectCollection } from \"./ObjectCollection\";\r\nimport { CADFiler } from \"./CADFiler\";\r\nimport { Status } from \"../Common/Status\";\r\n\r\n@Factory\r\nexport class GroupTable extends ObjectCollection\r\n{\r\n\r\n Append(object: GroupRecord, isCheckObjectCleanly = true)\r\n {\r\n let id = super.Append(object, isCheckObjectCleanly);\r\n\r\n if (id)\r\n object.Owner = this.Id;\r\n\r\n return id;\r\n }\r\n\r\n Add(record: GroupRecord, isCheckObjectCleanly = true): Status\r\n {\r\n let id = this.Append(record, isCheckObjectCleanly);\r\n if (id)\r\n return Status.True;\r\n else\r\n return Status.False;\r\n }\r\n\r\n //对象从文件中读取数据,初始化自身\r\n ReadFile(file: CADFiler)\r\n {\r\n let ver = file.Read();\r\n super.ReadFile(file);\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(1);\r\n super.WriteFile(file);\r\n }\r\n //#endregion\r\n\r\n}\r\n","\r\nexport let CommandState = {\r\n CommandIng: false,\r\n};\r\n","import { LogEnable, ReportErrorWrap } from '../Common/Log';\r\nimport { Intent, Toaster } from '../Common/Toaster';\r\nimport { CommandState } from '../Editor/CommandState';\r\nimport { Factory } from './CADFactory';\r\nimport { CADFiler } from './CADFiler';\r\nimport { CADObject } from './CADObject';\r\nimport { CommandHistoryRecord } from './CommandHistoryRecord';\r\n\r\n/**\r\n * 历史记录管理\r\n *\r\n * 关于子命令标记:\r\n * 当子命令标记出现的时候,才允许出现局部撤销,否则命令执行中不允许撤销,触发命令重写了撤销和重做的事件.\r\n */\r\n@Factory\r\nexport class HistoricManage extends CADObject\r\n{\r\n curIndex: number = -1; //当前执行位置,也就是当前的状态, undo时,撤销当前状态,redo时,应用下一个状态\r\n lockIndex = -1; //锁定极限撤销索引(将无法在往前撤销)\r\n historyRecord: CommandHistoryRecord[] = []; //历史记录\r\n doing: boolean = false;//正在执行工作 例如: 文件读取中 撤销中 重做中\r\n Enable: boolean = true;\r\n\r\n _SignalCommandHistory: HistoricManage;\r\n\r\n constructor(public useSubCommand = true)\r\n {\r\n super();\r\n }\r\n\r\n Clear()\r\n {\r\n this.historyRecord.length = 0;\r\n this.curIndex = -1;\r\n }\r\n\r\n //对象从文件中读取数据,初始化自身\r\n ReadFile(file: CADFiler)\r\n {\r\n let ver = file.Read();\r\n this.curIndex = file.Read();\r\n let cout = file.Read();\r\n this.historyRecord = [];\r\n for (let i = 0; i < cout; i++)\r\n {\r\n this.historyRecord.push(file.ReadObject() as CommandHistoryRecord);\r\n }\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(1);\r\n file.Write(this.curIndex);\r\n file.Write(this.historyRecord.length);\r\n for (let rec of this.historyRecord)\r\n {\r\n file.WriteObject(rec);\r\n }\r\n }\r\n\r\n //命令正在当前状态\r\n get IsNow(): boolean\r\n {\r\n return this.historyRecord.length !== 0 && this.curIndex === this.historyRecord.length - 1;\r\n }\r\n\r\n get UndoData(): CommandHistoryRecord\r\n {\r\n if (this.doing || this.Enable === false)\r\n return undefined;\r\n if (!this.IsNow)\r\n {\r\n this.StartCmd(\"\");\r\n if (LogEnable.Display)\r\n console.warn(\"未标记命令!\");\r\n }\r\n\r\n if (!CommandState.CommandIng)\r\n {\r\n //避免用户心理负担,暂时关闭这个,使用遥测\r\n if (!ReportErrorWrap.IsProduction && ReportErrorWrap.ReportError)\r\n {\r\n ReportErrorWrap.ReportError(new Error().stack, \"命令未执行中,但是却产生了错误了记录!\");\r\n Toaster({\r\n message: \"警告:命令未执行中,但是却产生了错误了历史记录! (不会造成图纸错误,但是会影响撤销(Ctrl+Z)重做(Ctrl+Y),请与我们联系,将错误报告给我们)\",\r\n timeout: 5000,\r\n intent: Intent.WARNING,\r\n key: \"no_command_his\"\r\n });\r\n }\r\n // else jest会警告这个\r\n // console.error(\"命令未执行中,但是却产生了错误了记录!\");\r\n }\r\n\r\n if (this._SignalCommandHistory && CommandState.CommandIng)\r\n return this._SignalCommandHistory.UndoData;\r\n else\r\n return this.historyRecord[this.historyRecord.length - 1];\r\n }\r\n\r\n //开始子命令标记\r\n StartMark(subCommandName = \"\")\r\n {\r\n if (!this.useSubCommand)\r\n return;\r\n\r\n if (!this._SignalCommandHistory)\r\n this._SignalCommandHistory = new HistoricManage(false);\r\n\r\n this._SignalCommandHistory.EndCmd();\r\n this._SignalCommandHistory.StartCmd(subCommandName);\r\n }\r\n\r\n /**\r\n * 不要在命令中直接调用这个函数!\r\n * 请调用 commandMachine.CommandStart\r\n */\r\n StartCmd(cmdName: string)\r\n {\r\n if (cmdName === \"REDO\" || cmdName === \"U\") return;\r\n\r\n //删除当前状态以后的所有状态\r\n this.historyRecord.splice(this.curIndex + 1, this.historyRecord.length - (this.curIndex + 1));\r\n this.historyRecord.push(new CommandHistoryRecord(cmdName));\r\n this.curIndex = this.historyRecord.length - 1;\r\n }\r\n\r\n CurrentHasHistory(): boolean\r\n {\r\n let lastRec = this.historyRecord[this.curIndex];\r\n if (!lastRec) return false;\r\n this.MergeSubCommmand(lastRec);\r\n return lastRec.HistoryList.size > 0;\r\n }\r\n\r\n //结束当前的命令,返回是否写入历史记录\r\n EndCmd(): boolean\r\n {\r\n if (!this.IsNow)\r\n return false;\r\n let lastRec = this.historyRecord[this.curIndex];\r\n if (lastRec)\r\n {\r\n this.MergeSubCommmand(lastRec);\r\n lastRec.EndCommand();\r\n if (lastRec.HistoryList.size === 0)\r\n {\r\n this.historyRecord.pop();\r\n this.curIndex--;\r\n return false;\r\n }\r\n // else if (this.historyRecord.length > 20)//最大历史记录个数为20 (如果在这边直接删除记录,会导致临时编辑器错误)\r\n // {\r\n // this.historyRecord.shift();\r\n // this.curIndex--;\r\n // }\r\n else if (this.historyRecord.length !== 0 && this.historyRecord.length % 50 === 0)\r\n Toaster({\r\n message: `警告:已经有${this.historyRecord.length}个命令历史记录了,建议您使用PU命令进行清理,避免图纸卡顿和崩溃!`,\r\n timeout: 15000,\r\n intent: Intent.WARNING,\r\n });\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n /**\r\n * 获得这个命令修改的对象列表\r\n */\r\n get ChangeObjects(): Set\r\n {\r\n let lastRec = this.historyRecord[this.curIndex];\r\n\r\n let objects = new Set();\r\n if (lastRec)\r\n {\r\n this.MergeSubCommmand(lastRec);\r\n for (let [id] of lastRec.HistoryList)\r\n {\r\n objects.add(id.Object);\r\n }\r\n }\r\n return objects;\r\n }\r\n GetRangeChangeObject(startIndex: number, endIndex: number): Set\r\n {\r\n let objects = new Set();\r\n for (let i = startIndex; i < endIndex; i++)\r\n for (let [id] of this.historyRecord[i].HistoryList)\r\n objects.add(id.Object);\r\n return objects;\r\n }\r\n\r\n /**\r\n * 合并命令历史记录,因为命令记录器允许存在子记录,所以当命令结束时,应该把子记录合并到父记录中,子记录将被摧毁.\r\n */\r\n private MergeSubCommmand(lastRec: CommandHistoryRecord)\r\n {\r\n if (this._SignalCommandHistory)\r\n {\r\n for (let rc of this._SignalCommandHistory.historyRecord)\r\n {\r\n for (let [id, hrs] of rc.HistoryList)\r\n {\r\n if (id?.Object)//某些情况下可能为空\r\n for (let hr of hrs)\r\n lastRec.WriteObjectHistoryPath(id.Object, hr);\r\n }\r\n }\r\n this._SignalCommandHistory = undefined;\r\n }\r\n }\r\n\r\n Undo(): boolean\r\n {\r\n //如果命令执行中,那么进行局部撤销.\r\n if (CommandState.CommandIng && this.useSubCommand)\r\n {\r\n if (this._SignalCommandHistory)\r\n return this._SignalCommandHistory.Undo();\r\n return;\r\n }\r\n\r\n if (this.curIndex === this.lockIndex) return;//被锁定,无法撤销\r\n\r\n this.EndCmd();\r\n let historyRec = this.historyRecord[this.curIndex];\r\n if (!historyRec)\r\n return false;\r\n this.doing = true;\r\n for (let [id, recList] of historyRec.HistoryList)\r\n {\r\n for (let i = recList.length; i--;)\r\n {\r\n id?.Object?.ApplyPartialUndo(recList[i].undoData);\r\n }\r\n }\r\n this.UndoEvent(historyRec.CommandName, historyRec);\r\n this.curIndex--;\r\n this.doing = false;\r\n return true;\r\n }\r\n Redo()\r\n {\r\n //如果命令执行中,那么进行局部重做.\r\n if (CommandState.CommandIng && this.useSubCommand)\r\n {\r\n if (this._SignalCommandHistory)\r\n return this._SignalCommandHistory.Redo();\r\n return;\r\n }\r\n\r\n let historyRec = this.historyRecord[this.curIndex + 1];\r\n if (!historyRec)\r\n return false;\r\n this.doing = true;\r\n for (let [id, recList] of historyRec.HistoryList)\r\n {\r\n for (let rec of recList)\r\n {\r\n id.Object.ApplyPartialUndo(rec.redoData);\r\n }\r\n }\r\n this.RedoEvent(historyRec.CommandName, historyRec);\r\n this.curIndex++;\r\n this.doing = false;\r\n return true;\r\n }\r\n\r\n UndoEvent(cmdName: string, historyRec: CommandHistoryRecord)\r\n {\r\n }\r\n\r\n RedoEvent(cmdName: string, historyRec: CommandHistoryRecord)\r\n {\r\n }\r\n\r\n}\r\n","import { Box3, Color, Light as TLight, Vector3 } from 'three';\r\nimport { UpdateDraw } from '../../Common/Status';\r\nimport { ObjectSnapMode } from '../../Editor/ObjectSnapMode';\r\nimport { Box3Ext } from '../../Geometry/Box';\r\nimport { MoveMatrix } from '../../Geometry/GeUtils';\r\nimport { RenderType } from '../../GraphicsSystem/RenderType';\r\nimport { equaln } from '../../Nest/Common/Util';\r\nimport { AutoRecord } from '../AutoRecord';\r\nimport { Factory } from '../CADFactory';\r\nimport { CADFiler } from '../CADFiler';\r\nimport { CADObject } from '../CADObject';\r\nimport { Entity } from '../Entity/Entity';\r\n\r\n/**\r\n * 灯光实体基类\r\n */\r\n@Factory\r\nexport class Light extends Entity\r\n{\r\n OnlyRenderType = true;\r\n protected _Intensity: number = 2; //强度\r\n protected _LightColor: Color = new Color();//光源颜色\r\n @AutoRecord Temperature = 6500;//色温\r\n @AutoRecord IndirectLightingIntensity = 1; //0-200 间接光照强度\r\n //LightComponent extends LightComponentBase\r\n @AutoRecord SpecularScale = 1;//高光度范围 默认1 (物理)\r\n protected _ShowHelper = true;// Light.DefaultShowHelpr; 默认绘制的灯光总是有助手,避免让用户困惑\r\n protected _CaseShadow = true;//投射阴影\r\n protected _OpenLight = Light.DefaultOpenLight;//开灯\r\n static DefaultOpenLight = false;\r\n static DefaultCaseShadow = false;\r\n static DefaultShowHelpr = false;\r\n\r\n Clone()\r\n {\r\n return CADObject.prototype.Clone.call(this);\r\n }\r\n\r\n get CaseShadow() { return this._CaseShadow; }\r\n\r\n set CaseShadow(v: boolean)\r\n {\r\n if (v === this._CaseShadow) return;\r\n this.WriteAllObjectRecord();\r\n this._CaseShadow = v;\r\n this.Update();\r\n }\r\n\r\n get OpenLight() { return this._OpenLight; }\r\n\r\n set OpenLight(v: boolean)\r\n {\r\n if (v === this._OpenLight) return;\r\n this._OpenLight = v;\r\n this.Update();\r\n }\r\n\r\n //因为有set 所以必须11对应\r\n get Position()\r\n {\r\n return super.Position;\r\n }\r\n\r\n set Position(v: Vector3)\r\n {\r\n super.Position = v;\r\n this.Update(UpdateDraw.Geometry);\r\n }\r\n\r\n get Color()\r\n {\r\n return this._LightColor;\r\n }\r\n set Color(color: Color)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._LightColor = color;\r\n this.Update();\r\n }\r\n get ShowHelper()\r\n {\r\n return this._ShowHelper;\r\n }\r\n set ShowHelper(v: boolean)\r\n {\r\n if (v === this._ShowHelper) return;\r\n this.WriteAllObjectRecord();\r\n this._ShowHelper = v;\r\n this.Update();\r\n }\r\n\r\n get BoundingBoxInOCS()\r\n {\r\n return new Box3Ext(new Vector3(-0.05, -0.05, -0.05), new Vector3(0.05, 0.05, 0.05));\r\n }\r\n\r\n get BoundingBox()\r\n {\r\n return new Box3().setFromCenterAndSize(this.Position, new Vector3(0.1, 0.1, 0.1));\r\n }\r\n\r\n GetObjectSnapPoints(\r\n snapMode: ObjectSnapMode,\r\n pickPoint: Vector3,\r\n lastPoint: Vector3\r\n ): Vector3[]\r\n {\r\n switch (snapMode)\r\n {\r\n case ObjectSnapMode.End:\r\n return this.GetGripPoints();\r\n }\r\n return [];\r\n }\r\n GetGripPoints(): Array\r\n {\r\n return [this.Position];\r\n }\r\n\r\n MoveGripPoints(indexList: number[], vec: Vector3)\r\n {\r\n this.ApplyMatrix(MoveMatrix(vec));\r\n this.Update();\r\n }\r\n UpdateDrawObject(type: RenderType, en: TLight)\r\n {\r\n en.intensity = this.WebIntensity;\r\n en.color = this._LightColor;\r\n en.visible = this._OpenLight;\r\n }\r\n get Intensity()\r\n {\r\n return this._Intensity;\r\n }\r\n\r\n set Intensity(v: number)\r\n {\r\n if (equaln(v, this._Intensity, 0.01)) return;\r\n this.WriteAllObjectRecord();\r\n this._Intensity = v;\r\n this.Update();\r\n }\r\n\r\n get WebIntensity()\r\n {\r\n return this._Intensity;\r\n }\r\n protected _ReadFile(file: CADFiler)\r\n {\r\n super._ReadFile(file);\r\n let ver = file.Read();\r\n this._LightColor = new Color(file.Read());\r\n this._Intensity = file.Read();\r\n if (typeof this._Intensity === \"string\")\r\n this._Intensity = parseFloat(this._Intensity);\r\n this._ShowHelper = file.Read();\r\n\r\n if (ver > 1)\r\n {\r\n this._LightColor.r = file.Read();\r\n this._LightColor.g = file.Read();\r\n this._LightColor.b = file.Read();\r\n\r\n this.Temperature = file.Read();\r\n this.IndirectLightingIntensity = file.Read();\r\n this.SpecularScale = file.Read();\r\n this._CaseShadow = file.Read();\r\n }\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._LightColor.getStyle());\r\n file.Write(this._Intensity);\r\n file.Write(this._ShowHelper);\r\n\r\n //ver2\r\n {\r\n file.Write(this._LightColor.r);\r\n file.Write(this._LightColor.g);\r\n file.Write(this._LightColor.b);\r\n\r\n file.Write(this.Temperature);\r\n file.Write(this.IndirectLightingIntensity);\r\n file.Write(this.SpecularScale);\r\n file.Write(this._CaseShadow);\r\n }\r\n }\r\n}\r\n","import { AmbientLight as TAmbientLight, Object3D } from \"three\";\r\nimport { RenderType } from \"../../GraphicsSystem/RenderType\";\r\nimport { Factory } from \"../CADFactory\";\r\nimport { Light } from \"./Light\";\r\n\r\n@Factory\r\nexport class AmbientLight extends Light\r\n{\r\n protected _Intensity = 0.9;\r\n protected _OpenLight = true;//开灯\r\n protected _CaseShadow: boolean = false;\r\n protected InitDrawObject(renderType: RenderType = RenderType.Wireframe): Object3D\r\n {\r\n let light = new TAmbientLight(this.Color, this._Intensity);\r\n return light;\r\n }\r\n}\r\n","import { Color, DirectionalLight, DirectionalLightHelper, LineBasicMaterial, Matrix4, Mesh, SphereBufferGeometry } from \"three\";\r\n\r\nexport class SunLightHelper extends DirectionalLightHelper\r\n{\r\n light: DirectionalLight;\r\n\r\n children: [Mesh];\r\n size: number;\r\n /**\r\n * @default undefined\r\n */\r\n color: Color | string | number;\r\n matrix: Matrix4;\r\n\r\n constructor(light: DirectionalLight, size: number, color?: Color)\r\n {\r\n const geometry = new SphereBufferGeometry(1, 16, 16);\r\n const material = new LineBasicMaterial({ fog: false });\r\n material.color = light.color;\r\n super(light, size, color);\r\n\r\n this.children[0].geometry = geometry.scale(400, 400, 400);\r\n this.children[0].material = material;\r\n\r\n this.light = light;\r\n this.color = color;\r\n }\r\n\r\n /**\r\n * @default false\r\n */\r\n matrixAutoUpdate: boolean;\r\n}\r\n","import { DirectionalLight as TDirectionalLight, Group, MathUtils, Matrix3, Matrix4, Object3D, Vector2, Vector3 } from \"three\";\r\nimport { UpdateDraw } from \"../../Common/Status\";\r\nimport { equalv3 } 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 { Light } from \"./Light\";\r\nimport { SunLightHelper } from \"./SunLightHelper\";\r\n\r\n/**\r\n * 平行光源\r\n */\r\n@Factory\r\nexport class DirectionalLight extends Light\r\n{\r\n protected _Intensity: number = 50; //强度\r\n //光源源角度 0-50\r\n @AutoRecord LightSourceAngle = 0.5357;\r\n //源软角度角度\r\n @AutoRecord LightSourceSoftAngle = 0;\r\n\r\n OnlyRenderType = true;\r\n private _Target = new Vector3();\r\n protected _ShowHelper = false;\r\n protected _OpenLight = true;//开灯\r\n\r\n constructor()\r\n {\r\n super();\r\n this.SpecularScale = 0;//高光度范围 默认0 关闭太阳光反射\r\n }\r\n\r\n //避免被删除\r\n Erase(isErase: boolean = true)\r\n {\r\n this.ShowHelper = !isErase;\r\n }\r\n\r\n /**\r\n * @param theta 身体旋转 角度(deg)\r\n * @param phi 头部旋转 角度(deg)\r\n */\r\n SetRotate(thetaDeg: number, phiDeg: number)\r\n {\r\n let phi = (180 - phiDeg) * MathUtils.DEG2RAD;\r\n\r\n let v = new Vector3(Math.cos(phi), 0, Math.sin(phi));\r\n\r\n let r = new Matrix3().rotate(MathUtils.DEG2RAD * thetaDeg);\r\n\r\n v.applyMatrix3(r);\r\n\r\n this.WriteAllObjectRecord();\r\n this._Target.setFromMatrixPosition(this._Matrix).sub(v);\r\n }\r\n\r\n get Target() { return this._Target.clone(); }\r\n set Target(p: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n if (!equalv3(p, this.Position))\r\n {\r\n this._Target.copy(p);\r\n this.Update();\r\n }\r\n }\r\n get WebIntensity()\r\n {\r\n let x = this._Intensity / 150;\r\n x = Math.pow(x, 0.4);\r\n return x * 1.4; // 7/5=1.25\r\n }\r\n\r\n ApplyMatrix(m: Matrix4)\r\n {\r\n super.ApplyMatrix(m);\r\n this._Target.applyMatrix4(m);\r\n this.Update(UpdateDraw.Geometry);\r\n return this;\r\n }\r\n GetGripPoints(): Array\r\n {\r\n if (this.ShowHelper)\r\n return [this.Position, this._Target];\r\n else\r\n return [];\r\n }\r\n MoveGripPoints(indexList: number[], vec: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n if (indexList[0] === 0)\r\n this.Position = this.Position.add(vec);\r\n else\r\n this.Target = this.Target.add(vec);\r\n }\r\n protected InitDrawObject(renderType: RenderType = RenderType.Wireframe): Object3D\r\n {\r\n let lightGroup = new Group();\r\n let light = new TDirectionalLight(this._LightColor, this.WebIntensity);\r\n Object.defineProperty(light, \"castShadow\", {\r\n get: () => this.CaseShadow//HostApplicationServices.isShowLightShadow //太阳光无视这个配置!\r\n });\r\n light.shadow.camera.matrixAutoUpdate = true;\r\n light.shadow.camera.near = 1;\r\n light.shadow.camera.far = 100000;\r\n light.shadow.mapSize = new Vector2(2048, 2048);\r\n let helper = new SunLightHelper(light, 500);\r\n helper.lightPlane.matrixAutoUpdate = true;\r\n lightGroup.add(light, helper);\r\n\r\n lightGroup.matrixAutoUpdate = false;\r\n lightGroup.matrix.copy(this._Matrix);\r\n lightGroup.updateMatrixWorld(true);\r\n this.UpdateDrawObject(renderType, lightGroup);\r\n return lightGroup;\r\n }\r\n UpdateDrawObject(type: RenderType, en: Object3D)\r\n {\r\n let light = en.children[0] as TDirectionalLight;\r\n super.UpdateDrawObject(type, light);\r\n light.target.position.copy(this._Target);\r\n light.target.updateMatrix();\r\n light.target.updateMatrixWorld(true);\r\n\r\n en.updateMatrixWorld(true);\r\n\r\n let helper = en.children[1] as SunLightHelper;\r\n helper.visible = this._ShowHelper;\r\n if (this._ShowHelper)\r\n {\r\n helper.update();\r\n helper.matrix = light.matrix;\r\n helper.targetLine.updateMatrix();\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();\r\n this._Target.fromArray(file.Read());\r\n\r\n if (ver > 1)\r\n {\r\n this.LightSourceAngle = file.Read();\r\n this.LightSourceSoftAngle = file.Read();\r\n }\r\n }\r\n WriteFile(file: CADFiler)\r\n {\r\n super.WriteFile(file);\r\n file.Write(2);//ver\r\n file.Write(this._Target.toArray());\r\n\r\n //ver2\r\n file.Write(this.LightSourceAngle);\r\n file.Write(this.LightSourceSoftAngle);\r\n }\r\n}\r\n","import { Color, HemisphereLight as THemisphereLight, Light as TLight, Object3D } from \"three\";\r\nimport { RenderType } from \"../../GraphicsSystem/RenderType\";\r\nimport { AutoRecord } from \"../AutoRecord\";\r\nimport { Factory } from \"../CADFactory\";\r\nimport { CADFiler } from \"../CADFiler\";\r\nimport { Light } from \"./Light\";\r\n\r\n@Factory\r\nexport class HemisphereLight extends Light\r\n{\r\n private _GroundColor = new Color(); //UE有这个属性 但是默认是黑的\r\n protected _Intensity = 1;\r\n @AutoRecord AutoExposure = false;//自动曝光\r\n @AutoRecord ExposureCompensation = 1;//默认为1\r\n protected _OpenLight = true;//开灯\r\n\r\n get GroundColor() { return this._GroundColor; }\r\n\r\n set GroundColor(color: Color)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._GroundColor = color;\r\n this.Update();\r\n }\r\n\r\n get WebIntensity()\r\n {\r\n return Math.min(this._Intensity, 4) / 5;\r\n }\r\n\r\n protected InitDrawObject(renderType: RenderType = RenderType.Wireframe): Object3D\r\n {\r\n let light = new THemisphereLight(this.Color, this._LightColor, this.WebIntensity);\r\n return light;\r\n }\r\n\r\n UpdateDrawObject(type: RenderType, en: TLight)\r\n {\r\n super.UpdateDrawObject(type, en);\r\n let lg = en as THemisphereLight;\r\n lg.groundColor = this._GroundColor;\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._GroundColor.fromArray(file.Read());\r\n\r\n if (ver > 1)\r\n {\r\n this.AutoExposure = file.Read();\r\n this.ExposureCompensation = file.Read();\r\n }\r\n\r\n }\r\n\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n super.WriteFile(file);\r\n file.Write(2);//ver\r\n file.Write(this._GroundColor.toArray());\r\n\r\n //ver2\r\n file.Write(this.AutoExposure);\r\n file.Write(this.ExposureCompensation);\r\n }\r\n}\r\n","import { SymbolTable } from \"./SymbolTable\";\r\nimport { PhysicalMaterialRecord } from \"./PhysicalMaterialRecord\";\r\n\r\nexport class MaterialTable extends SymbolTable\r\n{\r\n\r\n get Materials()\r\n {\r\n return this.Symbols as Map;\r\n }\r\n\r\n Remove(record: PhysicalMaterialRecord)\r\n {\r\n return super.Remove(record);\r\n }\r\n\r\n GetAt(name: string): PhysicalMaterialRecord | undefined\r\n {\r\n return super.GetAt(name) as PhysicalMaterialRecord;\r\n }\r\n\r\n Has(name: string)\r\n {\r\n return super.Has(name);\r\n }\r\n\r\n AllocateName(name: string = \"材质\"): string\r\n {\r\n return super.AllocateName(name);\r\n }\r\n}\r\n","import { Status } from \"../../Common/Status\";\r\nimport { Factory } from \"../CADFactory\";\r\nimport { ObjectCollection } from \"../ObjectCollection\";\r\nimport { ProcessingGroupRecord } from \"./ProcessingGroupRecord\";\r\n\r\n@Factory\r\nexport class ProcessingGroupTable extends ObjectCollection\r\n{\r\n Append(object: ProcessingGroupRecord, isCheckObjectCleanly = true)\r\n {\r\n let id = super.Append(object, isCheckObjectCleanly);\r\n\r\n if (id)\r\n object.Owner = this.Id;\r\n\r\n return id;\r\n }\r\n\r\n Add(record: ProcessingGroupRecord, isCheckObjectCleanly = true): Status\r\n {\r\n let id = this.Append(record, isCheckObjectCleanly);\r\n if (id)\r\n return Status.True;\r\n else\r\n return Status.False;\r\n }\r\n\r\n Remove(record: ProcessingGroupRecord)\r\n {\r\n return super.Remove(record);\r\n }\r\n}\r\n","import { Factory } from \"../CADFactory\";\r\nimport { ObjectCollection } from \"../ObjectCollection\";\r\nimport { TemplateRecord } from \"./TemplateRecord\";\r\nimport { Status } from \"../../Common/Status\";\r\n\r\n@Factory\r\nexport class TemplateTable extends ObjectCollection\r\n{\r\n Append(object: TemplateRecord, isCheckObjectCleanly = true)\r\n {\r\n let id = super.Append(object, isCheckObjectCleanly);\r\n\r\n if (id)\r\n object.Owner = this.Id;\r\n\r\n return id;\r\n }\r\n\r\n Add(record: TemplateRecord, isCheckObjectCleanly = true): Status\r\n {\r\n let id = this.Append(record, isCheckObjectCleanly);\r\n if (id)\r\n return Status.True;\r\n else\r\n return Status.False;\r\n }\r\n}\r\n","import { MirroredRepeatWrapping, Texture, Wrapping } from 'three';\r\nimport { AutoRecord } from './AutoRecord';\r\nimport { Factory } from './CADFactory';\r\nimport { CADFiler } from './CADFiler';\r\nimport { SymbolTableRecord } from './SymbolTableRecord';\r\n\r\n/**\r\n * 数据化的贴图类.实现了序列化.\r\n */\r\n@Factory\r\nexport class TextureTableRecord extends SymbolTableRecord\r\n{\r\n private wrapS: Wrapping = MirroredRepeatWrapping;//横向(水平)平铺\r\n private wrapT: Wrapping = MirroredRepeatWrapping;//竖向(垂直)平铺\r\n @AutoRecord repeatX: number = 1;//这里已经变成了贴图的尺寸了\r\n @AutoRecord repeatY: number = 1;\r\n @AutoRecord rotation: number = 0;//旋转 弧度deg\r\n @AutoRecord imageUrl: string = \"\";\r\n\r\n @AutoRecord moveX = 0;//材质位移\r\n @AutoRecord moveY = 0;\r\n\r\n @AutoRecord imgUrl: string = \"\";\r\n\r\n set WrapS(wrap: Wrapping)\r\n {\r\n if (wrap !== this.wrapS)\r\n {\r\n this.WriteAllObjectRecord();\r\n this.wrapS = wrap;\r\n }\r\n }\r\n get WrapS() { return this.wrapS; };\r\n get WrapT() { return this.wrapT; };\r\n\r\n set WrapT(wrap: Wrapping)\r\n {\r\n if (wrap !== this.wrapT)\r\n {\r\n this.WriteAllObjectRecord();\r\n this.wrapT = wrap;\r\n }\r\n }\r\n\r\n\r\n private texture: Texture = new Texture();\r\n async Update()\r\n {\r\n return \"\";\r\n }\r\n\r\n private waits: Function[] = [];\r\n async WaitUpdate()\r\n {\r\n if (this.texture.image) return;\r\n let p = new Promise((res, rej) =>\r\n {\r\n this.waits.push(res);\r\n });\r\n return p;\r\n }\r\n GetThreeTexture()\r\n {\r\n return this.texture;\r\n }\r\n\r\n //#region -------------------------File-------------------------\r\n ReadFile(file: CADFiler)\r\n {\r\n super.ReadFile(file);\r\n let ver = file.Read();\r\n this.wrapS = file.Read();\r\n this.wrapT = file.Read();\r\n this.repeatX = file.Read();\r\n this.repeatY = file.Read();\r\n this.rotation = file.Read();\r\n this.imageUrl = file.Read();\r\n\r\n if (ver > 1)\r\n {\r\n this.moveX = file.Read();\r\n this.moveY = file.Read();\r\n }\r\n\r\n this.Update();\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n super.WriteFile(file);\r\n file.Write(2);\r\n\r\n file.Write(this.wrapS);\r\n file.Write(this.wrapT);\r\n file.Write(this.repeatX);\r\n file.Write(this.repeatY);\r\n file.Write(this.rotation);\r\n file.Write(this.imageUrl);\r\n\r\n file.Write(this.moveX);\r\n file.Write(this.moveY);\r\n }\r\n //#endregion\r\n}\r\n","import { MathUtils } from \"three\";\r\nimport { Factory } from \"./CADFactory\";\r\nimport { SymbolTable } from \"./SymbolTable\";\r\nimport { TextureTableRecord } from \"./Texture\";\r\n\r\n@Factory\r\nexport class TextureTable extends SymbolTable\r\n{\r\n AllocateName()\r\n {\r\n do\r\n {\r\n let name = MathUtils.generateUUID();\r\n if (!this.Has(name))\r\n return name;\r\n } while (true);\r\n }\r\n get Textures(): Map\r\n {\r\n return this.Symbols as Map;\r\n }\r\n}\r\n","import { DeepCloneFiler } from \"./DeepCloneFiler\";\r\nimport { ObjectId } from \"./ObjectId\";\r\n\r\nexport class WblockCloneFiler extends DeepCloneFiler\r\n{\r\n\r\n}\r\n\r\n/**\r\n * 用于插入图纸,对所有的软引用变成硬引用,以保证所有的关联对象都能被插入进来\r\n */\r\nexport class WblockCloneFiler2 extends DeepCloneFiler\r\n{\r\n WriteObjectId(id: ObjectId): this\r\n {\r\n if (id && id.Index >= 100 && !this.cloned.has(id.Index)) //当存在id时,表示对象正在被拷贝,或者已经拷贝完成\r\n this.hardObjectIds.add(id.Index);\r\n return super.WriteObjectId(id);\r\n }\r\n}\r\n","import { MirroredRepeatWrapping, Vector3 } from 'three';\r\nimport { HostApplicationServices } from '../ApplicationServices/HostApplicationServices';\r\nimport { DuplicateRecordCloning } from '../Common/Status';\r\nimport { BlockTableRecord } from './BlockTableRecord';\r\nimport { Factory } from './CADFactory';\r\nimport { CADFiler } from './CADFiler';\r\nimport { CADObject } from './CADObject';\r\nimport { CameraSnapshootRecord } from './CameraSnapshoot/CameraSnapshootRecord';\r\nimport { DeepCloneFiler } from './DeepCloneFiler';\r\nimport { Entity } from './Entity/Entity';\r\nimport { GroupTable } from './GroupTable';\r\nimport { HistoricManage } from './HistoricManage';\r\nimport { IdMaping } from './IdMaping';\r\nimport { AmbientLight } from './Lights/AmbientLight';\r\nimport { DirectionalLight } from './Lights/DirectionalLight';\r\nimport { HemisphereLight } from './Lights/HemisphereLight';\r\nimport { Light } from './Lights/Light';\r\nimport { MaterialTable } from './MaterialTable';\r\nimport { ObjectId, RelevancyType } from './ObjectId';\r\nimport { OwnerContainer } from './OwnerContainer';\r\nimport { PhysicalMaterialRecord } from './PhysicalMaterialRecord';\r\nimport { ProcessingGroupTable } from './ProcessingGroup/ProcessingGroupTable';\r\nimport { SymbolTable } from './SymbolTable';\r\nimport { SymbolTableRecord } from './SymbolTableRecord';\r\nimport { TemplateTable } from './Template/TemplateTable';\r\nimport { TextureTableRecord } from './Texture';\r\nimport { TextureTable } from './TextureTable';\r\nimport { WblockCloneFiler } from './WblockCloneFiler';\r\n\r\n@Factory\r\nexport class Database\r\n{\r\n //历史记录(撤销重做)\r\n hm: HistoricManage;\r\n\r\n //各种表(材质 贴图 模块 编组 加工组)\r\n MaterialTable: MaterialTable;\r\n TextureTable: TextureTable;\r\n TemplateTable: TemplateTable;\r\n GroupTable: GroupTable;\r\n ProcessingGroupTable: ProcessingGroupTable;\r\n\r\n //模型空间(里面有模型空间的实体列表)\r\n ModelSpace: BlockTableRecord;\r\n //布局空间\r\n LayoutSpace: BlockTableRecord;\r\n //模型空间的灯光\r\n Lights: BlockTableRecord;\r\n\r\n //相机快照记录\r\n CameraSnapshoots: CameraSnapshootRecord[] = [];\r\n\r\n //固定灯源(天光 太阳光 环境光)\r\n AmbientLight: AmbientLight;\r\n SunLight: DirectionalLight;\r\n HemisphereLight: HemisphereLight;\r\n\r\n //默认材质\r\n DefaultMaterial: PhysicalMaterialRecord;\r\n\r\n private idIndex = 1;\r\n private idMap = new Map();\r\n constructor(buildDefaultDrawing = false, private defaultDatabase = false, disableHistoric = false)\r\n {\r\n this.ModelSpace = new BlockTableRecord().SetOwnerDatabase(this);\r\n this.MaterialTable = new MaterialTable().SetOwnerDatabase(this);\r\n this.TextureTable = new TextureTable().SetOwnerDatabase(this);\r\n this.TemplateTable = new TemplateTable().SetOwnerDatabase(this);\r\n this.GroupTable = new GroupTable().SetOwnerDatabase(this);\r\n this.Lights = new BlockTableRecord().SetOwnerDatabase(this);\r\n this.ProcessingGroupTable = new ProcessingGroupTable().SetOwnerDatabase(this);\r\n this.hm = new HistoricManage().SetDefaultDb(this);\r\n this.hm.Enable = false;\r\n this.LayoutSpace = new BlockTableRecord().SetOwnerDatabase(this);\r\n\r\n if (buildDefaultDrawing)\r\n {\r\n this.idIndex = 70;\r\n this.DefaultMaterial = new PhysicalMaterialRecord();\r\n this.DefaultMaterial.Name = \"默认\";\r\n let texture = new TextureTableRecord();\r\n texture.WrapS = MirroredRepeatWrapping;\r\n texture.WrapT = MirroredRepeatWrapping;\r\n texture.repeatX = 1;\r\n texture.repeatY = 1;\r\n this.TextureTable.Add(texture);\r\n this.DefaultMaterial.map = texture.Id;\r\n this.DefaultMaterial.roughnessMap = texture.Id;\r\n this.DefaultMaterial.bumpMap = texture.Id;\r\n\r\n this.MaterialTable.Add(this.DefaultMaterial);\r\n\r\n texture.Update();\r\n this.SettingDefaultMaterial();\r\n\r\n //初始化灯光\r\n this.InitLight();\r\n }\r\n\r\n this.hm.Enable = !disableHistoric;\r\n\r\n //100以内的id是系统保留id,默认初始化内部对象.\r\n this.idIndex = 100;\r\n }\r\n\r\n private InitLight()\r\n {\r\n this.idIndex = 80;\r\n this.AmbientLight = new AmbientLight();\r\n this.SunLight = new DirectionalLight();\r\n this.SunLight.OCSNoClone.setPosition(4000, -4000, 4000);\r\n\r\n this.HemisphereLight = new HemisphereLight();\r\n this.SunLight.Visible = true;\r\n this.HemisphereLight.Visible = true;\r\n this.Lights.Add(this.AmbientLight);\r\n this.Lights.Add(this.SunLight);\r\n this.Lights.Add(this.HemisphereLight);\r\n }\r\n\r\n SettingDefaultMaterial()\r\n {\r\n if (!this.defaultDatabase)\r\n return;\r\n\r\n this.DefaultMaterial = this.GetObjectId(71)?.Object as PhysicalMaterialRecord ?? this.DefaultMaterial;\r\n this.DefaultMaterial.Update();\r\n HostApplicationServices.DefaultMeshMaterial = this.DefaultMaterial.Material;\r\n }\r\n\r\n Destroy()\r\n {\r\n this.idMap.clear();\r\n this.ModelSpace.Destroy();\r\n this.LayoutSpace.Destroy();\r\n this.MaterialTable.Destroy();\r\n this.TextureTable.Destroy();\r\n this.TemplateTable.Destroy();\r\n this.GroupTable.Destroy();\r\n this.Lights.Destroy();\r\n this.ProcessingGroupTable.Destroy();\r\n this.hm.Destroy();\r\n this.CameraSnapshoots.length = 0;\r\n this.hm.historyRecord.length = 0;\r\n\r\n this.idIndex = 1;\r\n this.ModelSpace.SetOwnerDatabase(this);\r\n this.MaterialTable.SetOwnerDatabase(this);\r\n this.TextureTable.SetOwnerDatabase(this);\r\n this.TemplateTable.SetOwnerDatabase(this);\r\n this.GroupTable.SetOwnerDatabase(this);\r\n this.Lights.SetOwnerDatabase(this);\r\n this.ProcessingGroupTable.SetOwnerDatabase(this);\r\n this.hm.SetDefaultDb(this);\r\n this.LayoutSpace.SetOwnerDatabase(this);\r\n this.idIndex = 100;\r\n }\r\n\r\n //#region Serialize\r\n\r\n FileWrite(file = new CADFiler): CADFiler\r\n {\r\n file.Write(8);//ver;\r\n file.Write(this.idIndex);\r\n this.ModelSpace.WriteFile(file);\r\n this.TextureTable.WriteFile(file);\r\n this.MaterialTable.WriteFile(file);\r\n this.hm.WriteFile(file);\r\n this.TemplateTable.WriteFile(file);\r\n this.GroupTable.WriteFile(file);\r\n this.Lights.WriteFile(file);\r\n this.ProcessingGroupTable.WriteFile(file);\r\n\r\n this.LayoutSpace.WriteFile(file);\r\n\r\n file.Write(this.CameraSnapshoots.length);\r\n for (let r of this.CameraSnapshoots)\r\n r.WriteFile(file);\r\n\r\n return file;\r\n }\r\n FileRead(file: CADFiler)\r\n {\r\n Entity.__ReadFileIng__ = true;\r\n this.hm.doing = true;\r\n\r\n this.Destroy();\r\n file.database = this;\r\n let ver = file.Read();\r\n this.idIndex = file.Read();\r\n this.ModelSpace.ReadFile(file);\r\n this.TextureTable.ReadFile(file);\r\n this.MaterialTable.ReadFile(file);\r\n this.hm.ReadFile(file);\r\n if (ver > 1)\r\n this.TemplateTable.ReadFile(file);\r\n if (ver > 2)\r\n this.GroupTable.ReadFile(file);\r\n if (ver > 3)\r\n {\r\n this.Lights.ReadFile(file);\r\n this.AmbientLight = this.Lights.Entitys[0] as AmbientLight ?? this.AmbientLight;\r\n this.SunLight = this.Lights.Entitys[1] as DirectionalLight ?? this.SunLight;\r\n this.HemisphereLight = this.Lights.Entitys[2] as HemisphereLight ?? this.HemisphereLight;\r\n }\r\n else\r\n {\r\n let index = this.idIndex;\r\n this.InitLight();\r\n this.idIndex = index;\r\n }\r\n\r\n if (ver > 4)\r\n this.ProcessingGroupTable.ReadFile(file);\r\n\r\n if (ver > 5)\r\n this.LayoutSpace.ReadFile(file);\r\n\r\n if (ver < 8)//旧版本数据错误 修复它\r\n {\r\n for (let e of this.LayoutSpace.Entitys)\r\n e.Owner = this.LayoutSpace.Id;\r\n }\r\n\r\n if (ver > 6)\r\n {\r\n let count = file.Read();\r\n this.CameraSnapshoots.length = 0;\r\n for (let i = 0; i < count; i++)\r\n {\r\n let r = new CameraSnapshootRecord;\r\n r.ReadFile(file);\r\n this.CameraSnapshoots.push(r);\r\n }\r\n }\r\n\r\n this.SettingDefaultMaterial();\r\n\r\n this.hm.doing = false;\r\n Entity.__ReadFileIng__ = false;\r\n return this;\r\n }\r\n\r\n //#endregion\r\n\r\n //#region Clone\r\n\r\n /**\r\n * 单个数据库内克隆对象(objects),并将他们附加到指定的容器对象(owner).\r\n * @param objects 被克隆的对象\r\n * @param owner 克隆对象的容器\r\n * @param idMap id映射\r\n * @param deferXlation 指示是否应该进行ID转换\r\n * @returns 新克隆的对象列表\r\n */\r\n DeepCloneObjects(\r\n objects: CADObject[],\r\n owner: OwnerContainer,\r\n idMap: IdMaping = new Map(),\r\n deferXlation = false\r\n ): CADObject[]\r\n {\r\n let f = new DeepCloneFiler();\r\n let newObjects: CADObject[] = [];\r\n for (let e of objects)\r\n {\r\n let newE = e instanceof Light ? this.DeepCloneObject(f, e, this.Lights, idMap) : this.DeepCloneObject(f, e, owner, idMap); //灯光拷贝到Lights\r\n if (newE)\r\n newObjects.push(newE);\r\n }\r\n\r\n //对于无法新拷贝的实体,指向原先的对象(需要是软拷贝才行)\r\n for (let [index, objectId] of f.idMaping)\r\n {\r\n if (!objectId.Object && objectId._RelevancyType === RelevancyType.Soft)\r\n {\r\n let oldId = this.GetObjectId(index);\r\n if (oldId)\r\n {\r\n objectId.Index = index;\r\n objectId.Object = oldId.Object;\r\n }\r\n }\r\n }\r\n\r\n this.ClearEmptyAssoc(f);\r\n return newObjects;\r\n }\r\n\r\n /**\r\n * 清理拷贝后的实体空引用\r\n */\r\n private ClearEmptyAssoc(f: DeepCloneFiler)\r\n {\r\n let tempF = new CADFiler();\r\n tempF.database = this;\r\n for (let [index, objectId] of f.idMaping)\r\n {\r\n if (objectId.Object && objectId.Index !== index)\r\n {\r\n tempF.Clear();\r\n objectId.Object.WriteFile(tempF);\r\n tempF.Reset();\r\n if (objectId.Object instanceof Entity)\r\n objectId.Object.AutoUpdate = false;\r\n objectId.Object.ReadFile(tempF);\r\n if (objectId.Object instanceof Entity)\r\n objectId.Object.AutoUpdate = true;\r\n }\r\n }\r\n }\r\n\r\n DeepCloneObject(\r\n filer: DeepCloneFiler,\r\n object: CADObject,\r\n owner: OwnerContainer,\r\n idMap: IdMaping = new Map(),\r\n ): CADObject | undefined\r\n {\r\n if (idMap.has(object.Id))\r\n return idMap.get(object.Id).Object;\r\n\r\n if (owner instanceof SymbolTable)//应该不能直接拷贝这类型的实体,因为会直接名称重复\r\n return;\r\n\r\n filer.Data.length = 0;\r\n filer.Reset();\r\n filer.WriteObject(object);\r\n let newObject = filer.ReadObject();\r\n if (!(newObject instanceof Light) && newObject instanceof Entity)//Light类的对象不能拷贝绘制 否则出错\r\n newObject.CloneDrawObject(object as Entity);\r\n this.AllocationObjectId(newObject);\r\n owner.Add(newObject, false);\r\n idMap.set(object.Id, newObject.Id);\r\n\r\n //拷贝硬绑定对象\r\n while (filer.hardObjectIds.size > 0)\r\n {\r\n let hardObjectIds = filer.hardObjectIds;\r\n filer.hardObjectIds = new Set();\r\n for (let idIndex of hardObjectIds)\r\n {\r\n let objectId = this.GetObjectId(idIndex, false);\r\n let object = objectId?.Object;\r\n if (object === undefined)\r\n continue;//对象已经被删除\r\n if (!object.Owner)\r\n console.error(\"无主?\");\r\n if (object.Owner.Object instanceof SymbolTable)\r\n //当我们拷贝样式(图层,材质,标注样式,文字样式(这种以Name-Value对应的记录)时,由于名称不能重复,所以拷贝会失败,这时我们把它转换为软引用,我们就可以避免拷贝,并且保持引用正常)\r\n filer.idMaping.get(idIndex)._RelevancyType = RelevancyType.Soft;\r\n else\r\n this.DeepCloneObject(filer, object, object.Owner.Object as unknown as OwnerContainer, idMap);//指向新对象\r\n }\r\n }\r\n return newObject;\r\n }\r\n\r\n /**\r\n * 将来自不同数据库的对象列表拷贝到本数据库中.\r\n * 当前支持使用HardId模式来硬关联某个对象,使该对象能够在WblockClone时一起被带过来.\r\n * 当前不支持硬关联对象的Owner不是默认的容器.\r\n * 如果需要这么做,请将该对象的Owner设置为Hard关联\r\n * @param objects 对象不能属于本数据库\r\n * @param owner 克隆对象的新容器\r\n * @param idMap id映射\r\n */\r\n WblockCloneObejcts(\r\n objects: CADObject[],\r\n owner: OwnerContainer,\r\n idMap: IdMaping,\r\n drc: DuplicateRecordCloning,\r\n filer = new WblockCloneFiler\r\n ): CADObject[]\r\n {\r\n Entity.__ReadFileIng__ = true;\r\n\r\n for (let obj of objects)\r\n if (obj instanceof Light)\r\n this.WblockCloneObject(obj, this.Lights, idMap, drc, filer);\r\n else\r\n this.WblockCloneObject(obj, owner, idMap, drc, filer);\r\n\r\n this.ClearEmptyAssoc(filer);\r\n\r\n Entity.__ReadFileIng__ = false;\r\n return objects.map(o => idMap.get(o.Id).Object);\r\n }\r\n\r\n /**\r\n * 克隆引用对象 WriteHardObjectId\r\n */\r\n private WblockCloneReferenceObject(\r\n object: CADObject,\r\n f: WblockCloneFiler,\r\n idMap: Map,\r\n drc: DuplicateRecordCloning)\r\n {\r\n let oldData = f.Data;\r\n f.Data = [];\r\n\r\n let oldDb = object.Db;\r\n let hardObjectIds = f.hardObjectIds;\r\n f.hardObjectIds = new Set();\r\n for (let idIndex of hardObjectIds)\r\n {\r\n let oldId = oldDb.GetObjectId(idIndex);\r\n if (!(oldId?.Object) || oldId.IsErase) continue;//对已经被删除的对象不进行拷贝\r\n //使用旧的OwnerId得到新的OwnerId,假设所有者都是数据库默认存在的.\r\n //TODO: 当OwnerId>100时,表示这个所有者不是数据库里面默认存在的,那么应该将Owner拷贝过来.\r\n let newOwnerId = this.GetObjectId(oldId.Object.Owner.Index); //owner.Db === this\r\n let newOwner = newOwnerId.Object as SymbolTable;\r\n this.WblockCloneObject(oldId.Object, newOwner, idMap, drc, f);\r\n }\r\n\r\n f.Data = oldData;\r\n }\r\n\r\n private WblockCloneObject(\r\n object: CADObject,\r\n owner: OwnerContainer,\r\n idMap: IdMaping,\r\n drc: DuplicateRecordCloning,\r\n filer: WblockCloneFiler\r\n )\r\n {\r\n //克隆的对象有可能被其他的对象依赖并且克隆完毕了.\r\n let cloneId = filer.idMaping.get(object.Id.Index);\r\n if (cloneId && cloneId.Object)\r\n return;\r\n\r\n filer.Data.length = 0;\r\n //表示该对象已经被拷贝了\r\n filer.cloned.add(object.Id.Index);\r\n if (owner instanceof SymbolTable)\r\n {\r\n let record = object as SymbolTableRecord;\r\n let name = record.Name;\r\n if (owner.Has(name))//名称重复\r\n {\r\n let status = drc;\r\n if (status === DuplicateRecordCloning.Rename)\r\n {\r\n //new name\r\n for (let i = 1; ; i++)\r\n {\r\n let nname = `${name}(${i})`;\r\n if (!owner.Has(nname))\r\n {\r\n name = nname;\r\n break;\r\n }\r\n }\r\n\r\n filer.WriteObject(record);\r\n this.WblockCloneReferenceObject(record, filer, idMap, drc);\r\n filer.Reset();\r\n let newRecord = filer.ReadObject() as SymbolTableRecord;\r\n newRecord.Owner = undefined;\r\n newRecord.Name = name;\r\n this.AllocationObjectId(newRecord);\r\n owner.Add(newRecord, false);\r\n idMap.set(object.Id, newRecord.Id);\r\n }\r\n else if (status === DuplicateRecordCloning.Replace)\r\n {\r\n let oldRecord = owner.GetAt(name);\r\n //将f的id映射设置为旧的id\r\n filer.idMaping.set(object.Id.Index, oldRecord.Id);\r\n\r\n record.WriteFile(filer);\r\n this.WblockCloneReferenceObject(record, filer, idMap, drc);\r\n filer.Reset();\r\n\r\n //此时重新读取的话,将会得到原先的id,实现id不变\r\n oldRecord.ReadFile(filer);\r\n oldRecord.Owner = owner.Id;\r\n idMap.set(object.Id, oldRecord.Id);\r\n }\r\n else if (status === DuplicateRecordCloning.Ignore)\r\n {\r\n let oldRecord = owner.GetAt(name);\r\n filer.idMaping.set(object.Id.Index, oldRecord.Id);\r\n idMap.set(object.Id, oldRecord.Id);\r\n }\r\n return;\r\n }\r\n }\r\n\r\n filer.WriteObject(object);\r\n this.WblockCloneReferenceObject(object, filer, idMap, drc);\r\n filer.Reset();\r\n let newObject = filer.ReadObject() as SymbolTableRecord;\r\n this.AllocationObjectId(newObject); //先给予Id,避免历史记录里面没有id\r\n if (owner === this.ModelSpace && newObject instanceof Entity)\r\n (newObject).CloneDrawObject(object as Entity);\r\n owner.Add(newObject, false);\r\n idMap.set(object.Id, newObject.Id);\r\n }\r\n\r\n /**\r\n * 为拷贝出来的对象分配id索引,并在数据库中注册\r\n */\r\n private AllocationObjectId(object: CADObject)\r\n {\r\n object.Id.Index = this.idIndex++;\r\n this.idMap.set(object.Id.Index, object.Id);\r\n }\r\n\r\n Insert()\r\n {\r\n\r\n }\r\n\r\n /**\r\n * 写块\r\n * @param outputDatabase 输出到指定的数据库\r\n * @param objects\r\n * @param basePoint\r\n * @param cloning\r\n */\r\n Wblock(\r\n outputDataBase: Database,\r\n objects: CADObject[],\r\n basePoint: Vector3,\r\n cloning: any\r\n )\r\n {\r\n\r\n }\r\n\r\n //#endregion\r\n\r\n //#region IdManager\r\n\r\n //创建一个id,自动递增它的索引号,并且会自动加入到db的id列表中.\r\n AllocateId(): ObjectId\r\n {\r\n return this.GetObjectId(this.idIndex++, true);\r\n }\r\n\r\n GetObjectId(index: number, create = false): ObjectId\r\n {\r\n //id 从1开始,0被保留作为空id\r\n if (index === 0) return undefined;\r\n\r\n let id = this.idMap.get(index);\r\n if (!create || id) return id;\r\n\r\n id = new ObjectId(index);\r\n this.idMap.set(index, id);\r\n\r\n return id;\r\n }\r\n\r\n DeleteId(idIndex: number)\r\n {\r\n this.idMap.delete(idIndex);\r\n }\r\n\r\n //#endregion\r\n}\r\n","import { Face3, Geometry, Object3D, Vector3, Line } from \"three\";\r\nimport { RenderType } from \"../GraphicsSystem/RenderType\";\r\nimport { CADFiler } from \"./CADFiler\";\r\nimport { Entity } from \"./Entity/Entity\";\r\nimport { Factory } from \"./CADFactory\";\r\n\r\n@Factory\r\nexport class FaceEntity extends Entity\r\n{\r\n constructor(private p1: Vector3 = new Vector3(), private p2: Vector3 = new Vector3(), private p3: Vector3 = new Vector3(), private normal: Vector3 = new Vector3())\r\n {\r\n super();\r\n }\r\n\r\n protected InitDrawObject(renderType: RenderType = RenderType.Wireframe): Object3D\r\n {\r\n let g = new Geometry();\r\n\r\n g.vertices.push(this.p1, this.p2, this.p3);\r\n g.faces.push(new Face3(0, 1, 2));\r\n\r\n return new Line(g);\r\n }\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\r\n this.p1.fromArray(file.Read());\r\n this.p2.fromArray(file.Read());\r\n this.p3.fromArray(file.Read());\r\n\r\n this.normal.fromArray(file.Read());\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\r\n file.Write(this.p1.toArray());\r\n file.Write(this.p2.toArray());\r\n file.Write(this.p3.toArray());\r\n\r\n file.Write(this.normal.toArray());\r\n\r\n }\r\n //#endregion\r\n}\r\n","import { arrayRemoveIf } from \"../Common/ArrayExt\";\r\nimport { AutoRecord, ISPROXYKEY } from \"./AutoRecord\";\r\nimport { Factory } from \"./CADFactory\";\r\nimport { CADFiler } from \"./CADFiler\";\r\nimport { Entity } from \"./Entity/Entity\";\r\nimport { ObjectId } from \"./ObjectId\";\r\nimport { SymbolTableRecord } from \"./SymbolTableRecord\";\r\n\r\n@Factory\r\nexport class GroupRecord extends SymbolTableRecord\r\n{\r\n @AutoRecord Entitys: ObjectId[];\r\n\r\n constructor()\r\n {\r\n super();\r\n\r\n this.Entitys = new Proxy([], {\r\n set: (target, key, value, receiver) =>\r\n {\r\n if (Reflect.get(target, key, receiver) !== value)\r\n {\r\n if (this.WriteAllObjectRecord())\r\n {\r\n if (value instanceof ObjectId && value.Object instanceof Entity)\r\n {\r\n if (!this.Id)\r\n console.warn(\"请先添加到Database后在进行操作!\");\r\n else\r\n value.Object.GroupId = this.Id;\r\n }\r\n }\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 return Reflect.get(target, key, receiver);\r\n }\r\n });\r\n }\r\n get Name()\r\n {\r\n return this.name;\r\n }\r\n set Name(name: string)\r\n {\r\n if (name !== this.name)\r\n {\r\n this.WriteAllObjectRecord();\r\n this.name = name;\r\n }\r\n }\r\n\r\n Purge()\r\n {\r\n arrayRemoveIf(this.Entitys, id => !id || id.IsErase);\r\n }\r\n\r\n //对象从文件中读取数据,初始化自身\r\n ReadFile(file: CADFiler)\r\n {\r\n let ver = file.Read();\r\n super.ReadFile(file);\r\n let count = file.Read() as number;\r\n\r\n this.Entitys.length = 0;\r\n for (let i = 0; i < count; i++)\r\n {\r\n let id = file.ReadObjectId();\r\n if (id) this.Entitys.push(id);\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 id of this.Entitys)\r\n file.WriteObjectId(id);\r\n }\r\n\r\n}\r\n","import { Geometry, MathUtils, Matrix4, Mesh, Object3D, ShapeGeometry, Vector3 } from 'three';\r\nimport { ColorMaterial } from '../../Common/ColorPalette';\r\nimport { setRotationOnAxis } from '../../Common/Matrix4Utils';\r\nimport { UpdateDraw } from '../../Common/Status';\r\nimport { Box3Ext } from '../../Geometry/Box';\r\nimport { GetBox, MoveMatrix } from '../../Geometry/GeUtils';\r\nimport { RenderType } from '../../GraphicsSystem/RenderType';\r\nimport { equaln } from '../../Nest/Common/Util';\r\nimport { Factory } from '../CADFactory';\r\nimport { CADFiler } from '../CADFiler';\r\nimport { Entity } from '../Entity/Entity';\r\n\r\nexport enum TextAligen\r\n{\r\n LeftTop = 3, Top = 1, RightTop = 5,\r\n LeftMid = 2, Mid = 0, RightMid = 4,\r\n LeftDown = 10, Down = 8, RightDown = 12,\r\n}\r\n\r\nconst ShapeCache = new Map();\r\nexport function DisposeTextShapeCache()\r\n{\r\n for (let [key, geo] of ShapeCache)\r\n geo.dispose();\r\n ShapeCache.clear();\r\n};\r\n\r\n/**\r\n * 单行文字实体\r\n */\r\n@Factory\r\nexport class Text extends Entity\r\n{\r\n protected OnlyRenderType = true;\r\n\r\n private _Align: TextAligen = TextAligen.LeftDown;\r\n constructor(pos?: Vector3,\r\n private _TextString: string = \"\",\r\n public _FontName: string = \"songti\",\r\n private _Height: number = 60,\r\n private _TextRotation: number = 0,\r\n )\r\n {\r\n super();\r\n pos && this._Matrix.setPosition(pos);\r\n this._TextRotation && setRotationOnAxis(this._Matrix, this.Normal, MathUtils.degToRad(this._TextRotation));\r\n }\r\n get TextRotation()\r\n {\r\n return this._TextRotation;\r\n }\r\n set TextRotation(v: number)\r\n {\r\n if (this._TextRotation === v) return;\r\n\r\n this.WriteAllObjectRecord();\r\n this._TextRotation = v;\r\n this.UpdateTranslate();\r\n }\r\n get TextString()\r\n {\r\n return this._TextString;\r\n }\r\n set TextString(str: string)\r\n {\r\n if (str !== this._TextString)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._TextString = str;\r\n this.Update();\r\n }\r\n }\r\n\r\n set TextAligen(al: TextAligen)\r\n {\r\n if (al === this._Align) return;\r\n this.WriteAllObjectRecord();\r\n this._Align = al;\r\n this.UpdateTranslate();\r\n }\r\n get TextAligen()\r\n {\r\n return this._Align;\r\n }\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 (equaln(v, this._Height)) return;\r\n\r\n this.WriteAllObjectRecord();\r\n this._Height = v;\r\n this.Update(UpdateDraw.Geometry);\r\n }\r\n //创建字体对象\r\n async AsyncUpdateDrawObject(obj: Object3D, renderType: RenderType)\r\n {\r\n \r\n }\r\n /**大概宽度 */\r\n get Width()\r\n {\r\n let count = 0;\r\n for (let i = 0; i < this._TextString.length; i++)\r\n {\r\n let code = this._TextString.charCodeAt(i);\r\n if (code > 255)\r\n count++;\r\n else\r\n count += 0.5;\r\n }\r\n return count * this._Height * 1.35;\r\n }\r\n\r\n get HasBoundingBox() { return this._CacheDrawObject.has(RenderType.Wireframe); }\r\n\r\n get BoundingBox()\r\n {\r\n let obj = this._CacheDrawObject.get(RenderType.Wireframe);\r\n if (obj && obj.children.length === 1)\r\n return GetBox(obj);\r\n\r\n return this.BoundingBoxInOCS.applyMatrix4((this.OCSNoClone));\r\n }\r\n\r\n get BoundingBoxInOCS(): Box3Ext\r\n {\r\n let w = Math.max(Math.abs(this.Width / 2), 1);\r\n let h = Math.max(Math.abs(this.Height / 2), 1);\r\n let box = new Box3Ext(\r\n new Vector3(-w, -h, 0),\r\n new Vector3(w, h, 0)\r\n );\r\n\r\n let offset = new Vector3;\r\n if (this.TextAligen & TextAligen.LeftMid)\r\n offset.x = w;\r\n if (this.TextAligen & TextAligen.RightMid)\r\n offset.x = -w;\r\n if (this.TextAligen & TextAligen.Top)\r\n offset.y = -h;\r\n if (this.TextAligen & TextAligen.Down)\r\n offset.y = h;\r\n\r\n box.translate(offset);\r\n return box;\r\n }\r\n\r\n UpdateTranslate()\r\n {\r\n for (let [type, obj] of this._CacheDrawObject)\r\n {\r\n this.UpdateObjectTranslate(obj);\r\n }\r\n }\r\n\r\n private UpdateObjectTranslate(obj: Object3D)\r\n {\r\n if (obj.children.length === 1)\r\n {\r\n let mesh = obj.children[0] as Mesh;\r\n\r\n let box = mesh.geometry.boundingBox;\r\n\r\n let p = new Vector3();\r\n if (this._Align & TextAligen.LeftMid)\r\n p.x = box.min.x;\r\n else if (this._Align & TextAligen.RightMid)\r\n p.x = box.max.x;\r\n\r\n else\r\n p.x = (box.min.x + box.max.x) / 2;\r\n\r\n if (this._Align & TextAligen.Top)\r\n p.y = box.max.y;\r\n else if (this._Align & TextAligen.Down)\r\n p.y = box.min.y;\r\n\r\n else\r\n p.y = (box.min.y + box.max.y) / 2;\r\n\r\n mesh.matrix = new Matrix4().makeRotationZ(this.TextRotation).multiply(\r\n new Matrix4().setPosition(p.negate())\r\n );\r\n\r\n obj.updateMatrixWorld(true);\r\n }\r\n }\r\n\r\n ApplyMatrix(m: Matrix4): this\r\n {\r\n super.ApplyMatrix(m);\r\n return this;\r\n }\r\n\r\n protected ApplyScaleMatrix(m: Matrix4): this\r\n {\r\n this.WriteAllObjectRecord();\r\n let p1 = this.Position;\r\n let p2 = new Vector3(0, this._Height).applyMatrix4(this.OCS);\r\n [p1, p2].forEach(p => p.applyMatrix4(m));\r\n this.Position = p1;\r\n this.Height = p1.distanceTo(p2);\r\n return this;\r\n }\r\n\r\n InitDrawObject(renderType: RenderType = RenderType.Wireframe): Object3D\r\n {\r\n let g = new Object3D();\r\n\r\n if (renderType !== RenderType.Wireframe)\r\n {\r\n let obj = this.CacheDrawObject.get(RenderType.Wireframe);\r\n if (obj && obj.children.length === 1 && (obj.children[0] as Mesh).geometry)\r\n {\r\n let color = (renderType > 100 || renderType === RenderType.Print) ? 0 : this.ColorIndex;\r\n let mesh = new Mesh((obj.children[0] as Mesh).geometry, ColorMaterial.GetBasicMaterial(color));\r\n g.add((mesh));\r\n g.updateMatrixWorld(true);\r\n this.UpdateObjectTranslate(g);\r\n return g;\r\n }\r\n }\r\n\r\n this.AsyncUpdateDrawObject(g, renderType);\r\n return g;\r\n }\r\n UpdateDrawObject(type: RenderType, obj: Object3D)\r\n {\r\n this.AsyncUpdateDrawObject(obj, type);\r\n }\r\n UpdateDrawObjectMaterial(renderType: RenderType, en: Object3D)\r\n {\r\n if (en && en.children.length === 1)\r\n {\r\n let mesh = en.children[0] as Mesh;\r\n //因为我们是OnlyRnderType 所以Print会变成WireframePrint,所以要用下面的写法\r\n let color = (renderType > 100 || renderType === RenderType.Print) ? 0 : this.ColorIndex;\r\n mesh.material = ColorMaterial.GetBasicMaterialDoubleSide(color);\r\n }\r\n }\r\n GetGripPoints(): Array\r\n {\r\n return [this.Position, new Vector3(0, this.Height).applyMatrix4(this.OCS)];\r\n }\r\n MoveGripPoints(indexList: number[], vec: Vector3)\r\n {\r\n\r\n if (indexList[0] === 0)\r\n this.Position = this.Position.add(vec);\r\n else\r\n {\r\n let v = vec.clone().applyMatrix4(this.OCSInv.setPosition(new Vector3));\r\n this.Height = this.Height + v.y;\r\n }\r\n }\r\n\r\n GetStretchPoints(): Array\r\n {\r\n return [this.Position];\r\n }\r\n MoveStretchPoints(indexList: Array, vec: Vector3)\r\n {\r\n this.ApplyMatrix(MoveMatrix(vec));\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._TextString = file.Read();\r\n this._Height = file.Read();\r\n this.TextRotation = file.Read();\r\n this._FontName = file.Read();\r\n this._Align = 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._TextString);\r\n file.Write(this._Height);\r\n file.Write(this.TextRotation);\r\n file.Write(this._FontName);\r\n file.Write(this._Align);\r\n }\r\n //#endregion-----------------------------File End-----------------------------\r\n}\r\n","import { BufferGeometry, Float32BufferAttribute, LineSegments, Material, Matrix3, Matrix4, Mesh, Object3D, Vector3 } from \"three\";\r\nimport { ColorMaterial } from \"../Common/ColorPalette\";\r\nimport { FixedNotZero } from \"../Common/Utils\";\r\nimport { AutoRecord } from \"../DatabaseServices/AutoRecord\";\r\nimport { Factory } from \"../DatabaseServices/CADFactory\";\r\nimport { CADFiler } from \"../DatabaseServices/CADFiler\";\r\nimport { Entity } from \"../DatabaseServices/Entity/Entity\";\r\nimport { TemplateRecord } from \"../DatabaseServices/Template/TemplateRecord\";\r\nimport { Text, TextAligen } from \"../DatabaseServices/Text/Text\";\r\nimport { Box3Ext } from \"../Geometry/Box\";\r\nimport { XAxis, XAxisN, YAxis, YAxisN, ZAxis, ZeroVec } from \"../Geometry/GeUtils\";\r\nimport { GenerateBoxEdgeGeometry } from \"../Geometry/SimpleExtrudeEdgeGeometry\";\r\nimport { RenderType } from \"../GraphicsSystem/RenderType\";\r\nimport { ObjectSnapMode } from \"./ObjectSnapMode\";\r\n\r\nconst EmptyArray = [];\r\n\r\n@Factory\r\nexport class VisualSpaceBox extends Entity\r\n{\r\n OnlyRenderType = true;\r\n\r\n private _LText = new Text;\r\n private _WText = new Text;\r\n private _HText = new Text;\r\n\r\n @AutoRecord private _IsRoot = false;\r\n\r\n @AutoRecord private _DisplayLength = true;\r\n @AutoRecord private _DisplayWidth = true;\r\n @AutoRecord private _DisplayHeight = true;\r\n\r\n\r\n constructor(\r\n protected _Length: number = 1,\r\n protected _Width: number = 1,\r\n protected _Height: number = 1,\r\n )\r\n {\r\n super();\r\n this._LText.IsEmbedEntity = true;\r\n this._WText.IsEmbedEntity = true;\r\n this._HText.IsEmbedEntity = true;\r\n\r\n this._LText.TextAligen = TextAligen.Down;\r\n this._WText.TextAligen = TextAligen.Top;\r\n this._HText.TextAligen = TextAligen.Top;\r\n (this._LText)._Matrix.makeBasis(XAxis, ZAxis, YAxis);\r\n (this._WText)._Matrix.makeBasis(YAxis, XAxisN, ZAxis);\r\n (this._HText)._Matrix.makeBasis(ZAxis, XAxisN, YAxisN);\r\n }\r\n\r\n get Length() { return this._Length; }\r\n get Width() { return this._Width; }\r\n get Height() { return this._Height; }\r\n\r\n\r\n set IsRoot(b: boolean)\r\n {\r\n if (this._IsRoot !== b)\r\n {\r\n this._IsRoot = b;\r\n for (let [, obj] of this._CacheDrawObject)\r\n {\r\n let [box, edge, lobj, wobj, hobj] = obj.children;\r\n if (this._IsRoot)\r\n box.visible = false;\r\n else\r\n box.visible = true;\r\n\r\n if (this._IsRoot)\r\n {\r\n this._LText.TextAligen = TextAligen.Top;\r\n this._WText.TextAligen = TextAligen.Down;\r\n this._HText.TextAligen = TextAligen.Down;\r\n }\r\n else\r\n {\r\n this._LText.TextAligen = TextAligen.Down;\r\n this._WText.TextAligen = TextAligen.Top;\r\n this._HText.TextAligen = TextAligen.Top;\r\n }\r\n }\r\n }\r\n }\r\n\r\n set DisplayWidth(b: boolean)\r\n {\r\n for (let [, obj] of this._CacheDrawObject)\r\n {\r\n let [box, edge, lobj, wobj, hobj] = obj.children;\r\n wobj.visible = b;\r\n }\r\n this._DisplayWidth = b;\r\n }\r\n set DisplayLength(b: boolean)\r\n {\r\n for (let [, obj] of this._CacheDrawObject)\r\n {\r\n let [box, edge, lobj, wobj, hobj] = obj.children;\r\n lobj.visible = b;\r\n }\r\n this._DisplayLength = b;\r\n }\r\n set DisplayHeight(b: boolean)\r\n {\r\n for (let [, obj] of this._CacheDrawObject)\r\n {\r\n let [box, edge, lobj, wobj, hobj] = obj.children;\r\n hobj.visible = b;\r\n }\r\n this._DisplayHeight = b;\r\n }\r\n\r\n SetSize(l: number, w: number, h: number)\r\n {\r\n if (l !== this._Length || w !== this._Width || h !== this._Height)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._Length = l;\r\n this._Width = w;\r\n this._Height = h;\r\n this.Update();\r\n }\r\n }\r\n get BoundingBoxInOCS()\r\n {\r\n return new Box3Ext(new Vector3, new Vector3(this._Length, this._Width, this._Height));\r\n }\r\n\r\n get BoundingBox()\r\n {\r\n return this.BoundingBoxInOCS.applyMatrix4(this.OCSNoClone);\r\n }\r\n\r\n //#region 捕捉\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 switch (snapMode)\r\n {\r\n case ObjectSnapMode.End:\r\n {\r\n let pts: Vector3[] = [\r\n new Vector3(),\r\n new Vector3(this._Length),\r\n new Vector3(this._Length, this._Width),\r\n new Vector3(0, this._Width),\r\n\r\n new Vector3(0, 0, this._Height),\r\n new Vector3(this._Length, 0, this._Height),\r\n new Vector3(this._Length, this._Width, this._Height),\r\n new Vector3(0, this._Width, this._Height),\r\n ];\r\n\r\n for (let p of pts)\r\n p.applyMatrix4(this._Matrix);\r\n return pts;\r\n }\r\n }\r\n return EmptyArray;\r\n }\r\n //#endregion\r\n\r\n //#region Draw\r\n InitDrawObject(renderType: RenderType = RenderType.Wireframe)\r\n {\r\n let obj = new Object3D();\r\n\r\n //box\r\n obj.add(new Mesh(backGeo, ColorMaterial.GetBasicMaterialTransparent2(this.ColorIndex, 0.5)));\r\n //edge\r\n obj.add(new LineSegments(edgeGeo, ColorMaterial.GetLineMaterial(this.ColorIndex)));\r\n\r\n obj.add(this._LText.DrawObject);\r\n obj.add(this._WText.DrawObject);\r\n obj.add(this._HText.DrawObject);\r\n\r\n this.UpdateDrawObject(renderType, obj);\r\n return obj;\r\n }\r\n\r\n UpdateDrawObject(type: RenderType, obj: Object3D)\r\n {\r\n let [box, edge, lobj, wobj, hobj] = obj.children;\r\n box.scale.set(this._Length, this._Width, this._Height);\r\n box.updateMatrix();\r\n\r\n edge.scale.set(this._Length, this._Width, this._Height);\r\n edge.updateMatrix();\r\n\r\n box.visible = !this._IsRoot;\r\n\r\n if (this._IsRoot)\r\n {\r\n this._LText.TextAligen = TextAligen.Top;\r\n this._WText.TextAligen = TextAligen.Down;\r\n this._HText.TextAligen = TextAligen.Down;\r\n }\r\n else\r\n {\r\n this._LText.TextAligen = TextAligen.Down;\r\n this._WText.TextAligen = TextAligen.Top;\r\n this._HText.TextAligen = TextAligen.Top;\r\n }\r\n\r\n this._LText.TextString = FixedNotZero(this._Length, 2);\r\n this._WText.TextString = FixedNotZero(this._Width, 2);\r\n this._HText.TextString = FixedNotZero(this._Height, 2);\r\n\r\n //实体被错误的Dispose,导致需要这样的更新\r\n this._LText.Update();\r\n this._WText.Update();\r\n this._HText.Update();\r\n\r\n lobj.visible = this._DisplayLength;\r\n wobj.visible = this._DisplayWidth;\r\n hobj.visible = this._DisplayHeight;\r\n\r\n lobj.position.set(this._Length / 2, 0, 0);\r\n lobj.updateMatrix();\r\n\r\n wobj.position.set(0, this._Width / 2, 0);\r\n wobj.updateMatrix();\r\n\r\n hobj.position.set(0, 0, this._Height / 2);\r\n hobj.updateMatrix();\r\n }\r\n\r\n UpdateDrawObjectMaterial(type: RenderType, obj: Object3D, material?: Material)\r\n {\r\n let [mesh, line] = obj.children as [Mesh, LineSegments];\r\n\r\n mesh.material = ColorMaterial.GetBasicMaterialTransparent2(this.ColorIndex, 0.2);\r\n line.material = ColorMaterial.GetLineMaterial(this.ColorIndex);\r\n }\r\n\r\n //#endregion\r\n\r\n //#region -------------------------File-------------------------\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._Length = file.Read();\r\n this._Width = file.Read();\r\n this._Height = file.Read();\r\n\r\n this._IsRoot = file.Read();\r\n this._DisplayLength = file.Read();\r\n this._DisplayWidth = file.Read();\r\n this._DisplayHeight = file.Read();\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._Length);\r\n file.Write(this._Width);\r\n file.Write(this._Height);\r\n\r\n file.Write(this._IsRoot);\r\n file.Write(this._DisplayLength);\r\n file.Write(this._DisplayWidth);\r\n file.Write(this._DisplayHeight);\r\n }\r\n\r\n // //局部撤销\r\n // ApplyPartialUndo(undoData: CADObject)\r\n // {\r\n // super.ApplyPartialUndo(undoData);\r\n // }\r\n //#endregion\r\n\r\n\r\n //#region\r\n GetGripPoints(): Array\r\n {\r\n // return EmptyArray;//因为更新模块树是异步的,没办法在拽拖夹点时顺带更新,所以移除这个特性.\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 x.multiplyScalar(this._Length);\r\n y.multiplyScalar(this._Width);\r\n z.multiplyScalar(this._Height);\r\n\r\n let p = this.Position;\r\n return [p, x.add(p), y.add(p), z.add(p)];\r\n }\r\n\r\n MoveGripPoints(indexList: number[], vec: Vector3)\r\n {\r\n let template = this.Template?.Object as TemplateRecord;\r\n if (template && template !== template.Root)\r\n return;\r\n\r\n for (let i of indexList)\r\n {\r\n if (i === 0)\r\n {\r\n this.WriteAllObjectRecord();\r\n this.Position = this.Position.add(vec);\r\n return;\r\n }\r\n else\r\n {\r\n continue;\r\n let ocs = this._Matrix.clone().setPosition(ZeroVec);\r\n let ocsinv = new Matrix4().getInverse(ocs);\r\n vec.applyMatrix4(ocsinv);\r\n if (i === 1)\r\n {\r\n this._Length += vec.x;\r\n template.LParam.expr = this._Length;\r\n }\r\n else if (i === 2)\r\n {\r\n this._Width += vec.y;\r\n template.WParam.expr = this._Width;\r\n }\r\n else\r\n {\r\n this._Height += vec.z;\r\n template.HParam.expr = this._Height;\r\n }\r\n\r\n template.UpdateTemplateTree(); //TODO:可以弹出个对话框让用户更新. 或者使用反应器?\r\n\r\n this.Update();\r\n }\r\n return;\r\n }\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 //#endregion\r\n\r\n}\r\n\r\nclass BackFaceBoxBufferGeometry extends BufferGeometry\r\n{\r\n constructor(length: number = 1, width: number = 1, height: number = 1)\r\n {\r\n super();\r\n\r\n let pts: number[] = [\r\n 0, width, 0,\r\n length, width, 0,\r\n length, width, height,\r\n 0, width, height,\r\n ];\r\n let uvs: number[] = [\r\n 0, 0,\r\n 1, 0,\r\n 1, 1,\r\n\r\n 0, 0,\r\n 1, 1,\r\n 0, 1,\r\n ];\r\n\r\n let indices: number[] = [0, 1, 2, 0, 2, 3];\r\n\r\n this.setIndex(indices);\r\n this.setAttribute('position', new Float32BufferAttribute(pts, 3));\r\n // this.setAttribute('normal', new Float32BufferAttribute(normals, 3));\r\n this.setAttribute('uv', new Float32BufferAttribute(uvs, 2));\r\n\r\n }\r\n}\r\n\r\nconst backGeo = new BackFaceBoxBufferGeometry();\r\nconst edgeGeo = GenerateBoxEdgeGeometry(1, 1, 1);\r\n","import { Box3, MathUtils, OrthographicCamera, PerspectiveCamera, Vector3 } from 'three';\r\nimport { HostApplicationServices } from '../ApplicationServices/HostApplicationServices';\r\nimport { CADFiler } from '../DatabaseServices/CADFiler';\r\nimport { Orbit } from '../Geometry/Orbit';\r\n\r\nconst ViewScopeSize = 4e6;\r\n//相机活动范围\r\nconst ViewScopeMin = new Vector3(-ViewScopeSize, -ViewScopeSize * 0.7, -ViewScopeSize);\r\nconst ViewScopeMax = ViewScopeMin.clone().negate();\r\n\r\nconst ViewBoxMin = new Vector3(1, 1, 1);\r\nconst viewBoxMax = new Vector3(1e7, 1e7, 1e7);\r\n\r\nexport enum CameraType\r\n{\r\n OrthographicCamera = 1,\r\n PerspectiveCamera = 2,\r\n}\r\n\r\ntype Camera = OrthographicCamera | PerspectiveCamera;\r\n\r\n/**\r\n *\r\n * 相机的控制.\r\n * ->切换相机\r\n * ->设置视口大小\r\n * ->旋转和移动相机.\r\n */\r\nexport class CameraUpdate\r\n{\r\n private _CurCamera: Camera;\r\n private _CameraArray: Map = new Map();\r\n\r\n //视口的画布大小\r\n private _Width: number;\r\n private _Height: number;\r\n //视口显示的高度\r\n private _ViewHeight: number = 1000;\r\n\r\n //观察的位置\r\n private _Target: Vector3 = new Vector3();\r\n //观察向量\r\n private _Direction: Vector3 = new Vector3(0, 0, -1);\r\n //观察的轨道.\r\n private _Orbit: Orbit = new Orbit();\r\n\r\n DisableRotate = false;\r\n\r\n constructor()\r\n {\r\n this._CameraArray.set(OrthographicCamera, new OrthographicCamera(-2, 2, 2, -2,\r\n -ViewScopeSize, ViewScopeSize));\r\n\r\n this._CameraArray.set(PerspectiveCamera, new PerspectiveCamera(60, 1, 0.01, ViewScopeSize));\r\n\r\n this._CurCamera = this._CameraArray.get(OrthographicCamera);\r\n\r\n this._Orbit.SetFromDirection(this._Direction);\r\n\r\n this.UpdateUp();\r\n\r\n this.Update();\r\n }\r\n\r\n get Orbit() { return this._Orbit; }\r\n\r\n get Aspect(): number\r\n {\r\n return this._Width / this._Height;\r\n }\r\n\r\n get Target() { return this._Target; }\r\n\r\n get Camera(): Camera\r\n {\r\n return this._CurCamera;\r\n }\r\n get ViewHeight()\r\n {\r\n return this._ViewHeight;\r\n }\r\n set ViewHeight(height)\r\n {\r\n this._ViewHeight = MathUtils.clamp(height, HostApplicationServices.viewSize.minViewHeight, HostApplicationServices.viewSize.maxViewHeight);\r\n this.ZoomEvent();\r\n }\r\n\r\n get Direction()\r\n {\r\n return this._Direction.clone();\r\n }\r\n\r\n SetSize(width: number, height: number)\r\n {\r\n this._Width = width;\r\n this._Height = height;\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 Fov()\r\n {\r\n return (this._CameraArray.get(PerspectiveCamera) as PerspectiveCamera).fov;\r\n }\r\n\r\n set Fov(fov: number)\r\n {\r\n let camera = this._CameraArray.get(PerspectiveCamera) as PerspectiveCamera;\r\n camera.fov = fov;\r\n this.UpdateCameraMatrix();\r\n }\r\n\r\n /**\r\n * 平移相机.\r\n * @param {Vector3} mouseMove\r\n */\r\n Pan(mouseMove: Vector3)\r\n {\r\n mouseMove.y *= -1;\r\n mouseMove.multiplyScalar(-this._ViewHeight / (this._Height * window.devicePixelRatio));\r\n mouseMove.applyQuaternion(this.Camera.quaternion);\r\n this._Target.add(mouseMove);\r\n this._Target.clamp(ViewScopeMin, ViewScopeMax);\r\n this.Update();\r\n }\r\n Rotate(mouseMove: Vector3, target: Vector3)\r\n {\r\n let scale = this.CameraType === CameraType.PerspectiveCamera ? 0.002 : 0.003;\r\n this._Orbit.RoX -= mouseMove.y * scale;\r\n this._Orbit.theta -= mouseMove.x * scale;\r\n if (this.CameraType === CameraType.PerspectiveCamera && !target)//转头\r\n {\r\n if (this.DisableRotate) return;\r\n\r\n this._Orbit.UpdateDirection(this._Direction);\r\n this.UpdateUp();\r\n\r\n let camera = this.Camera as PerspectiveCamera;\r\n camera.aspect = this.Aspect;\r\n let distens = (this._ViewHeight / 2) / (Math.tan(MathUtils.degToRad(camera.fov) / 2));\r\n\r\n this._Target.copy(this._Direction).multiplyScalar(distens).add(this.Camera.position);//重新计算观察点位置\r\n\r\n this.UpdateCameraMatrix();\r\n return;\r\n }\r\n\r\n //缓存观察点\r\n let oldTargetFormCameraSpace = target.clone().applyMatrix4(this.Camera.matrixWorldInverse);\r\n\r\n this._Orbit.UpdateDirection(this._Direction);\r\n this.UpdateUp();\r\n this.Update();\r\n\r\n //-----还原观察点\r\n //得到新的观察点相对于相机的位置\r\n let newTargetFormCameraSpace = target.clone().applyMatrix4(this.Camera.matrixWorldInverse);\r\n //减去原先的位置. 得到观测点在相机内移动的向量\r\n newTargetFormCameraSpace.sub(oldTargetFormCameraSpace);\r\n //乘以相机的矩阵. 得到向量在世界坐标系的位置\r\n newTargetFormCameraSpace.applyMatrix4(this.Camera.matrix);\r\n //因为使用的是点变换,所以减去基点,得到向量\r\n newTargetFormCameraSpace.sub(this.Camera.position);\r\n //加上移动的向量. 使得观察点时钟在相机的某个位置\r\n this._Target.add(newTargetFormCameraSpace);\r\n\r\n this.Update();\r\n }\r\n\r\n UpdateCameraMatrix()\r\n {\r\n this.Camera.matrixAutoUpdate = true;\r\n // this.Camera.updateMatrix(); //如果不使用autoUpdate,那么应该还原这句\r\n this.Camera.lookAt(this._Target);\r\n this.Camera.updateProjectionMatrix();\r\n // this.Camera.updateMatrix(); //如果不使用autoUpdate,那么应该还原这句\r\n this.Camera.updateMatrixWorld(false);\r\n this.Camera.matrixAutoUpdate = false;\r\n }\r\n\r\n Zoom(scale: number, scaleCenter?: Vector3)\r\n {\r\n if (this.Camera instanceof OrthographicCamera)\r\n {\r\n this.ViewHeight *= scale;\r\n if (scaleCenter && this._ViewHeight < HostApplicationServices.viewSize.maxViewHeight)\r\n {\r\n this._Target.sub(scaleCenter);\r\n this._Target.multiplyScalar(scale);\r\n this._Target.add(scaleCenter);\r\n }\r\n }\r\n else if (this.Camera instanceof PerspectiveCamera)\r\n {\r\n let add = scale > 1 ? 1 : -1;\r\n add *= this.Camera.position.distanceTo(this._Target) / 10;\r\n this._Target.add(this._Direction.clone().multiplyScalar(-add));\r\n }\r\n this.Update();\r\n }\r\n ZoomExtentsBox3(box3: Box3)\r\n {\r\n if (!box3 || box3.isEmpty()) return;\r\n this.Camera.updateMatrixWorld(false);\r\n\r\n box3.getCenter(this._Target);\r\n\r\n //变换到相机坐标系\r\n box3.applyMatrix4(this.Camera.matrixWorldInverse);\r\n\r\n let size = box3.getSize(new Vector3());\r\n size.clamp(ViewBoxMin, viewBoxMax);\r\n\r\n // this._Target.z = box3.max.z; //使用这个代码 在变换矩阵可以使得观察点在前面,但是会导致观察距离过长\r\n\r\n //宽高比\r\n let aspectRatio = size.x / size.y;\r\n\r\n let viewAspectRatio = this.Aspect;\r\n if (aspectRatio > viewAspectRatio)\r\n this.ViewHeight = size.x / viewAspectRatio;\r\n else\r\n this.ViewHeight = size.y;\r\n this.Update();\r\n }\r\n\r\n /**\r\n * 设置相机的观察向量.\r\n * @param {Vector3} dir 方向向量,这个向量传入后会被更改为单位向量\r\n */\r\n LookAt(dir: Vector3)\r\n {\r\n this.LookAtEvent(dir);\r\n this._Orbit.SetFromDirection(dir);\r\n this._Direction.copy(dir);\r\n this.UpdateUp();\r\n this.Update();\r\n }\r\n LookAtEvent(dir: Vector3) { }\r\n\r\n UpdateUp()\r\n {\r\n Orbit.ComputUpDirection(this._Direction, this.Camera.up);\r\n }\r\n /**\r\n * 根据视口大小,设置相机视口范围.\r\n */\r\n Update()\r\n {\r\n this.Camera.position.copy(this._Target);\r\n\r\n if (this.Camera instanceof OrthographicCamera)\r\n {\r\n this.Camera.left = this.Aspect * this._ViewHeight / -2;\r\n this.Camera.right = this.Aspect * this._ViewHeight / 2;\r\n this.Camera.bottom = this._ViewHeight / -2;\r\n this.Camera.top = this._ViewHeight / 2;\r\n\r\n this.Camera.position.sub(this._Direction);\r\n }\r\n else if (this.Camera instanceof PerspectiveCamera)\r\n {\r\n this.Camera.aspect = this.Aspect;\r\n let distens = (this._ViewHeight / 2) / (Math.tan(MathUtils.degToRad(this.Camera.fov) / 2));\r\n\r\n this.Camera.position.sub(this._Direction.clone().multiplyScalar(distens));\r\n }\r\n else return;\r\n\r\n this.UpdateCameraMatrix();\r\n }\r\n\r\n ZoomEvent()\r\n {\r\n }\r\n\r\n set CameraType(type: CameraType)\r\n {\r\n if (type !== this.CameraType)\r\n this.SwitchCamera();\r\n }\r\n get CameraType()\r\n {\r\n if (this.Camera instanceof OrthographicCamera)\r\n return CameraType.OrthographicCamera;\r\n else\r\n return CameraType.PerspectiveCamera;\r\n }\r\n\r\n SwitchCamera()\r\n {\r\n if (this.Camera instanceof OrthographicCamera)\r\n this._CurCamera = this._CameraArray.get(PerspectiveCamera);\r\n else\r\n this._CurCamera = this._CameraArray.get(OrthographicCamera);\r\n this.UpdateUp();\r\n this.Update();\r\n }\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 this._ViewHeight = file.Read();\r\n this._Target.fromArray(file.Read());\r\n this._Direction.fromArray(file.Read());\r\n\r\n this._Orbit.SetFromDirection(this._Direction);\r\n this.UpdateUp();\r\n this.Update();\r\n\r\n if (ver > 1)\r\n this.CameraType = file.Read();\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(2);\r\n file.Write(this._ViewHeight);\r\n file.Write(this._Target.toArray());\r\n file.Write(this._Direction.toArray());\r\n file.Write(this.CameraType);\r\n }\r\n}\r\n","import { Box3, BufferGeometry, Color, Float32BufferAttribute, Frustum, Group, Line, Matrix3, Matrix4, Mesh, MeshBasicMaterial, Object3D, Scene, Vector3, WebGLRenderTarget } from \"three\";\r\nimport { DisposeThreeObj, Object3DRemoveAll } from \"../Common/Dispose\";\r\nimport { UpdateDraw } from \"../Common/Status\";\r\nimport { GetEntity } from \"../Common/Utils\";\r\nimport { ObjectSnapMode } from \"../Editor/ObjectSnapMode\";\r\nimport { VisualSpaceBox } from \"../Editor/VisualSpaceBox\";\r\nimport { GetBox } from \"../Geometry/GeUtils\";\r\nimport { CameraUpdate } from \"../GraphicsSystem/CameraUpdate\";\r\nimport { RenderType } from \"../GraphicsSystem/RenderType\";\r\nimport { FixIndex } from \"../Nest/Common/Util\";\r\nimport { Hole } from \"./3DSolid/Hole\";\r\nimport { Factory } from \"./CADFactory\";\r\nimport { CADFiler } from \"./CADFiler\";\r\nimport { Board } from \"./Entity/Board\";\r\nimport { Entity } from \"./Entity/Entity\";\r\nimport { HardwareCompositeEntity } from \"./Hardware/HardwareCompositeEntity\";\r\nimport { ObjectId } from \"./ObjectId\";\r\nimport { Text } from \"./Text/Text\";\r\n\r\nconst MaxSize = 2048;\r\nconst MIN_UPDATE_SIZE = 50;\r\nconst ProjScreenMatrix = new Matrix4();\r\n\r\n@Factory\r\nexport class ViewportEntity extends Entity\r\n{\r\n scene: Scene = new Scene();\r\n readonly camera: CameraUpdate = new CameraUpdate();\r\n private _renderType: RenderType = RenderType.Print;\r\n private _HideObjectIds = new Set();\r\n private _ShowObjectIds = new Set();\r\n private _RenderTarget: WebGLRenderTarget = new WebGLRenderTarget(0, 0);\r\n private _EntitysBoundingBox: Box3;\r\n ViewData = {\r\n left: 0,\r\n bottom: 0,\r\n };\r\n _Color = 0;\r\n ViewportMaterial: MeshBasicMaterial;\r\n private _Frustum: Frustum = new Frustum();\r\n constructor(\r\n private _width: number = 1,\r\n private _height: number = 1,\r\n )\r\n {\r\n super();\r\n this.scene.background = new Color(0xffffff);\r\n this.ViewportMaterial = new MeshBasicMaterial({ map: this._RenderTarget.texture, transparent: true, opacity: 1 });\r\n }\r\n get Left()\r\n {\r\n return this.Position.x;\r\n }\r\n get Bottom()\r\n {\r\n return this.Position.y;\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 (v === this._height || v < 0)\r\n return;\r\n this.WriteAllObjectRecord();\r\n this._width = v;\r\n this.Update(UpdateDraw.Geometry);\r\n }\r\n get ViewWidth()\r\n {\r\n return this.camera.Width ?? 1;\r\n }\r\n get ViewHeight()\r\n {\r\n return this.camera.Height ?? 1;\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 (v === this._height || v < 0)\r\n return;\r\n this.WriteAllObjectRecord();\r\n this._height = v;\r\n this.Update(UpdateDraw.Geometry);\r\n }\r\n IsHide(id: ObjectId)\r\n {\r\n return this._HideObjectIds.has(id);\r\n }\r\n IsShow(id: ObjectId)\r\n {\r\n return this._ShowObjectIds.has(id);\r\n }\r\n get HideObjects()\r\n {\r\n return [...this._HideObjectIds];\r\n }\r\n get ShowObjects()\r\n {\r\n return [...this._ShowObjectIds];\r\n }\r\n\r\n AppendShowObjects(ids: ObjectId[] | ObjectId)\r\n {\r\n this.WriteAllObjectRecord();\r\n if (!Array.isArray(ids))\r\n ids = [ids];\r\n for (let id of ids)\r\n {\r\n if (id?.Object)\r\n this._ShowObjectIds.add(id);\r\n }\r\n }\r\n RemoveShowObjects(ids: ObjectId[] | ObjectId)\r\n {\r\n this.WriteAllObjectRecord();\r\n if (!Array.isArray(ids))\r\n ids = [ids];\r\n ids.forEach(id => this._ShowObjectIds.delete(id));\r\n }\r\n AppendHideObjects(ids: ObjectId[] | ObjectId)\r\n {\r\n this.WriteAllObjectRecord();\r\n if (!Array.isArray(ids))\r\n ids = [ids];\r\n ids.forEach(id => this._HideObjectIds.add(id));\r\n }\r\n\r\n RemoveHideObjects(ids: ObjectId[] | ObjectId)\r\n {\r\n this.WriteAllObjectRecord();\r\n if (!Array.isArray(ids))\r\n ids = [ids];\r\n ids.forEach(id => this._HideObjectIds.delete(id));\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.GetGripPoints();\r\n case ObjectSnapMode.Mid:\r\n case ObjectSnapMode.Nea:\r\n case ObjectSnapMode.Ext:\r\n case ObjectSnapMode.Per:\r\n default:\r\n break;\r\n }\r\n return [];\r\n }\r\n SetUVs(geo: BufferGeometry)\r\n {\r\n let uvArray: number[] = [\r\n 0, 0, 1, 0, 1, 1, 1, 1, 0, 1, 0, 0\r\n ];\r\n geo.setAttribute(\"uv\", new Float32BufferAttribute(uvArray, 2));\r\n }\r\n protected OnlyRenderType = true;\r\n get Entitys()\r\n {\r\n let ens: Entity[] = [];\r\n for (let id of this._ShowObjectIds)\r\n if (id?.Object) ens.push(id.Object as Entity);\r\n\r\n for (let id of this._HideObjectIds)\r\n if (id?.Object) ens.push(id.Object as Entity);\r\n\r\n return ens;\r\n }\r\n get Points()\r\n {\r\n let z = -1;\r\n return [\r\n new Vector3(0, 0, z),\r\n new Vector3(this._width, 0, z),\r\n new Vector3(this._width, this._height, z),\r\n new Vector3(0, this._height, z),\r\n ];\r\n }\r\n\r\n NeedUpdateTexture = true;\r\n \r\n\r\n UpdateByPts(p1: Vector3, p2: Vector3)\r\n {\r\n let left = Math.min(p1.x, p2.x);\r\n let bottom = Math.min(p1.y, p2.y);\r\n this._width = Math.abs(p1.x - p2.x);\r\n this._height = Math.abs(p1.y - p2.y);\r\n this.Position = new Vector3(left, bottom);\r\n }\r\n GetGripPoints()\r\n {\r\n return this.Points.map(p => p.applyMatrix4(this.OCS).setZ(0));\r\n }\r\n MoveGripPoints(indexList: number[], moveVec: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n\r\n let pts = this.GetGripPoints();\r\n\r\n for (let index of indexList)\r\n {\r\n pts[index].add(moveVec);\r\n this.UpdateByPts(pts[index], pts[FixIndex(index + 2, 4)]);\r\n }\r\n this.Update();\r\n }\r\n ZoomAll()\r\n {\r\n let box = new Box3;\r\n for (let obj of this.scene.children)\r\n {\r\n let ent = GetEntity(obj);\r\n if (ent) box.union(ent.BoundingBox);\r\n else box.union(GetBox(obj));\r\n }\r\n\r\n if (box.isEmpty())\r\n box.set(new Vector3(), new Vector3(1000 * (this.Width / this.Height), 1000, 1000));\r\n this.camera.ZoomExtentsBox3(box);\r\n this.camera.Zoom(1.2);\r\n }\r\n\r\n ZoomtoEntitys(ens: Entity[])\r\n {\r\n let box = new Box3();\r\n ens.reduce((b, e) => b.union(e.BoundingBox), box);\r\n if (box.isEmpty())\r\n return;\r\n this.camera.ZoomExtentsBox3(box);\r\n this.camera.Zoom(1.2);\r\n }\r\n\r\n get RenderType()\r\n {\r\n return this._renderType;\r\n }\r\n set RenderType(v: RenderType)\r\n {\r\n if (v === this._renderType) return;\r\n this.WriteAllObjectRecord();\r\n this._renderType = v;\r\n for (let o of this.scene.children)\r\n {\r\n if (o instanceof Group)\r\n {\r\n DisposeThreeObj(o);\r\n Object3DRemoveAll(o);\r\n\r\n let e = o.userData.Entity as Entity;\r\n let obj = e.GetDrawObjectFromRenderType(e.IsOnlyRender ? this._renderType + 100 : this._renderType);\r\n if (obj)\r\n o.children.push(obj);\r\n }\r\n }\r\n }\r\n get BoundingBox()\r\n {\r\n return new Box3().setFromPoints(this.GetGripPoints());\r\n }\r\n CanRennder(en: Entity)\r\n {\r\n if (en?.Id\r\n && !en.IsErase && (en instanceof Entity) && !(en instanceof Hole)\r\n && !(en instanceof ViewportEntity)\r\n && !(en instanceof VisualSpaceBox))\r\n {\r\n //首个版本布局由隐藏列表控制\r\n if (this.IsFirstVersion)\r\n {\r\n if (this._HideObjectIds.has(en.Id))\r\n return false;\r\n }\r\n else\r\n {\r\n if (!this._ShowObjectIds.has(en.Id) || this._HideObjectIds.has(en.Id))\r\n return false;\r\n }\r\n if (en instanceof HardwareCompositeEntity && en.HardwareOption.name.includes(\"铰链\"))\r\n return false;\r\n return true;\r\n }\r\n return false;\r\n }\r\n AppendEntity(en: Entity)\r\n {\r\n if (!this.CanRennder(en)) return;\r\n\r\n let cloneObject = new Group();\r\n let renderType = en.IsOnlyRender ? this._renderType + 100 : this._renderType;\r\n let o = en.GetDrawObjectFromRenderType(renderType);\r\n if (!o)\r\n {\r\n console.warn(`该实体${renderType}类型不存在`);\r\n return;\r\n }\r\n cloneObject.children.push(o);\r\n cloneObject.name = en.Id.Index.toString();\r\n cloneObject.userData = { Entity: en };\r\n cloneObject.updateMatrixWorld();\r\n this.scene.add(cloneObject);\r\n this.NeedUpdateTexture = true;\r\n }\r\n GoodBye()\r\n {\r\n super.GoodBye();\r\n DisposeThreeObj(this.scene);\r\n Object3DRemoveAll(this.scene);\r\n this.ViewportMaterial?.dispose();\r\n this.ViewportMaterial = undefined;\r\n this._RenderTarget.dispose();\r\n }\r\n UpdateScene()\r\n {\r\n let hideIndexs = new Set(this.HideObjects.map(i => i.Index.toString()));\r\n let showIndexs = new Set(this.ShowObjects.map(i => i.Index.toString()));\r\n for (let o of this.scene.children)\r\n {\r\n if (!showIndexs.has(o.name) || hideIndexs.has(o.name))\r\n {\r\n if (o.type !== \"AmbientLight\")\r\n o.visible = false;\r\n }\r\n else\r\n {\r\n o.visible = true;\r\n showIndexs.delete(o.name);\r\n }\r\n }\r\n this._ShowObjectIds.forEach(i => showIndexs.has(i.Index.toString()) && this.AppendEntity(i.Object as Entity));\r\n this.NeedUpdateTexture = true;\r\n }\r\n CloneDrawObject(from: this)\r\n {\r\n super.CloneDrawObject(from);\r\n for (let [type, obj] of this._CacheDrawObject)\r\n {\r\n (obj.children[1] as Mesh).material = this.ViewportMaterial;\r\n }\r\n }\r\n IsInFrustum(obj: Object3D)\r\n {\r\n let camera = this.camera.Camera;\r\n ProjScreenMatrix.multiplyMatrices(camera.projectionMatrix, camera.matrixWorldInverse);\r\n this._Frustum.setFromProjectionMatrix(ProjScreenMatrix);\r\n let isInt = false;\r\n obj.traverse((o: Mesh | Line) =>\r\n {\r\n if (!isInt && o.geometry)\r\n isInt = this._Frustum.intersectsObject(o);\r\n });\r\n return isInt;\r\n }\r\n IsContainText(text: Entity)\r\n {\r\n if (!(text instanceof Text)) return false;\r\n if (!this._EntitysBoundingBox)\r\n {\r\n this._EntitysBoundingBox = new Box3();\r\n for (let en of this.Entitys)\r\n {\r\n if (!en.IsErase && en instanceof Board)\r\n this._EntitysBoundingBox.union(en.BoundingBox);\r\n }\r\n }\r\n if (this._EntitysBoundingBox.containsBox(text.BoundingBox))\r\n return true;\r\n else\r\n return false;\r\n }\r\n IsFirstVersion = false;\r\n protected _ReadFile(file: CADFiler)\r\n {\r\n super._ReadFile(file);\r\n let ver = file.Read();\r\n\r\n this.IsFirstVersion = ver === 1;\r\n\r\n this.camera.ReadFile(file);\r\n this._width = file.Read();\r\n this._height = file.Read();\r\n this._renderType = file.Read();\r\n let count = file.Read();\r\n this._HideObjectIds.clear();\r\n for (let i = 0; i < count; i++)\r\n {\r\n let id = file.ReadSoftObjectId();\r\n if (id)\r\n this._HideObjectIds.add(id);\r\n }\r\n\r\n if (ver > 1)\r\n {\r\n let count = file.Read();\r\n this._ShowObjectIds.clear();\r\n for (let i = 0; i < count; i++)\r\n {\r\n let id = file.ReadSoftObjectId();\r\n if (id)\r\n this._ShowObjectIds.add(id);\r\n }\r\n }\r\n if (!this._isErase)\r\n this.UpdateScene();\r\n }\r\n WriteFile(file: CADFiler)\r\n {\r\n super.WriteFile(file);\r\n file.Write(2);\r\n this.camera.WriteFile(file);\r\n file.Write(this._width);\r\n file.Write(this._height);\r\n file.Write(this._renderType);\r\n file.Write(this._HideObjectIds.size);\r\n this._HideObjectIds.forEach(id => file.WriteSoftObjectId(id));\r\n\r\n file.Write(this._ShowObjectIds.size);\r\n this._ShowObjectIds.forEach(id => file.WriteSoftObjectId(id));\r\n }\r\n}\r\n","import { ExtrudeGeometry, Geometry, Mesh, MeshNormalMaterial, Object3D, Vector3 } from \"three\";\r\nimport { RenderType } from \"../../GraphicsSystem/RenderType\";\r\nimport { Factory } from '../CADFactory';\r\nimport { CADFiler } from '../CADFiler';\r\nimport { Contour } from '../Contour';\r\nimport { Circle } from '../Entity/Circle';\r\nimport { Entity } from '../Entity/Entity';\r\n\r\n@Factory\r\nexport class Cylineder extends Entity\r\n{\r\n private m_Radius: number;\r\n private m_Height: number;\r\n private m_Center: Vector3 = new Vector3();\r\n constructor(rad?: number, height?: number)\r\n {\r\n super();\r\n this.m_Radius = rad || 1;\r\n this.m_Height = height || 1;\r\n }\r\n get Radius()\r\n {\r\n return this.m_Radius;\r\n }\r\n set Radius(v: number)\r\n {\r\n this.WriteAllObjectRecord();\r\n this.m_Radius = v;\r\n this.Update();\r\n }\r\n get Height()\r\n {\r\n return this.m_Height;\r\n }\r\n set Height(v: number)\r\n {\r\n this.WriteAllObjectRecord();\r\n this.m_Height = v;\r\n this.Update();\r\n }\r\n get Center()\r\n {\r\n return new Vector3().setFromMatrixPosition(this.OCS);\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 CreateGeometry()\r\n {\r\n let cir = Contour.CreateContour([new Circle(this.m_Center, this.m_Radius)]).Shape;\r\n let extrudeSettings = {\r\n bevelEnabled: false,\r\n depth: this.m_Height\r\n };\r\n return new ExtrudeGeometry(cir, extrudeSettings);\r\n }\r\n InitDrawObject(renderType: RenderType): Object3D\r\n {\r\n return new Mesh(this.CreateGeometry(), new MeshNormalMaterial());\r\n }\r\n UpdateDrawObject(type: RenderType, en: Object3D)\r\n {\r\n let obj = en as Mesh;\r\n obj.geometry = this.CreateGeometry();\r\n (obj.geometry as Geometry).verticesNeedUpdate = true;\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.m_Radius = file.Read();\r\n this.m_Height = file.Read();\r\n this.m_Center.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.m_Radius);\r\n file.Write(this.m_Height);\r\n file.Write(this.m_Center.toArray());\r\n }\r\n}\r\n","import { Box3, Face3, Geometry, Matrix4, Mesh, MeshNormalMaterial, Object3D, ShapeUtils, Vector2, Vector3 } from \"three\";\r\nimport { ColorMaterial } from \"../../Common/ColorPalette\";\r\nimport { Object3DRemoveAll } from \"../../Common/Dispose\";\r\nimport { clamp, FixIndex } from \"../../Common/Utils\";\r\nimport { ObjectSnapMode } from \"../../Editor/ObjectSnapMode\";\r\nimport { angle, AsVector2, equaln, equalv3, isParallelTo, YAxis, ZeroVec } from \"../../Geometry/GeUtils\";\r\nimport { Matrix2 } from \"../../Geometry/Matrix2\";\r\nimport { Orbit } from \"../../Geometry/Orbit\";\r\nimport { RenderType } from \"../../GraphicsSystem/RenderType\";\r\nimport { Factory } from \"../CADFactory\";\r\nimport { CADFiler } from \"../CADFiler\";\r\nimport { CADObject } from \"../CADObject\";\r\nimport { Arc } from \"../Entity/Arc\";\r\nimport { Entity } from \"../Entity/Entity\";\r\nimport { Polyline } from \"../Entity/Polyline\";\r\n\r\nlet r = new Matrix2;\r\nlet v = new Vector3;\r\n\r\nexport function AxisCS(n: Vector3): Matrix4\r\n{\r\n let x = new Vector3;\r\n let y = new Vector3;\r\n Orbit.ComputUpDirection(n, y, x);\r\n return new Matrix4().makeBasis(x.normalize(), y.normalize(), n);\r\n}\r\n\r\nlet _Arc = new Arc(new Vector3, 1, 0, Math.PI / 2, false);\r\n@Factory\r\nexport class RevolveSolid extends Entity\r\n{\r\n private _Contour: Polyline;\r\n constructor(\r\n axisDirection?: Vector3,\r\n axisPos?: Vector3,\r\n contour?: Polyline,\r\n private _StartAngle = 0,\r\n private _EndAngle = Math.PI / 2,\r\n )\r\n {\r\n super();\r\n if (axisDirection)\r\n {\r\n axisDirection.normalize();\r\n let x = new Vector3;\r\n let y = new Vector3;\r\n Orbit.ComputUpDirection(axisDirection, y, x);\r\n this._Matrix.makeBasis(x.normalize(), y.normalize(), axisDirection);\r\n }\r\n else\r\n axisDirection = new Vector3(0, 0, 1);\r\n\r\n if (axisPos)\r\n this._Matrix.setPosition(axisPos);\r\n else\r\n axisPos = new Vector3;\r\n\r\n if (contour)\r\n {\r\n if (contour.Id) this._Contour = contour.Clone();\r\n else this._Contour = contour;\r\n\r\n this._Contour.IsEmbedEntity = true;\r\n\r\n if (this._Contour.IsClockWise) this._Contour.Reverse();\r\n\r\n let ocs = this.OCS.setPosition(0, 0, 0);\r\n let ocsInv = this.OCSInv;\r\n let endParam = this._Contour.EndParam;\r\n\r\n let p = this._Contour.StartPoint.applyMatrix4(ocsInv);\r\n axisPos.add(axisDirection.clone().multiplyScalar(p.z));\r\n\r\n //对齐X轴\r\n for (let i = 0; i < endParam; i += 0.5)\r\n {\r\n let p = this._Contour.GetPointAtParam(i);\r\n p.applyMatrix4(ocsInv).setZ(0);\r\n\r\n if (!equalv3(p, ZeroVec))\r\n {\r\n p.applyMatrix4(ocs);\r\n p.normalize();//X轴\r\n let y = axisDirection.clone().cross(p).normalize();\r\n this._Matrix.makeBasis(p, y, axisDirection).setPosition(axisPos);\r\n break;\r\n }\r\n }\r\n this._Contour.ApplyMatrix(this.OCSInv);\r\n }\r\n }\r\n\r\n get Contour() { return this._Contour; }\r\n\r\n GetGripPoints()\r\n {\r\n let box = this._Contour.BoundingBox;\r\n let size = box.getSize(new Vector3);\r\n let p1 = new Vector3(size.x);\r\n let p2 = p1.clone();\r\n r.setRotate(this._StartAngle);\r\n r.applyVector(p1);\r\n r.setRotate(this._EndAngle);\r\n r.applyVector(p2);\r\n p1.applyMatrix4(this._Matrix);\r\n p2.applyMatrix4(this._Matrix);\r\n return [p1, p2];\r\n }\r\n\r\n GetObjectSnapPoints(snapMode: ObjectSnapMode, pickPoint: Vector3, lastPoint: Vector3)\r\n {\r\n switch (snapMode)\r\n {\r\n case ObjectSnapMode.Nea:\r\n break;\r\n case ObjectSnapMode.Cen:\r\n break;\r\n case ObjectSnapMode.Per:\r\n break;\r\n case ObjectSnapMode.Tan:\r\n break;\r\n case ObjectSnapMode.End:\r\n return this.GetGripPoints();\r\n default:\r\n break;\r\n }\r\n return [];\r\n }\r\n\r\n MoveGripPoints(indexs: number[], vec: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n for (let i of indexs)\r\n {\r\n let p = this.GetGripPoints()[i];\r\n let np = p.add(vec).applyMatrix4(this.OCSInv);\r\n let a = angle(np);\r\n if (i === 0)\r\n this._StartAngle = a;\r\n else\r\n this._EndAngle = a;\r\n\r\n this.Update();\r\n return;\r\n }\r\n }\r\n\r\n private _MeshGeometry: Geometry;\r\n\r\n get BoundingBox()\r\n {\r\n let geom = this.MeshGeometry;\r\n\r\n if (!geom)\r\n {\r\n console.error(\"RevolveSolid无法建模\");\r\n return new Box3;\r\n }\r\n\r\n if (!geom.boundingBox)\r\n geom.computeBoundingBox();\r\n\r\n return geom.boundingBox.clone().applyMatrix4(this._Matrix);\r\n }\r\n\r\n private _CacheContourPoints: Vector2[];//轮廓2D点\r\n private _CacheContourPoints3D: Vector3[];//轮廓3D点\r\n\r\n private _CacheContourPoints3DQ: Vector3[];//放样点(展开)\r\n private _CacheContourPoints3DQ2: Vector3[][] = [];//放样点集合缓存(只是避免了重复构造)\r\n\r\n private _CacheContourFaces: [number, number, number][];//Face缓存\r\n private _CacheIsRev: boolean;//方向缓存\r\n\r\n get MeshGeometry()\r\n {\r\n if (this._MeshGeometry) return this._MeshGeometry;\r\n\r\n _Arc.StartAngle = this._StartAngle;\r\n _Arc.EndAngle = this._EndAngle;\r\n\r\n if (this._CacheIsRev === undefined)\r\n {\r\n let n = this._Contour.Normal;\r\n this._CacheIsRev = n.y > 0;\r\n }\r\n\r\n if (this._CacheContourPoints === undefined)\r\n {\r\n this._CacheContourPoints3D = [];\r\n let ocsInv = this._Contour.OCSInv;\r\n for (let i = 0; i < this._Contour.EndParam; i++)\r\n {\r\n let c = this._Contour.GetCurveAtIndex(i);\r\n this._CacheContourPoints3D.push(c.StartPoint);\r\n if (c instanceof Arc)\r\n {\r\n let minCount = Math.max(2, Math.ceil((c.AllAngle) / Math.PI) * 3);\r\n let count = clamp(c.Length / 20, minCount, 30);\r\n for (let j = 0; j < count; j++)\r\n this._CacheContourPoints3D.push(c.GetPointAtParam((j + 1) / (count + 1)));\r\n }\r\n this._CacheContourPoints3D.push(c.EndPoint);\r\n }\r\n this._CacheContourPoints = this._CacheContourPoints3D.map(p => AsVector2(p.clone().applyMatrix4(ocsInv)));\r\n\r\n this._CacheContourFaces = ShapeUtils.triangulateShape(this._CacheContourPoints, []) as [number, number, number][];\r\n\r\n this._CacheContourPoints3DQ = [];\r\n if (isParallelTo(this._Contour.Normal, YAxis))\r\n this._CacheContourPoints3DQ.push(...this._CacheContourPoints3D);\r\n else\r\n for (let i = 0; i < this._CacheContourPoints3D.length; i++)\r\n {\r\n let p1 = this._CacheContourPoints3D[i];\r\n let p2 = this._CacheContourPoints3D[FixIndex(i + 1, this._CacheContourPoints3D)];\r\n let length = p1.distanceTo(p2);\r\n v.subVectors(p2, p1);\r\n let count = clamp(Math.floor(length / 50), 2, 16);//合理的控制采样精度是性能的关键\r\n v.divideScalar(count);\r\n\r\n this._CacheContourPoints3DQ.push(p1);\r\n if (equaln(p1.x, 0) && equaln(p1.y, 0)\r\n && equaln(p2.x, 0) && equaln(p2.y, 0))\r\n continue;\r\n for (let j = 1; j < count; j++)\r\n {\r\n this._CacheContourPoints3DQ.push(v.clone().multiplyScalar(j).add(p1));\r\n }\r\n }\r\n\r\n if (!this._CacheIsRev)\r\n this._CacheContourPoints3DQ.reverse();\r\n }\r\n\r\n //性能:此处用BufferGeometry可以提高性能\r\n let geo = new Geometry;\r\n\r\n\r\n if (this._StartAngle !== this._EndAngle)\r\n {\r\n //起点盖子\r\n r.setRotate(this._StartAngle);\r\n let contoursStart = this._CacheContourPoints3D.map(p =>\r\n {\r\n p = p.clone();\r\n r.applyVector(p);\r\n return p;\r\n });\r\n geo.vertices.push(...contoursStart);\r\n for (let face of this._CacheContourFaces)\r\n {\r\n if (this._CacheIsRev)\r\n geo.faces.push(new Face3(face[2], face[1], face[0]));\r\n else\r\n geo.faces.push(new Face3(face[0], face[1], face[2]));\r\n }\r\n\r\n //终点盖子\r\n r.setRotate(this._EndAngle);\r\n let contoursEnd = this._CacheContourPoints3D.map(p =>\r\n {\r\n p = p.clone();\r\n r.applyVector(p);\r\n return p;\r\n });\r\n let count = geo.vertices.length;\r\n geo.vertices.push(...contoursEnd);\r\n for (let face of this._CacheContourFaces)\r\n {\r\n if (!this._CacheIsRev)\r\n geo.faces.push(new Face3(count + face[2], count + face[1], count + face[0]));\r\n else\r\n geo.faces.push(new Face3(count + face[0], count + face[1], count + face[2]));\r\n }\r\n }\r\n\r\n let allAngle = this._StartAngle === this._EndAngle ? Math.PI * 2 : _Arc.AllAngle;\r\n\r\n RevolveLine(geo, this._CacheContourPoints3DQ, this._CacheContourPoints3DQ2, this._StartAngle, allAngle);\r\n geo.computeVertexNormals();\r\n geo.computeFaceNormals();\r\n this._MeshGeometry = geo;\r\n return geo;\r\n }\r\n\r\n //#region Draw\r\n InitDrawObject(renderType: RenderType = RenderType.Wireframe)\r\n {\r\n let obj = new Object3D();\r\n this.UpdateDrawObject(renderType, obj);\r\n return obj;\r\n }\r\n\r\n UpdateDrawGeometry()\r\n {\r\n this._MeshGeometry = undefined;\r\n }\r\n\r\n private static MeshNromal = new MeshNormalMaterial({ wireframe: true });\r\n\r\n UpdateDrawObject(type: RenderType, obj: Object3D)\r\n {\r\n Object3DRemoveAll(obj);\r\n\r\n if (type === RenderType.Wireframe)\r\n {\r\n let g = this.MeshGeometry;\r\n g.computeFaceNormals();\r\n g.computeVertexNormals();\r\n obj.add(new Mesh(g, RevolveSolid.MeshNromal));\r\n }\r\n else// if (type === RenderType.Conceptual || type===RenderType.Physical || type === RenderType.Jig)\r\n {\r\n let g = this.MeshGeometry;\r\n g.computeFaceNormals();\r\n g.computeVertexNormals();\r\n obj.add(new Mesh(g, ColorMaterial.GetConceptualMaterial(this.ColorIndex)));\r\n }\r\n return obj;\r\n }\r\n\r\n /**\r\n * 更新实体Jig状态时的材质\r\n */\r\n UpdateJigMaterial(color = 8)\r\n {\r\n for (let [type, obj] of this._CacheDrawObject)\r\n {\r\n if (obj.children.length)\r\n {\r\n let mesh = obj.children[0] as Mesh;\r\n mesh.material = ColorMaterial.GetBasicMaterialTransparent(8, 0.1);\r\n }\r\n }\r\n }\r\n RestoreJigMaterial()\r\n {\r\n for (let [type, obj] of this._CacheDrawObject)\r\n {\r\n if (obj.children.length)\r\n {\r\n let mesh = obj.children[0] as Mesh;\r\n if (type === RenderType.Wireframe)\r\n mesh.material = RevolveSolid.MeshNromal;\r\n else\r\n mesh.material = ColorMaterial.GetConceptualMaterial(this.ColorIndex);\r\n }\r\n }\r\n }\r\n\r\n //#endregion\r\n\r\n //#region -------------------------File-------------------------\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._Contour = file.ReadObject();\r\n if (ver > 1)\r\n {\r\n this._StartAngle = file.Read();\r\n this._EndAngle = file.Read();\r\n }\r\n return this;\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(2);\r\n super.WriteFile(file);\r\n file.WriteObject(this._Contour);\r\n file.Write(this._StartAngle);\r\n file.Write(this._EndAngle);\r\n return this;\r\n }\r\n //局部撤销\r\n ApplyPartialUndo(undoData: CADObject)\r\n {\r\n super.ApplyPartialUndo(undoData);\r\n }\r\n //#endregion\r\n}\r\n\r\nfunction RevolveLine(geo: Geometry, contourPoints: Vector3[], cachePoints: Vector3[][], startAngle: number, allAngle: number)\r\n{\r\n //计算圆的半径\r\n let rotateCircleRadius = 0;\r\n for (let p of contourPoints)\r\n {\r\n let r = p.x * p.x + p.y * p.y;\r\n if (r > rotateCircleRadius)\r\n rotateCircleRadius = r;\r\n }\r\n rotateCircleRadius = Math.sqrt(rotateCircleRadius);\r\n\r\n let minCount = Math.max(2, Math.ceil((allAngle) / Math.PI) * 4);\r\n let angleCount = clamp(Math.floor(rotateCircleRadius / 3.2), minCount, 30);\r\n\r\n // let angleCount = Math.max(Math.floor(allAngle / 0.2), 3);//合理的控制采样精度是性能的关键\r\n let anDiv = allAngle / angleCount;\r\n\r\n let startVerticesCount = geo.vertices.length;\r\n let contourVerticesCount = contourPoints.length;\r\n\r\n let count2 = (equaln(allAngle, Math.PI * 2) ? angleCount : angleCount + 1);\r\n //TODO:如果有必要的话,此处可以缓存0-360度的轮廓点,用空间换时间\r\n for (let i = 0; i < count2; i++)\r\n {\r\n r.setRotate(startAngle + anDiv * i);\r\n let curPoints: Vector3[];\r\n if (i < cachePoints.length)//使用已经生成的点,避免重复的生成新的Vector3造成的过多GC\r\n {\r\n curPoints = cachePoints[i];\r\n for (let j = 0; j < curPoints.length; j++)\r\n {\r\n let p = curPoints[j];\r\n p.copy(contourPoints[j]);\r\n r.applyVector(p);\r\n }\r\n }\r\n else\r\n {\r\n curPoints = contourPoints.map(p =>\r\n {\r\n p = p.clone();\r\n r.applyVector(p);\r\n return p;\r\n });\r\n cachePoints.push(curPoints);\r\n }\r\n geo.vertices.push(...curPoints);\r\n }\r\n\r\n for (let i = 0; i < angleCount; i++)\r\n {\r\n let nextI = FixIndex(i + 1, count2);\r\n\r\n let s1 = startVerticesCount + i * contourVerticesCount;\r\n let s2 = startVerticesCount + nextI * contourVerticesCount;\r\n\r\n for (let j = 0; j < contourVerticesCount; j++)\r\n {\r\n let jn = FixIndex(j + 1, contourVerticesCount);\r\n if (!IsAxis(contourPoints[j], contourPoints[jn]))\r\n {\r\n geo.faces.push(new Face3(j + s1, jn + s1, s2 + j));\r\n geo.faces.push(new Face3(j + s2, jn + s1, s2 + jn));\r\n }\r\n }\r\n }\r\n}\r\n\r\nfunction IsAxis(p1: Vector3, p2: Vector3)\r\n{\r\n return equaln(p1.x, 0) && equaln(p1.y, 0) && equaln(p2.x, 0) && equaln(p2.y, 0);\r\n}\r\n","import { HostApplicationServices } from \"../../ApplicationServices/HostApplicationServices\";\r\nimport { Factory } from \"../CADFactory\";\r\nimport { Entity } from \"../Entity/Entity\";\r\nimport { Text } from \"../Text/Text\";\r\n\r\n@Factory\r\nexport abstract class Dimension extends Entity\r\n{\r\n OnlyRenderType = true;\r\n protected _TextString: string;\r\n protected _TextSize: number = HostApplicationServices.dimTextHeight;\r\n protected _Text = new Text(undefined, undefined, \"yahei\");\r\n protected _FractionDigits: number = HostApplicationServices.fractionDigitsType;\r\n set TextString(txt: string)\r\n {\r\n let str = this.GetString();\r\n let tstr = this._TextString ? this._TextString.replace(\"<>\", str) : str;\r\n if (txt !== tstr)\r\n {\r\n this.WriteAllObjectRecord();\r\n if (txt.trim() === \"\")\r\n this._TextString = null;\r\n else\r\n this._TextString = txt.replace(str, \"<>\");\r\n this.Update();\r\n }\r\n }\r\n\r\n get TextString()\r\n {\r\n return this._TextString ? this._TextString.replace(\"<>\", this.GetString()) : this.GetString();\r\n }\r\n\r\n set TextSize(size: number)\r\n {\r\n if (this._Text.Height !== size)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._TextSize = size;\r\n this.Update();\r\n }\r\n }\r\n\r\n get TextSize()\r\n {\r\n return this._TextSize;\r\n }\r\n\r\n set FractionDigits(length: number)\r\n {\r\n if (this._FractionDigits !== length)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._FractionDigits = length;\r\n this.Update();\r\n }\r\n }\r\n\r\n get FractionDigits()\r\n {\r\n return this._FractionDigits;\r\n }\r\n\r\n protected abstract GetString(): string;\r\n}\r\n","import { LineBasicMaterial } from \"three\";\r\nimport { ColorMaterial } from \"../../Common/ColorPalette\";\r\nimport { RenderType } from \"../../GraphicsSystem/RenderType\";\r\nimport { Entity } from \"../Entity/Entity\";\r\n\r\nexport function GetDimLineMaterial(dim: Entity, renderType: RenderType): LineBasicMaterial\r\n{\r\n if (renderType === RenderType.Wireframe)\r\n return ColorMaterial.GetLineMaterial(dim.ColorIndex);\r\n else if (renderType > 100)\r\n return ColorMaterial.GetLineMaterial(0);\r\n else\r\n return ColorMaterial.GetLineMaterial(6);\r\n}\r\n","import { BufferGeometry, Line as TLine, Material, MathUtils, Matrix3, Matrix4, Mesh, Object3D, Vector3 } from \"three\";\r\nimport { Line2 } from \"three/examples/jsm/lines/Line2\";\r\nimport { HostApplicationServices } from \"../../ApplicationServices/HostApplicationServices\";\r\nimport { AddEntityDrawObject } from \"../../Common/AddEntityDrawObject\";\r\nimport { arrayRemoveDuplicateBySort, arraySortByNumber } from \"../../Common/ArrayExt\";\r\nimport { ColorMaterial } from \"../../Common/ColorPalette\";\r\nimport { reviseMirrorMatrix } from \"../../Common/Matrix4Utils\";\r\nimport { FixedNotZero, FixIndex } from \"../../Common/Utils\";\r\nimport { ObjectSnapMode } from \"../../Editor/ObjectSnapMode\";\r\nimport { BufferGeometryUtils } from \"../../Geometry/BufferGeometryUtils\";\r\nimport { angle, equaln, equalv3 } from \"../../Geometry/GeUtils\";\r\nimport { IntersectOption } from \"../../GraphicsSystem/IntersectWith\";\r\nimport { RenderType } from \"../../GraphicsSystem/RenderType\";\r\nimport { Factory } from \"../CADFactory\";\r\nimport { CADFiler } from \"../CADFiler\";\r\nimport { Arc } from \"../Entity/Arc\";\r\nimport { Line } from \"../Entity/Line\";\r\nimport { TextAligen } from \"../Text/Text\";\r\nimport { Dimension } from \"./Dimension\";\r\nimport { GetDimLineMaterial } from \"./GetDimLineMaterial\";\r\n\r\n/**\r\n * 两条直线的角度标注\r\n */\r\n@Factory\r\nexport class LineAngularDimension extends Dimension\r\n{\r\n private _Arc = new Arc();\r\n constructor(\r\n protected _L1StartPoint = new Vector3(), //第一条直线的起点\r\n protected _L1EndPoint = new Vector3(), //第一条直线的终点\r\n protected _L2StartPoint = new Vector3(), //第二条直线的起点\r\n protected _L2EndPoint = new Vector3(),\r\n protected _DimPoint = new Vector3(), //标注位置\r\n )\r\n {\r\n super();\r\n // this._Arc.ColorIndex = 3;\r\n this._Text.TextAligen = TextAligen.Down;\r\n this._Text.Height = HostApplicationServices.dimTextHeight;\r\n }\r\n\r\n protected GetString()\r\n {\r\n return FixedNotZero(MathUtils.radToDeg(this._Arc.AllAngle), this._FractionDigits) + \"°\";\r\n }\r\n\r\n UpdateDimData(l1sp: Vector3, l1ep: Vector3, l2sp: Vector3, l2ep: Vector3, dimp: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n let inv = this.OCSInv;\r\n for (let [p, pn] of [\r\n [this._L1StartPoint, l1sp],\r\n [this._L1EndPoint, l1ep],\r\n [this._L2StartPoint, l2sp],\r\n [this._L2EndPoint, l2ep],\r\n [this._DimPoint, dimp],\r\n ])\r\n {\r\n if (pn)\r\n p.copy(pn).applyMatrix4(inv);\r\n }\r\n this.Update();\r\n }\r\n\r\n get Text()\r\n {\r\n return this._Text;\r\n }\r\n get L1StartPoint()\r\n {\r\n return this._L1StartPoint.clone().applyMatrix4(this._Matrix);\r\n }\r\n get L2StartPoint()\r\n {\r\n return this._L2StartPoint.clone().applyMatrix4(this._Matrix);\r\n }\r\n get L1EndPoint()\r\n {\r\n return this._L1EndPoint.clone().applyMatrix4(this._Matrix);\r\n }\r\n get L2EndPoint()\r\n {\r\n return this._L2EndPoint.clone().applyMatrix4(this._Matrix);\r\n }\r\n get DimPoint()\r\n {\r\n return this._DimPoint.clone().applyMatrix4(this._Matrix);\r\n }\r\n get Arc()\r\n {\r\n return this._Arc.Clone().ApplyMatrix(this._Matrix);\r\n }\r\n //#region 动态拽拖\r\n GetGripPoints(): Array\r\n {\r\n return [\r\n this._L1StartPoint,\r\n this._L1EndPoint,\r\n this._L2StartPoint,\r\n this._L2EndPoint,\r\n this._DimPoint,\r\n ].map(p =>\r\n {\r\n return p.clone().applyMatrix4(this._Matrix);\r\n });\r\n }\r\n MoveGripPoints(indexList: number[], vec: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n let arr = [\r\n this._L1StartPoint,\r\n this._L1EndPoint,\r\n this._L2StartPoint,\r\n this._L2EndPoint,\r\n this._DimPoint,\r\n ];\r\n vec = vec.clone().applyMatrix4(this.OCSInv.setPosition(0, 0, 0));\r\n\r\n for (let i of indexList)\r\n arr[i].add(vec);\r\n this.Update();\r\n }\r\n GetStretchPoints(): Array\r\n {\r\n return this.GetGripPoints();\r\n }\r\n MoveStretchPoints(indexList: Array, vec: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n this.MoveGripPoints(indexList, vec);\r\n }\r\n //#endregion\r\n\r\n //#region 绘制\r\n\r\n Clone(): this\r\n {\r\n let ent = super.Clone();\r\n ent._Text.CopyFrom(this._Text);\r\n ent._Arc.CopyFrom(this._Arc);\r\n for (let [type, obj] of ent._CacheDrawObject)\r\n {\r\n for (let o of obj.children)\r\n if (o instanceof TLine)\r\n o.geometry = o.geometry.clone();\r\n }\r\n return ent;\r\n }\r\n\r\n Explode()\r\n {\r\n //为了避免Text对象没有被更新.\r\n this.GetDrawObjectFromRenderType();\r\n return [\r\n this._Arc.Clone().ApplyMatrix(this._Matrix),\r\n this._Text.Clone().ApplyMatrix(this._Matrix)\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 let arc = this._Arc.Clone().ApplyMatrix(this._Matrix);\r\n switch (snapMode)\r\n {\r\n case ObjectSnapMode.End:\r\n return this.GetStretchPoints().concat([arc.StartPoint, arc.EndPoint]);\r\n default:\r\n return arc.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform);\r\n }\r\n }\r\n InitDrawObject(renderType: RenderType = RenderType.Wireframe): Object3D\r\n {\r\n this._Text.ColorIndex = this.ColorIndex;\r\n\r\n let colorMaterial = GetDimLineMaterial(this, renderType);\r\n\r\n let arrow1 = new Mesh(BufferGeometryUtils.ArrowGeometry(), colorMaterial);\r\n let arrow2 = new Mesh(BufferGeometryUtils.ArrowGeometry(), colorMaterial);\r\n let arrowSize = 10;\r\n\r\n let l: TLine | Line2, l2: TLine | Line2;\r\n\r\n if (renderType === RenderType.WireframePrint)\r\n {\r\n l = new Line2(undefined, ColorMaterial.PrintLineMatrial);\r\n l2 = new Line2(undefined, ColorMaterial.PrintLineMatrial);\r\n arrowSize *= HostApplicationServices.lineWidth * 0.5;\r\n }\r\n else\r\n {\r\n l = new TLine(BufferGeometryUtils.CreateFromPts([new Vector3(), new Vector3()]), colorMaterial);\r\n l2 = new TLine(BufferGeometryUtils.CreateFromPts([new Vector3(), new Vector3()]), colorMaterial);\r\n }\r\n\r\n arrow1.scale.set(arrowSize, arrowSize, arrowSize);\r\n arrow2.scale.set(arrowSize, arrowSize, arrowSize);\r\n\r\n let obj = new Object3D();\r\n obj.add(arrow1, arrow2, l, l2);\r\n this.UpdateDrawObject(renderType, obj);\r\n return obj;\r\n }\r\n Update2Line(l1: Line, l2: Line, intPt: Vector3, li1: TLine, li2: TLine)\r\n {\r\n let intPar1 = l1.GetParamAtPoint(intPt);\r\n if (intPar1 >= 1)\r\n l1.Reverse();\r\n\r\n let intPar2 = l2.GetParamAtPoint(intPt);\r\n if (intPar2 >= 1)\r\n l2.Reverse();\r\n\r\n const updateLine = (l: Line, li: TLine | Line2, refPt: Vector3, refPt2?: Vector3) =>\r\n {\r\n let par = l.GetParamAtPoint(refPt);\r\n let refPar = l.GetParamAtPoint(intPt);\r\n if (par > 1)\r\n {\r\n li.visible = true;\r\n if (li instanceof TLine)\r\n {\r\n let geo = li.geometry as BufferGeometry;\r\n geo.copy(BufferGeometryUtils.CreateFromPts([l.EndPoint, refPt]));\r\n }\r\n else\r\n {\r\n let geo = li.geometry;\r\n geo.setPositions([...l.EndPoint.toArray(), ...refPt.toArray()]);\r\n }\r\n }\r\n else if (par < 0)\r\n {\r\n li.visible = true;\r\n if (li instanceof TLine)\r\n {\r\n let geo = li.geometry as BufferGeometry;\r\n\r\n geo.copy(\r\n BufferGeometryUtils.CreateFromPts([par < refPar ? intPt : l.StartPoint, refPt])\r\n );\r\n }\r\n else\r\n {\r\n let geo = li.geometry;\r\n let p = par < refPar ? intPt : l.StartPoint;\r\n geo.setPositions([...p.toArray(), ...refPt.toArray()]);\r\n }\r\n\r\n }\r\n else if (isNaN(par) && refPt2)\r\n {\r\n updateLine(l, li, refPt2);\r\n }\r\n else\r\n {\r\n li.visible = false;\r\n }\r\n };\r\n\r\n updateLine(l1, li1, this._Arc.StartPoint, this._Arc.EndPoint);\r\n updateLine(l2, li2, this._Arc.EndPoint, this._Arc.StartPoint);\r\n }\r\n\r\n UpdateDrawObject(renderType: RenderType, obj: Object3D)\r\n {\r\n let [arrow1, arrow2, li1, li2] = obj.children;\r\n obj.remove(...obj.children.slice(4));\r\n\r\n let l1 = new Line(this._L1StartPoint, this._L1EndPoint);\r\n let l2 = new Line(this._L2StartPoint, this._L2EndPoint);\r\n\r\n let insP = l1.IntersectWith(l2, IntersectOption.ExtendBoth)[0];\r\n if (insP)\r\n {\r\n this._Arc.AutoUpdate = false;//如果没有在这边关闭这个,那么Arc的盒子将错误\r\n this._Arc.Center = insP;\r\n this._Arc.Radius = insP.distanceTo(this._DimPoint);\r\n\r\n let ans = [this._L1StartPoint, this._L1EndPoint, this._L2StartPoint, this._L2EndPoint]\r\n .map(p =>\r\n {\r\n if (equalv3(p, insP))\r\n return NaN;\r\n return angle(p.clone().sub(insP));\r\n }).filter(a => !isNaN(a));\r\n ans = ans.concat(ans.map(a => (a + Math.PI) % (Math.PI * 2)));\r\n arraySortByNumber(ans);\r\n arrayRemoveDuplicateBySort(ans, (a1, a2) => equaln(a1, a2));\r\n\r\n let dimAn = angle(this._DimPoint.clone().sub(insP));\r\n\r\n for (let i = 0; i < ans.length; i++)\r\n {\r\n let ni = FixIndex(i + 1, ans.length);\r\n\r\n this._Arc.StartAngle = ans[ni];\r\n this._Arc.EndAngle = ans[i];\r\n this._Arc.ColorIndex = this._Color;\r\n\r\n if (this._Arc.ParamOnCurve(this._Arc.GetParamAtAngle(dimAn)))\r\n {\r\n this._Arc.AutoUpdate = true;\r\n this._Arc.DeferUpdate();\r\n\r\n AddEntityDrawObject(obj, this._Arc, renderType);\r\n arrow1.position.copy(this._Arc.StartPoint);\r\n arrow1.rotation.z = this._Arc.GetFistDerivAngle(0) + Math.PI / 2;\r\n arrow1.updateMatrix();\r\n\r\n arrow2.position.copy(this._Arc.EndPoint);\r\n arrow2.rotation.z = this._Arc.GetFistDerivAngle(1) - Math.PI / 2;\r\n arrow2.updateMatrix();\r\n\r\n this._Text.AutoUpdate = false;//更新标记\r\n\r\n this._Text.Height = this._TextSize;\r\n this._Text.TextString = this.TextString;\r\n this._Text.Position = this._Arc.GetPointAtParam(0.5);\r\n this._Text.TextRotation = this._Arc.GetAngleAtParam(0.5) % (Math.PI) - Math.PI / 2;\r\n\r\n this._Text.AutoUpdate = true;//更新标记\r\n this._Text.DeferUpdate();\r\n AddEntityDrawObject(obj, this._Text, renderType);\r\n break;\r\n }\r\n }\r\n\r\n this.Update2Line(l1, l2, insP, li1 as TLine, li2 as TLine);\r\n }\r\n }\r\n\r\n UpdateDrawObjectMaterial(type: RenderType, obj: Object3D, material?: Material)\r\n {\r\n let colorMaterial = GetDimLineMaterial(this, type);\r\n let count = Math.min(4, obj.children.length);\r\n for (let i = 0; i < count; i++)\r\n {\r\n let l = obj.children[i] as TLine;\r\n l.material = colorMaterial;\r\n }\r\n this._Arc.ColorIndex = this._Color;\r\n this._Text.ColorIndex = this._Color;\r\n }\r\n\r\n protected ApplyMirrorMatrix(m: Matrix4)\r\n {\r\n this.WriteAllObjectRecord();\r\n let p1 = this.L1StartPoint;\r\n let p2 = this.L1EndPoint;\r\n let p3 = this.L2StartPoint;\r\n let p4 = this.L2EndPoint;\r\n let p5 = this.DimPoint;\r\n\r\n reviseMirrorMatrix(this._Matrix, 1);\r\n\r\n this.UpdateDimData(p2, p1, p4, p3, p5);\r\n\r\n return this;\r\n }\r\n //#endregion\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._L1StartPoint.fromArray(file.Read());\r\n this._L1EndPoint.fromArray(file.Read());\r\n this._L2StartPoint.fromArray(file.Read());\r\n this._L2EndPoint.fromArray(file.Read());\r\n this._DimPoint.fromArray(file.Read());\r\n if (ver > 1) this._TextString = file.Read();\r\n if (ver > 2) this._TextSize = file.Read();\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n super.WriteFile(file);\r\n file.Write(3);\r\n file.Write(this._L1StartPoint.toArray());\r\n file.Write(this._L1EndPoint.toArray());\r\n file.Write(this._L2StartPoint.toArray());\r\n file.Write(this._L2EndPoint.toArray());\r\n file.Write(this._DimPoint.toArray());\r\n file.Write(this._TextString);\r\n file.Write(this._TextSize);\r\n }\r\n //#endregion\r\n\r\n}\r\n","import { BufferGeometry, Line as TLine, Material, Matrix3, Matrix4, Mesh, 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 { HostApplicationServices } from \"../../ApplicationServices/HostApplicationServices\";\r\nimport { AddEntityDrawObject } from \"../../Common/AddEntityDrawObject\";\r\nimport { ColorMaterial } from \"../../Common/ColorPalette\";\r\nimport { safeEval } from \"../../Common/eval\";\r\nimport { reviseMirrorMatrix } from \"../../Common/Matrix4Utils\";\r\nimport { UpdateDraw } from \"../../Common/Status\";\r\nimport { FixedNotZero } from \"../../Common/Utils\";\r\nimport { ObjectSnapMode } from \"../../Editor/ObjectSnapMode\";\r\nimport { BufferGeometryUtils } from \"../../Geometry/BufferGeometryUtils\";\r\nimport { angle, angleAndX, AsVector2, equaln, equalv3, isParallelTo, midPoint, ZAxis } from \"../../Geometry/GeUtils\";\r\nimport { RenderType } from \"../../GraphicsSystem/RenderType\";\r\nimport { Factory } from \"../CADFactory\";\r\nimport { CADFiler } from \"../CADFiler\";\r\nimport { Line } from \"../Entity/Line\";\r\nimport { Polyline } from \"../Entity/Polyline\";\r\nimport { ObjectId } from \"../ObjectId\";\r\nimport { TextAligen } from \"../Text/Text\";\r\nimport { Dimension } from \"./Dimension\";\r\nimport { GetDimLineMaterial } from \"./GetDimLineMaterial\";\r\n\r\nlet snapPolyline = new Polyline([{ pt: new Vector2, bul: 0 }, { pt: new Vector2, bul: 0 }, { pt: new Vector2, bul: 0 }, { pt: new Vector2, bul: 0 }]);\r\ninterface LeadOutLinePts\r\n{\r\n dragPt: Vector3;\r\n endPt: Vector3;\r\n}\r\ninterface DefaultValue\r\n{\r\n offset: Vector2;\r\n isFlipped: boolean;\r\n}\r\n/**\r\n * 对齐标注\r\n * 存在子类重载(线性标注 LinearDimension)\r\n * @class AlignedDimension\r\n */\r\n@Factory\r\nexport class AlignedDimension extends Dimension\r\n{\r\n //引线\r\n private _LeadOutLine = new Polyline();\r\n private _LeadOutOffsetY = 72;\r\n private _LeadOutOffsetX = 30;\r\n private _DefaultVal: DefaultValue = { offset: new Vector2(30, 72), isFlipped: false };\r\n //引线的拖拽点和终点\r\n private _LeadOutPts: LeadOutLinePts = { dragPt: midPoint(this._ArmP1, this._ArmP2), endPt: new Vector3() };\r\n //引线是否反向(往左伸/往右伸)\r\n private _LeadOutIsFlipped: boolean = false;\r\n //是否由拖拽更新_LeadOutPts.dragPt. 关系到引线的update\r\n private isDragLeadOutPt: boolean = false;\r\n constructor(\r\n //针脚\r\n protected _FootP1: Vector3 = new Vector3(),\r\n protected _FootP2: Vector3 = new Vector3(),\r\n //肩膀\r\n protected _ArmP1: Vector3 = new Vector3(),\r\n protected _ArmP2: Vector3 = new Vector3(),\r\n protected _TextRotation: number = undefined,\r\n //是否显示引线\r\n protected _LeadOutVisible: boolean = true,\r\n )\r\n {\r\n super();\r\n this._Text.TextAligen = TextAligen.Down;\r\n this._Text.Height = HostApplicationServices.dimTextHeight;\r\n }\r\n\r\n set Material(materialId: ObjectId) { }\r\n\r\n set FootP1(v: Vector3)\r\n {\r\n this._FootP1.copy(v).applyMatrix4(this.OCSInv);\r\n this.Update();\r\n }\r\n get FootP1()\r\n {\r\n return this._FootP1.clone().applyMatrix4(this._Matrix);\r\n }\r\n set FootP2(v: Vector3)\r\n {\r\n this._FootP2.copy(v).applyMatrix4(this.OCSInv);\r\n this.Update();\r\n }\r\n get FootP2()\r\n {\r\n return this._FootP2.clone().applyMatrix4(this._Matrix);\r\n }\r\n set ArmP1(v: Vector3)\r\n {\r\n this._ArmP1.copy(v).applyMatrix4(this.OCSInv);\r\n this.Update();\r\n }\r\n get ArmP1()\r\n {\r\n return this._ArmP1.clone().applyMatrix4(this._Matrix);\r\n }\r\n set ArmP2(v: Vector3)\r\n {\r\n this._ArmP2.copy(v).applyMatrix4(this.OCSInv);\r\n this.Update();\r\n }\r\n get ArmP2()\r\n {\r\n return this._ArmP2.clone().applyMatrix4(this._Matrix);\r\n }\r\n\r\n get TextPosition()\r\n {\r\n return midPoint(this._ArmP1, this._ArmP2).applyMatrix4(this._Matrix);\r\n }\r\n set TextPosition(p: Vector3)\r\n {\r\n p = p.clone().applyMatrix4(this.OCSInv);\r\n let l = new Line(this._ArmP1.clone(), this._ArmP2.clone());\r\n p.setZ(this._ArmP1.z);\r\n let cp = l.GetClosestPointTo(p, true);\r\n let v = p.clone().sub(cp);\r\n\r\n this._ArmP1.add(v);\r\n this._ArmP2.add(v);\r\n\r\n this.Update();\r\n }\r\n\r\n //创建以arm1,arm2为x轴 position在foot1的坐标系 用于定位引线\r\n get DalUcs()\r\n {\r\n let dalUcs = new Matrix4();\r\n if (!equaln(this._ArmP1.distanceTo(this._ArmP2), 0))\r\n {\r\n let vx = this._ArmP2.clone().sub(this._ArmP1);\r\n if (equaln(this._ArmP1.x, this._ArmP2.x))\r\n {\r\n if (this._ArmP1.y < this._ArmP2.y)\r\n vx.negate();\r\n }\r\n else if (this._ArmP1.x < this._ArmP2.x)\r\n vx.negate();\r\n\r\n if (isParallelTo(vx, ZAxis))\r\n return new Matrix4().setPosition(this._FootP1);\r\n\r\n let vy = vx.clone().cross(ZAxis);\r\n dalUcs = new Matrix4().makeBasis(vx.normalize(), vy.normalize(), ZAxis);\r\n dalUcs.setPosition(this._FootP1);\r\n }\r\n return dalUcs;\r\n }\r\n\r\n RaiseFooters(num: number)\r\n {\r\n let dalucs = this.DalUcs;\r\n let dalUcsInv = new Matrix4().getInverse(dalucs);\r\n\r\n let p = new Vector3(0, num, 0);\r\n let f1 = this._FootP1.clone().applyMatrix4(dalucs);\r\n let f2 = this._FootP2.clone().applyMatrix4(dalucs);\r\n let a1 = this._ArmP1.clone().applyMatrix4(dalucs);\r\n if (a1.y < f1.y)\r\n p.negate();\r\n this._FootP1 = f1.add(p).applyMatrix4(dalUcsInv);\r\n this._FootP2 = f2.add(p).applyMatrix4(dalUcsInv);\r\n\r\n this.Update();\r\n }\r\n\r\n set TextRotation(angle: number)\r\n {\r\n this._TextRotation = angle;\r\n this.Update();\r\n }\r\n\r\n set TextAligen(al: TextAligen)\r\n {\r\n if (al !== this._Text.TextAligen)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._Text.TextAligen = al;\r\n }\r\n }\r\n\r\n get Text()\r\n {\r\n if (!this._Text.TextString)\r\n this.UpdateText();\r\n\r\n return this._Text;\r\n }\r\n\r\n protected GetString(): string\r\n {\r\n return FixedNotZero(this._ArmP1.distanceTo(this._ArmP2), this._FractionDigits);\r\n }\r\n\r\n get BoundingBox()\r\n {\r\n this.SetDataToTempPolyline();\r\n if (this._Text.HasBoundingBox)\r\n return snapPolyline.BoundingBox.union(this.Text.BoundingBox);\r\n else\r\n return snapPolyline.BoundingBox;\r\n }\r\n\r\n set LeadOutVisible(visible: boolean)\r\n {\r\n if (this._LeadOutVisible === visible) return;\r\n this.WriteAllObjectRecord();\r\n this._LeadOutVisible = visible;\r\n this.Update();\r\n }\r\n\r\n //引线朝右视为未翻转\r\n set LeadOutFlipped(isFlipped: boolean)\r\n {\r\n if (this._LeadOutIsFlipped === isFlipped) return;\r\n this.WriteAllObjectRecord();\r\n this._LeadOutIsFlipped = isFlipped;\r\n this.Update();\r\n }\r\n\r\n get LeadOutFlipped()\r\n {\r\n return this._LeadOutIsFlipped;\r\n }\r\n\r\n toggleLeadOutVisible()\r\n {\r\n this.WriteAllObjectRecord();\r\n this.LeadOutVisible = !this._LeadOutVisible;\r\n }\r\n\r\n toggleLeadOutFlipped()\r\n {\r\n this.WriteAllObjectRecord();\r\n this.LeadOutFlipped = !this._LeadOutIsFlipped;\r\n }\r\n\r\n set LeadOutOffsetY(size: number)\r\n {\r\n if (this._LeadOutOffsetY === size) return;\r\n this.WriteAllObjectRecord();\r\n this._LeadOutOffsetY = size;\r\n this.Update();\r\n }\r\n\r\n get LeadOutOffsetY()\r\n {\r\n return this._LeadOutOffsetY;\r\n }\r\n\r\n set LeadOutOffsetX(size: number)\r\n {\r\n if (this._LeadOutOffsetX === size) return;\r\n this.WriteAllObjectRecord();\r\n this._LeadOutOffsetX = size;\r\n this.Update();\r\n }\r\n\r\n get LeadOutOffsetX()\r\n {\r\n return this._LeadOutOffsetX;\r\n }\r\n\r\n set DefaultValue(val: DefaultValue)\r\n {\r\n this._DefaultVal = val;\r\n this._LeadOutOffsetX = val.offset.x;\r\n this._LeadOutOffsetY = val.offset.y;\r\n this.LeadOutFlipped = val.isFlipped;\r\n }\r\n\r\n get DefaultValue()\r\n {\r\n return this._DefaultVal;\r\n }\r\n\r\n Explode()\r\n {\r\n this.UpdateText(this._Text.Position);\r\n let res =\r\n [\r\n new Line(this._FootP1.clone(), this._ArmP1.clone()),\r\n new Line(this._ArmP2.clone(), this._ArmP1.clone()),\r\n new Line(this._ArmP2.clone(), this._FootP2.clone()),\r\n this._Text.Clone()\r\n ];\r\n if (!equalv3(this._LeadOutPts.dragPt, midPoint(this._ArmP1, this._ArmP2)))\r\n res.push(\r\n new Line(midPoint(this._ArmP1, this._ArmP2), this._LeadOutPts.dragPt.clone()),\r\n new Line(this._LeadOutPts.dragPt.clone(), this._LeadOutPts.endPt.clone())\r\n );\r\n return res.map(en => en.ApplyMatrix(this._Matrix));\r\n }\r\n protected ApplyMirrorMatrix(m: Matrix4)\r\n {\r\n this.WriteAllObjectRecord();\r\n let footP1 = this.FootP1;\r\n let footP2 = this.FootP2;\r\n let armP1 = this.ArmP1;\r\n let armP2 = this.ArmP2;\r\n\r\n reviseMirrorMatrix(this._Matrix, 0);\r\n\r\n this.FootP1 = footP1;\r\n this.FootP2 = footP2;\r\n this.ArmP1 = armP1;\r\n this.ArmP2 = armP2;\r\n\r\n this.Update(UpdateDraw.Geometry);\r\n return this;\r\n }\r\n Clone(): this\r\n {\r\n let ent = super.Clone();\r\n ent._Text.CopyFrom(this._Text);\r\n for (let [type, obj] of ent._CacheDrawObject)\r\n {\r\n for (let o of obj.children)\r\n if (o instanceof TLine)\r\n o.geometry = o.geometry.clone();\r\n }\r\n return ent;\r\n }\r\n\r\n InitDrawObject(renderType: RenderType = RenderType.Wireframe): Object3D\r\n {\r\n let obj = new Object3D();\r\n let colorMaterial = GetDimLineMaterial(this, renderType);\r\n let line: TLine | Line2;\r\n if (renderType === RenderType.WireframePrint)\r\n {\r\n const geo = new LineGeometry();\r\n line = new Line2(geo, ColorMaterial.PrintLineMatrial);\r\n }\r\n else\r\n line = new TLine(\r\n BufferGeometryUtils.CreateFromPts([this._FootP1, this._FootP2, this._ArmP1, this._ArmP2]),\r\n colorMaterial\r\n );\r\n\r\n let arrow1 = new Mesh(BufferGeometryUtils.ArrowGeometry(), colorMaterial);\r\n let arrow2 = new Mesh(BufferGeometryUtils.ArrowGeometry(), colorMaterial);\r\n\r\n obj.add(line, arrow1, arrow2);\r\n\r\n this.UpdateDrawObject(renderType, obj);\r\n\r\n return obj;\r\n }\r\n\r\n UpdateDrawObject(renderType: RenderType, obj: Object3D)\r\n {\r\n obj.remove(...obj.children.slice(3));\r\n let [line, arrow1, arrow2] = obj.children;\r\n let arrowSize = 10;\r\n if (renderType === RenderType.WireframePrint)\r\n {\r\n arrowSize *= HostApplicationServices.lineWidth * 0.5;\r\n const geometry = (line).geometry;\r\n let nums: number[] = [];\r\n for (let p of [this._FootP1, this._ArmP1, this._ArmP2, this._FootP2])\r\n nums.push(p.x, p.y, p.z);\r\n geometry.setPositions(nums);\r\n }\r\n else\r\n BufferGeometryUtils.UpdatePts((line).geometry as BufferGeometry, [this._FootP1, this._ArmP1, this._ArmP2, this._FootP2], true);\r\n\r\n arrow1.scale.set(arrowSize, arrowSize, arrowSize);\r\n arrow2.scale.set(arrowSize, arrowSize, arrowSize);\r\n\r\n let armV = this._ArmP1.clone().sub(this._ArmP2);\r\n let armAn = angle(armV);\r\n\r\n arrow1.position.copy(this._ArmP1);\r\n arrow2.position.copy(this._ArmP2);\r\n if (this._ArmP1.distanceTo(this._ArmP2) < 36)\r\n {\r\n arrow1.rotation.z = armAn + Math.PI / 2;\r\n arrow2.rotation.z = armAn - Math.PI / 2;\r\n }\r\n else\r\n {\r\n arrow1.rotation.z = armAn - Math.PI / 2;\r\n arrow2.rotation.z = armAn + Math.PI / 2;\r\n }\r\n arrow1.updateMatrix();\r\n arrow2.updateMatrix();\r\n\r\n //更新引线this._LeadOutLine 并返回新的字体位置\r\n let textPos = this.UpdateLeadOutLine(renderType);\r\n if (this._LeadOutLine.EndParam > 0 && this._LeadOutLine.Visible)\r\n AddEntityDrawObject(obj, this._LeadOutLine, renderType);\r\n\r\n this.UpdateText(textPos);\r\n AddEntityDrawObject(obj, this._Text, renderType);\r\n this.isDragLeadOutPt = false;\r\n }\r\n\r\n /**\r\n * 更新引线并返回textPosition\r\n * @returns textPosition(Vector3)\r\n * @memberof AlignedDimension\r\n */\r\n UpdateLeadOutLine(renderType: RenderType): Vector3\r\n {\r\n let textPosition: Vector3 = midPoint(this._ArmP1, this._ArmP2);\r\n\r\n let distance = this._ArmP1.distanceTo(this._ArmP2);\r\n let distanceStr = FixedNotZero(distance, 2);\r\n let strWidth = distanceStr.length * (~~(Math.abs(this.TextSize) / 2));//文字总宽度\r\n let needLeadOut = (safeEval(distanceStr) < strWidth + 1e-6) && !(equaln(distance, 0));//文字宽度是否比托盘更宽 是 则需要引线\r\n\r\n if (this._LeadOutVisible && needLeadOut) //引线可见且需要引线\r\n {\r\n let dalUcs = this.DalUcs;\r\n let dalUcsInv = new Matrix4().getInverse(dalUcs);\r\n\r\n let textWidthVec = new Vector3(strWidth);\r\n let isLeft = (v) => { return v.x < midPoint(this._ArmP1, this._ArmP2).applyMatrix4(dalUcs).x; };\r\n //确定引线的点的位置\r\n if (this.isDragLeadOutPt)//是否拖拽了dragPt(拖拽dragPt需要更新endPt)\r\n {\r\n let dragPtInDalUcs = this._LeadOutPts.dragPt.clone().applyMatrix4(dalUcs);\r\n let isleft = isLeft(dragPtInDalUcs.clone());\r\n if (isleft)//已经拖过中线 更新endPt 改变IsFlipped\r\n this._LeadOutPts.endPt = dragPtInDalUcs.clone().sub(textWidthVec);\r\n else\r\n this._LeadOutPts.endPt = dragPtInDalUcs.clone().add(textWidthVec);\r\n this._LeadOutIsFlipped = !isleft;\r\n }\r\n else //没有拖拽\r\n {\r\n this._LeadOutPts.dragPt = textPosition.clone().applyMatrix4(dalUcs).add(new Vector3(this._LeadOutIsFlipped ? this._LeadOutOffsetX : -this._LeadOutOffsetX, this._LeadOutOffsetY));\r\n if (isLeft(this._LeadOutPts.dragPt))\r\n this._LeadOutPts.endPt = this._LeadOutPts.dragPt.clone().sub(textWidthVec);\r\n else\r\n this._LeadOutPts.endPt = this._LeadOutPts.dragPt.clone().add(textWidthVec);\r\n this._LeadOutPts.dragPt.applyMatrix4(dalUcsInv);\r\n }\r\n\r\n this._LeadOutPts.endPt.applyMatrix4(dalUcsInv);\r\n\r\n this._LeadOutLine.AutoUpdate = false;\r\n this._LeadOutLine.LineData = [textPosition, this._LeadOutPts.dragPt, this._LeadOutPts.endPt].map(p => { return { pt: AsVector2(p), bul: 0 }; });\r\n this._LeadOutLine.Position = new Vector3(0, 0, textPosition.z);\r\n this._LeadOutLine.ColorIndex = this.ColorIndex;\r\n this._LeadOutLine.Visible = true;\r\n this._LeadOutLine.AutoUpdate = true;\r\n this._LeadOutLine.DeferUpdate();\r\n\r\n textPosition = midPoint(this._LeadOutPts.dragPt, this._LeadOutPts.endPt);\r\n }\r\n else //引线不可见或不需要引线\r\n {\r\n //使引线不可见 并将dragPt隐藏于托盘中点\r\n this._LeadOutPts.dragPt = midPoint(this._ArmP1, this._ArmP2);\r\n this._LeadOutLine.Visible = false;\r\n }\r\n return textPosition;\r\n }\r\n\r\n UpdateText(pos?: Vector3)\r\n {\r\n this._Text.AutoUpdate = false;\r\n\r\n let textRo = this._TextRotation ?? angleAndX(this._ArmP1.clone().sub(this._ArmP2));\r\n this._Text.TextString = this.TextString;\r\n this._Text.Position = pos ?? midPoint(this._ArmP1, this._ArmP2);\r\n this._Text.TextRotation = textRo;\r\n this._Text.ColorIndex = this._Color;\r\n this._Text.Height = this._TextSize;\r\n\r\n this._Text.DeferUpdate();\r\n this._Text.AutoUpdate = true;\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 this.SetDataToTempPolyline();\r\n return snapPolyline.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform);\r\n }\r\n\r\n private SetDataToTempPolyline()\r\n {\r\n snapPolyline.OCS = this._Matrix;\r\n snapPolyline.LineData[0].pt.set(this._FootP1.x, this._FootP1.y);\r\n snapPolyline.LineData[1].pt.set(this._ArmP1.x, this._ArmP1.y);\r\n snapPolyline.LineData[2].pt.set(this._ArmP2.x, this._ArmP2.y);\r\n snapPolyline.LineData[3].pt.set(this._FootP2.x, this._FootP2.y);\r\n\r\n if (!equaln(this._FootP1.z, 0))\r\n snapPolyline.OCSNoClone.setPosition(snapPolyline.Position.add(snapPolyline.Normal.multiplyScalar(this._FootP1.z)));\r\n // snapPolyline.LineData[4].pt.set(this._LeadOutPts.dragPt.x, this._LeadOutPts.dragPt.y); //引线拖拽点\r\n // snapPolyline.LineData[5].pt.set(this._LeadOutPts.endPt.x, this._LeadOutPts.endPt.y);\r\n }\r\n\r\n UpdateDrawObjectMaterial(renderType: RenderType, obj: Object3D, material?: Material)\r\n {\r\n if (renderType === RenderType.WireframePrint)\r\n return;\r\n this.WriteAllObjectRecord();\r\n let colorMat = GetDimLineMaterial(this, renderType);\r\n this._LeadOutLine.ColorIndex = this._Color;\r\n let [line, arrow1, arrow2] = obj.children;\r\n (line).material = colorMat;\r\n (arrow1).material = colorMat;\r\n (arrow2).material = colorMat;\r\n this._Text.ColorIndex = this._Color;\r\n }\r\n\r\n GetGripPoints(): Array\r\n {\r\n return [this._FootP1, this._FootP2, this._ArmP1, this._ArmP2, midPoint(this._ArmP1, this._ArmP2), this._LeadOutPts.dragPt].map(p =>\r\n {\r\n return p.clone().applyMatrix4(this._Matrix);\r\n });\r\n }\r\n MoveGripPoints(indexList: number[], vec: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n let inv = this.OCSInv;\r\n let inv0 = inv.clone().setPosition(0, 0, 0);\r\n let vec0 = vec.clone().applyMatrix4(inv0);\r\n for (let i of indexList)\r\n {\r\n if (i === 5)\r\n {\r\n let dalucs = this.DalUcs;\r\n //开始拖拽引线dragPt\r\n this.isDragLeadOutPt = true;\r\n this._LeadOutPts.dragPt.add(vec0);\r\n let calcV = this._LeadOutPts.dragPt.clone().applyMatrix4(dalucs).sub(midPoint(this._ArmP1, this._ArmP2).applyMatrix4(dalucs));\r\n this._LeadOutOffsetY = calcV.y;\r\n this._LeadOutOffsetX = Math.abs(calcV.x);\r\n }\r\n else if (i >= 2)\r\n {\r\n let p = this.TextPosition.add(vec).applyMatrix4(inv);\r\n let l = new Line(this._ArmP1, this._ArmP2);\r\n let cp = l.GetClosestPointTo(p, true);\r\n let v = p.clone().sub(cp);\r\n\r\n this._ArmP1.add(v);\r\n this._ArmP2.add(v);\r\n this._LeadOutPts.dragPt.add(v);\r\n }\r\n else\r\n {\r\n if (i === 0)\r\n this._FootP1.add(vec0);\r\n else\r\n this._FootP2.add(vec0);\r\n\r\n this.ChangeFootPt();\r\n }\r\n }\r\n this.Update();\r\n }\r\n GetStretchPoints(): Array\r\n {\r\n return this.GetGripPoints();\r\n }\r\n MoveStretchPoints(indexList: Array, vec: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n let lst: number[] = [];\r\n let bChangeText = false;\r\n for (let i of indexList)\r\n {\r\n if (i <= 1)\r\n lst.push(i);\r\n else\r\n bChangeText = true;\r\n }\r\n if (lst.length > 0)\r\n this.MoveGripPoints(lst, vec);\r\n if (bChangeText)\r\n this.MoveGripPoints([2], vec);\r\n }\r\n protected ChangeFootPt()\r\n {\r\n let l = new Line(this._FootP1, this._FootP2);\r\n let cp = l.GetClosestPointTo(this._ArmP1, true);\r\n\r\n let v = this._ArmP1.clone().sub(cp);\r\n\r\n this._ArmP1.copy(this._FootP1.clone().add(v));\r\n this._ArmP2.copy(this._FootP2.clone().add(v));\r\n }\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._ArmP1.fromArray(file.Read());\r\n this._ArmP2.fromArray(file.Read());\r\n this._FootP1.fromArray(file.Read());\r\n this._FootP2.fromArray(file.Read());\r\n this._TextRotation = file.Read();\r\n if (ver > 2) this._TextString = file.Read();\r\n if (ver > 3)\r\n {\r\n this._LeadOutVisible = file.Read();\r\n this._LeadOutIsFlipped = file.Read();\r\n this._LeadOutPts.dragPt.fromArray(file.Read());\r\n this._LeadOutOffsetY = file.Read();\r\n this._LeadOutOffsetX = file.Read();\r\n }\r\n if (ver > 4) this._TextSize = file.Read();\r\n if (ver > 5) this._FractionDigits = file.Read() ?? HostApplicationServices.fractionDigitsType ?? 2;\r\n\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n super.WriteFile(file);\r\n file.Write(6);\r\n file.Write(this._ArmP1.toArray());\r\n file.Write(this._ArmP2.toArray());\r\n file.Write(this._FootP1.toArray());\r\n file.Write(this._FootP2.toArray());\r\n file.Write(this._TextRotation);\r\n file.Write(this._TextString);\r\n\r\n file.Write(this._LeadOutVisible);\r\n file.Write(this._LeadOutIsFlipped);\r\n file.Write(this._LeadOutPts.dragPt.toArray());\r\n file.Write(this._LeadOutOffsetY);\r\n file.Write(this._LeadOutOffsetX);\r\n\r\n file.Write(this._TextSize);\r\n file.Write(this._FractionDigits);\r\n }\r\n //#endregion\r\n}\r\n","import { BufferGeometry, Line, Material, Matrix4, Mesh, Object3D, Vector3 } from \"three\";\r\nimport { AddEntityDrawObject } from \"../../Common/AddEntityDrawObject\";\r\nimport { FixedNotZero } from \"../../Common/Utils\";\r\nimport { BufferGeometryUtils } from \"../../Geometry/BufferGeometryUtils\";\r\nimport { AsVector3 } from \"../../Geometry/GeUtils\";\r\nimport { RenderType } from \"../../GraphicsSystem/RenderType\";\r\nimport { equaln } from \"../../Nest/Common/Util\";\r\nimport { Factory } from \"../CADFactory\";\r\nimport { CADFiler } from \"../CADFiler\";\r\nimport { Arc } from \"../Entity/Arc\";\r\nimport { Text, TextAligen } from \"../Text/Text\";\r\nimport { Dimension } from \"./Dimension\";\r\nimport { GetDimLineMaterial } from \"./GetDimLineMaterial\";\r\n\r\n@Factory\r\nexport class ArcDimension extends Dimension\r\n{\r\n private _Arc = new Arc;\r\n protected _Text = new Text();\r\n\r\n constructor(\r\n private _Center: Vector3 = new Vector3,\r\n private _StartAngle: number = 0,\r\n private _EndAngle: number = 1,\r\n private _Clockwise = false,\r\n private _Radius: number = 1,\r\n private _TextRadiusAdd: number = 1,\r\n protected _TextString: string = \"⌒<>\",\r\n )\r\n {\r\n super();\r\n }\r\n\r\n get Text()\r\n {\r\n if (!this._Text.TextString)\r\n {\r\n this.PraseArc();\r\n this.ParseText();\r\n }\r\n return this._Text;\r\n }\r\n\r\n set TextRadiusAdd(ra: number)\r\n {\r\n if (equaln(ra, this._TextRadiusAdd)) return;\r\n\r\n this.WriteAllObjectRecord();\r\n this._TextRadiusAdd = ra;\r\n this.Update();\r\n }\r\n\r\n get TextRadiusAdd() { return this._TextRadiusAdd; }\r\n\r\n protected GetString(): string\r\n {\r\n return FixedNotZero(this._Arc.Length, this._FractionDigits);\r\n }\r\n\r\n //#region 拉伸相关\r\n GetGripPoints(): Vector3[]\r\n {\r\n this.PraseArc();\r\n let pts = this._Arc.GetGripPoints();\r\n for (let p of pts)\r\n p.applyMatrix4(this.OCSNoClone);\r\n return pts;\r\n }\r\n MoveGripPoints(indexList: number[], vec: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n vec = vec.clone().applyMatrix4(this.OCSInv.setPosition(0, 0, 0));\r\n\r\n this.PraseArc();\r\n this._Arc.MoveGripPoints(indexList, vec);\r\n\r\n this.UpdateArcFromThisArc();\r\n this.Update();\r\n }\r\n\r\n GetStretchPoints(): Vector3[]\r\n {\r\n this.PraseArc();\r\n let pts = this._Arc.GetStretchPoints();\r\n for (let p of pts)\r\n p.applyMatrix4(this.OCSNoClone);\r\n return pts;\r\n }\r\n\r\n MoveStretchPoints(indexList: number[], vec: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n vec = vec.clone().applyMatrix4(this.OCSInv.setPosition(0, 0, 0));\r\n\r\n this.PraseArc();\r\n this._Arc.MoveStretchPoints(indexList, vec);\r\n\r\n this.UpdateArcFromThisArc();\r\n this.Update();\r\n }\r\n\r\n private UpdateArcFromThisArc()\r\n {\r\n this._Center.copy(this._Arc.Center);\r\n this._StartAngle = this._Arc.StartAngle;\r\n this._EndAngle = this._Arc.EndAngle;\r\n this._Radius = this._Arc.Radius;\r\n this._Clockwise = this._Arc.IsClockWise;\r\n }\r\n //#endregion\r\n\r\n //#region Draw\r\n InitDrawObject(renderType: RenderType = RenderType.Wireframe)\r\n {\r\n let colorMaterial = GetDimLineMaterial(this, renderType);\r\n\r\n let obj = new Object3D();\r\n let line = new Line(new BufferGeometry, colorMaterial);\r\n obj.add(line);\r\n\r\n let arrow1 = new Mesh(BufferGeometryUtils.ArrowGeometry(), colorMaterial);\r\n let arrow2 = new Mesh(BufferGeometryUtils.ArrowGeometry(), colorMaterial);\r\n let arrowSize = 10;\r\n arrow1.scale.set(arrowSize, arrowSize, arrowSize);\r\n arrow2.scale.set(arrowSize, arrowSize, arrowSize);\r\n obj.add(arrow1, arrow2);\r\n\r\n this.UpdateDrawObject(renderType, obj);\r\n return obj;\r\n }\r\n\r\n UpdateDrawObject(renderType: RenderType, obj: Object3D)\r\n {\r\n obj.remove(...obj.children.slice(3));\r\n\r\n let [line, arrow1, arrow2] = obj.children as [Line, Mesh, Mesh];\r\n let colorMaterial = GetDimLineMaterial(this, renderType);\r\n line.material = colorMaterial;\r\n arrow1.material = colorMaterial;\r\n arrow2.material = colorMaterial;\r\n\r\n this.PraseArc();//半径设置到实际尺寸的位置,获得正确的标注尺寸\r\n let startFootPoint = this._Arc.StartPoint;//一定要在这个位置求脚点\r\n let endFootPoint = this._Arc.EndPoint;\r\n\r\n this._Text.AutoUpdate = false;\r\n\r\n this._Text.ColorIndex = this.ColorIndex;\r\n this.ParseText();\r\n\r\n this._Arc.DeferUpdate();\r\n this._Text.DeferUpdate();\r\n\r\n let linePoints: Vector3[] = [startFootPoint];\r\n for (let p of this._Arc.Shape.getPoints(8))\r\n linePoints.push(AsVector3(p).add(this._Center));\r\n linePoints.push(endFootPoint);\r\n\r\n let geo = line.geometry as BufferGeometry;\r\n if (!BufferGeometryUtils.UpdatePts(geo, linePoints))\r\n {\r\n line.geometry.dispose();\r\n line.geometry = BufferGeometryUtils.CreateFromPts(linePoints);\r\n }\r\n\r\n AddEntityDrawObject(obj, this._Text, renderType);\r\n\r\n //更新箭头的位置和旋转角度\r\n arrow1.position.copy(this._Arc.StartPoint);\r\n arrow1.rotation.z = this._Arc.GetFistDerivAngle(0) + Math.PI / 2;\r\n arrow1.updateMatrix();\r\n\r\n arrow2.position.copy(this._Arc.EndPoint);\r\n arrow2.rotation.z = this._Arc.GetFistDerivAngle(1) - Math.PI / 2;\r\n arrow2.updateMatrix();\r\n }\r\n\r\n private ParseText()\r\n {\r\n this._Text.TextString = this.TextString;\r\n\r\n this._Arc.Radius = this._Radius + this._TextRadiusAdd; //半径设置到文字的位置,获得文字的位置\r\n let textP = this._Arc.GetPointAtParam(0.5);\r\n let ang = this._Arc.GetAngleAtParam(0.5);\r\n let textOCS = new Matrix4().makeRotationZ(ang + Math.PI * 3 / 2).setPosition(textP);\r\n this._Text.TextAligen = TextAligen.Down;\r\n this._Text.OCS = textOCS;\r\n this._Text.Height = this._TextSize;\r\n }\r\n\r\n UpdateDrawObjectMaterial(type: RenderType, obj: Object3D, material?: Material)\r\n {\r\n let colorMaterial = GetDimLineMaterial(this, type);\r\n let count = Math.min(3, obj.children.length);\r\n for (let i = 0; i < count; i++)\r\n {\r\n let l = obj.children[i] as Line;\r\n l.material = colorMaterial;\r\n }\r\n\r\n this._Text.ColorIndex = this.ColorIndex;\r\n this.Text.DeferUpdate();\r\n }\r\n\r\n private PraseArc()\r\n {\r\n this._Arc.AutoUpdate = false;\r\n\r\n this._Arc.Center = this._Center;\r\n this._Arc.StartAngle = this._StartAngle;\r\n this._Arc.EndAngle = this._EndAngle;\r\n this._Arc.IsClockWise = this._Clockwise;\r\n this._Arc.Radius = this._Radius;\r\n }\r\n\r\n //#endregion\r\n\r\n //#region -------------------------File-------------------------\r\n //对象从文件中读取数据,初始化自身\r\n protected _ReadFile(file: CADFiler)\r\n {\r\n let ver = file.Read();\r\n super._ReadFile(file);\r\n this._Center.fromArray(file.Read());\r\n this._Radius = file.Read();\r\n this._TextRadiusAdd = file.Read();\r\n this._Clockwise = file.Read();\r\n this._StartAngle = file.Read();\r\n this._EndAngle = file.Read();\r\n this._TextString = file.Read();\r\n this._TextSize = file.Read();\r\n if (ver > 1) this._FractionDigits = file.Read();\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(2);\r\n super.WriteFile(file);\r\n file.Write(this._Center.toArray());\r\n file.Write(this._Radius);\r\n file.Write(this._TextRadiusAdd);\r\n file.Write(this._Clockwise);\r\n file.Write(this._StartAngle);\r\n file.Write(this._EndAngle);\r\n file.Write(this._TextString);\r\n file.Write(this._TextSize);\r\n file.Write(this._FractionDigits);\r\n }\r\n //#endregion\r\n}\r\n","import { BufferGeometry, Line as TLine, Material, Matrix3, Matrix4, Mesh, Object3D, Vector3 } from \"three\";\r\nimport { Line2 } from \"three/examples/jsm/lines/Line2\";\r\nimport { HostApplicationServices } from \"../../ApplicationServices/HostApplicationServices\";\r\nimport { AddEntityDrawObject } from \"../../Common/AddEntityDrawObject\";\r\nimport { ColorMaterial } from \"../../Common/ColorPalette\";\r\nimport { DisposeThreeObj } from \"../../Common/Dispose\";\r\nimport { reviseMirrorMatrix } from \"../../Common/Matrix4Utils\";\r\nimport { FixedNotZero } from \"../../Common/Utils\";\r\nimport { ObjectSnapMode } from \"../../Editor/ObjectSnapMode\";\r\nimport { BufferGeometryUtils } from \"../../Geometry/BufferGeometryUtils\";\r\nimport { angle, angleAndX, MoveMatrix } from \"../../Geometry/GeUtils\";\r\nimport { RenderType } from \"../../GraphicsSystem/RenderType\";\r\nimport { Factory } from \"../CADFactory\";\r\nimport { CADFiler } from \"../CADFiler\";\r\nimport { Circle } from \"../Entity/Circle\";\r\nimport { Line } from \"../Entity/Line\";\r\nimport { ObjectId } from \"../ObjectId\";\r\nimport { Dimension } from \"./Dimension\";\r\nimport { GetDimLineMaterial } from \"./GetDimLineMaterial\";\r\n\r\n@Factory\r\nexport class RadiusDimension extends Dimension\r\n{\r\n\r\n OnlyRenderType = true;\r\n protected _TextString: string = \"R<>\";\r\n\r\n constructor(\r\n protected _Center = new Vector3(),\r\n protected _DiameterOrRadiusPoint = new Vector3(),\r\n protected _TextPoint = new Vector3(),\r\n )\r\n {\r\n super();\r\n this._Text.Height = HostApplicationServices.dimTextHeight;\r\n }\r\n\r\n get Text()\r\n {\r\n if (!this._Text.TextString)\r\n this.UpdateText();\r\n\r\n return this._Text;\r\n }\r\n\r\n protected GetString(): string\r\n {\r\n return FixedNotZero(this._Center.distanceTo(this._DiameterOrRadiusPoint), this._FractionDigits);\r\n }\r\n\r\n set Material(materialId: ObjectId) { }\r\n\r\n get Center()\r\n {\r\n return this._Center.clone().applyMatrix4(this._Matrix);\r\n }\r\n set Center(v: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._Center.copy(v).applyMatrix4(this.OCSInv);\r\n this.Update();\r\n }\r\n get DiameterOrRadiusPoint()\r\n {\r\n return this._DiameterOrRadiusPoint.clone().applyMatrix4(this._Matrix);\r\n }\r\n set DiameterOrRadiusPoint(v: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._DiameterOrRadiusPoint.copy(v).applyMatrix4(this.OCSInv);\r\n this.Update();\r\n }\r\n get TextPoint()\r\n {\r\n return this._TextPoint.clone().applyMatrix4(this._Matrix);\r\n }\r\n set TextPoint(v: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._TextPoint.copy(v).applyMatrix4(this.OCSInv);\r\n this.Update();\r\n }\r\n Explode()\r\n {\r\n this.UpdateText();\r\n return [\r\n new Line(this._Center, this._DiameterOrRadiusPoint),\r\n new Line(this._DiameterOrRadiusPoint, this._TextPoint),\r\n this._Text.Clone()\r\n ].map(en => en.ApplyMatrix(this._Matrix));\r\n }\r\n\r\n Clone(): this\r\n {\r\n let ent = super.Clone();\r\n ent._Text.CopyFrom(this._Text);\r\n for (let [type, obj] of ent._CacheDrawObject)\r\n {\r\n for (let o of obj.children)\r\n if (o instanceof TLine)\r\n o.geometry = o.geometry.clone();\r\n }\r\n return ent;\r\n }\r\n\r\n InitDrawObject(renderType: RenderType = RenderType.Wireframe): Object3D\r\n {\r\n this._Text.ColorIndex = this.ColorIndex;\r\n let obj = new Object3D();\r\n\r\n let colorMaterial = GetDimLineMaterial(this, renderType);\r\n\r\n let line: TLine | Line2;\r\n\r\n if (renderType === RenderType.WireframePrint)\r\n line = new Line2(undefined, ColorMaterial.PrintLineMatrial);\r\n else\r\n line = new TLine(\r\n BufferGeometryUtils.CreateFromPts([this._Center, this._DiameterOrRadiusPoint, this._TextPoint]),\r\n colorMaterial\r\n );\r\n\r\n let arrow = new Mesh(BufferGeometryUtils.ArrowGeometry(), colorMaterial);\r\n\r\n obj.add(line, arrow);\r\n\r\n AddEntityDrawObject(obj, this._Text, renderType);\r\n this.UpdateDrawObject(renderType, obj);\r\n\r\n return obj;\r\n }\r\n\r\n UpdateDrawObject(renderType: RenderType, obj: Object3D)\r\n {\r\n let [line, arrow, textObj] = obj.children;\r\n\r\n let arrowSize = 10;\r\n\r\n if (renderType === RenderType.WireframePrint)\r\n {\r\n arrowSize *= HostApplicationServices.lineWidth * 0.5;\r\n let geo = (line as Line2).geometry;\r\n geo.setPositions([...this._Center.toArray(), ...this._DiameterOrRadiusPoint.toArray(), ...this._TextPoint.toArray()]);\r\n }\r\n else\r\n BufferGeometryUtils.UpdatePts((line).geometry as BufferGeometry, [this._Center, this._DiameterOrRadiusPoint, this._TextPoint], true);\r\n\r\n arrow.scale.set(arrowSize, arrowSize, arrowSize);\r\n\r\n let armV = this._TextPoint.clone().sub(this._DiameterOrRadiusPoint);\r\n let armAn = angle(armV);\r\n\r\n arrow.position.copy(this._DiameterOrRadiusPoint);\r\n arrow.rotation.z = armAn + Math.PI / 2;\r\n arrow.updateMatrix();\r\n\r\n obj.remove(textObj);\r\n DisposeThreeObj(textObj);\r\n\r\n this.UpdateText();\r\n\r\n AddEntityDrawObject(obj, this._Text, renderType);\r\n }\r\n\r\n UpdateDrawObjectMaterial(renderType: RenderType, obj: Object3D, material?: Material)\r\n {\r\n if (renderType === RenderType.WireframePrint)\r\n return;\r\n let [line, arrow, textObj] = obj.children as [TLine, Mesh, Object3D];\r\n let lineMaterial = GetDimLineMaterial(this, renderType);\r\n\r\n line.material = lineMaterial;\r\n arrow.material = line.material;\r\n this._Text.ColorIndex = this.ColorIndex;\r\n\r\n //如果实体是拷贝的,那么可能修改材质失败\r\n if (textObj.children[0])\r\n {\r\n let mesh = textObj.children[0] as Mesh;\r\n mesh.material = ColorMaterial.GetBasicMaterialDoubleSide(this.ColorIndex);//TODO:在布局时应该如何渲染?\r\n }\r\n }\r\n\r\n UpdateText()\r\n {\r\n this._Text.AutoUpdate = false;\r\n\r\n let armV = this._TextPoint.clone().sub(this._DiameterOrRadiusPoint);\r\n this._Text.TextString = this.TextString;\r\n this._Text.Position = this._TextPoint;\r\n this._Text.TextRotation = angleAndX(armV);\r\n this._Text.Height = this._TextSize;\r\n\r\n this._Text.DeferUpdate();\r\n this._Text.AutoUpdate = true;\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 l = new Line(this.Center, this.TextPoint);\r\n switch (snapMode)\r\n {\r\n case ObjectSnapMode.End:\r\n return this.GetStretchPoints();\r\n default:\r\n return l.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform);\r\n }\r\n }\r\n GetGripPoints(): Array\r\n {\r\n return [this.Center, this.DiameterOrRadiusPoint, this.TextPoint];\r\n }\r\n MoveGripPoints(indexList: number[], vec: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n let inv = this.OCSInv;\r\n let vec0 = vec.clone().applyMatrix4(inv.clone().setPosition(0, 0, 0));\r\n let rad = this._Center.distanceTo(this._DiameterOrRadiusPoint);\r\n\r\n for (let i of indexList)\r\n {\r\n if (i === 1)\r\n {\r\n let center = this.DiameterOrRadiusPoint.add(vec).applyMatrix4(inv);\r\n let cir = new Circle(this._Center, rad);\r\n let cp = cir.GetClosestPointTo(center, true);\r\n this._DiameterOrRadiusPoint.copy(cp);\r\n let dist = this._Center.distanceTo(this._TextPoint);\r\n let dir = this._DiameterOrRadiusPoint.clone().sub(this._Center).normalize().multiplyScalar(dist);\r\n this._TextPoint.copy(this._Center.clone().add(dir));\r\n }\r\n else\r\n {\r\n if (i === 0)\r\n this._Center.add(vec0);\r\n else\r\n this._TextPoint.add(vec0);\r\n let dir = this._TextPoint.clone().sub(this._Center).normalize().multiplyScalar(rad);\r\n this._DiameterOrRadiusPoint.copy(this._Center.clone().add(dir));\r\n }\r\n }\r\n this.Update();\r\n }\r\n GetStretchPoints(): Array\r\n {\r\n return this.GetGripPoints();\r\n }\r\n MoveStretchPoints(indexList: Array, vec: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n if (indexList.length >= 2)\r\n this.ApplyMatrix(MoveMatrix(vec));\r\n else\r\n this.MoveGripPoints(indexList, vec);\r\n }\r\n protected ApplyMirrorMatrix(m: Matrix4)\r\n {\r\n this.WriteAllObjectRecord();\r\n let p1 = this.Center;\r\n let p2 = this.DiameterOrRadiusPoint;\r\n let p3 = this.TextPoint;\r\n\r\n reviseMirrorMatrix(this._Matrix);\r\n\r\n this.Center = p1;\r\n this.DiameterOrRadiusPoint = p2;\r\n this.TextPoint = p3;\r\n\r\n return this;\r\n }\r\n protected _ReadFile(file: CADFiler)\r\n {\r\n super._ReadFile(file);\r\n let ver = file.Read();\r\n this._Center.fromArray(file.Read());\r\n this._DiameterOrRadiusPoint.fromArray(file.Read());\r\n this._TextPoint.fromArray(file.Read());\r\n if (ver > 1) this._TextString = file.Read();\r\n if (ver > 2) this._TextSize = file.Read();\r\n if (ver > 3) this._FractionDigits = file.Read();\r\n }\r\n WriteFile(file: CADFiler)\r\n {\r\n super.WriteFile(file);\r\n file.Write(4);\r\n file.Write(this._Center.toArray());\r\n file.Write(this._DiameterOrRadiusPoint.toArray());\r\n file.Write(this._TextPoint.toArray());\r\n file.Write(this._TextString);\r\n file.Write(this._TextSize);\r\n file.Write(this._FractionDigits);\r\n }\r\n}\r\n","import { BufferGeometry, Line as TLine, Material, Mesh, Object3D, Vector3 } from \"three\";\r\nimport { Line2 } from \"three/examples/jsm/lines/Line2\";\r\nimport { HostApplicationServices } from \"../../ApplicationServices/HostApplicationServices\";\r\nimport { AddEntityDrawObject } from \"../../Common/AddEntityDrawObject\";\r\nimport { ColorMaterial } from \"../../Common/ColorPalette\";\r\nimport { DisposeThreeObj } from \"../../Common/Dispose\";\r\nimport { BufferGeometryUtils } from \"../../Geometry/BufferGeometryUtils\";\r\nimport { angle, midPoint } from \"../../Geometry/GeUtils\";\r\nimport { RenderType } from \"../../GraphicsSystem/RenderType\";\r\nimport { Factory } from \"../CADFactory\";\r\nimport { Circle } from \"../Entity/Circle\";\r\nimport { GetDimLineMaterial } from \"./GetDimLineMaterial\";\r\nimport { RadiusDimension } from \"./RadiusDimension\";\r\n\r\n\r\nconst LINE_EXTEND_VAL = 40; //尺寸线延长值\r\n\r\n@Factory\r\nexport class DiameterDimension extends RadiusDimension\r\n{\r\n protected _TextString: string = \"D<>\";\r\n InitDrawObject(renderType: RenderType = RenderType.Wireframe): Object3D\r\n {\r\n this._Text.ColorIndex = this.ColorIndex;\r\n let obj = new Object3D();\r\n\r\n let colorMaterial = GetDimLineMaterial(this, renderType);\r\n\r\n let vec = this._DiameterOrRadiusPoint.clone().sub(this._Center).normalize().multiplyScalar(-LINE_EXTEND_VAL);\r\n\r\n let line: TLine | Line2;\r\n\r\n if (renderType === RenderType.WireframePrint)\r\n line = new Line2(undefined, ColorMaterial.PrintLineMatrial);\r\n else\r\n line = new TLine(\r\n BufferGeometryUtils.CreateFromPts([this._Center.clone().add(vec), this._DiameterOrRadiusPoint, this._TextPoint]),\r\n colorMaterial\r\n );\r\n\r\n let arrow = new Mesh(BufferGeometryUtils.ArrowGeometry(), colorMaterial);\r\n let arrow2 = new Mesh(BufferGeometryUtils.ArrowGeometry(), colorMaterial);\r\n\r\n obj.add(line, arrow, arrow2);\r\n AddEntityDrawObject(obj, this._Text, renderType);\r\n\r\n this.UpdateDrawObject(renderType, obj);\r\n\r\n return obj;\r\n }\r\n UpdateDrawObject(renderType: RenderType, obj: Object3D)\r\n {\r\n let [line, arrow, arrow2, textObj] = obj.children;\r\n\r\n let vec = this._DiameterOrRadiusPoint.clone().sub(this._Center).normalize().multiplyScalar(-LINE_EXTEND_VAL);\r\n\r\n let arrowSize = 10;\r\n\r\n let sp = this._Center.clone().add(vec);\r\n\r\n if (renderType === RenderType.WireframePrint)\r\n {\r\n arrowSize *= HostApplicationServices.lineWidth * 0.5;\r\n let geo = (line as Line2).geometry;\r\n geo.setPositions([...sp.toArray(), ...this._DiameterOrRadiusPoint.toArray(), ...this._TextPoint.toArray()]);\r\n }\r\n else\r\n BufferGeometryUtils.UpdatePts((line).geometry as BufferGeometry, [sp, this._DiameterOrRadiusPoint, this._TextPoint], true);\r\n\r\n arrow.scale.set(arrowSize, arrowSize, arrowSize);\r\n arrow2.scale.set(arrowSize, arrowSize, arrowSize);\r\n\r\n let armV = this._TextPoint.clone().sub(this._DiameterOrRadiusPoint);\r\n let armAn = angle(armV);\r\n\r\n arrow.position.copy(this._DiameterOrRadiusPoint);\r\n arrow.rotation.z = armAn + Math.PI / 2;\r\n arrow.updateMatrix();\r\n\r\n arrow2.position.copy(this._Center);\r\n arrow2.rotation.z = armAn - Math.PI / 2;\r\n arrow2.updateMatrix();\r\n\r\n this.UpdateText();\r\n\r\n obj.remove(textObj);\r\n DisposeThreeObj(textObj);\r\n AddEntityDrawObject(obj, this._Text, renderType);\r\n }\r\n\r\n UpdateDrawObjectMaterial(renderType: RenderType, obj: Object3D, material?: Material)\r\n {\r\n if (renderType === RenderType.WireframePrint)\r\n return;\r\n\r\n let [line, arrow, arrow2, textObj] = obj.children as [TLine, Mesh, Mesh, Object3D];\r\n let lineMaterial = GetDimLineMaterial(this, renderType);\r\n\r\n line.material = lineMaterial;\r\n arrow.material = line.material;\r\n arrow2.material = lineMaterial;\r\n\r\n this._Text.ColorIndex = this.ColorIndex;\r\n\r\n //如果实体是拷贝的,那么可能修改材质失败\r\n if (textObj.children[0])\r\n {\r\n let mesh = textObj.children[0] as Mesh;\r\n mesh.material = ColorMaterial.GetBasicMaterialDoubleSide(this.ColorIndex);//TODO:在布局时应该如何渲染?\r\n }\r\n }\r\n\r\n MoveGripPoints(indexList: number[], vec: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n let v = vec.clone().applyMatrix4(this.OCSInv.setPosition(new Vector3()));\r\n let dia = this._Center.distanceTo(this._DiameterOrRadiusPoint);\r\n let cirCenter = midPoint(this._Center, this._DiameterOrRadiusPoint);\r\n for (let i of indexList)\r\n {\r\n if (i === 0)\r\n {\r\n this._Center.add(v);\r\n let dist = this._TextPoint.distanceTo(this._DiameterOrRadiusPoint);\r\n let v1 = cirCenter.clone().sub(this._Center);\r\n this._DiameterOrRadiusPoint.copy(cirCenter.clone().add(v1));\r\n this._TextPoint.copy(this._DiameterOrRadiusPoint.clone().add(v1.normalize().multiplyScalar(dist)));\r\n }\r\n else if (i === 1)\r\n {\r\n let dist = this._TextPoint.distanceTo(this._DiameterOrRadiusPoint);\r\n let center = this.DiameterOrRadiusPoint.add(vec).applyMatrix4(this.OCSInv);\r\n let cir = new Circle(cirCenter, dia / 2);\r\n this._DiameterOrRadiusPoint.copy(cir.GetClosestPointTo(center, true));\r\n let v1 = this._DiameterOrRadiusPoint.clone().sub(cirCenter).normalize().multiplyScalar(-dia);\r\n this._Center.copy(this._DiameterOrRadiusPoint.clone().add(v1));\r\n this._TextPoint.copy(this._DiameterOrRadiusPoint.clone().add(v1.normalize().multiplyScalar(-dist)));\r\n }\r\n else\r\n {\r\n this._TextPoint.add(v);\r\n let v1 = this._TextPoint.clone().sub(cirCenter).normalize().multiplyScalar(dia / 2);\r\n this._DiameterOrRadiusPoint.copy(cirCenter.clone().add(v1));\r\n this._Center.copy(cirCenter.add(v1.negate()));\r\n }\r\n }\r\n this.Update();\r\n }\r\n}\r\n","import { Vector3 } from \"three\";\r\nimport { isBetweenNums } from \"../../Common/Utils\";\r\nimport { equaln } from \"../../Geometry/GeUtils\";\r\nimport { Factory } from \"../CADFactory\";\r\nimport { Line } from \"../Entity/Line\";\r\nimport { AlignedDimension } from \"./AlignedDimension\";\r\n\r\nenum DimDir\r\n{\r\n /**\r\n * 水平\r\n */\r\n H = 0,\r\n /**\r\n * 垂直\r\n */\r\n V = 1\r\n}\r\n\r\n@Factory\r\nexport class LinearDimension extends AlignedDimension\r\n{\r\n private _DimDir = DimDir.H;\r\n\r\n get TextPosition()\r\n {\r\n return super.TextPosition;\r\n }\r\n set TextPosition(p: Vector3)\r\n {\r\n p = p.clone().applyMatrix4(this.OCSInv);\r\n let bit = 0;//x 1 y 2\r\n if (isBetweenNums(this._FootP1.x, this._FootP2.x, p.x))\r\n bit |= 1;\r\n if (isBetweenNums(this._FootP1.y, this._FootP2.y, p.y))\r\n bit |= 2;\r\n\r\n if (bit === 1)\r\n this._DimDir = DimDir.H;\r\n else if (bit === 2)\r\n this._DimDir = DimDir.V;\r\n\r\n if (this._DimDir === DimDir.H)\r\n {\r\n this._ArmP1.copy(this._FootP1).setY(p.y);\r\n this._ArmP2.copy(this._FootP2).setY(p.y);\r\n }\r\n else\r\n {\r\n this._ArmP1.copy(this._FootP1).setX(p.x);\r\n this._ArmP2.copy(this._FootP2).setX(p.x);\r\n }\r\n this.Update();\r\n }\r\n ChangeFootPt()\r\n {\r\n let l = new Line(this._ArmP1, this._ArmP2);\r\n if (!equaln(this._FootP1.x, this._ArmP1.x) && !equaln(this._FootP1.y, this._ArmP1.y))\r\n {\r\n let cp1 = l.GetClosestPointTo(this._FootP1, true);\r\n this._ArmP1.copy(cp1);\r\n }\r\n if (!equaln(this._FootP2.x, this._ArmP2.x) && !equaln(this._FootP2.y, this._ArmP2.y))\r\n {\r\n let cp2 = l.GetClosestPointTo(this._FootP2, true);\r\n this._ArmP2.copy(cp2);\r\n }\r\n }\r\n}\r\n","import { Factory } from \"../CADFactory\";\r\nimport { Entity } from \"./Entity\";\r\nimport { BoxBufferGeometry, Mesh, Object3D, Vector3, MeshBasicMaterial } from \"three\";\r\nimport { ColorMaterial } from \"../../Common/ColorPalette\";\r\nimport { RenderType } from \"../../GraphicsSystem/RenderType\";\r\n\r\n\r\nlet boxGeo: BoxBufferGeometry;\r\nexport function GetBoxGeoBufferGeometry()\r\n{\r\n if (!boxGeo)\r\n boxGeo = new BoxBufferGeometry(1, 1, 1);\r\n return boxGeo;\r\n}\r\n\r\n@Factory\r\nexport class BoxSolid extends Entity\r\n{\r\n OnlyRenderType = true;\r\n private _opacity = 0.5;\r\n constructor(private _length = 1, private _width = 1, private _height = 1)\r\n {\r\n super();\r\n }\r\n set Opacity(o: number)\r\n {\r\n if (o !== this._opacity)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._opacity = o;\r\n this.Update();\r\n }\r\n }\r\n InitDrawObject(renderType: RenderType = RenderType.Wireframe)\r\n {\r\n let box = new Object3D();\r\n let geo = GetBoxGeoBufferGeometry();\r\n let mat = ColorMaterial.GetBasicMaterialTransparent(7, this._opacity);\r\n box.add(new Mesh(geo, mat));\r\n this.UpdateDrawObject(renderType, box);\r\n return box;\r\n }\r\n UpdateDrawObject(type: RenderType, obj: Object3D)\r\n {\r\n obj.children[0].scale.set(this._length, this._width, this._height);\r\n ((obj.children[0] as Mesh).material as MeshBasicMaterial).opacity = this._opacity;\r\n obj.children[0].position.copy(new Vector3(this._length / 2, this._width / 2, this._height / 2));\r\n obj.children[0].updateMatrix();\r\n }\r\n}\r\n","import { Box3, Vector3 } from \"three\";\r\nimport { Line } from \"../../DatabaseServices/Entity/Line\";\r\nimport { equalv3 } from \"../../Geometry/GeUtils\";\r\n\r\n\r\nexport function BoxLine(box: Box3): Line[]\r\n{\r\n if (box.isEmpty())\r\n return [];\r\n let pts = [\r\n new Vector3(box.min.x, box.min.y, box.min.z),\r\n new Vector3(box.min.x, box.min.y, box.max.z),\r\n new Vector3(box.min.x, box.max.y, box.min.z),\r\n new Vector3(box.min.x, box.max.y, box.max.z),\r\n\r\n new Vector3(box.max.x, box.min.y, box.min.z),\r\n new Vector3(box.max.x, box.min.y, box.max.z),\r\n new Vector3(box.max.x, box.max.y, box.min.z),\r\n new Vector3(box.max.x, box.max.y, box.max.z),\r\n ];\r\n\r\n let lines: Line[] = [];\r\n for (let line of [\r\n [0, 1], [2, 3], [0, 2], [1, 3],\r\n [4, 5], [6, 7], [4, 6], [5, 7],\r\n\r\n [0, 4], [2, 6],\r\n\r\n [1, 5], [3, 7],\r\n ])\r\n {\r\n let p1 = pts[line[0]];\r\n let p2 = pts[line[1]];\r\n if (!equalv3(p1, p2))\r\n lines.push(new Line(p1, p2));\r\n }\r\n return lines;\r\n}\r\n","import { Box3, Matrix3, Matrix4, Vector3 } from \"three\";\r\nimport { BoxLine } from \"../../Add-on/testEntity/BoxLine\";\r\nimport { UpdateDraw } from \"../../Common/Status\";\r\nimport { ObjectSnapMode } from \"../../Editor/ObjectSnapMode\";\r\nimport { Box3Ext } from \"../../Geometry/Box\";\r\nimport { equalv3 } from \"../../Geometry/GeUtils\";\r\nimport { Factory } from \"../CADFactory\";\r\nimport { CADFiler } from \"../CADFiler\";\r\nimport { ObjectId } from \"../ObjectId\";\r\nimport { Entity } from \"./Entity\";\r\n\r\nconst TempBox = new Box3;\r\n\r\n/**\r\n * 外部引用的实体,比如glTF\r\n */\r\n@Factory\r\nexport class EntityRef extends Entity\r\n{\r\n OnlyRenderType = true;\r\n\r\n private _Size = new Vector3;//原始尺寸\r\n private _ScaleSize = new Vector3;//缩放后的尺寸\r\n private _Center = new Vector3;//盒子中心\r\n\r\n private _OverWriteMaterial = new Map();//section index -> materialId\r\n\r\n // `/Data/ASSETS/DXAA_0001`\r\n constructor(private _url?: string)\r\n {\r\n super();\r\n }\r\n\r\n get Url() { return this._url; }\r\n\r\n get CurSize() { return this.ScaleSize.x ? this.ScaleSize.clone() : this._Size.clone(); }\r\n\r\n get ScaleSize() { return this._ScaleSize; }\r\n set ScaleSize(size: Vector3)\r\n {\r\n if (!equalv3(size, this._ScaleSize))\r\n {\r\n this.WriteAllObjectRecord();\r\n this._ScaleSize.copy(size);\r\n this.Update();\r\n }\r\n }\r\n\r\n get Scale()\r\n {\r\n if (this._ScaleSize.x && this._Size.x)\r\n return this._ScaleSize.clone().divide(this._Size);\r\n return new Vector3(1, 1, 1);\r\n }\r\n\r\n get BoundingBoxInOCS()\r\n {\r\n let size = this.ScaleSize.x ? this.ScaleSize : this._Size;\r\n return new Box3Ext(\r\n size.clone().multiplyScalar(-0.5).add(this._Center),\r\n size.clone().multiplyScalar(0.5).add(this._Center));\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;//因为这个实体不需要修改内部的geom 所以我们可以复用她\r\n\r\n newObj.matrix = this._Matrix;\r\n newObj.userData = { Entity: this };\r\n // newObj.userData.IsClone = true; //因为这个实体不需要修改内部的geom 所以我们可以复用她\r\n this._CacheDrawObject.set(type, newObj);\r\n }\r\n this.NeedUpdateFlag = UpdateDraw.None;\r\n }\r\n\r\n ApplyScaleMatrix(m: Matrix4)\r\n {\r\n this.WriteAllObjectRecord();\r\n let p = this.Position;\r\n p.applyMatrix4(m);\r\n\r\n m.extractBasis(Entity._xa, Entity._ya, Entity._za);\r\n\r\n let scaleX = Entity._xa.length();\r\n let scaleY = Entity._ya.length();\r\n let scaleZ = Entity._za.length();\r\n\r\n if (!this._ScaleSize.x) this._ScaleSize.copy(this._Size);\r\n\r\n this._ScaleSize.x *= scaleX;\r\n this._ScaleSize.y *= scaleY;\r\n this._ScaleSize.z *= scaleZ;\r\n\r\n Entity._xa.normalize();\r\n Entity._ya.normalize();\r\n Entity._za.normalize();\r\n m = new Matrix4().makeBasis(Entity._xa, Entity._ya, Entity._za);\r\n this.ApplyMatrix(m);\r\n\r\n this.Position = p;\r\n this.Update();\r\n return this;\r\n }\r\n\r\n // //与网络相关,如果模型没请求下来 这个盒子数据也是错误的()\r\n // // if (this._Size.x)//我们使用缓存的数据直接求盒子? 这样是不行的 因为旋转后的盒子似乎不对!\r\n // // {\r\n // // let size2 = (this._ScaleSize.x ? this._ScaleSize : this._Size).clone().multiplyScalar(0.5);\r\n // // return new Box3(this._Center.clone().sub(size2), size2.add(this._Center));\r\n // // }\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 let box = this.BoundingBox;\r\n let [x1, y1, z1] = [box.min.x, box.min.y, box.min.z];\r\n let [x2, y2, z2] = [box.max.x, box.max.y, box.max.z];\r\n switch (snapMode)\r\n {\r\n case ObjectSnapMode.End:\r\n return this.GetGripPoints();\r\n case ObjectSnapMode.Mid:\r\n let mid = [\r\n new Vector3(x1, y1, (z1 + z2) / 2),\r\n new Vector3(x1, y2, (z1 + z2) / 2),\r\n new Vector3(x2, y2, (z1 + z2) / 2),\r\n new Vector3(x2, y1, (z1 + z2) / 2),\r\n ];\r\n let midline = [\r\n new Vector3(x1, (y1 + y2) / 2, z1),\r\n new Vector3(x2, (y1 + y2) / 2, z1),\r\n new Vector3((x1 + x2) / 2, y2, z1),\r\n new Vector3((x1 + x2) / 2, y1, z1),\r\n ];\r\n let v = new Vector3(0, 0, z2);\r\n let mids: Vector3[] = [];\r\n mids.push(...mid, ...midline, ...midline.map(p => p.clone().add(v)));\r\n return mids;\r\n case ObjectSnapMode.Nea:\r\n let lines = BoxLine(this.BoundingBox);\r\n let neas: Vector3[] = [];\r\n for (let l of lines)\r\n neas.push(...l.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform));\r\n return neas;\r\n default:\r\n break;\r\n }\r\n return [];\r\n }\r\n\r\n GetGripPoints(): Array\r\n {\r\n return [];//这些点必须按照boxInOcs矩阵显示 并且这个点太多了 太烦了 暂时关闭\r\n let box = this.BoundingBox;\r\n let [x1, y1, z1] = [box.min.x, box.min.y, box.min.z];\r\n let [x2, y2, z2] = [box.max.x, box.max.y, box.max.z];\r\n let ends = [\r\n new Vector3(x1, y1, z1),\r\n new Vector3(x1, y1, z2),\r\n new Vector3(x1, y2, z1),\r\n new Vector3(x1, y2, z2),\r\n\r\n new Vector3(x2, y1, z1),\r\n new Vector3(x2, y1, z2),\r\n new Vector3(x2, y2, z1),\r\n new Vector3(x2, y2, z2),\r\n\r\n new Vector3((x1 + x2) / 2, (y1 + y2) / 2, z1),\r\n new Vector3((x1 + x2) / 2, (y1 + y2) / 2, z2),\r\n new Vector3((x1 + x2) / 2, y1, (z1 + z2) / 2),\r\n new Vector3((x1 + x2) / 2, y2, (z1 + z2) / 2),\r\n new Vector3(x1, (y1 + y2) / 2, (z1 + z2) / 2),\r\n new Vector3(x2, (y1 + y2) / 2, (z1 + z2) / 2),\r\n ];\r\n return ends;\r\n }\r\n MoveGripPoints(indexList: Array, vec: Vector3)\r\n {\r\n if (indexList.length)\r\n {\r\n this.WriteAllObjectRecord();\r\n this.Position = this.Position.add(vec);\r\n }\r\n }\r\n //#endregion\r\n\r\n //#region -------------------------File-------------------------\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._url = file.Read();\r\n\r\n if (ver > 1)\r\n {\r\n this._Size.x = file.Read();\r\n this._Size.y = file.Read();\r\n this._Size.z = file.Read();\r\n\r\n this._Center.x = file.Read();\r\n this._Center.y = file.Read();\r\n this._Center.z = file.Read();\r\n\r\n this._ScaleSize.x = file.Read();\r\n this._ScaleSize.y = file.Read();\r\n this._ScaleSize.z = file.Read();\r\n }\r\n\r\n this._OverWriteMaterial.clear();\r\n if (ver > 2)\r\n {\r\n let size = file.Read();\r\n for (let i = 0; i < size; i++)\r\n {\r\n let index = file.Read();\r\n let id = file.ReadHardObjectId();\r\n this._OverWriteMaterial.set(index, id);\r\n }\r\n }\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(3);\r\n super.WriteFile(file);\r\n file.Write(this._url);\r\n\r\n //2\r\n file.Write(this._Size.x);\r\n file.Write(this._Size.y);\r\n file.Write(this._Size.z);\r\n\r\n file.Write(this._Center.x);\r\n file.Write(this._Center.y);\r\n file.Write(this._Center.z);\r\n\r\n file.Write(this._ScaleSize.x);\r\n file.Write(this._ScaleSize.y);\r\n file.Write(this._ScaleSize.z);\r\n\r\n //ver3\r\n file.Write(this._OverWriteMaterial.size);\r\n for (let [index, id] of this._OverWriteMaterial)\r\n {\r\n file.Write(index);\r\n file.WriteHardObjectId(id);\r\n }\r\n }\r\n //#endregion\r\n}\r\n","import { Vector3 } from \"three\";\r\nimport { ObjectSnapMode } from \"../../Editor/ObjectSnapMode\";\r\nimport { MoveMatrix } from \"../../Geometry/GeUtils\";\r\nimport { Factory } from \"../CADFactory\";\r\nimport { Entity } from \"./Entity\";\r\n\r\n\r\n\r\n@Factory\r\nexport class Point extends Entity\r\n{\r\n constructor(position: Vector3 = new Vector3())\r\n {\r\n super();\r\n this._Matrix.setPosition(position);\r\n }\r\n\r\n \r\n\r\n GetObjectSnapPoints(\r\n snapMode: ObjectSnapMode,\r\n pickPoint: Vector3,\r\n lastPoint: Vector3\r\n ): Vector3[]\r\n {\r\n if (snapMode === ObjectSnapMode.End)\r\n return [this.Position];\r\n return [];\r\n }\r\n\r\n GetGripPoints(): Array\r\n {\r\n return [this.Position];\r\n }\r\n MoveGripPoints(indexList: number[], vec: Vector3)\r\n {\r\n if (indexList.length === 1)\r\n {\r\n this.WriteAllObjectRecord();\r\n this.ApplyMatrix(MoveMatrix(vec));\r\n }\r\n }\r\n\r\n GetStretchPoints(): Array\r\n {\r\n return this.GetGripPoints();\r\n }\r\n\r\n /**\r\n * 拉伸夹点,用于Stretch命令\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.MoveGripPoints(indexList, vec);\r\n }\r\n}\r\n","\r\nimport { BufferGeometry, Color, CylinderBufferGeometry, Float32BufferAttribute, LineBasicMaterial, LineSegments, MathUtils, Matrix4, Mesh, MeshBasicMaterial, Object3D, PointLight, SphereBufferGeometry, Vector3 } from 'three';\r\n\r\nexport class PointLightHelper extends Object3D\r\n{\r\n light: PointLight;\r\n color: Color | string | number;\r\n material: LineBasicMaterial;\r\n cone: LineSegments[];\r\n mesh: Mesh[];\r\n constructor(distance: number, color?: Color | string | number)\r\n {\r\n\r\n const geometry = new BufferGeometry();\r\n const positions = [];\r\n for (let i = 0, j = 1, l = 32; i < l; i++, j++)\r\n {\r\n\r\n const p1 = (i / l) * Math.PI * 2;\r\n const p2 = (j / l) * Math.PI * 2;\r\n\r\n positions.push(\r\n Math.cos(p1) * distance, Math.sin(p1) * distance, 0,\r\n Math.cos(p2) * distance, Math.sin(p2) * distance, 0\r\n );\r\n\r\n }\r\n geometry.setAttribute('position', new Float32BufferAttribute(positions, 3));\r\n\r\n super();\r\n this.color = color;\r\n this.matrixAutoUpdate = false;\r\n this.material = new LineBasicMaterial({ fog: false });;\r\n\r\n this.cone = [];\r\n this.mesh = [];\r\n\r\n this.cone[0] = new LineSegments(geometry, this.material[0]);\r\n this.cone[1] = this.cone[0].clone();\r\n\r\n let moveMatInv = new Matrix4().getInverse(this.matrix);\r\n let roMat = new Matrix4().makeRotationAxis(new Vector3(0, 1, 0), MathUtils.degToRad(60));\r\n let mtx = this.matrix.clone().multiply(roMat).multiply(moveMatInv);\r\n\r\n this.cone[1].applyMatrix4(mtx);\r\n this.cone[2] = this.cone[1].clone();\r\n this.cone[2].applyMatrix4(mtx);\r\n\r\n let cylinderRoMat = new Matrix4().makeRotationAxis(new Vector3(1, 0, 0), MathUtils.degToRad(90));\r\n let cylinderMtx = this.matrix.clone().multiply(cylinderRoMat).multiply(moveMatInv);\r\n\r\n let cylinderGeometry = new CylinderBufferGeometry(40, 40, 80, 32); //灯泡圆柱\r\n this.mesh[0] = new Mesh(cylinderGeometry, new MeshBasicMaterial({ color: 0xFFEAAD }));\r\n this.mesh[0].applyMatrix4(cylinderMtx);\r\n this.mesh[0].position.add(new Vector3(0, 0, 50));\r\n this.mesh[0].updateMatrix();\r\n\r\n let sphereBufferGeometry = new SphereBufferGeometry(75, 32, 32); //灯泡球体\r\n this.mesh[1] = new Mesh(sphereBufferGeometry, this.material);\r\n this.mesh[1].position.sub(new Vector3(0, 0, 30));\r\n this.mesh[1].updateMatrix();\r\n\r\n this.add(this.cone[0], this.cone[1], this.cone[2], this.mesh[0], this.mesh[1]);\r\n }\r\n\r\n dispose()\r\n {\r\n this.material.dispose();\r\n\r\n this.cone[0].geometry.dispose();\r\n //@ts-ignore\r\n this.cone[0].material.dispose();\r\n\r\n this.cone[1].geometry.dispose();\r\n //@ts-ignore\r\n this.cone[1].material.dispose();\r\n\r\n this.cone[2].geometry.dispose();\r\n //@ts-ignore\r\n this.cone[2].material.dispose();\r\n\r\n this.mesh[0].geometry.dispose();\r\n //@ts-ignore\r\n this.mesh[0].material.dispose();\r\n\r\n this.mesh[1].geometry.dispose();\r\n //@ts-ignore\r\n this.mesh[1].material.dispose();\r\n }\r\n\r\n update()\r\n {\r\n //@ts-ignore\r\n this.mesh[1].material.color.set(this.color).multiplyScalar(0.9);\r\n }\r\n}\r\n","import { Group, LineBasicMaterial, Mesh, MeshBasicMaterial, Object3D, PointLight as TPointLight, SphereGeometry } from 'three';\r\nimport { HostApplicationServices } from '../../ApplicationServices/HostApplicationServices';\r\nimport { RenderType } from '../../GraphicsSystem/RenderType';\r\nimport { AutoRecord } from '../AutoRecord';\r\nimport { Factory } from '../CADFactory';\r\nimport { CADFiler } from '../CADFiler';\r\nimport { Light } from './Light';\r\nimport { PointLightHelper } from './PointLightHelper';\r\n\r\n/**\r\n * 点光源\r\n */\r\n@Factory\r\nexport class PointLight extends Light\r\n{\r\n /**\r\n * 光照长度,如果为0那么为无穷大\r\n */\r\n private _Distance: number = 20000;//20米\r\n protected _Intensity: number = 100; //强度\r\n\r\n // 光线沿着光线的距离变暗的量\r\n // 在物理上正确的模式下,衰减 = 2会导致物理上真实的光线衰减。\r\n // 缺省值是1。\r\n private _Decay: number = 0.45;\r\n\r\n //PointLightComponent\r\n @AutoRecord SourceRadius = 10;//源半径 范围0-300\r\n @AutoRecord SoftSourceRadius = 0;//软源半径 范围0-300\r\n @AutoRecord SourceLength = 0;//源长度 默认0 范围0-1000\r\n\r\n //LocalLightComponent\r\n //Radius:number 没设置这个\r\n @AutoRecord AttenuationRadius = 300; //衰减半径 10-1000\r\n\r\n constructor()\r\n {\r\n super();\r\n }\r\n\r\n get Decay(): number\r\n {\r\n return this._Decay;\r\n }\r\n set Decay(decay: number)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._Decay = decay;\r\n this.Update();\r\n }\r\n\r\n get Distance()\r\n {\r\n return this._Distance;\r\n }\r\n set Distance(dist: number)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._Distance = dist;\r\n this.Update();\r\n }\r\n\r\n get WebIntensity()\r\n {\r\n let x = this._Intensity / 2000;\r\n x = Math.pow(x, 0.7);\r\n return (x * 2000) / (4 * Math.PI);//流明转cd 文档是4pi\r\n }\r\n\r\n protected InitDrawObject(renderType: RenderType = RenderType.Wireframe): Object3D\r\n {\r\n let lightGroup = new Group();\r\n let ptLight = new TPointLight(this._LightColor, this.WebIntensity, this._Distance, this._Decay);\r\n\r\n Object.defineProperty(ptLight, \"castShadow\", { get: () => HostApplicationServices.isShowLightShadow && this.CaseShadow });\r\n\r\n ptLight.shadow.camera.matrixAutoUpdate = true;\r\n ptLight.shadow.camera.far = 10000;\r\n //绘制灯光助手\r\n let lightGeo = new SphereGeometry(50);\r\n let geoMat = new MeshBasicMaterial({ color: this._LightColor });\r\n ptLight.add(new Mesh(lightGeo, geoMat));\r\n\r\n let helper = new PointLightHelper(ptLight.distance / 4, this.Color);\r\n\r\n lightGroup.add(ptLight, helper);\r\n lightGroup.matrixAutoUpdate = false;\r\n lightGroup.matrix.copy(this._Matrix);\r\n lightGroup.updateMatrixWorld(true);\r\n this.UpdateDrawObject(renderType, lightGroup);\r\n return lightGroup;\r\n }\r\n UpdateDrawObject(type: RenderType, en: Object3D)\r\n {\r\n let ptLight = en.children[0] as TPointLight;\r\n super.UpdateDrawObject(type, ptLight);\r\n\r\n ptLight.distance = this._Distance;\r\n ptLight.decay = this._Decay;\r\n\r\n let con = ptLight.children[0] as Mesh;\r\n con.material = new LineBasicMaterial({ color: this.Color });\r\n\r\n let helper = en.children[1] as PointLightHelper;\r\n helper.visible = this._ShowHelper;\r\n if (this._ShowHelper)\r\n helper.color = this.Color;\r\n helper.update();\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();\r\n // this._Distance = file.Read();\r\n // this._Decay = file.Read();\r\n //屏蔽原先的2个属性\r\n file.Read();\r\n file.Read();\r\n\r\n if (ver > 1)\r\n {\r\n this.SourceRadius = file.Read();\r\n this.SoftSourceRadius = file.Read();\r\n this.SourceLength = file.Read();\r\n this.AttenuationRadius = 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._Distance);\r\n file.Write(this._Decay);\r\n\r\n //ver 2\r\n file.Write(this.SourceRadius);\r\n file.Write(this.SoftSourceRadius);\r\n file.Write(this.SourceLength);\r\n file.Write(this.AttenuationRadius);\r\n }\r\n}\r\n","import { BackSide, BufferGeometry, Color, Float32BufferAttribute, Line, LineBasicMaterial, Mesh, MeshBasicMaterial, RectAreaLight as TRectAreaLight } from \"three\";\r\n\r\n/**\r\n * This helper must be added as a child of the light (移植threejs最新的版本)\r\n */\r\nexport class RectAreaLightHelper extends Line\r\n{\r\n light: TRectAreaLight;\r\n color: Color;\r\n material: LineBasicMaterial;\r\n children: [Mesh];\r\n BarnDoorLength: number;\r\n BarnDoorAngle: number;\r\n\r\n private _posAtt: Float32BufferAttribute;\r\n private _indexAtt: Float32BufferAttribute;\r\n\r\n constructor(light: TRectAreaLight, color: Color)\r\n {\r\n const positions = [1, 1, 0, -1, 1, 0, -1, -1, 0, 1, -1, 0, 1, 1, 0,\r\n 0.618, 0.618, 0,\r\n // 0.618, 0.618, -100,\r\n // 0.618, 0.618, 0,\r\n\r\n -0.618, 0.618, 0,\r\n -1, 1, 0,\r\n -0.618, 0.618, 0,\r\n // -0.618, 0.618, -100,\r\n // -0.618, 0.618, 0,\r\n\r\n -0.618, -0.618, 0,\r\n -1, -1, 0,\r\n -0.618, -0.618, 0,\r\n // -0.618, -0.618, -100,\r\n // -0.618, -0.618, 0,\r\n\r\n 0.618, -0.618, 0,\r\n 1, -1, 0,\r\n 0.618, -0.618, 0,\r\n // 0.618, -0.618, -100,\r\n // 0.618, -0.618, 0,\r\n\r\n 0.618, 0.618, 0\r\n ];\r\n\r\n const geometry = new BufferGeometry();\r\n let posatt = new Float32BufferAttribute(positions, 3);\r\n geometry.setAttribute('position', posatt);\r\n geometry.computeBoundingSphere();\r\n\r\n const material = new LineBasicMaterial({ fog: false });\r\n\r\n super(geometry, material);\r\n\r\n this._posAtt = posatt;\r\n\r\n this.light = light;\r\n this.color = color; // optional hardwired color for the helper\r\n this.type = 'RectAreaLightHelper';\r\n\r\n //\r\n const positions2 = [1, 1, 0, -1, 1, 0, -1, -1, 0, 1, 1, 0, -1, -1, 0, 1, -1, 0];\r\n\r\n const geometry2 = new BufferGeometry();\r\n this._indexAtt = new Float32BufferAttribute(positions2, 3);\r\n geometry2.setAttribute('position', this._indexAtt);\r\n geometry2.computeBoundingSphere();\r\n\r\n this.add(new Mesh(geometry2, new MeshBasicMaterial({ side: BackSide, fog: false, transparent: true, opacity: 0.8 })));\r\n }\r\n\r\n updateMatrixWorld()\r\n {\r\n this.scale.set(0.5 * this.light.width, 0.5 * this.light.height, 1);\r\n\r\n if (this.color !== undefined)\r\n {\r\n this.material.color.set(this.color);\r\n //@ts-ignore\r\n this.children[0].material.color.set(this.color);\r\n }\r\n else\r\n {\r\n this.material.color.copy(this.light.color).multiplyScalar(this.light.intensity);\r\n\r\n // prevent hue shift\r\n const c = this.material.color;\r\n const max = Math.max(c.r, c.g, c.b);\r\n if (max > 1)\r\n c.multiplyScalar(1 / max);\r\n //@ts-ignore\r\n this.children[0].material.color.copy(this.material.color);\r\n }\r\n\r\n // ignore world scale on light\r\n this.matrixWorld.extractRotation(this.light.matrixWorld).scale(this.scale).copyPosition(this.light.matrixWorld);\r\n\r\n this.children[0].matrixWorld.copy(this.matrixWorld);\r\n }\r\n\r\n updataRange()\r\n {\r\n let [n, w, h] = [1, 1, 1];\r\n let t = Math.sin(this.BarnDoorAngle * Math.PI / 180) * this.BarnDoorLength;\r\n let cosAngle = Math.cos(this.BarnDoorAngle * Math.PI / 180);\r\n if (Math.floor(cosAngle * 1e5))\r\n {\r\n w = ((this.light.width + this.BarnDoorLength * 2) / this.light.width - 1) * cosAngle + 1;\r\n h = ((this.light.height + this.BarnDoorLength * 2) / this.light.height - 1) * cosAngle + 1;\r\n }\r\n\r\n let positions = [w, h, -t, -w, h, -t, -w, -h, -t, w, -h, -t, w, h, -t,\r\n n, n, 0,\r\n\r\n -n, n, 0,\r\n -w, h, -t,\r\n -n, n, 0,\r\n\r\n -n, -n, 0,\r\n -w, -h, -t,\r\n -n, -n, 0,\r\n\r\n n, -n, 0,\r\n w, -h, -t,\r\n n, -n, 0,\r\n\r\n n, n, 0\r\n ];\r\n\r\n let positions2 = [w, h, -t, -w, h, -t, -w, -h, -t, w, h, -t, -w, -h, -t, w, -h, -t];\r\n\r\n this._posAtt.copyArray(positions);\r\n this._posAtt.needsUpdate = true;\r\n\r\n this._indexAtt.copyArray(positions2);\r\n this._indexAtt.needsUpdate = true;\r\n }\r\n\r\n dispose()\r\n {\r\n this.geometry.dispose();\r\n this.material.dispose();\r\n this.children[0].geometry.dispose();\r\n //@ts-ignore\r\n this.children[0].material.dispose();\r\n }\r\n}\r\n","import { Box3, Group, Object3D, RectAreaLight as TRectAreaLight, Vector3 } from \"three\";\r\nimport { UpdateDraw } from \"../../Common/Status\";\r\nimport { Box3Ext } from \"../../Geometry/Box\";\r\nimport { equalv3, YAxis, ZeroVec } from \"../../Geometry/GeUtils\";\r\nimport { RenderType } from \"../../GraphicsSystem/RenderType\";\r\nimport { equaln } from \"../../Nest/Common/Util\";\r\nimport { AutoRecord } from \"../AutoRecord\";\r\nimport { Factory } from \"../CADFactory\";\r\nimport { CADFiler } from \"../CADFiler\";\r\nimport { ObjectId } from \"../ObjectId\";\r\nimport { Light } from \"./Light\";\r\nimport { RectAreaLightHelper } from \"./RectAreaLightHelper\";\r\n\r\nconst TARGET_DISTANCE = -100;\r\n\r\n@Factory\r\nexport class RectAreaLight extends Light\r\n{\r\n protected _Intensity = 100;\r\n\r\n private _Width: number = 1;//UE SourceWidth\r\n private _Height: number = 1;//UE SourceHeight\r\n\r\n //LocalLightComponent\r\n //Radius:number 没设置这个\r\n @AutoRecord AttenuationRadius = 300; //衰减半径 10-1000\r\n\r\n //RectLightComponent extends LocalLightComponent\r\n private _BarnDoorAngle: number = 0; //0-90 挡光板角度\r\n private _BarnDoorLength: number = 0; //0-100 挡光板长度\r\n @AutoRecord SourceTexture: ObjectId;//Texture 源纹理 默认无 可以追加一张贴图\r\n\r\n get Target()\r\n {\r\n return this.Position.add(this.Normal.multiplyScalar(TARGET_DISTANCE));\r\n }\r\n\r\n set Target(p: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._Matrix.lookAt(this.Position, p, YAxis);\r\n this.Update(UpdateDraw.Geometry);\r\n }\r\n\r\n get Height() { return this._Height; }\r\n\r\n set Height(v: number)\r\n {\r\n if (equaln(v, this._Height, 1e-2)) return;\r\n this.WriteAllObjectRecord();\r\n this._Height = v;\r\n this.Update();\r\n }\r\n\r\n get Width() { return this._Width; }\r\n\r\n set Width(v: number)\r\n {\r\n if (equaln(v, this._Width, 1e-2)) return;\r\n this.WriteAllObjectRecord();\r\n this._Width = v;\r\n this.Update();\r\n }\r\n\r\n get BarnDoorAngle() { return this._BarnDoorAngle; }\r\n\r\n set BarnDoorAngle(v: number)\r\n {\r\n if (equaln(this._BarnDoorAngle, v, 1e-2)) return;\r\n this.WriteAllObjectRecord();\r\n this._BarnDoorAngle = v;\r\n this.Update();\r\n }\r\n\r\n get BarnDoorLength() { return this._BarnDoorLength; }\r\n\r\n set BarnDoorLength(v: number)\r\n {\r\n if (equaln(this._BarnDoorLength, v, 1e-2)) return;\r\n this.WriteAllObjectRecord();\r\n this._BarnDoorLength = v;\r\n this.Update();\r\n }\r\n\r\n get WebIntensity()\r\n {\r\n let x = this._Intensity / 2000;\r\n x = Math.pow(x, 0.5);\r\n return (x * 50) / (Math.PI);//流明转cd 文档是4pi\r\n }\r\n\r\n get BoundingBoxInOCS()\r\n {\r\n return new Box3Ext(new Vector3(-this._Width * 0.5, -this._Height * 0.5, 0), new Vector3(this._Width * 0.5, this._Height * 0.5, 0.01));\r\n }\r\n\r\n get BoundingBox()\r\n {\r\n return new Box3().setFromCenterAndSize(new Vector3(), new Vector3(this._Width, this._Height)).applyMatrix4(this._Matrix);\r\n }\r\n\r\n GetGripPoints(): Array\r\n {\r\n let heightHalf = this._Height * 0.5;\r\n let widthHalf = this.Width * 0.5;\r\n let pos = this.Position;\r\n\r\n let pts: Vector3[] = [\r\n new Vector3(-widthHalf, -heightHalf, 0).applyMatrix4(this.OCSNoClone),//左下\r\n new Vector3(widthHalf, -heightHalf, 0).applyMatrix4(this.OCSNoClone),//右下\r\n new Vector3(widthHalf, heightHalf, 0).applyMatrix4(this.OCSNoClone),//右上\r\n new Vector3(-widthHalf, heightHalf, 0).applyMatrix4(this.OCSNoClone),//左上\r\n pos,\r\n pos.clone().add(this.Normal.multiplyScalar(TARGET_DISTANCE))\r\n ];\r\n return pts;\r\n }\r\n\r\n MoveGripPoints(indexList: number[], vec: Vector3)\r\n {\r\n let vecInv = vec.clone().applyMatrix4(this.OCSInv.setPosition(0, 0, 0));\r\n if (equalv3(vecInv, ZeroVec, 1e-4)) return;\r\n\r\n this.WriteAllObjectRecord();\r\n\r\n let heightHalf = this._Height * 0.5;\r\n let widthHalf = this.Width * 0.5;\r\n let pts: Vector3[] = [\r\n new Vector3(-widthHalf, -heightHalf, 0),\r\n new Vector3(widthHalf, -heightHalf, 0),\r\n new Vector3(widthHalf, heightHalf, 0),\r\n new Vector3(-widthHalf, heightHalf, 0),\r\n ];\r\n\r\n let i = indexList[0];\r\n if (i < 4)\r\n {\r\n pts[i].add(vecInv);\r\n\r\n let newBox = new Box3;\r\n if (i === 0 || i === 2)\r\n newBox.setFromPoints([pts[0], pts[2]]);\r\n else\r\n newBox.setFromPoints([pts[1], pts[3]]);\r\n\r\n //变量复用\r\n let size = newBox.getSize(new Vector3);\r\n this._Width = size.x;\r\n this._Height = size.y;\r\n\r\n //新的中心\r\n let center = newBox.getCenter(size);\r\n center.setZ(0);\r\n\r\n center.applyMatrix4(this.OCSNoClone);\r\n\r\n this._Matrix.setPosition(center);\r\n this.Update();\r\n }\r\n else if (i === 4)\r\n {\r\n this.Position = this.Position.add(vec);\r\n this.Update(UpdateDraw.Matrix);\r\n }\r\n else if (i === 5)\r\n {\r\n let target = this.Position.add(this.Normal.multiplyScalar(TARGET_DISTANCE)).add(vec);\r\n this.Target = target;\r\n }\r\n }\r\n\r\n GetStretchPoints()\r\n {\r\n let heightHalf = this._Height * 0.5;\r\n let widthHalf = this.Width * 0.5;\r\n let pos = this.Position;\r\n\r\n let pts: Vector3[] = [\r\n new Vector3(-widthHalf, -heightHalf, 0).applyMatrix4(this.OCSNoClone),//左下\r\n new Vector3(widthHalf, -heightHalf, 0).applyMatrix4(this.OCSNoClone),//右下\r\n new Vector3(widthHalf, heightHalf, 0).applyMatrix4(this.OCSNoClone),//右上\r\n new Vector3(-widthHalf, heightHalf, 0).applyMatrix4(this.OCSNoClone),//左上\r\n pos.clone().add(this.Normal.multiplyScalar(TARGET_DISTANCE))\r\n ];\r\n return pts;\r\n }\r\n\r\n MoveStretchPoints(ids: number[], vec: Vector3)\r\n {\r\n if (ids.length === 4)\r\n {\r\n this.Move(vec);\r\n return;\r\n }\r\n\r\n const MoveOneGrip = () =>\r\n {\r\n let i = ids[0];\r\n if (i < 4)\r\n this.MoveGripPoints(ids, vec);\r\n else\r\n this.MoveGripPoints([5], vec);\r\n };\r\n\r\n if (ids.length === 1)\r\n {\r\n MoveOneGrip();\r\n return;\r\n }\r\n\r\n //ids.length === 2,3\r\n ids = ids.filter(i => i !== 4);//移除中心\r\n if (ids.length === 1)\r\n {\r\n MoveOneGrip();\r\n return;\r\n }\r\n\r\n //ids.length === 2\r\n ids.sort((a1, a2) => a1 - a2);\r\n let inv = this.OCSInv.setPosition(0, 0, 0);\r\n vec = vec.clone().applyMatrix4(inv);\r\n let ocs = inv.copy(this._Matrix).setPosition(0, 0, 0);\r\n\r\n if (ids[0] === 0)\r\n {\r\n if (ids[1] === 1)//下\r\n {\r\n vec.x = 0;\r\n vec.z = 0;\r\n vec.applyMatrix4(ocs);\r\n\r\n this.MoveGripPoints([0], vec);\r\n }\r\n else if (ids[1] === 3)//左\r\n {\r\n vec.y = 0;\r\n vec.z = 0;\r\n vec.applyMatrix4(ocs);\r\n this.MoveGripPoints([0], vec);\r\n }\r\n }\r\n else if (ids[0] === 1)\r\n {\r\n if (ids[1] === 2)//右\r\n {\r\n vec.y = 0;\r\n vec.z = 0;\r\n vec.applyMatrix4(ocs);\r\n this.MoveGripPoints([1], vec);\r\n }\r\n }\r\n else if (ids[0] === 2)\r\n {\r\n if (ids[1] === 3)//上\r\n {\r\n vec.x = 0;\r\n vec.z = 0;\r\n vec.applyMatrix4(ocs);\r\n\r\n this.MoveGripPoints([2], vec);\r\n }\r\n }\r\n }\r\n\r\n protected InitDrawObject(renderType: RenderType = RenderType.Wireframe): Object3D\r\n {\r\n let lightGroup = new Group();\r\n let light = new TRectAreaLight(this.Color, this.WebIntensity, this._Width, this._Height);\r\n lightGroup.add(light);\r\n this.UpdateDrawObject(renderType, lightGroup);\r\n return lightGroup;\r\n }\r\n\r\n UpdateDrawObject(type: RenderType, obj: Object3D)\r\n {\r\n let light = obj.children[0] as TRectAreaLight;\r\n super.UpdateDrawObject(type, light);\r\n light.width = this._Width;\r\n light.height = this._Height;\r\n light.color.copy(this.Color);\r\n // light.castShadow = true;//threejs没有支持这个影子\r\n\r\n let help: RectAreaLightHelper;\r\n if (obj.children.length === 1)\r\n {\r\n help = new RectAreaLightHelper(light, light.color);\r\n obj.add(help);\r\n }\r\n else\r\n help = obj.children[1] as RectAreaLightHelper;\r\n\r\n help.BarnDoorAngle = 90 - this.BarnDoorAngle;\r\n help.BarnDoorLength = this.BarnDoorLength;\r\n help.color = this.Color;\r\n help.updataRange();\r\n\r\n help.updateMatrixWorld();\r\n\r\n help = obj.children[1] as RectAreaLightHelper;\r\n help.visible = this._ShowHelper;\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._Height = file.Read();\r\n this._Width = file.Read();\r\n new Vector3().fromArray(file.Read());\r\n\r\n //ver2\r\n if (ver > 1)\r\n {\r\n this.AttenuationRadius = file.Read();\r\n this._BarnDoorAngle = file.Read();\r\n this._BarnDoorLength = file.Read();\r\n this.SourceTexture = file.Read();\r\n }\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._Height);\r\n file.Write(this._Width);\r\n file.Write([0, 0, 0]);\r\n\r\n //ver2\r\n file.Write(this.AttenuationRadius);\r\n file.Write(this._BarnDoorAngle);\r\n file.Write(this._BarnDoorLength);\r\n file.Write(this.SourceTexture);\r\n }\r\n}\r\n","import { BufferGeometry, Float32BufferAttribute, LineBasicMaterial, LineSegments, MathUtils, Object3D } from 'three';\r\nimport { SpotLight } from './SpotLight';\r\n\r\nexport class SpotLightHelper extends Object3D\r\n{\r\n cone: LineSegments[] = [];\r\n constructor(private light: SpotLight)\r\n {\r\n super();\r\n\r\n const geometry = new BufferGeometry();\r\n const positions = [\r\n 0, 0, 0, 0, 0, 1,\r\n 0, 0, 0, 1, 0, 1,\r\n 0, 0, 0, - 1, 0, 1,\r\n 0, 0, 0, 0, 1, 1,\r\n 0, 0, 0, 0, - 1, 1\r\n ];\r\n for (let i = 0, j = 1, l = 32; i < l; i++, j++)\r\n {\r\n const p1 = (i / l) * Math.PI * 2;\r\n const p2 = (j / l) * Math.PI * 2;\r\n\r\n positions.push(\r\n Math.cos(p1), Math.sin(p1), 1,\r\n Math.cos(p2), Math.sin(p2), 1\r\n );\r\n\r\n }\r\n geometry.setAttribute('position', new Float32BufferAttribute(positions, 3));\r\n\r\n this.cone[0] = new LineSegments(geometry, new LineBasicMaterial({ fog: false }));\r\n this.cone[1] = new LineSegments(geometry, new LineBasicMaterial({ fog: false }));\r\n\r\n this.cone[0].rotation.x = Math.PI;\r\n this.cone[1].rotation.x = Math.PI;\r\n\r\n this.add(this.cone[0], this.cone[1]);\r\n }\r\n\r\n dispose()\r\n {\r\n this.cone[0].geometry.dispose();\r\n this.cone[1].geometry.dispose();\r\n this.cone[0].material.dispose();\r\n this.cone[1].material.dispose();\r\n }\r\n\r\n update()\r\n {\r\n const coneLength = this.light.Distance ? this.light.Distance : 1000;\r\n const coneWidth1 = coneLength * Math.tan(this.light.Angle);\r\n const coneWidth2 = coneLength * Math.tan(MathUtils.degToRad(this.light.InnerConeAngle));\r\n\r\n this.cone[0].scale.set(coneWidth1, coneWidth1, coneLength);\r\n this.cone[1].scale.set(coneWidth2, coneWidth2, coneLength);\r\n this.cone[0].updateMatrix();\r\n this.cone[1].updateMatrix();\r\n\r\n this.cone[0].material.color.set(this.light.Color).multiplyScalar(0.3);\r\n this.cone[1].material.color.set(this.light.Color);\r\n }\r\n}\r\n","import { ConeGeometry, Group, MathUtils, Mesh, MeshBasicMaterial, Object3D, SpotLight as TSpotLight, Vector3 } from \"three\";\r\nimport { HostApplicationServices } from \"../../ApplicationServices/HostApplicationServices\";\r\nimport { UpdateDraw } from \"../../Common/Status\";\r\nimport { ObjectSnapMode } from \"../../Editor/ObjectSnapMode\";\r\nimport { equalv3, YAxis } from \"../../Geometry/GeUtils\";\r\nimport { RenderType } from \"../../GraphicsSystem/RenderType\";\r\nimport { equaln } from \"../../Nest/Common/Util\";\r\nimport { AutoRecord } from \"../AutoRecord\";\r\nimport { Factory } from \"../CADFactory\";\r\nimport { CADFiler } from \"../CADFiler\";\r\nimport { Light } from \"./Light\";\r\nimport { SpotLightHelper } from \"./SpotLightHelper\";\r\n\r\n@Factory\r\nexport class SpotLight extends Light\r\n{\r\n /**\r\n * If non-zero, light will attenuate linearly from maximum intensity at light position down to zero at distance.\r\n * Default — 0.0.\r\n */\r\n private _Distance: number = 5000;\r\n protected _Intensity: number = 100; //强度\r\n\r\n // 光线沿着光线的距离变暗的量\r\n // 在物理上正确的模式下,衰减 = 2会导致物理上真实的光线衰减。\r\n // 缺省值是1。\r\n private _Decay: number = 0.2;\r\n // 光线散射角度,最大为Math.PI/2\r\n private _Angle: number = Math.PI / 4;//默认\r\n\r\n // 聚光锥的半影衰减百分比。在0和1之间的值。 默认值 — 0.0。\r\n private _Penumbra: number = 0;\r\n\r\n //SpotLightComponent extends PointLightComponent\r\n @AutoRecord InnerConeAngle: number = 0;//椎体内部角度 默认0 范围0-90\r\n @AutoRecord OuterConeAngle: number = 40;//椎体外部角度 默认40 范围0-90 (弃用,使用Angle)\r\n\r\n //PointLightComponent\r\n @AutoRecord SourceRadius = 0;//源半径 范围0-300\r\n @AutoRecord SoftSourceRadius = 0;//软源半径 范围0-300\r\n @AutoRecord SourceLength = 0;//源长度 默认0 范围0-1000\r\n\r\n //LocalLightComponent\r\n //Radius:number 没设置这个\r\n @AutoRecord AttenuationRadius = 300; //衰减半径 10-1000\r\n\r\n get Target()\r\n {\r\n return this.Position.add(this.Normal.multiplyScalar(-this._Distance * 0.5));\r\n }\r\n set Target(p: Vector3)\r\n {\r\n if (!equalv3(p, this.Position))\r\n {\r\n this.WriteAllObjectRecord();\r\n this._Matrix.lookAt(this.Position, p, YAxis);\r\n this.Update(UpdateDraw.Matrix);\r\n }\r\n }\r\n\r\n get Angle()\r\n {\r\n return this._Angle;\r\n }\r\n set Angle(rad: number)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._Angle = rad;\r\n this.Update();\r\n }\r\n get Decay(): number\r\n {\r\n return this._Decay;\r\n }\r\n set Decay(decay: number)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._Decay = decay;\r\n this.Update();\r\n }\r\n get Distance()\r\n {\r\n return this._Distance;\r\n }\r\n set Distance(dist: number)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._Distance = dist;\r\n this.Update();\r\n }\r\n get Penumbra()\r\n {\r\n return this._Penumbra;\r\n }\r\n set Penumbra(v: number)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._Penumbra = v;\r\n this.Update();\r\n }\r\n\r\n get EndPoint()\r\n {\r\n return this.Position.add(this.Target.sub(this.Position).normalize().multiplyScalar(this._Distance));\r\n }\r\n\r\n get WebIntensity()\r\n {\r\n let x = this._Intensity / 2000;\r\n x = Math.pow(x, 0.45);\r\n return (x * 125) / Math.PI;//流明转cd 文档是4pi\r\n }\r\n\r\n GetGripPoints(): Vector3[]\r\n {\r\n let radius = this.Distance * Math.tan(this._Angle);\r\n let pts: Vector3[] = [\r\n this.Position, this.Target,\r\n new Vector3(radius, 0, -this._Distance).applyMatrix4(this._Matrix),\r\n new Vector3(-radius, 0, -this._Distance).applyMatrix4(this._Matrix),\r\n new Vector3(0, radius, -this._Distance).applyMatrix4(this._Matrix),\r\n new Vector3(0, -radius, -this._Distance).applyMatrix4(this._Matrix),\r\n ];\r\n\r\n let a2 = MathUtils.degToRad(this.InnerConeAngle);\r\n if (this.InnerConeAngle >= 1 && !equaln(this._Angle, a2))\r\n {\r\n let radius2 = this.Distance * Math.tan(a2);\r\n pts.push(\r\n new Vector3(radius2, 0, -this._Distance).applyMatrix4(this._Matrix),\r\n new Vector3(-radius2, 0, -this._Distance).applyMatrix4(this._Matrix),\r\n new Vector3(0, radius2, -this._Distance).applyMatrix4(this._Matrix),\r\n new Vector3(0, -radius2, -this._Distance).applyMatrix4(this._Matrix),\r\n );\r\n }\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 if (indexList[0] === 0)\r\n {\r\n this.Move(vec);\r\n }\r\n else if (indexList[0] === 1)\r\n this.Target = this.Target.add(vec);\r\n else\r\n {\r\n let pts = this.GetGripPoints();\r\n let p = pts[indexList[0]].add(vec);\r\n let pos = this.Position;\r\n\r\n let dir = this.EndPoint.sub(pos).normalize();\r\n let dir2 = p.sub(pos).normalize();\r\n\r\n let angle = dir.angleTo(dir2);\r\n if (indexList[0] < 6)\r\n {\r\n this.Angle = angle;\r\n this.InnerConeAngle = Math.min(this.InnerConeAngle, MathUtils.radToDeg(angle));\r\n }\r\n else\r\n {\r\n this.InnerConeAngle = MathUtils.radToDeg(angle);\r\n this.Angle = Math.max(angle, this.Angle);\r\n }\r\n\r\n this.Update();\r\n }\r\n }\r\n\r\n GetStretchPoints(): Vector3[]\r\n {\r\n return this.GetGripPoints();\r\n }\r\n\r\n MoveStretchPoints(indexList: Array, vec: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n if (indexList.length === 1)\r\n return this.MoveGripPoints(indexList, vec);\r\n else if (indexList.length === 7)\r\n this.Move(vec);\r\n else if (indexList.length > 1)\r\n {\r\n if (indexList.indexOf(0) === -1)\r\n this.MoveGripPoints([1], vec);\r\n else\r\n this.Move(vec);\r\n }\r\n }\r\n\r\n GetObjectSnapPoints(\r\n snapMode: ObjectSnapMode,\r\n pickPoint: Vector3,\r\n lastPoint: Vector3\r\n ): Vector3[]\r\n {\r\n switch (snapMode)\r\n {\r\n case ObjectSnapMode.End:\r\n return this.GetGripPoints();\r\n default:\r\n break;\r\n }\r\n return [];\r\n }\r\n\r\n protected InitDrawObject(renderType: RenderType = RenderType.Wireframe): Object3D\r\n {\r\n // if (renderType !== RenderType.Physical) return;\r\n\r\n let group = new Group();\r\n\r\n let light = new TSpotLight(this._LightColor, this.WebIntensity, this._Distance, this._Angle, this._Penumbra, this._Decay);\r\n light.position.set(0, 0, 0);\r\n light.updateMatrix();\r\n\r\n light.target.position.set(0, 0, -1);\r\n light.target.updateMatrix();\r\n light.add(light.target);\r\n\r\n Object.defineProperty(light, \"castShadow\", { get: () => HostApplicationServices.isShowLightShadow && this.CaseShadow });\r\n light.shadow.camera.matrixAutoUpdate = true;\r\n light.shadow.camera.far = this._Distance;\r\n\r\n group.add(light);//灯光\r\n\r\n //灯光圆锥\r\n let con = new Mesh(new ConeGeometry(50, 80, 30, 1), new MeshBasicMaterial({ color: this._LightColor }));\r\n con.rotation.x = Math.PI * 0.5;\r\n con.position.z = -40;\r\n con.castShadow = false;\r\n con.updateMatrix();\r\n\r\n group.add(con);//椎体\r\n\r\n this.UpdateDrawObject(renderType, group);\r\n return group;\r\n }\r\n\r\n UpdateDrawObject(type: RenderType, en: Object3D)\r\n {\r\n // if (type !== RenderType.Physical) return;\r\n\r\n let [light, con, helper] = en.children as [TSpotLight, Mesh, SpotLightHelper];\r\n\r\n super.UpdateDrawObject(type, light);\r\n light.distance = this._Distance;\r\n light.decay = this._Decay;\r\n light.angle = this._Angle;\r\n light.penumbra = this._Penumbra;\r\n\r\n con.material.color.copy(this.Color);\r\n\r\n if (this._ShowHelper)\r\n {\r\n if (!helper)\r\n {\r\n helper = new SpotLightHelper(this);\r\n en.add(helper);\r\n }\r\n else\r\n helper.visible = true;\r\n\r\n helper.update();\r\n }\r\n else\r\n if (helper) helper.visible = this._ShowHelper;\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._Distance = file.Read();\r\n this._Decay = file.Read();\r\n this._Angle = file.Read();\r\n this._Penumbra = file.Read();\r\n\r\n let target = new Vector3();\r\n target.fromArray(file.Read());\r\n if (ver < 3)\r\n this.Target = target;\r\n\r\n if (ver > 1)\r\n {\r\n this.InnerConeAngle = file.Read();\r\n this.OuterConeAngle = file.Read();\r\n this.SourceRadius = file.Read();\r\n this.SoftSourceRadius = file.Read();\r\n this.SourceLength = file.Read();\r\n this.AttenuationRadius = file.Read();\r\n }\r\n }\r\n WriteFile(file: CADFiler)\r\n {\r\n super.WriteFile(file);\r\n file.Write(3);\r\n file.Write(this._Distance);\r\n file.Write(this._Decay);\r\n file.Write(this._Angle);\r\n file.Write(this._Penumbra);\r\n file.Write([0, 0, 0]);\r\n\r\n //ver2\r\n file.Write(this.InnerConeAngle);\r\n file.Write(this.OuterConeAngle);\r\n file.Write(this.SourceRadius);\r\n file.Write(this.SoftSourceRadius);\r\n file.Write(this.SourceLength);\r\n file.Write(this.AttenuationRadius);\r\n }\r\n}\r\n","import { arrayRemoveIf } from \"../../Common/ArrayExt\";\r\nimport { AutoRecord } from \"../AutoRecord\";\r\nimport { Factory } from \"../CADFactory\";\r\nimport { CADFiler } from \"../CADFiler\";\r\nimport { ObjectId } from \"../ObjectId\";\r\nimport { SymbolTableRecord } from \"../SymbolTableRecord\";\r\n\r\n/**\r\n * 加工组信息设置.\r\n * 为了保证加工组的信息得到正确的添加和删除.\r\n * 请保证更新Entity的加工组数据,并更新ProcessingGroup的数据.\r\n */\r\n@Factory\r\nexport class ProcessingGroupRecord extends SymbolTableRecord\r\n{\r\n @AutoRecord Objects: ObjectId[] = [];\r\n constructor()\r\n {\r\n super();\r\n }\r\n\r\n get Name()\r\n {\r\n return this.name;\r\n }\r\n set Name(name: string)\r\n {\r\n if (name !== this.name)\r\n {\r\n this.WriteAllObjectRecord();\r\n this.name = name;\r\n }\r\n }\r\n\r\n Purge()\r\n {\r\n arrayRemoveIf(this.Objects, id => !id || id.IsErase);\r\n }\r\n\r\n //#region -------------------------File-------------------------\r\n\r\n //对象从文件中读取数据,初始化自身\r\n ReadFile(file: CADFiler)\r\n {\r\n let ver = file.Read();\r\n super.ReadFile(file);\r\n let count = file.Read();\r\n this.Objects.length = 0;\r\n for (let i = 0; i < count; i++)\r\n {\r\n let id = file.ReadObjectId();\r\n if (id) this.Objects.push(id);\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.Objects.length);\r\n for (let id of this.Objects)\r\n file.WriteObjectId(id);\r\n }\r\n //#endregion\r\n}\r\n","import { Box3, BufferGeometry, Geometry, Line as TLine, LineSegments, Mesh, Object3D, ShapeGeometry, Vector2, Vector3 } from \"three\";\r\nimport { ColorMaterial } from \"../../../../Common/ColorPalette\";\r\nimport { Box3Ext } from \"../../../../Geometry/Box\";\r\nimport { BufferGeometryUtils } from \"../../../../Geometry/BufferGeometryUtils\";\r\nimport { AsVector3 } from \"../../../../Geometry/GeUtils\";\r\nimport { ScaleUV } from \"../../../../Geometry/UVUtils\";\r\nimport { RenderType } from \"../../../../GraphicsSystem/RenderType\";\r\nimport { Factory } from \"../../../CADFactory\";\r\nimport { CADFiler } from \"../../../CADFiler\";\r\nimport { Polyline } from \"../../../Entity/Polyline\";\r\nimport { ObjectId } from \"../../../ObjectId\";\r\nimport { RoomBase } from \"../RoomBase\";\r\n\r\nconst TempPolyline = new Polyline;\r\nexport function UpdateTempPolyline(_ContourData: { pts: Vector2[], buls: number[]; })\r\n{\r\n TempPolyline.LineData.length = 0;;\r\n for (let i = 0; i < _ContourData.pts.length; i++)\r\n TempPolyline.LineData.push({ pt: _ContourData.pts[i], bul: _ContourData.buls[i] });\r\n return TempPolyline;\r\n}\r\n\r\n/**\r\n * 平面实体基类\r\n * 子类:地板 天花\r\n */\r\n@Factory\r\nexport class RoomFlatBase extends RoomBase\r\n{\r\n protected _RegionId: ObjectId;\r\n protected _ContourData: { pts: Vector2[]; buls: number[]; };\r\n\r\n protected _HoleDatas: { pts: Vector2[]; buls: number[]; }[];\r\n\r\n constructor(\r\n _Contour?: Polyline,//为了防止contour被删除(所以我们直接备份这个)\r\n _Holes: Polyline[] = []\r\n )\r\n {\r\n super();\r\n if (_Contour) this.Contour = _Contour;\r\n\r\n this._HoleDatas = _Holes.map(h => h.MatrixAlignTo2(this.OCSNoClone));\r\n }\r\n\r\n get ContourData(): { pts: Vector2[]; buls: number[]; }\r\n {\r\n return this._ContourData;\r\n }\r\n\r\n set ContourData(value: { pts: Vector2[]; buls: number[]; })\r\n {\r\n }\r\n\r\n get HoleDatas(): { pts: Vector2[]; buls: number[]; }[]\r\n {\r\n return this._HoleDatas;\r\n }\r\n set HoleDatas(value: { pts: Vector2[]; buls: number[]; }[])\r\n {\r\n }\r\n\r\n get Area()\r\n {\r\n let area = this.Contour.Area;\r\n\r\n for (let hole of this._HoleDatas)\r\n area -= UpdateTempPolyline(hole).Area;\r\n\r\n return area;\r\n }\r\n\r\n get BoundingBoxInOCS(): Box3Ext\r\n {\r\n return this.Contour.BoundingBoxInOCS;\r\n }\r\n\r\n get BoundingBox(): Box3\r\n {\r\n return this.BoundingBoxInOCS.applyMatrix4(this._Matrix);\r\n }\r\n\r\n public UpdateContourHoles(_Contour: Polyline, _Holes: Polyline[])\r\n {\r\n let conData = _Contour.MatrixAlignTo2(this.OCSNoClone);\r\n let holeData = _Holes.map(h => h.MatrixAlignTo2(this.OCSNoClone));\r\n\r\n this.WriteAllObjectRecord();\r\n this._ContourData = conData;\r\n this._HoleDatas = holeData;\r\n this.Update();\r\n }\r\n\r\n\r\n public set Contour(_Contour: Polyline)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._ContourData = _Contour.MatrixAlignTo2(this.OCSNoClone);\r\n this.Update();\r\n }\r\n public get Contour()\r\n {\r\n return UpdateTempPolyline(this._ContourData);\r\n }\r\n\r\n public set Holes(_Holes: Polyline[])\r\n {\r\n this.WriteAllObjectRecord();\r\n this._HoleDatas = _Holes.map(h => h.MatrixAlignTo2(this.OCSNoClone));\r\n this.Update();\r\n }\r\n\r\n public get RegionId(): ObjectId\r\n {\r\n return this._RegionId;\r\n }\r\n public set RegionId(value: ObjectId)\r\n {\r\n if (value === this._RegionId) return;\r\n this.WriteAllObjectRecord();\r\n this._RegionId = value;\r\n }\r\n\r\n override GetGripPoints(): Vector3[]\r\n {\r\n let pts: Vector3[] = [];\r\n const Add2Pts = (p: Vector2) => { pts.push(AsVector3(p).applyMatrix4(this.OCSNoClone)); };\r\n this._ContourData.pts.forEach(Add2Pts);\r\n this._HoleDatas.forEach(h => h.pts.forEach(Add2Pts));\r\n return pts;\r\n }\r\n override MoveGripPoints(indexList: number[], vec: Vector3): void\r\n {\r\n }\r\n\r\n override GetStretchPoints(): Vector3[]\r\n {\r\n return this.GetGripPoints();\r\n // return [new Vector3(1e10, 1e10, 1e10)];//我们允许拉伸内部轮廓 但是不允许拉伸外部轮廓\r\n }\r\n\r\n override MoveStretchPoints(indexList: number[], vec: Vector3): void\r\n {\r\n\r\n }\r\n\r\n //绘制\r\n override UpdateDrawGeometry()\r\n {\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 protected _EdgeGeometry: BufferGeometry;\r\n protected get EdgeGeometry()\r\n {\r\n if (this._EdgeGeometry)\r\n return this._EdgeGeometry;\r\n\r\n let pts = this.Contour.Shape.getPoints(30).map(AsVector3);\r\n this._EdgeGeometry = BufferGeometryUtils.CreateFromPts(pts);\r\n return this._EdgeGeometry;\r\n }\r\n\r\n protected _MeshGeometry: Geometry;\r\n protected get MeshGeometry(): Geometry\r\n {\r\n if (!this._MeshGeometry)\r\n {\r\n let shape = this.Contour.Shape;\r\n for (let hole of this._HoleDatas)\r\n shape.holes.push(UpdateTempPolyline(hole).Shape);\r\n this._MeshGeometry = new ShapeGeometry(shape);\r\n ScaleUV(this.MeshGeometry, 1e-3);\r\n }\r\n return this._MeshGeometry;\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 override InitDrawObject(renderType: RenderType = RenderType.Wireframe): Object3D\r\n {\r\n if (renderType === RenderType.Wireframe)\r\n {\r\n // return new Object3D;//在二维线框中,如果显示这个线框,操作时会选到这个,所以不绘制\r\n\r\n //避免在二维线框下无法选中!\r\n return new TLine(BufferGeometryUtils.CreateFromPts([AsVector3(this.ContourData.pts[0]), AsVector3(this.ContourData.pts[0])]), 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.GetBasicMaterialTransparent2(this.ColorIndex, 0.1)),\r\n new TLine(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\r\n Object.defineProperty(mesh, \"castShadow\", {\r\n get: () => this.CaseShadow\r\n });\r\n Object.defineProperty(mesh, \"receiveShadow\", {\r\n get: () => this.CaseShadow\r\n });\r\n\r\n return mesh;\r\n }\r\n else if (renderType === RenderType.Jig)\r\n {\r\n return new Object3D;\r\n }\r\n }\r\n\r\n override UpdateDrawObject(renderType: RenderType, obj: Object3D)\r\n {\r\n if (renderType === RenderType.Wireframe)\r\n {\r\n let l = obj as TLine;\r\n BufferGeometryUtils.UpdatePts(l.geometry, [AsVector3(this.ContourData.pts[0]), AsVector3(this.ContourData.pts[0])]);\r\n\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 let mesh = obj.children[0] as Mesh;\r\n if (mesh.geometry !== this.MeshGeometry)\r\n {\r\n mesh.geometry.dispose();\r\n mesh.geometry = this.MeshGeometry;\r\n }\r\n\r\n let line = obj.children[1] as LineSegments;\r\n if (line.geometry !== this.EdgeGeometry)\r\n {\r\n line.geometry.dispose();\r\n line.geometry = this.EdgeGeometry;\r\n }\r\n }\r\n else if (renderType === RenderType.Physical)\r\n {\r\n let mesh = obj as Mesh;\r\n if (mesh.geometry !== this.MeshGeometry)\r\n {\r\n mesh.geometry.dispose();\r\n mesh.geometry = this.MeshGeometry;\r\n }\r\n }\r\n }\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\r\n this._RegionId = file.ReadObjectId();\r\n\r\n this._ContourData = ReadContour();\r\n\r\n let count = file.Read();\r\n this._HoleDatas = [];\r\n for (let i = 0; i < count; i++)\r\n this._HoleDatas.push(ReadContour());\r\n\r\n function ReadContour()\r\n {\r\n let count = file.Read() as number;\r\n let conData = { pts: [], buls: [] };\r\n for (let i = 0; i < count; i++)\r\n {\r\n conData.pts.push(new Vector2(file.Read(), file.Read()));\r\n conData.buls.push(file.Read());\r\n }\r\n return conData;\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.WriteObjectId(this._RegionId);\r\n\r\n WriteContour(this._ContourData);\r\n file.Write(this._HoleDatas.length);\r\n for (let h of this._HoleDatas)\r\n WriteContour(h);\r\n\r\n function WriteContour(conData: { pts: Vector2[], buls: number[]; })\r\n {\r\n file.Write(conData.pts.length);\r\n for (let i = 0; i < conData.pts.length; i++)\r\n {\r\n let p = conData.pts[i];\r\n file.Write(p.x);\r\n file.Write(p.y);\r\n file.Write(conData.buls[i]);\r\n }\r\n }\r\n }\r\n}\r\n","import { Factory } from \"../../../CADFactory\";\r\nimport { CADFiler } from \"../../../CADFiler\";\r\nimport { RoomFlatBase } from \"./RoomFlatBase\";\r\n\r\n\r\n/**\r\n * 地板\r\n */\r\n@Factory\r\nexport class RoomFlatFloor extends RoomFlatBase\r\n{\r\n //#region -----------------------------File-----------------------------\r\n //对象应该实现dataIn和DataOut的方法,为了对象的序列化和反序列化\r\n\r\n //对象从文件中读取数据,初始化自身\r\n protected override _ReadFile(file: CADFiler)\r\n {\r\n super._ReadFile(file);\r\n let ver = file.Read();//1\r\n }\r\n //对象将自身数据写入到文件.\r\n override WriteFile(file: CADFiler)\r\n {\r\n super.WriteFile(file);\r\n file.Write(1);//ver\r\n }\r\n}\r\n","import { Face3, Geometry, ShapeUtils, Vector3 } from \"three\";\r\nimport { arrayPushArray } from \"../../../../Common/ArrayExt\";\r\nimport { AsVector3 } from \"../../../../Geometry/GeUtils\";\r\nimport { Factory } from \"../../../CADFactory\";\r\nimport { RoomFlatBase, UpdateTempPolyline } from \"./RoomFlatBase\";\r\n\r\n\r\n/**\r\n * 天花板\r\n */\r\n@Factory\r\nexport class RoomFlatTop extends RoomFlatBase\r\n{\r\n protected override get MeshGeometry(): Geometry\r\n {\r\n if (!this._MeshGeometry)\r\n {\r\n this._MeshGeometry = new Geometry;\r\n let shape = this.Contour.Shape;\r\n for (let hole of this._HoleDatas)\r\n shape.holes.push(UpdateTempPolyline(hole).Shape);\r\n\r\n const points = shape.extractPoints(30);\r\n let shapeVertices = points.shape;\r\n const shapeHoles = points.holes;\r\n\r\n const faces = ShapeUtils.triangulateShape(shapeVertices, shapeHoles);\r\n\r\n for (let hole of shapeHoles)\r\n arrayPushArray(shapeVertices, hole);\r\n\r\n for (let p of shapeVertices)\r\n {\r\n this._MeshGeometry.vertices.push(AsVector3(p));\r\n p.multiplyScalar(1e-3);\r\n }\r\n\r\n let normal = new Vector3(0, 0, -1);\r\n // incides\r\n for (let i = 0, l = faces.length; i < l; i++)\r\n {\r\n const face = faces[i];\r\n\r\n const a = face[2];\r\n const b = face[1];\r\n const c = face[0];\r\n\r\n this._MeshGeometry.faces.push(new Face3(a, b, c, normal));\r\n this._MeshGeometry.faceVertexUvs[0].push([shapeVertices[a], shapeVertices[b], shapeVertices[c]]);\r\n }\r\n }\r\n return this._MeshGeometry;\r\n }\r\n\r\n protected override get CaseShadow()\r\n {\r\n return true;\r\n }\r\n protected override get ReceiveShadow()\r\n {\r\n return false;\r\n }\r\n}\r\n","import { BufferGeometry, Line, Object3D, Vector2, Vector3 } from \"three\";\r\nimport { AddEntityDrawObject } from \"../../../../Common/AddEntityDrawObject\";\r\nimport { FixedNotZero } from \"../../../../Common/Utils\";\r\nimport { BufferGeometryUtils } from \"../../../../Geometry/BufferGeometryUtils\";\r\nimport { AsVector3, equaln } from \"../../../../Geometry/GeUtils\";\r\nimport { RenderType } from \"../../../../GraphicsSystem/RenderType\";\r\nimport { Factory } from \"../../../CADFactory\";\r\nimport { CADFiler } from \"../../../CADFiler\";\r\nimport { ObjectId } from \"../../../ObjectId\";\r\nimport { Text, TextAligen } from \"../../../Text/Text\";\r\nimport { RoomFlatBase } from \"../Flat/RoomFlatBase\";\r\nimport { RoomBase } from \"../RoomBase\";\r\n\r\n/**\r\n * 户型区域:厨房,客厅,主卧,卫生间\r\n * 绑定了天花板和地板对象\r\n */\r\n@Factory\r\nexport class RoomRegion extends RoomBase\r\n{\r\n _Text: Text;\r\n constructor(\r\n private _Name: string = \"\",//名称\r\n\r\n private _Top: ObjectId,//天花板\r\n\r\n private _Floor: ObjectId,//地板\r\n private _Area = 0,\r\n )\r\n {\r\n super();\r\n }\r\n\r\n public get Area()\r\n {\r\n return this._Area;\r\n }\r\n\r\n public set Area(value)\r\n {\r\n if (equaln(value, this._Area, 1e-3)) return;\r\n\r\n this.WriteAllObjectRecord();\r\n this._Area = value;\r\n this.Update();\r\n }\r\n\r\n get TextString() { return this._Name; }\r\n set TextString(name: string)\r\n {\r\n if (name === this._Name) return;\r\n this._Name = name;\r\n this.Update();\r\n }\r\n\r\n public get Top(): ObjectId\r\n {\r\n return this._Top;\r\n }\r\n\r\n public set Top(value: ObjectId)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._Top = value;\r\n }\r\n\r\n public get Floor(): ObjectId\r\n {\r\n return this._Floor;\r\n }\r\n public set Floor(value: ObjectId)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._Floor = value;\r\n }\r\n\r\n private get Text()\r\n {\r\n if (!this._Text)\r\n this._Text = new Text(undefined, undefined, \"yahei\", 100);\r\n\r\n return this._Text;\r\n }\r\n\r\n GetGripPoints(): Vector3[]\r\n {\r\n let pts: Vector3[] = [];\r\n let obj = (this._Floor?.Object ?? this._Top?.Object) as RoomFlatBase;\r\n if (obj)\r\n {\r\n const Add2Pts = (p: Vector2) => { pts.push(AsVector3(p).applyMatrix4(obj.OCSNoClone)); };\r\n obj.ContourData.pts.forEach(Add2Pts);\r\n obj.HoleDatas.forEach(h => h.pts.forEach(Add2Pts));\r\n }\r\n return pts;\r\n }\r\n\r\n //TODO:绘制时只绘制文字对象\r\n InitDrawObject(renderType: RenderType = RenderType.Wireframe): Object3D\r\n {\r\n let obj = new Object3D;\r\n this.UpdateDrawObject(renderType, obj);\r\n return obj;\r\n }\r\n\r\n /**\r\n * 重载:更新绘制的实体\r\n * @param {RenderType} type\r\n * @param {Object3D} obj\r\n */\r\n UpdateDrawObject(renderType: RenderType, obj: Object3D)\r\n {\r\n if (renderType === RenderType.Wireframe || renderType === RenderType.Conceptual)\r\n {\r\n obj.remove(...obj.children.slice(0));\r\n this.Text.TextAligen = TextAligen.Mid;\r\n this._Text.TextString = `${this.TextString || \"未命名\"} ${FixedNotZero(this._Area * 1e-6, 2)}m²`;\r\n AddEntityDrawObject(obj, this._Text, renderType);\r\n }\r\n else\r\n {\r\n //避免在真实视图无法选中!\r\n let line = obj.children[0] as Line;\r\n let pts = this.GetGripPoints();\r\n if (pts.length)\r\n {\r\n let p = pts[0].applyMatrix4(this.OCSInv);\r\n if (!line)\r\n obj.add(new Line(BufferGeometryUtils.CreateFromPts([p, p])));\r\n else\r\n BufferGeometryUtils.UpdatePts(line.geometry, [p, p]);\r\n }\r\n }\r\n }\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._Name = file.Read();\r\n this._Top = file.ReadObjectId();\r\n this._Floor = file.ReadObjectId();\r\n if (ver > 1)\r\n this._Area = file.Read();\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n super.WriteFile(file);\r\n file.Write(2);//ver\r\n file.Write(this._Name);\r\n file.WriteObjectId(this._Top);\r\n file.WriteObjectId(this._Floor);\r\n file.Write(this._Area);\r\n }\r\n //#endregion\r\n}\r\n","import { Object3D, Vector3 } from \"three\";\r\nimport { equalv3 } from \"../../../../../Geometry/GeUtils\";\r\nimport { RenderType } from \"../../../../../GraphicsSystem/RenderType\";\r\nimport { Factory } from \"../../../../CADFactory\";\r\nimport { CADFiler } from \"../../../../CADFiler\";\r\nimport { CADObject } from \"../../../../CADObject\";\r\nimport { Line } from \"../../../../Entity/Line\";\r\nimport { RoomBase } from \"../../RoomBase\";\r\nimport { applyMixins } from \"../RoomWallBase\";\r\nimport { RoomHoleBase } from \"./RoomHoleBase\";\r\n\r\nconst TempP = new Vector3;\r\n\r\n\r\n/**\r\n * 直线洞 2点(暂时不要用这个 全部使用RoomHolePolyline)\r\n */\r\n@Factory\r\nexport class RoomHoleLine extends RoomHoleBase\r\n{\r\n //虽然使用了三维的点,但是我们实际使用的是二维的点 z总是等于0\r\n constructor(private _StartPoint = new Vector3,\r\n private _EndPoint = new Vector3,\r\n )\r\n {\r\n super();\r\n }\r\n\r\n get StartPoint(): Vector3\r\n {\r\n return this._StartPoint.clone().applyMatrix4(this.OCSNoClone);\r\n }\r\n\r\n get EndPoint(): Vector3\r\n {\r\n return this._EndPoint.clone().applyMatrix4(this.OCSNoClone);\r\n }\r\n\r\n set StartPoint(p: Vector3)\r\n {\r\n p = TempP.copy(p).applyMatrix4(this.OCSInv).setZ(0);\r\n if (!equalv3(p, this._StartPoint, 1e-4))\r\n {\r\n this.WriteAllObjectRecord();\r\n this._StartPoint.copy(p);\r\n this.Update();\r\n }\r\n }\r\n\r\n set EndPoint(p: Vector3)\r\n {\r\n p = TempP.copy(p).applyMatrix4(this.OCSInv).setZ(0);\r\n if (!equalv3(p, this._EndPoint, 1e-4))\r\n {\r\n this.WriteAllObjectRecord();\r\n this._EndPoint.copy(p);\r\n this.Update();\r\n }\r\n }\r\n\r\n //#region Draw\r\n InitDrawObject(renderType: RenderType = RenderType.Wireframe)\r\n {\r\n let obj = new Object3D();\r\n return obj;\r\n }\r\n\r\n UpdateDrawObject(type: RenderType, obj: Object3D)\r\n {\r\n }\r\n //#endregion\r\n\r\n //#region -------------------------File-------------------------\r\n //对象从文件中读取数据,初始化自身\r\n protected _ReadFile(file: CADFiler)\r\n {\r\n let ver = file.Read();\r\n super._ReadFile(file);\r\n\r\n this._StartPoint.set(file.Read(), file.Read(), 0);\r\n this._EndPoint.set(file.Read(), file.Read(), 0);\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(1);\r\n super.WriteFile(file);\r\n\r\n file.Write(this._StartPoint.x);\r\n file.Write(this._StartPoint.y);\r\n\r\n file.Write(this._EndPoint.x);\r\n file.Write(this._EndPoint.y);\r\n }\r\n //局部撤销\r\n ApplyPartialUndo(undoData: CADObject)\r\n {\r\n super.ApplyPartialUndo(undoData);\r\n }\r\n //#endregion\r\n\r\n}\r\n\r\n//@ts-ignore\r\nexport interface RoomHoleLine extends RoomBase, Line { }\r\n\r\napplyMixins(RoomHoleLine, Line);\r\n","import { Matrix4, Vector3 } from \"three\";\r\nimport { arrayRemoveDuplicateBySort } from \"../../Common/ArrayExt\";\r\nimport { Board } from \"../../DatabaseServices/Entity/Board\";\r\nimport { BoardType } from \"../../UI/Store/BoardInterface\";\r\nimport { Box3Ext, SplitType } from \"../Box\";\r\nimport { equaln, isParallelTo, XAxis, YAxis, ZAxis } from \"../GeUtils\";\r\nimport { VisualSpaceBox } from './../../Editor/VisualSpaceBox';\r\n\r\nexport class ISpaceParse\r\n{\r\n /**\r\n * 解析空间成功\r\n */\r\n ParseOK = false;\r\n\r\n /**\r\n * 空间占地盒子\r\n */\r\n SpaceBox: Box3Ext;\r\n\r\n /**\r\n * 空间盒子所在的位置矩阵\r\n */\r\n SpaceOCS: Matrix4;\r\n SpaceOCSInv: Matrix4;\r\n\r\n /**\r\n * 板件映射表\r\n */\r\n BoardMap: Map = new Map();\r\n\r\n /**\r\n * 解析空间所用的板件列表\r\n */\r\n Boards: Board[];\r\n\r\n LeftBoard: Board;\r\n RightBoard: Board;\r\n\r\n /**\r\n * 动态中,禁止执行二次操作\r\n */\r\n IsDynamic: Boolean = false;\r\n /**选到的虚拟空间 */\r\n VisualSpaceBox: VisualSpaceBox;\r\n Rotation = { x: 0, y: 0, z: 0 };\r\n\r\n /**\r\n * # 构造后请手动调用Parse()方法.\r\n * @param boards 板件列表\r\n * @param [spaceOCS] 默认空间矩阵,如果不设置将使用第一块板作为空间矩阵\r\n */\r\n constructor(boards?: Board[], spaceOCS?: Matrix4)\r\n {\r\n this.Boards = boards;\r\n if (spaceOCS)\r\n this.SpaceOCS = spaceOCS;\r\n else if (boards && boards.length > 0)\r\n this.SpaceOCS = boards[0].SpaceOCS;\r\n else\r\n this.SpaceOCS = new Matrix4();\r\n\r\n this.SpaceOCSInv = new Matrix4().getInverse(this.SpaceOCS);\r\n\r\n this.GeneralBoardMap();\r\n }\r\n\r\n async Parse()\r\n {\r\n }\r\n\r\n get Size()\r\n {\r\n if (this.SpaceBox)\r\n return this.SpaceBox.getSize(new Vector3());\r\n return new Vector3();\r\n }\r\n\r\n get DrawCS(): Matrix4\r\n {\r\n if (!this.ParseOK) return new Matrix4();\r\n let scs = this.SpaceOCS.clone();\r\n let p = this.SpaceBox.min.clone().applyMatrix4(scs);\r\n scs.setPosition(p);\r\n return scs;\r\n }\r\n\r\n protected GetBoardInSpaceType(br: Board): BoardType\r\n {\r\n //使用板件向量判断类型,而不是板件类型\r\n let normal = br.Normal.transformDirection(this.SpaceOCSInv);\r\n let type: BoardType;\r\n if (isParallelTo(XAxis, normal, 1e-3))\r\n type = BoardType.Vertical;\r\n else if (isParallelTo(YAxis, normal, 1e-3))\r\n type = BoardType.Behind;\r\n else if (isParallelTo(ZAxis, normal, 1e-3))\r\n type = BoardType.Layer;\r\n\r\n return type;\r\n }\r\n\r\n /**\r\n * 构造板件类型Map\r\n */\r\n protected GeneralBoardMap()\r\n {\r\n if (this.Boards && this.Boards.length > 0)\r\n {\r\n this.BoardMap.clear();\r\n\r\n for (let br of this.Boards)\r\n {\r\n let type = this.GetBoardInSpaceType(br);\r\n if (type === undefined) continue;\r\n\r\n let brs = this.BoardMap.get(type);\r\n if (brs)\r\n brs.push(br);\r\n else\r\n this.BoardMap.set(type, [br]);\r\n }\r\n }\r\n }\r\n /**\r\n * 解析板件的盒子,并且(排序,归并)\r\n * @param boardCol\r\n * @param splitType\r\n */\r\n protected ParseBoardBox(boardCol: Board[], splitType: SplitType): Box3Ext[]\r\n {\r\n let boxCol = boardCol.map(b => b.GetBoundingBoxInMtx(this.SpaceOCSInv));\r\n\r\n //查找最左的板和最右的板\r\n if (splitType === SplitType.X)\r\n {\r\n let minX = Infinity;\r\n let leftIndex = 0;\r\n let maxX = -Infinity;\r\n let rightIndex = 0;\r\n\r\n for (let i = 0; i < boxCol.length; i++)\r\n {\r\n let box = boxCol[i];\r\n if (box.min.x < minX)\r\n {\r\n minX = box.min.x;\r\n leftIndex = i;\r\n }\r\n\r\n if (box.max.x > maxX)\r\n {\r\n maxX = box.max.x;\r\n rightIndex = i;\r\n }\r\n }\r\n\r\n this.LeftBoard = boardCol[leftIndex];\r\n this.RightBoard = boardCol[rightIndex];\r\n }\r\n\r\n //根据分割类型排序\r\n boxCol.sort((b1, b2) =>\r\n {\r\n return b1.min.getComponent(splitType) - b2.min.getComponent(splitType);\r\n });\r\n\r\n //归并盒子\r\n arrayRemoveDuplicateBySort(boxCol,\r\n (b1, b2) =>\r\n {\r\n if (\r\n //对齐\r\n equaln(\r\n b1.min.getComponent(splitType),\r\n b2.min.getComponent(splitType),\r\n 1e-3\r\n )\r\n &&\r\n //厚度相等\r\n equaln(\r\n b1.getSize(new Vector3()).getComponent(splitType),\r\n b2.getSize(new Vector3()).getComponent(splitType),\r\n 1e-3\r\n )\r\n )\r\n {\r\n b1.union(b2);\r\n return true;\r\n }\r\n return false;\r\n }\r\n );\r\n\r\n return boxCol;\r\n }\r\n}\r\n","import { safeEval } from \"../../../Common/eval\";\r\nimport { AutoRecord } from \"../../AutoRecord\";\r\nimport { Factory } from \"../../CADFactory\";\r\nimport { CADFiler } from \"../../CADFiler\";\r\nimport { TemplateParam } from \"../Param/TemplateParam\";\r\n\r\n/**\r\n * 模版动作\r\n */\r\n@Factory\r\nexport class TemplateAction\r\n{\r\n @AutoRecord Name: string = \"动作\";\r\n /** 表达式应该只能依赖自身 */\r\n @AutoRecord Expr: string;\r\n @AutoRecord Description: string;\r\n parent: TemplateParam;\r\n WriteAllObjectRecord()\r\n {\r\n if (this.parent)\r\n this.parent.WriteAllObjectRecord();\r\n }\r\n Update(paramDiff: number | string, newValue: number | string)\r\n {\r\n if (this.Expr)\r\n {\r\n let varDefines = {};\r\n varDefines[this.parent.name] = newValue;\r\n newValue = safeEval(this.Expr, varDefines) || newValue;\r\n\r\n varDefines[this.parent.name] = paramDiff;\r\n paramDiff = safeEval(this.Expr, varDefines) || paramDiff;\r\n }\r\n\r\n this._Update(paramDiff, newValue);\r\n }\r\n\r\n\r\n /**\r\n * @重载\r\n */\r\n protected _Update(paramDiff: number | string, newValue: number | string)\r\n {\r\n\r\n }\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 this.Name = file.Read();\r\n if (ver > 2)\r\n {\r\n this.Expr = file.Read();\r\n this.Description = file.Read();\r\n }\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(3);\r\n file.Write(this.Name);\r\n file.Write(this.Expr);\r\n file.Write(this.Description);\r\n }\r\n}\r\n","import { Intersection, Object3D, Vector3 } from 'three';\r\nimport { Entity } from '../DatabaseServices/Entity/Entity';\r\nimport { ObjectSnapMode } from './ObjectSnapMode';\r\nimport { SelectSet } from './SelectSet';\r\n\r\nexport enum PromptStatus\r\n{\r\n None = 0,\r\n Cancel = -1,\r\n OK = 1,\r\n Keyword = 2,\r\n Other = 4,\r\n String = 8,\r\n Error = -2\r\n}\r\n\r\n// export enum Errno 未来某一天我们可能需要这个东西\r\n// {\r\n// Space = 0,\r\n// Enter = 1,\r\n// Esc = 2,\r\n// Left = 3,\r\n// Right = 4,\r\n// }\r\n\r\nexport class PromptResult\r\n{\r\n Status: PromptStatus = PromptStatus.None;\r\n\r\n StringResult?: string;\r\n //是否为子级菜单\r\n isChild?: boolean = false;\r\n Parent?: string;\r\n //当用户选择失败的时候,提供当前选择失败的原因\r\n // Errno?: Errno;\r\n}\r\n\r\nexport class PromptPointResult extends PromptResult\r\n{\r\n SnaoMode: ObjectSnapMode;\r\n intersection: Intersection;\r\n private _point: Vector3;\r\n /**\r\n * 返回三维点\r\n *\r\n * @readonly\r\n * @memberof PromptPointResult\r\n */\r\n get Point()\r\n {\r\n return this._point.clone();\r\n }\r\n set Point(pt: Vector3)\r\n {\r\n this._point = pt.clone();\r\n }\r\n constructor()\r\n {\r\n super();\r\n this._point = new Vector3();\r\n }\r\n}\r\n\r\nexport class PromptDistendResult extends PromptResult\r\n{\r\n private _value: number;\r\n get Distance()\r\n {\r\n return this._value;\r\n }\r\n set Distance(v: number)\r\n {\r\n this._value = v;\r\n }\r\n}\r\n\r\nexport class PromptRectResult extends PromptResult\r\n{\r\n Point1UCS: Vector3;\r\n Point2UCS: Vector3;\r\n\r\n Point1WCS: Vector3;\r\n Point2WCS: Vector3;\r\n\r\n get Width()\r\n {\r\n return this.Point1UCS.x - this.Point2UCS.x;\r\n }\r\n\r\n get Height()\r\n {\r\n return this.Point1UCS.y - this.Point2UCS.y;\r\n }\r\n}\r\n\r\nexport class PromptEntityResult extends PromptResult\r\n{\r\n constructor(\r\n //选择到的图形\r\n public Entity?: Entity,\r\n //点取的点\r\n public Point?: Vector3,\r\n public Object?: Object3D,\r\n public IsCircle?: boolean,\r\n )\r\n {\r\n super();\r\n }\r\n}\r\n\r\nexport class PromptSsgetResult extends PromptResult\r\n{\r\n SelectSet?: SelectSet;\r\n}\r\n","import { Matrix4, Vector3 } from \"three\";\r\nimport { GetPointAtCurveDir } from \"../Common/CurveUtils\";\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 { Ellipse } from \"../DatabaseServices/Entity/Ellipse\";\r\nimport { Line } from \"../DatabaseServices/Entity/Line\";\r\nimport { Polyline } from \"../DatabaseServices/Entity/Polyline\";\r\nimport { Spline } from \"../DatabaseServices/Spline\";\r\nimport { PromptEntityResult, PromptPointResult } from \"../Editor/PromptResult\";\r\nimport { angle, AsVector2, equaln, equalv3, isIntersect2, isParallelTo, midPoint } from \"../Geometry/GeUtils\";\r\nimport { Orbit } from \"../Geometry/Orbit\";\r\nimport { IntersectOption } from \"../GraphicsSystem/IntersectWith\";\r\n\r\nfunction Encode(res: PromptEntityResult, enMap: (PromptEntityResult[])[])\r\n{\r\n if (res.Entity instanceof Line || res.Entity.constructor.name === \"RoomWallLine\")\r\n {\r\n enMap[0].push(res);\r\n return 1;\r\n }\r\n else if (res.Entity instanceof Arc || res.constructor.name === \"RoomWallArc\")\r\n {\r\n enMap[1].push(res);\r\n return 2;\r\n }\r\n else if (res.Entity instanceof Polyline)\r\n {\r\n enMap[2].push(res);\r\n return 4;\r\n }\r\n else if (res.Entity instanceof Spline)\r\n {\r\n enMap[3].push(res);\r\n return 8;\r\n }\r\n else if (res.Entity instanceof Ellipse)\r\n {\r\n enMap[4].push(res);\r\n return 16;\r\n }\r\n}\r\n\r\n//把圆转换成圆弧,避免圆参与计算.\r\nfunction CircleEnResToArc(enRes: PromptEntityResult)\r\n{\r\n if (enRes.Entity instanceof Circle)\r\n {\r\n let an = angle(enRes.Point.clone().applyMatrix4(enRes.Entity.OCSInv)) + Math.PI;\r\n let arc = new Arc(new Vector3(), enRes.Entity.Radius, an, an + 0.1);\r\n arc.ApplyMatrix(enRes.Entity.OCS);\r\n arc.Center = enRes.Entity.Center;\r\n enRes.Entity = arc;\r\n enRes.IsCircle = true;\r\n }\r\n}\r\n\r\nfunction GetFilletCurve(enRes: PromptEntityResult): [Curve, number]\r\n{\r\n if (enRes.Entity instanceof Polyline)\r\n {\r\n let pl = enRes.Entity;\r\n let param = pl.GetParamAtPoint(pl.GetClosestPointTo(enRes.Point, false));\r\n let paramF = Math.floor(param);\r\n return [pl.GetCurveAtParam(param), paramF];\r\n }\r\n else\r\n return [enRes.Entity as Curve, NaN];\r\n}\r\n\r\nenum ExtendType\r\n{\r\n Start = 1,\r\n End = 2,\r\n}\r\n\r\nexport interface FilletRes\r\n{\r\n cu1?: Curve;\r\n cu1Extend?: ExtendType;\r\n cu2?: Curve;\r\n cu2Extend?: ExtendType;\r\n arc?: Arc;\r\n}\r\n\r\ntype CurveExtend = { Curve: Curve, ExtType: ExtendType; };\r\n\r\nexport class FilletUtils\r\n{\r\n FilletRadius: number;\r\n Fillet(enRes1: PromptEntityResult, enRes2: PromptEntityResult): FilletRes\r\n {\r\n CircleEnResToArc(enRes1);\r\n CircleEnResToArc(enRes2);\r\n\r\n let { enType, enMap } = this.EnCode(enRes1, enRes2);\r\n if (enType === 4 && enRes1.Entity === enRes2.Entity)\r\n return this.FilletPolyLineSelf(enRes1, enRes2);\r\n else if (enType >= 4 && enType < 8)\r\n return this.FilletPolylineAndCurve(enRes1, enRes2);\r\n\r\n let interPts = this.GetIntersectAndSort(enRes1, enRes2, enType, enMap);\r\n if (interPts.length === 0\r\n || (interPts.length === 1 && (enType & 2)))//圆弧相切\r\n {\r\n if (enType === 1)\r\n return this.FilletParallelLine(enRes1, enRes2);\r\n else if (enType === 3)\r\n return this.FilletLineAndArc(enMap, enRes1);\r\n else if (enType === 2)\r\n return this.FilletArcAndArc(enRes1, enRes2);\r\n return;\r\n }\r\n\r\n return this.FilletLineOrArc(enRes1, enRes2, interPts);\r\n }\r\n\r\n private FilletLineOrArc(enRes1: PromptEntityResult, enRes2: PromptEntityResult, interPts: Vector3[]): FilletRes\r\n {\r\n let iPt = interPts[0];\r\n\r\n //裁剪延伸,使两条线组成一个尖角\r\n let splitedCu1 = this.SplitCurve(enRes1, iPt, interPts);\r\n let splitedCu2 = this.SplitCurve(enRes2, iPt, interPts);\r\n\r\n let fRadius = this.FilletRadius;\r\n\r\n\r\n let res: FilletRes = { cu1: splitedCu1.Curve, cu2: splitedCu2.Curve, arc: undefined };\r\n\r\n if (fRadius > 0)\r\n {\r\n //角平分线向量.\r\n let bisectorVec: Vector3 = new Vector3();\r\n let c1Derv = this.ComputerDerv(splitedCu1, bisectorVec);\r\n let c2Derv = this.ComputerDerv(splitedCu2, bisectorVec);\r\n\r\n //方向相反\r\n if (equalv3(bisectorVec, new Vector3()))\r\n return;\r\n\r\n //相切\r\n if (equalv3(c2Derv, c1Derv))\r\n {\r\n bisectorVec.set(0, 0, 0);\r\n c1Derv = this.ComputerDerv2(splitedCu1, bisectorVec);\r\n c2Derv = this.ComputerDerv2(splitedCu2, bisectorVec);\r\n }\r\n let cu1RoOcsInv = new Matrix4().extractRotation(splitedCu1.Curve.OCSInv);\r\n\r\n [c1Derv, c2Derv, bisectorVec].forEach(v => v.applyMatrix4(cu1RoOcsInv));\r\n\r\n let offCu1 = splitedCu1.Curve.GetOffsetCurves(\r\n fRadius * -Math.sign(c1Derv.cross(bisectorVec).z))[0];\r\n let offCu2 = splitedCu2.Curve.GetOffsetCurves(\r\n fRadius * -Math.sign(c2Derv.cross(bisectorVec).z))[0];\r\n\r\n if (!offCu1 || !offCu2)\r\n return;\r\n\r\n // JigUtils.Draw(new Line(iPt, iPt.clone().add(c1Derv.clone().multiplyScalar(10)))).ColorIndex = 1;\r\n // JigUtils.Draw(new Line(iPt, iPt.clone().add(c2Derv.clone().multiplyScalar(10)))).ColorIndex = 2;\r\n // JigUtils.Draw(new Line(iPt, iPt.clone().add(bisectorVec))).ColorIndex = 3;\r\n // offCu1.ColorIndex = 6;\r\n // offCu2.ColorIndex = 6;\r\n // JigUtils.Draw(offCu1.Clone());\r\n // JigUtils.Draw(offCu2.Clone());\r\n\r\n let center = offCu1.IntersectWith(offCu2, IntersectOption.ExtendNone)\r\n .sort((p1, p2) =>\r\n {\r\n return p1.distanceToSquared(iPt) - p2.distanceToSquared(iPt);\r\n })[0];\r\n\r\n if (!center)\r\n return;\r\n\r\n let arcP1 = splitedCu1.Curve.GetClosestPointTo(center, true);\r\n let arcP2 = splitedCu2.Curve.GetClosestPointTo(center, true);\r\n if (!splitedCu1.Curve.PtOnCurve(arcP1) || !splitedCu2.Curve.PtOnCurve(arcP2))\r\n return;\r\n\r\n //时针校验\r\n let v1 = arcP1.clone().sub(center).applyMatrix4(cu1RoOcsInv);\r\n let v2 = arcP2.clone().sub(center).applyMatrix4(cu1RoOcsInv);\r\n\r\n //绘制圆弧\r\n let arc = new Arc(new Vector3(), this.FilletRadius, angle(v1), angle(v2), v1.cross(v2).z < 0);\r\n arc.ApplyMatrix(splitedCu1.Curve.OCS);\r\n arc.Center = center;\r\n res.arc = arc;\r\n //延伸或者裁剪到圆弧点\r\n this.ExtendPt(splitedCu1, arcP1);\r\n this.ExtendPt(splitedCu2, arcP2);\r\n }\r\n\r\n res.cu1Extend = splitedCu1.ExtType;\r\n res.cu2Extend = splitedCu2.ExtType;\r\n\r\n return res;\r\n }\r\n FilletPolyLineSelf(enRes1: PromptEntityResult, enRes2: PromptEntityResult): FilletRes\r\n {\r\n let pl = enRes1.Entity as Polyline;\r\n\r\n let param1 = pl.GetParamAtPoint(pl.GetClosestPointTo(enRes1.Point, false));\r\n let param2 = pl.GetParamAtPoint(pl.GetClosestPointTo(enRes2.Point, false));\r\n\r\n if (param1 > param2)\r\n {\r\n [param1, param2] = [param2, param1];\r\n [enRes1, enRes2] = [enRes2, enRes1];\r\n }\r\n\r\n let parF1 = Math.floor(param1);\r\n let parF2 = Math.floor(param2);\r\n\r\n //共线\r\n if (parF1 === parF2)\r\n return;\r\n\r\n let c1 = pl.GetCurveAtParam(param1);\r\n let c2 = pl.GetCurveAtParam(param2);\r\n\r\n if (equalv3(c1.GetFistDeriv(1).normalize(), c2.GetFistDeriv(0).normalize()))\r\n return;\r\n\r\n let es1 = new PromptEntityResult();\r\n es1.Entity = c1;\r\n es1.Point = enRes1.Point;\r\n\r\n let es2 = new PromptEntityResult();\r\n es2.Entity = c2;\r\n es2.Point = enRes2.Point;\r\n let fres = this.Fillet(es1, es2);\r\n\r\n if (!fres)\r\n return;\r\n\r\n let pln = pl.Clone();\r\n\r\n if (fres.cu1 instanceof Arc)\r\n pln.SetBulgeAt(parF1, fres.cu1.Bul);\r\n\r\n if (fres.cu2 instanceof Arc)\r\n pln.SetBulgeAt(parF2, fres.cu2.Bul);\r\n\r\n let splitType1 = fres.cu1Extend;\r\n let splitType2 = fres.cu2Extend;\r\n\r\n if (splitType1 === splitType2)\r\n return;\r\n if (!fres.arc)\r\n {\r\n if (splitType1 === ExtendType.End)\r\n {\r\n let ep = AsVector2(fres.cu1.EndPoint.applyMatrix4(pln.OCSInv));\r\n pln.SetPointAt(parF1 + 1, ep);\r\n\r\n let sp = AsVector2(fres.cu2.StartPoint.applyMatrix4(pln.OCSInv));\r\n pln.SetPointAt(parF2, sp);\r\n //移除多余的点\r\n pln.LineData.splice(parF1 + 1, parF2 - parF1 - 1);\r\n pln.Update();\r\n return { cu1: pln };\r\n }\r\n else\r\n {\r\n let ep = AsVector2(fres.cu1.StartPoint.applyMatrix4(pln.OCSInv));\r\n pln.SetPointAt(parF1, ep);\r\n\r\n let sp = AsVector2(fres.cu2.EndPoint.applyMatrix4(pln.OCSInv));\r\n pln.SetPointAt(parF2 + 1, sp);\r\n\r\n pln.LineData.splice(parF2 + 2);\r\n pln.LineData.splice(0, parF1);\r\n pln.Update();\r\n return { cu1: pln };\r\n }\r\n }\r\n\r\n if (splitType1 === ExtendType.End)//没有经过起点\r\n {\r\n let sp = AsVector2(fres.cu1.EndPoint.applyMatrix4(pln.OCSInv));\r\n if (parF2 - parF1 === 1)\r\n {\r\n pln.AddVertexAt(parF1 + 1, sp);\r\n parF2++;\r\n }\r\n else\r\n pln.SetPointAt(parF1 + 1, sp);\r\n pln.SetBulgeAt(parF1 + 1, fres.arc.Bul);\r\n\r\n let ep = AsVector2(fres.cu2.StartPoint.applyMatrix4(pln.OCSInv));\r\n pln.SetPointAt(parF2, ep);\r\n\r\n //移除多余的点\r\n pln.LineData.splice(parF1 + 2, parF2 - parF1 - 2);\r\n pln.Update();\r\n return { cu1: pln };\r\n }\r\n else//经过起点\r\n {\r\n let sp = AsVector2(fres.arc.EndPoint.applyMatrix4(pln.OCSInv));\r\n\r\n let keepF1 = 0;\r\n if (parF2 + 1 <= pln.LineData.length)\r\n {\r\n if (parF1 === 0 || equaln(pln.GetBulgeAt(parF1 - 1), 0))\r\n pln.AddVertexAt(parF2 + 1, sp);\r\n else\r\n {\r\n pln.SetPointAt(parF1 - 1, sp);\r\n keepF1 = -1;//保留圆弧位\r\n }\r\n }\r\n else\r\n pln.SetPointAt(parF2 + 1, sp);\r\n\r\n if (keepF1 === 0)\r\n pln.SetBulgeAt(parF2 + 1, -fres.arc.Bul);\r\n else\r\n pln.SetBulgeAt(parF1 - 1, -fres.arc.Bul);\r\n\r\n let ep = AsVector2(fres.cu1.StartPoint.applyMatrix4(pln.OCSInv));\r\n pln.SetPointAt(parF1, ep);\r\n pln.CloseMark = true;\r\n\r\n pln.LineData.splice(parF2 + 2 + keepF1);\r\n pln.LineData.splice(0, parF1 + keepF1);\r\n pln.Update();\r\n return { cu1: pln };\r\n }\r\n }\r\n\r\n private FilletPolylineAndCurve(enRes1: PromptEntityResult, enRes2: PromptEntityResult): FilletRes\r\n {\r\n let arr1 = GetFilletCurve(enRes1);\r\n let arr2 = GetFilletCurve(enRes2);\r\n\r\n let [cu1, paramF1] = arr1;\r\n let [cu2, paramF2] = arr2;\r\n\r\n let es1 = new PromptEntityResult();\r\n es1.Entity = cu1;\r\n es1.Point = enRes1.Point;\r\n\r\n let es2 = new PromptEntityResult();\r\n es2.Entity = cu2;\r\n es2.Point = enRes2.Point;\r\n\r\n let fres = this.Fillet(es1, es2);\r\n if (fres)\r\n {\r\n let cus: Curve[] = [];\r\n\r\n let isFirst = false;\r\n\r\n if (fres.cu1)\r\n {\r\n if (enRes1.Entity instanceof Polyline)\r\n {\r\n isFirst = true;\r\n let pln = enRes1.Entity.Clone();\r\n pln.DigestionCloseMark();\r\n\r\n if (fres.cu1 instanceof Arc)\r\n pln.SetBulgeAt(paramF1, fres.cu1.Bul);\r\n\r\n if (fres.cu1Extend === ExtendType.End)\r\n {\r\n pln.LineData.splice(paramF1 + 2);\r\n\r\n let ep = AsVector2(fres.cu1.EndPoint.applyMatrix4(pln.OCSInv));\r\n pln.SetPointAt(paramF1 + 1, ep);\r\n }\r\n else\r\n {\r\n pln.LineData.splice(0, paramF1);\r\n let sp = AsVector2(fres.cu1.StartPoint.applyMatrix4(pln.OCSInv));\r\n pln.SetPointAt(0, sp);\r\n }\r\n\r\n cus.push(pln);\r\n }\r\n else if (!enRes1.IsCircle)\r\n cus.push(fres.cu1);\r\n }\r\n\r\n if (fres.arc)\r\n cus.push(fres.arc);\r\n\r\n if (fres.cu2)\r\n {\r\n if (enRes2.Entity instanceof Polyline)\r\n {\r\n let pln = enRes2.Entity.Clone();\r\n pln.DigestionCloseMark();\r\n\r\n if (fres.cu2 instanceof Arc)\r\n pln.SetBulgeAt(paramF2, fres.cu2.Bul);\r\n\r\n if (fres.cu2Extend === ExtendType.End)\r\n {\r\n pln.LineData.splice(paramF2 + 2);\r\n\r\n let ep = AsVector2(fres.cu2.EndPoint.applyMatrix4(pln.OCSInv));\r\n pln.SetPointAt(paramF2 + 1, ep);\r\n }\r\n else\r\n {\r\n pln.LineData.splice(0, paramF2);\r\n let sp = AsVector2(fres.cu2.StartPoint.applyMatrix4(pln.OCSInv));\r\n pln.SetPointAt(0, sp);\r\n }\r\n\r\n cus.push(pln);\r\n cus.reverse();\r\n }\r\n else if (!enRes2.IsCircle)\r\n cus.push(fres.cu2);\r\n }\r\n\r\n if (cus.length > 0)\r\n {\r\n let pl = cus[0] as Polyline;\r\n if (!(pl instanceof Polyline))\r\n return;\r\n\r\n for (let i = 1; i < cus.length; i++)\r\n pl.Join(cus[i]);\r\n\r\n if (isFirst)\r\n return { cu1: pl };\r\n else\r\n return { cu2: pl };\r\n }\r\n\r\n }\r\n\r\n return undefined;\r\n }\r\n\r\n FilletPolyLineAllAngular(enRes1: PromptEntityResult): FilletRes\r\n {\r\n let pl = enRes1.Entity as Polyline;\r\n\r\n let cus = pl.Explode();\r\n let count = cus.length;\r\n if (pl.IsClose)\r\n cus.push(cus[0]);\r\n\r\n let ncus = [];\r\n\r\n for (let i = 0; i < count; i++)\r\n {\r\n let c1 = cus[i];\r\n let c2 = cus[i + 1];\r\n\r\n ncus.push(c1);\r\n\r\n if (!c2)\r\n break;\r\n\r\n if (equalv3(c1.GetFistDeriv(1).normalize(), c2.GetFistDeriv(0).normalize()))\r\n continue;\r\n\r\n let es1 = new PromptEntityResult();\r\n es1.Entity = c1;\r\n es1.Point = c1.EndPoint;\r\n\r\n let es2 = new PromptEntityResult();\r\n es2.Entity = c2;\r\n es2.Point = c2.StartPoint;\r\n\r\n let fres = this.Fillet(es1, es2);\r\n if (fres)\r\n {\r\n if (fres.cu1)\r\n c1.CopyFrom(fres.cu1);\r\n if (fres.cu2)\r\n c2.CopyFrom(fres.cu2);\r\n\r\n if (fres.arc)\r\n ncus.push(fres.arc);\r\n }\r\n }\r\n\r\n let pln = pl.Clone();\r\n pln.LineData = [];\r\n pln.ApplyMatrix(pln.OCSInv);\r\n pln.CloseMark = false;\r\n for (let cu of ncus)\r\n pln.Join(cu);\r\n\r\n pln.CloseMark = pl.CloseMark;\r\n\r\n return {\r\n cu1: pln,\r\n cu2: undefined,\r\n arc: undefined\r\n };\r\n }\r\n\r\n FindNearestPt(pts: Vector3[], target: Vector3): Vector3\r\n {\r\n let res = pts[0];\r\n let dis = Infinity;\r\n for (let p of pts)\r\n {\r\n let d = p.distanceTo(target);\r\n if (d < dis)\r\n {\r\n res = p;\r\n dis = d;\r\n }\r\n }\r\n return res;\r\n }\r\n\r\n FilletBoard(brRes: PromptEntityResult, ptRes: PromptPointResult): Polyline | string\r\n {\r\n let br = brRes.Entity as Board;\r\n let brContour = br.ContourCurve.Clone() as Polyline;\r\n\r\n //------1.求交\r\n let brResPt = brRes.Point.clone().applyMatrix4(br.OCSInv).setZ(0);\r\n let ptResPt = ptRes.Point.clone().applyMatrix4(br.OCSInv).setZ(0);\r\n let l = new Line(brResPt, ptResPt);\r\n\r\n let ipts = l.IntersectWith(brContour, IntersectOption.ExtendThis);\r\n\r\n if (ipts.length > 2)//超过2个则有可能有多余交点\r\n //找最近点\r\n ipts = [this.FindNearestPt(ipts, brResPt), this.FindNearestPt(ipts, ptResPt)];\r\n\r\n if (ipts.length !== 2)\r\n return \"倒角失败!交点个数异常.\";\r\n\r\n //------2.倒角\r\n let es1 = new PromptEntityResult(brContour, ipts[0]);\r\n let es2 = new PromptEntityResult(brContour, ipts[1]);\r\n\r\n let res = this.FilletPolyLineSelf(es1, es2);\r\n if (res && res.cu1)\r\n return res.cu1 as Polyline;\r\n else\r\n return \"倒角失败\";\r\n }\r\n\r\n /**\r\n * 平行线倒角\r\n */\r\n private FilletParallelLine(enRes1: PromptEntityResult, enRes2: PromptEntityResult): FilletRes\r\n {\r\n let l1 = enRes1.Entity as Line;\r\n let l2 = enRes2.Entity as Line;\r\n\r\n let l1Derv = l1.GetFistDeriv(0);\r\n if (!isParallelTo(l1Derv, l2.GetFistDeriv(0)))\r\n return;\r\n\r\n let vec = l2.StartPoint.sub(l1.StartPoint);\r\n if (isParallelTo(vec, l1Derv))\r\n return;\r\n\r\n let par1 = l2.GetClosestAtPoint(l1.StartPoint, true).param;\r\n let par2 = l2.GetClosestAtPoint(l1.EndPoint, true).param;\r\n if (!isIntersect2(0, 1, par1, par2))\r\n return;\r\n\r\n let lineClone1 = l1.Clone();\r\n let lineClone2 = l2.Clone();\r\n\r\n let par = l1.GetClosestAtPoint(enRes1.Point, true).param;\r\n\r\n let parFix = Math.round(par);\r\n let ptFix = lineClone1.GetPointAtParam(parFix);\r\n let ptL2Fix = lineClone2.GetClosestAtPoint(ptFix, true).closestPt;\r\n\r\n let cu1Extend = parFix === 0 ? ExtendType.Start : ExtendType.End;\r\n let cu2Extend: ExtendType;\r\n if ((par1 > par2) === (parFix === 1))\r\n {\r\n lineClone2.StartPoint = ptL2Fix;\r\n cu2Extend = ExtendType.Start;\r\n }\r\n else\r\n {\r\n lineClone2.EndPoint = ptL2Fix;\r\n cu2Extend = ExtendType.End;\r\n }\r\n\r\n let radius = ptFix.distanceTo(ptL2Fix) / 2;\r\n if (radius < 1e-3)\r\n return;\r\n\r\n let arcCenter = midPoint(ptFix, ptL2Fix);\r\n\r\n let sv = ptFix.sub(arcCenter);\r\n let ev = ptL2Fix.sub(arcCenter);\r\n\r\n if (parFix === 0)\r\n l1Derv.negate();\r\n\r\n //平面矩阵\r\n let xVec = new Vector3();\r\n let yVec = new Vector3();\r\n let zVec = vec.cross(l1Derv).normalize();\r\n let l1Normal = l1.Normal;\r\n if (isParallelTo(zVec, l1Normal)) zVec = l1Normal;\r\n\r\n Orbit.ComputUpDirection(zVec, yVec, xVec);\r\n let mtx = new Matrix4().makeBasis(xVec, yVec, zVec);\r\n let mtxInv = new Matrix4().getInverse(mtx);\r\n //变换\r\n sv.applyMatrix4(mtxInv);\r\n ev.applyMatrix4(mtxInv);\r\n l1Derv.applyMatrix4(mtxInv);\r\n\r\n let sa = angle(sv);\r\n let ea = angle(ev);\r\n let clockwise = ev.cross(l1Derv).z > 0;\r\n let arc = new Arc(new Vector3(), radius, sa, ea, clockwise);\r\n arc.ApplyMatrix(mtx);\r\n arc.Center = arcCenter;\r\n\r\n return {\r\n cu1: lineClone1,\r\n cu1Extend,\r\n cu2: lineClone2,\r\n cu2Extend,\r\n arc,\r\n };\r\n }\r\n\r\n /**\r\n * 计算圆弧与圆弧没有交点的情况下倒角结果.\r\n * @param enRes1\r\n * @param enRes2\r\n * @returns arc and arc\r\n */\r\n private FilletArcAndArc(enRes1: PromptEntityResult, enRes2: PromptEntityResult): FilletRes\r\n {\r\n let a1 = enRes1.Entity as Arc;\r\n let a2 = enRes2.Entity as Arc;\r\n\r\n let arcO1 = a1.GetOffsetCurves(this.FilletRadius * (a1.IsClockWise ? -1 : 1))[0];\r\n let arcO2 = a2.GetOffsetCurves(this.FilletRadius * (a2.IsClockWise ? -1 : 1))[0];\r\n\r\n // arcO1.ColorIndex = 6;\r\n // arcO2.ColorIndex = 6;\r\n // JigUtils.Draw(arcO1);\r\n // JigUtils.Draw(arcO2);\r\n\r\n //求交\r\n let intPts = arcO1.IntersectWith(arcO2, IntersectOption.ExtendBoth);\r\n if (intPts.length === 0)\r\n return;//无交点无法倒角\r\n\r\n //两选择点的中点\r\n let clickMidp = midPoint(enRes1.Point, enRes2.Point);//用来选择合适的交点\r\n //选择合适的交点\r\n intPts.sort((p1, p2) =>\r\n {\r\n return p1.distanceToSquared(clickMidp) - p2.distanceToSquared(clickMidp);\r\n });\r\n\r\n //圆弧圆心\r\n let narcCenter = intPts[0];\r\n let narcP1 = a1.GetClosestPointTo(narcCenter, true);//两圆弧和相切弧的交点\r\n let narcP2 = a2.GetClosestPointTo(narcCenter, true);\r\n\r\n let tempCircle = new Circle(narcCenter, this.FilletRadius);\r\n tempCircle.OCSNoClone.copy(a1.OCSNoClone).setPosition(narcCenter);\r\n let closestPt = a1.GetClosestPointTo(a2.Center, true);//两曲线距离对方圆心最近的点\r\n let narcMP = tempCircle.GetClosestPointTo(closestPt, false);//相切圆距离closestPt最近的点\r\n\r\n //构造圆弧\r\n let narc = new Arc().ApplyMatrix(a1.OCS).FromThreePoint(narcP1, narcMP, narcP2);\r\n\r\n let a1Clone = a1.Clone();\r\n let a2Clone = a2.Clone();\r\n\r\n let a1Param = a1.GetParamAtPoint(narcP1);\r\n let a2Param = a2.GetParamAtPoint(narcP2);\r\n\r\n let a1Derv = a1.GetFistDeriv(a1Param).normalize();\r\n let a2Derv = a2.GetFistDeriv(a2Param).normalize();\r\n\r\n let narcDerv0 = narc.GetFistDeriv(0).normalize();\r\n let narcDerv1 = narc.GetFistDeriv(1).normalize();\r\n\r\n //裁剪圆弧\r\n if (equalv3(a1Derv, narcDerv0))\r\n a1Clone.EndPoint = narcP1;\r\n else\r\n a1Clone.StartPoint = narcP1;\r\n\r\n if (equalv3(a2Derv, narcDerv1))\r\n a2Clone.StartPoint = narcP2;\r\n else\r\n a2Clone.EndPoint = narcP2;\r\n\r\n return {\r\n cu1: a1Clone,\r\n cu2: a2Clone,\r\n arc: narc\r\n };\r\n }\r\n\r\n /**\r\n * 计算直线与圆弧没有交点(或相切)的情况下倒角结果\r\n * @param enRes1\r\n * @param enRes2\r\n * @returns line and cir\r\n */\r\n private FilletLineAndArc(enMap: (PromptEntityResult[])[], enRes1: PromptEntityResult): FilletRes | undefined\r\n {\r\n let lineRes = enMap[0][0];\r\n let arcRes = enMap[1][0];\r\n\r\n let line = lineRes.Entity as Line;\r\n let arc = arcRes.Entity as Arc;\r\n\r\n let dir = GetPointAtCurveDir(line, arc.Center);\r\n\r\n let lineO = line.GetOffsetCurves(this.FilletRadius * dir)[0];\r\n let arcO = arc.GetOffsetCurves(this.FilletRadius * (arc.IsClockWise ? -1 : 1))[0];// tip:面积逆时针为正, 顺时针为负.\r\n\r\n // lineO.ColorIndex = 6;\r\n // arcO.ColorIndex = 6;\r\n // JigUtils.Draw(lineO);\r\n // JigUtils.Draw(arcO);\r\n\r\n //求交\r\n let intPts = lineO.IntersectWith(arcO, IntersectOption.ExtendBoth);\r\n if (intPts.length === 0)\r\n return;//无交点无法倒角\r\n\r\n //两选择点的中点\r\n let clickMidp = midPoint(lineRes.Point, arcRes.Point);\r\n //选择适合的交点。\r\n intPts.sort((p1, p2) =>\r\n {\r\n return p1.distanceToSquared(clickMidp) - p2.distanceToSquared(clickMidp);\r\n });\r\n //圆弧圆心\r\n let arcCenter = intPts[0];\r\n\r\n let arcP1 = line.GetClosestPointTo(arcCenter, true);//直线与相切圆的交点\r\n let arcP2 = arc.GetClosestPointTo(arcCenter, true);//圆弧与相切圆的交点\r\n\r\n let tempCircle = new Circle(arcCenter, this.FilletRadius);\r\n tempCircle.OCSNoClone.copy(arc.OCSNoClone).setPosition(arcCenter);\r\n let { closestPt, param } = line.GetClosestAtPoint(arc.Center, true);\r\n let arcMP = tempCircle.GetClosestPointTo(closestPt, false);\r\n\r\n //构造圆弧\r\n let narc = new Arc().ApplyMatrix(arc.OCS).FromThreePoint(arcP1, arcMP, arcP2);\r\n\r\n //裁剪线\r\n let lineClone = line.Clone();\r\n let arcClone = arc.Clone();\r\n\r\n let lineExtend: ExtendType;\r\n let p1Param = line.GetParamAtPoint(arcP1);\r\n if (p1Param > param)\r\n {\r\n lineClone.StartPoint = arcP1;\r\n lineExtend = ExtendType.Start;\r\n }\r\n else\r\n {\r\n lineClone.EndPoint = arcP1;\r\n lineExtend = ExtendType.End;\r\n }\r\n\r\n //裁剪圆弧\r\n let arcParam = arc.GetParamAtPoint(arcP2);\r\n let arcDerv = arc.GetFistDeriv(arcParam).normalize();\r\n let narcDerv = narc.GetFistDeriv(1).normalize();\r\n\r\n let arcExtend: ExtendType;\r\n if (equalv3(arcDerv, narcDerv))\r\n {\r\n arcClone.StartPoint = arcP2;\r\n arcExtend = ExtendType.Start;\r\n }\r\n else\r\n {\r\n arcClone.EndPoint = arcP2;\r\n arcExtend = ExtendType.End;\r\n }\r\n\r\n //先选直线为真\r\n if (enRes1.Entity === line)\r\n return {\r\n cu1: lineClone,\r\n cu1Extend: lineExtend,\r\n cu2: arcClone,\r\n cu2Extend: arcExtend,\r\n arc: narc\r\n };\r\n else\r\n return {\r\n cu1: arcClone,\r\n cu1Extend: arcExtend,\r\n cu2: lineClone,\r\n cu2Extend: lineExtend,\r\n arc: narc.Reverse()//#I3BWIA 避免起点和终点方向相反导致的多段线连接错误\r\n };\r\n }\r\n\r\n //获得两曲线的交点,并且排序交点.\r\n private GetIntersectAndSort(enRes: PromptEntityResult, enRes2: PromptEntityResult, enType: number, enMap: PromptEntityResult[][])\r\n {\r\n let interPts = enRes.Entity.IntersectWith(enRes2.Entity, IntersectOption.ExtendBoth);\r\n if (interPts.length > 1)\r\n {\r\n let baseP: Vector3;\r\n if (enType & 1) //如果有直线,那么用直线\r\n baseP = enMap[0][0].Point;\r\n else if (enType === 2) //如果都是圆弧,那么取中点\r\n baseP = midPoint(enMap[1][0].Point, enMap[1][1].Point);\r\n interPts.sort((p1, p2) => p1.distanceToSquared(baseP) - p2.distanceToSquared(baseP));\r\n }\r\n return interPts;\r\n }\r\n\r\n /**\r\n * 对图元列表进行按位编码,类型映射如下:\r\n * # 1:line 2:arc 4:polyline\r\n * @param enRes\r\n * @param enRes2\r\n * @returns\r\n */\r\n private EnCode(enRes: PromptEntityResult, enRes2: PromptEntityResult)\r\n {\r\n let enMap: (PromptEntityResult[])[] = [[], [], [], [], []];\r\n let enType = 0;\r\n enType |= Encode(enRes, enMap);\r\n enType |= Encode(enRes2, enMap);\r\n return { enType, enMap };\r\n }\r\n\r\n //计算曲线在相交处的切线,取真实的切线\r\n private ComputerDerv(cuRes: CurveExtend, dervSum: Vector3)\r\n {\r\n let derv: Vector3;\r\n let cu = cuRes.Curve;\r\n if (cuRes.ExtType === ExtendType.Start)\r\n {\r\n derv = cu.GetFistDeriv(0).normalize();\r\n dervSum.add(derv);\r\n }\r\n else\r\n {\r\n derv = cu.GetFistDeriv(cu.EndParam).normalize();\r\n dervSum.add(derv.clone().negate());\r\n }\r\n return derv;\r\n }\r\n\r\n // 计算曲线在相交处的切线,取起点到终点的切线.(当曲线相切时调用此方法.)\r\n private ComputerDerv2(cuRes: CurveExtend, dervSum: Vector3)\r\n {\r\n let cu = cuRes.Curve;\r\n let derv = cu.EndPoint.sub(cu.StartPoint);\r\n if (cuRes.ExtType === ExtendType.Start)\r\n dervSum.add(derv);\r\n else\r\n dervSum.add(derv.clone().negate());\r\n return derv;\r\n }\r\n\r\n // 延伸或者裁剪到指定的圆弧的点.\r\n private ExtendPt(cu: CurveExtend, newP: Vector3)\r\n {\r\n if (cu.ExtType === ExtendType.Start)\r\n cu.Curve.StartPoint = newP;\r\n else\r\n cu.Curve.EndPoint = newP;\r\n }\r\n\r\n /**\r\n * 切割或者延伸曲线,尖角化\r\n *\r\n * @param cu 处理的曲线\r\n * @param interPt 原先的相交点\r\n * @param pickPoint 鼠标点击点\r\n * @returns 返回新的曲线\r\n */\r\n private SplitCurve(enRes: PromptEntityResult, interPt: Vector3, interPts: Vector3[]): CurveExtend\r\n {\r\n let cu = enRes.Entity as Curve;\r\n let pickPoint = enRes.Point;\r\n\r\n let cp = cu.GetClosestPointTo(pickPoint, false);\r\n let cus = cu.GetSplitCurvesByPts([interPt]);\r\n if (cus.length === 0)\r\n cus.push(cu.Clone() as Curve);\r\n else if (cus.length === 2)\r\n cus.sort((c1: Curve, c2: Curve) =>\r\n {\r\n return c1.GetClosestPointTo(cp, false).distanceTo(cp)\r\n < c2.GetClosestPointTo(cp, false).distanceTo(cp) ? -1 : 1;\r\n });\r\n\r\n let exType = undefined;\r\n\r\n let newCu = cus[0];\r\n if (newCu instanceof Line || newCu.constructor.name === \"RoomWallLine\")\r\n newCu.Extend(newCu.GetParamAtPoint(interPt));//延伸到需要的长度\r\n else if (newCu instanceof Arc || newCu.constructor.name === \"RoomWallArc\")\r\n {\r\n let arc = newCu as Arc;\r\n if (cus.length === 1)\r\n if (!cu.PtOnCurve(interPt))\r\n {\r\n if (cu.PtOnCurve(interPts[1]))\r\n {\r\n //交点参数\r\n let iparam = arc.GetParamAtPoint(interPts[1]);\r\n let pickParam = arc.GetParamAtAngle(arc.GetAngleAtPoint(pickPoint));\r\n\r\n if (pickParam > iparam)\r\n {\r\n arc.EndAngle = arc.GetAngleAtPoint(interPt);\r\n exType = ExtendType.End;\r\n }\r\n else\r\n {\r\n arc.StartAngle = arc.GetAngleAtPoint(interPt);\r\n exType = ExtendType.Start;\r\n }\r\n }\r\n else\r\n {\r\n //终点,起点\r\n interPts = interPts.sort((p1, p2) =>\r\n {\r\n return arc.ComputeAnlge(arc.GetAngleAtPoint(p1)) - arc.ComputeAnlge(arc.GetAngleAtPoint(p2));\r\n });\r\n if (interPt === interPts[0])\r\n {\r\n arc.EndAngle = arc.GetAngleAtPoint(interPt);\r\n exType = ExtendType.End;\r\n }\r\n else\r\n {\r\n arc.StartAngle = arc.GetAngleAtPoint(interPt);\r\n exType = ExtendType.Start;\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (exType === undefined)\r\n {\r\n //使用equalv3时由于精度误差导致的判断错误\r\n if (interPt.manhattanDistanceTo(newCu.StartPoint) < interPt.manhattanDistanceTo(newCu.EndPoint))\r\n exType = ExtendType.Start;\r\n else\r\n exType = ExtendType.End;\r\n }\r\n return { Curve: newCu, ExtType: exType };\r\n }\r\n\r\n}\r\n","import { FilletUtils } from \"../../../Add-on/FilletUtils\";\r\nimport { UpdateDraw } from \"../../../Common/Status\";\r\nimport { FixIndex } from \"../../../Common/Utils\";\r\nimport { PromptEntityResult } from \"../../../Editor/PromptResult\";\r\nimport { Factory } from \"../../CADFactory\";\r\nimport { CADFiler } from \"../../CADFiler\";\r\nimport { Board, I2DModeling } from \"../../Entity/Board\";\r\nimport { Circle } from \"../../Entity/Circle\";\r\nimport { ExtrudeContourCurve, ExtrudeSolid } from \"../../Entity/Extrude\";\r\nimport { Polyline } from \"../../Entity/Polyline\";\r\nimport { ObjectId } from \"../../ObjectId\";\r\nimport { TemplateAction } from \"./TemplateAction\";\r\n\r\nexport interface IGrooveFillet\r\n{\r\n Index: number;\r\n ArcParams: number[];\r\n}\r\n\r\ninterface IFilletcActionData\r\n{\r\n Entity: ObjectId;\r\n ArcParams: number[];\r\n Grooves?: IGrooveFillet[];\r\n Path2D?: IGrooveFillet[];\r\n}\r\n\r\n@Factory\r\nexport class TemplateFilletAction extends TemplateAction\r\n{\r\n\r\n FilletDatas: IFilletcActionData[] = [];\r\n\r\n constructor()\r\n {\r\n super();\r\n }\r\n\r\n protected _Update(paramDiff: number, newValue: number)\r\n {\r\n for (let d of this.FilletDatas)\r\n {\r\n if (d.Entity?.IsErase !== false)\r\n continue;\r\n\r\n let br = d.Entity.Object as Board;\r\n let update_bak = br.AutoUpdate;\r\n br.AutoUpdate = false;\r\n if (d.ArcParams.length > 0)\r\n this.Fillet(br, newValue, d);\r\n\r\n if (br.Grooves.length > 0 && d.Grooves?.length)\r\n {\r\n for (let data of d.Grooves)\r\n {\r\n const groove = br.Grooves[data.Index];\r\n if (groove)\r\n this.Fillet(groove, newValue, data);\r\n }\r\n }\r\n\r\n const path2d = br.Modeling2D;\r\n if (path2d.length > 0 && d.Path2D?.length)\r\n {\r\n for (let data of d.Path2D)\r\n {\r\n let vm = path2d[data.Index];\r\n if (vm)\r\n {\r\n this.Fillet(vm, newValue, data);\r\n }\r\n }\r\n br._2D3DPathObject = null;\r\n }\r\n\r\n br.AutoUpdate = update_bak;\r\n br.Update(UpdateDraw.Geometry);\r\n }\r\n }\r\n private Fillet(br: ExtrudeSolid | I2DModeling, newValue: number, d: { ArcParams: number[]; })\r\n {\r\n let cu = br instanceof ExtrudeSolid ? br.ContourCurve : br.path;\r\n if (cu instanceof Circle)\r\n return;\r\n\r\n let fillet = new FilletUtils();\r\n fillet.FilletRadius = Math.max(newValue, 0.1);\r\n\r\n let cuOld = cu as Polyline;\r\n for (let arcParam of d.ArcParams)\r\n {\r\n let param1 = FixIndex(arcParam - 1, cu.EndParam);\r\n let param2 = FixIndex(arcParam + 1, cu.EndParam);\r\n let p1 = cu.GetPointAtParam(param1);\r\n let p2 = cu.GetPointAtParam(param2);\r\n\r\n let res1 = new PromptEntityResult(cu, p1);\r\n let res2 = new PromptEntityResult(cu, p2);\r\n\r\n let fres = fillet.FilletPolyLineSelf(res1, res2);\r\n if (fres)\r\n cu = fres.cu1 as ExtrudeContourCurve;\r\n }\r\n\r\n if (br instanceof ExtrudeSolid)\r\n {\r\n if (cu !== cuOld)\r\n br.ContourCurve = cu;\r\n }\r\n else\r\n {\r\n if (cu !== cuOld)\r\n br.path = cu as Polyline;\r\n }\r\n }\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 super.ReadFile(file);\r\n this.FilletDatas.length = 0;\r\n if (ver === 1)\r\n {\r\n let id = file.ReadObjectId();\r\n let param1 = file.Read();\r\n let param2 = file.Read();\r\n let arcParam: number = param2 !== 0 ? param2 - 1 : param1 + 1;\r\n this.FilletDatas.push({ Entity: id, ArcParams: [arcParam] });\r\n }\r\n else\r\n {\r\n let count = file.Read();\r\n for (let i = 0; i < count; i++)\r\n {\r\n let id = file.ReadObjectId();\r\n let params: number[] = [];\r\n let parCount = file.Read();\r\n for (let i = 0; i < parCount; i++)\r\n params.push(file.Read());\r\n\r\n const groove = [];\r\n const path2d = [];\r\n if (ver >= 3)\r\n {\r\n const grooveCount = file.Read();\r\n for (let i = 0; i < grooveCount; i++)\r\n {\r\n let data: IGrooveFillet = {\r\n Index: undefined,\r\n ArcParams: [],\r\n };\r\n data.Index = file.Read();\r\n let parCount = file.Read();\r\n for (let j = 0; j < parCount; j++)\r\n data.ArcParams.push(file.Read());\r\n groove.push(data);\r\n }\r\n\r\n const path2DCount = file.Read();\r\n for (let i = 0; i < path2DCount; i++)\r\n {\r\n let data: IGrooveFillet = {\r\n Index: undefined,\r\n ArcParams: [],\r\n };\r\n data.Index = file.Read();\r\n let parCount = file.Read();\r\n for (let j = 0; j < parCount; j++)\r\n data.ArcParams.push(file.Read());\r\n path2d.push(data);\r\n }\r\n }\r\n\r\n if (id)\r\n this.FilletDatas.push({ Entity: id, ArcParams: params, Grooves: groove, Path2D: path2d });\r\n }\r\n }\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(3);\r\n super.WriteFile(file);\r\n file.Write(this.FilletDatas.length);\r\n for (let d of this.FilletDatas)\r\n {\r\n file.WriteObjectId(d.Entity);\r\n file.Write(d.ArcParams.length);\r\n for (let param of d.ArcParams)\r\n file.Write(param);\r\n\r\n file.Write(d.Grooves ? d.Grooves.length : 0);\r\n for (let data of (d.Grooves ?? []))\r\n {\r\n file.Write(data.Index);\r\n file.Write(data.ArcParams.length);\r\n for (let par of data.ArcParams)\r\n file.Write(par);\r\n }\r\n file.Write(d.Path2D ? d.Path2D.length : 0);\r\n for (let data of (d.Path2D ?? []))\r\n {\r\n file.Write(data.Index);\r\n file.Write(data.ArcParams.length);\r\n for (let par of data.ArcParams)\r\n file.Write(par);\r\n }\r\n }\r\n }\r\n}\r\n","import { EBoardKeyList } from '../../Common/BoardKeyList';\r\nimport { Board } from '../../DatabaseServices/Entity/Board';\r\nimport { PhysicalMaterialRecord } from '../../DatabaseServices/PhysicalMaterialRecord';\r\n\r\n\r\nexport function ApplyGoodInfo(en: Board, material: PhysicalMaterialRecord)\r\n{\r\n en.BoardProcessOption[EBoardKeyList.BrMat] = material.GoodsInfo.name;\r\n en.BoardProcessOption[EBoardKeyList.Color] = material.GoodsInfo.color;\r\n en.BoardProcessOption[EBoardKeyList.Mat] = material.GoodsInfo.material;\r\n}\r\n","import { ApplyGoodInfo } from \"../../../UI/Components/ApplyGoodInfo\";\r\nimport { Factory } from \"../../CADFactory\";\r\nimport { CADFiler } from \"../../CADFiler\";\r\nimport { Board } from \"../../Entity/Board\";\r\nimport { Entity } from \"../../Entity/Entity\";\r\nimport { HardwareCompositeEntity } from \"../../Hardware/HardwareCompositeEntity\";\r\nimport { ObjectId } from \"../../ObjectId\";\r\nimport { TemplateAction } from \"./TemplateAction\";\r\n\r\n@Factory\r\nexport class TemplateMaterialAction extends TemplateAction\r\n{\r\n\r\n constructor(\r\n public Entitys: ObjectId[] = [],\r\n public CompositeEntitys: [ObjectId, number[]][] = [],\r\n public ApplyGoodInfo = true,//应用板材信息\r\n )\r\n {\r\n super();\r\n }\r\n\r\n protected override _Update(paramDiff: number)\r\n {\r\n if (!this.parent.MaterialValue) return;\r\n\r\n for (let id of this.Entitys)\r\n {\r\n if (!(id?.Object) || id.IsErase) continue;\r\n\r\n let en = id.Object;\r\n if (this.ApplyGoodInfo && en instanceof Board)\r\n ApplyGoodInfo(en, this.parent.MaterialValue);\r\n\r\n en.Material = this.parent.MaterialValue.Id;\r\n }\r\n\r\n for (let [id, indexs] of this.CompositeEntitys)\r\n {\r\n if (!(id?.Object) || id.IsErase) continue;\r\n\r\n let en = id.Object as HardwareCompositeEntity;\r\n\r\n let allEntitys: Entity[] = [];\r\n const GetAllEntitys = (hard: HardwareCompositeEntity) =>\r\n {\r\n for (let e of hard.Entitys)\r\n {\r\n if (e instanceof HardwareCompositeEntity)\r\n GetAllEntitys(e);\r\n else\r\n allEntitys.push(e);\r\n }\r\n };\r\n\r\n GetAllEntitys(en);\r\n\r\n for (let index of indexs)\r\n {\r\n let subE = allEntitys[index];\r\n if (!subE) continue;\r\n\r\n if (this.ApplyGoodInfo && subE instanceof Board)\r\n ApplyGoodInfo(subE, this.parent.MaterialValue);\r\n\r\n subE.Material = this.parent.MaterialValue.Id;\r\n }\r\n }\r\n }\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 super.ReadFile(file);\r\n this.ApplyGoodInfo = file.Read() === 1;\r\n this.Entitys.length = 0;\r\n let count = file.Read();\r\n for (let i = 0; i < count; i++)\r\n {\r\n let id = file.ReadObjectId() as ObjectId;\r\n if (id) this.Entitys.push(id);\r\n }\r\n\r\n if (ver > 1)\r\n {\r\n count = file.Read();\r\n this.CompositeEntitys.length = 0;\r\n for (let i = 0; i < count; i++)\r\n {\r\n let id = file.ReadObjectId() as ObjectId;\r\n let indexs = file.Read();\r\n this.CompositeEntitys.push([id, indexs]);\r\n }\r\n }\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(2);\r\n super.WriteFile(file);\r\n file.Write(this.ApplyGoodInfo ? 1 : 0);\r\n file.Write(this.Entitys.length);\r\n for (let ent of this.Entitys)\r\n file.WriteObjectId(ent);\r\n\r\n file.Write(this.CompositeEntitys.length);\r\n for (let [id, indexs] of this.CompositeEntitys)\r\n {\r\n file.WriteObjectId(id);\r\n file.Write(indexs.concat());\r\n }\r\n }\r\n}\r\n","\r\n/**\r\n * 模版参数类型\r\n */\r\nexport enum TemplateParamType\r\n{\r\n String = 0,\r\n Float = 1,\r\n Int = 2,\r\n Enum = 3,\r\n Material = 4,\r\n}\r\n","import { eval2 } from \"../../../Common/eval\";\r\nimport { equaln } from \"../../../Geometry/GeUtils\";\r\nimport { AutoRecord, ISPROXYKEY } from \"../../AutoRecord\";\r\nimport { Factory } from \"../../CADFactory\";\r\nimport { CADFiler } from \"../../CADFiler\";\r\nimport { PhysicalMaterialRecord } from \"../../PhysicalMaterialRecord\";\r\nimport { TemplateAction } from \"../Action/TemplateAction\";\r\nimport { TemplateFilletAction } from \"../Action/TemplateFilletAction\";\r\nimport { TemplateMaterialAction } from \"../Action/TemplateMaterialAction\";\r\nimport { TemplateRecord } from \"../TemplateRecord\";\r\nimport { TemplateParamType } from \"./TemplateParamType\";\r\n\r\n/**\r\n * 模版参数\r\n */\r\n@Factory\r\nexport class TemplateParam\r\n{\r\n /**\r\n * 变量名称\r\n * 命名规范(同js) 并且 禁止前缀`_`,`$`.\r\n */\r\n @AutoRecord name: string;\r\n /** 表达式 使用js引起求值(暂时) */\r\n @AutoRecord expr: string | number = \"\";\r\n /**\r\n * 设置参数的值,通常在模版设计中可以这么干\r\n * 如果需要更新参数的动作,那么应该调用 UpdateParam\r\n */\r\n @AutoRecord value: string | number;\r\n @AutoRecord default: string | number;\r\n @AutoRecord description: string;\r\n @AutoRecord type: TemplateParamType = TemplateParamType.Float;\r\n @AutoRecord min: number;\r\n @AutoRecord max: number;\r\n //可选值\r\n @AutoRecord option: any[];\r\n @AutoRecord actions: TemplateAction[];\r\n @AutoRecord parent: TemplateRecord;\r\n @AutoRecord isLock = false;\r\n\r\n //当类型为Material时,从酷家乐导入后,将载入材质赋值在这里\r\n MaterialValue: PhysicalMaterialRecord;\r\n\r\n constructor()\r\n {\r\n //监听\r\n this.actions = 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 if (value instanceof TemplateAction)\r\n value.parent = this;\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 else\r\n return Reflect.get(target, key, receiver);\r\n }\r\n });\r\n }\r\n WriteAllObjectRecord()\r\n {\r\n if (this.parent)\r\n this.parent.WriteAllObjectRecord();\r\n }\r\n\r\n /**\r\n * private:仅供内部调用.\r\n * 更新参数值,并且触发动作.\r\n */\r\n UpdateParam(value: string | number)\r\n {\r\n switch (this.type)\r\n {\r\n case TemplateParamType.String:\r\n break;\r\n case TemplateParamType.Float:\r\n let oldV = this.value as number;\r\n let newV = value as number;\r\n if (!equaln(oldV, newV))\r\n {\r\n this.WriteAllObjectRecord();\r\n this.value = newV;\r\n\r\n let diff = newV - oldV;\r\n for (let a of this.actions)\r\n a.Update(diff, newV);\r\n }\r\n else\r\n {\r\n for (let a of this.actions)\r\n {\r\n if (a instanceof TemplateFilletAction)\r\n a.Update(0, newV);\r\n }\r\n }\r\n break;\r\n case TemplateParamType.Int:\r\n break;\r\n case TemplateParamType.Enum:\r\n break;\r\n case TemplateParamType.Material:\r\n {\r\n if (this.MaterialValue)\r\n {\r\n for (let a of this.actions)\r\n a.Update(0, 0);\r\n }\r\n this.MaterialValue = undefined;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * 计算表达式的值并更新\r\n * @param vardefines 变量定义列表\r\n * @param paramMap 所有的参数列表.(可能我们需要依赖更新它)\r\n */\r\n EvalUpdate(vardefines: Object, paramMap: Map, evaled: Set, update = true): number\r\n {\r\n if (this.type === TemplateParamType.Material)\r\n {\r\n if (update && this.MaterialValue)\r\n {\r\n for (let a of this.actions)\r\n {\r\n if (a instanceof TemplateMaterialAction)\r\n a.Update(0, this.value);\r\n }\r\n this.MaterialValue = undefined;\r\n }\r\n return 0;\r\n }\r\n\r\n if (this.expr === \"\")\r\n {\r\n if (update)\r\n {\r\n for (let a of this.actions)\r\n {\r\n if (a instanceof TemplateFilletAction)\r\n a.Update(0, this.value);\r\n }\r\n }\r\n return this.value as number;\r\n }\r\n if (evaled.has(this)) return this.value as number;\r\n\r\n if (update)\r\n evaled.add(this);\r\n\r\n let value = parseFloat(this.expr as string);\r\n if (isNaN(this.expr as number))\r\n {\r\n //依赖收集 提前更新\r\n let keywords = (this.expr).split(/[\\s(){}=+-/*/,%;]/).filter(s => s.length > 0);\r\n for (let key of keywords)\r\n {\r\n if (key !== this.name && paramMap.has(key))\r\n vardefines[key] = paramMap.get(key).EvalUpdate(vardefines, paramMap, evaled, update);\r\n }\r\n\r\n try\r\n {\r\n value = eval2(this.expr as string, vardefines);\r\n }\r\n catch (error)\r\n {\r\n console.log(\"更新失败:\", error);\r\n return this.value as number;\r\n }\r\n }\r\n else if (update)\r\n this.expr = \"\";\r\n\r\n vardefines[this.name] = value;\r\n\r\n if (update)\r\n this.UpdateParam(value);\r\n\r\n return value;\r\n }\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 this.name = file.Read();\r\n this.expr = file.Read();\r\n this.value = file.Read();\r\n this.default = file.Read();\r\n this.description = file.Read();\r\n this.type = file.Read();\r\n this.min = file.Read();\r\n this.max = file.Read();\r\n this.option = file.Read();\r\n let count = file.Read();\r\n this.actions.length = 0;\r\n for (let i = 0; i < count; i++)\r\n this.actions.push(file.ReadObject());\r\n\r\n if (ver > 1)\r\n this.isLock = file.Read();\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(2);\r\n file.Write(this.name);\r\n file.Write(this.expr);\r\n file.Write(this.value);\r\n file.Write(this.default);\r\n file.Write(this.description);\r\n file.Write(this.type);\r\n file.Write(this.min);\r\n file.Write(this.max);\r\n file.Write(this.option);\r\n file.Write(this.actions.length);\r\n for (let action of this.actions)\r\n file.WriteObject(action);\r\n\r\n file.Write(this.isLock);\r\n }\r\n}\r\n","import { Ray, Vector3 } from \"three\";\r\nimport { arrayLast } from \"../../Common/ArrayExt\";\r\nimport { ConverBoardTypeToSpaceType } from \"../../DatabaseServices/Entity/Board\";\r\nimport { PromptDistendResult, PromptStatus } from \"../../Editor/PromptResult\";\r\nimport { BoardType } from \"../../UI/Store/BoardInterface\";\r\nimport { Box3Ext, SplitType } from \"../Box\";\r\nimport { ISpaceParse } from \"./ISpaceParse\";\r\n\r\n/**\r\n * 夹层空间分析\r\n */\r\nexport class ClampSpaceParse extends ISpaceParse\r\n{\r\n async Parse()\r\n {\r\n if (this.Boards.length === 1)\r\n {\r\n await this.ParseSignalBoard();\r\n return;\r\n }\r\n\r\n //夹层空间\r\n let clampBoxs: Box3Ext[] = [];\r\n //单层空间(用于切割)\r\n let spliteBoxs = new Map();\r\n for (let [boardType, boards] of this.BoardMap)\r\n {\r\n let splitType: SplitType = ConverBoardTypeToSpaceType(boardType);\r\n let boardBoxCol = this.ParseBoardBox(boards, splitType);\r\n\r\n //#IWFYY\r\n if (boardType === BoardType.Behind && this.BoardMap.size > 1 && boardBoxCol.length > 1)\r\n {\r\n let clampBox = boardBoxCol[0].clampSpace(boardBoxCol[1], splitType);\r\n let size = clampBox.getSize(new Vector3());\r\n if (size.y > 2440)\r\n boardBoxCol = [arrayLast(boardBoxCol)];\r\n }\r\n\r\n if (boardBoxCol.length > 1)\r\n {\r\n let clampBox = boardBoxCol[0].clampSpace(arrayLast(boardBoxCol), splitType);\r\n if (clampBox.isSolid())\r\n clampBoxs.push(clampBox);\r\n }\r\n else if (boardBoxCol.length === 1)\r\n {\r\n spliteBoxs.set(splitType, boardBoxCol[0]);\r\n }\r\n }\r\n\r\n //归并盒子\r\n let allSpaceBox: Box3Ext;\r\n if (clampBoxs.length === 0)//如果不存在盒子,拿所有的盒子当空间\r\n {\r\n allSpaceBox = new Box3Ext();\r\n spliteBoxs.forEach((box) => { allSpaceBox.union(box); });\r\n }\r\n else//夹层空间合并\r\n {\r\n allSpaceBox = clampBoxs[0];\r\n for (let i = 1, len = clampBoxs.length; i < len; i++)\r\n allSpaceBox.intersect(clampBoxs[i]);\r\n }\r\n\r\n //切割并选择合适的空间\r\n await this.SpliteBoxsAndSelect(allSpaceBox, spliteBoxs);\r\n if (this.SpaceBox && this.SpaceBox.isSolid())\r\n {\r\n //空间延伸到背板\r\n let behindBox = spliteBoxs.get(SplitType.Y);\r\n if (behindBox && behindBox.min.y > this.SpaceBox.min.y)\r\n this.SpaceBox.max.setY(behindBox.min.y);\r\n\r\n this.ParseOK = true;\r\n }\r\n }\r\n\r\n /**\r\n * 单板延伸空间的时候的延伸距离\r\n */\r\n get SignalDist()\r\n {\r\n return this._signalDist;\r\n }\r\n protected _signalDist: number;\r\n\r\n async ParseSignalBoard()\r\n {\r\n let res = await this.GetSignalDist();\r\n if (res.Status === PromptStatus.OK && res.Distance > 0)\r\n {\r\n let dist = res.Distance;\r\n this._signalDist = dist;\r\n\r\n let br = this.Boards[0];\r\n let box = br.GetBoundingBoxInMtx(this.SpaceOCSInv);\r\n\r\n let type = this.GetBoardInSpaceType(br);\r\n if (type === undefined)//暂时不支持斜空间\r\n {\r\n //暂时不支持\r\n this.ParseOK = false;\r\n return;\r\n }\r\n\r\n let splitType: SplitType = ConverBoardTypeToSpaceType(type);\r\n\r\n let p1 = box.min.clone().setComponent(splitType, box.min.getComponent(splitType) - dist);\r\n let p2 = box.max.clone().setComponent(splitType, box.min.getComponent(splitType));\r\n\r\n let p3 = box.min.clone().setComponent(splitType, box.max.getComponent(splitType));\r\n let p4 = box.max.clone().setComponent(splitType, box.max.getComponent(splitType) + dist);\r\n\r\n let boxs = [new Box3Ext().setFromPoints([p1, p2]), new Box3Ext().setFromPoints([p3, p4])];\r\n\r\n this.SpaceBox = await this.WrapSelectBox(boxs, ConverBoardTypeToSpaceType(br.BoardType));\r\n\r\n if (this.SpaceBox)\r\n this.ParseOK = true;\r\n }\r\n else\r\n this.ParseOK = false;\r\n }\r\n\r\n //virtual (请重载) 指定用户选择单块板的延伸空间\r\n async GetSignalDist(): Promise\r\n {\r\n let res = new PromptDistendResult();\r\n res.Distance = 300;\r\n res.Status = PromptStatus.OK;\r\n return res;\r\n }\r\n\r\n SetRay(ray: Ray)\r\n {\r\n }\r\n\r\n SelectBoxRecord = new Map();\r\n async WrapSelectBox(splitBoxs: Box3Ext[], splitType: SplitType): Promise\r\n {\r\n let box = await this.SelectBox(splitBoxs, splitType);\r\n this.SelectBoxRecord.set(splitType, splitBoxs.indexOf(box));\r\n return box;\r\n }\r\n\r\n /**\r\n * virtual (请重载) 当盒子空间被切割时,选择合适的空间\r\n * @param splitBoxs 切割后的盒子(2个)\r\n * @param splitType 切割类型\r\n * @returns box 盒子\r\n */\r\n async SelectBox(splitBoxs: Box3Ext[], splitType: SplitType): Promise\r\n {\r\n return splitBoxs[0];\r\n }\r\n\r\n /**\r\n *用单块板包围盒切割空间\r\n */\r\n private async SpliteBoxsAndSelect(orgBox: Box3Ext, spliteBoxes: Map)\r\n {\r\n this.SpaceBox = undefined;\r\n if (spliteBoxes.size === 0)\r\n {\r\n this.SpaceBox = orgBox;\r\n return;\r\n }\r\n\r\n for (let [splitType, spBox] of spliteBoxes)\r\n {\r\n let remBoxs: Box3Ext[] = orgBox.substract(spBox, splitType);\r\n if (remBoxs.length === 0)\r\n return undefined;\r\n else if (remBoxs.length === 1)\r\n {\r\n //#IZE2N\r\n if (splitType === SplitType.Y && remBoxs[0].min.y === orgBox.min.y)\r\n continue;\r\n orgBox = remBoxs[0];\r\n }\r\n else\r\n orgBox = await this.WrapSelectBox(remBoxs, splitType);\r\n\r\n if (!orgBox)\r\n return;\r\n\r\n //Left Or Right Board\r\n if (splitType === SplitType.X)\r\n {\r\n if (spBox.min.x < orgBox.min.x)\r\n this.LeftBoard = this.BoardMap.get(BoardType.Vertical)[0];\r\n else\r\n this.RightBoard = this.BoardMap.get(BoardType.Vertical)[0];\r\n }\r\n }\r\n this.SpaceBox = orgBox;\r\n }\r\n}\r\n","import { ClampSpaceParse } from \"./ClampSpaceParse\";\r\nimport { PromptDistendResult, PromptStatus } from \"../../Editor/PromptResult\";\r\nimport { Box3Ext, SplitType } from \"../Box\";\r\n\r\nexport class ClampSpaceParseFix extends ClampSpaceParse\r\n{\r\n set SignalDist(v: number)\r\n {\r\n this._signalDist = v;\r\n }\r\n get SignalDist()\r\n {\r\n return this._signalDist;\r\n }\r\n\r\n //virtual (请重载) 指定用户选择单块板的延伸空间\r\n async GetSignalDist(): Promise\r\n {\r\n let res = new PromptDistendResult();\r\n res.Distance = this._signalDist;\r\n res.Status = PromptStatus.OK;\r\n return res;\r\n }\r\n\r\n async SelectBox(splitBoxs: Box3Ext[], splitType: SplitType): Promise\r\n {\r\n let index = this.SelectBoxRecord.get(splitType);\r\n return splitBoxs[index];\r\n }\r\n}\r\n","import { Matrix4, Vector3 } from \"three\";\r\nimport { Factory } from \"../../CADFactory\";\r\nimport { CADFiler } from \"../../CADFiler\";\r\nimport { ISerialize } from \"../../ISerialize\";\r\nimport { ObjectId } from \"../../ObjectId\";\r\nimport { TemplateRecord } from \"../TemplateRecord\";\r\n\r\nexport interface PositioningParam\r\n{\r\n objects?: ObjectId[];\r\n index?: number;\r\n count?: number;\r\n}\r\n\r\n\r\n/**\r\n * 模版定位信息(基类)\r\n */\r\n@Factory\r\nexport abstract class Positioning implements ISerialize\r\n{\r\n SpaceCS: Matrix4;//空间坐标系\r\n SpaceSize: Vector3;//有可能不存在\r\n\r\n /**\r\n * 定位 (更新 SpaceCS SpaceBox SpaceSize)\r\n */\r\n async Positioning(param?: PositioningParam)\r\n {\r\n }\r\n\r\n //#region file\r\n parent: TemplateRecord;\r\n WriteAllObjectRecord()\r\n {\r\n if (this.parent)\r\n this.parent.WriteAllObjectRecord();\r\n }\r\n\r\n ReadFile(file: CADFiler): void\r\n {\r\n\r\n }\r\n\r\n WriteFile(file: CADFiler): void\r\n {\r\n }\r\n //#endregion\r\n}\r\n","import { arrayClone } from \"../../../Common/ArrayExt\";\r\nimport { Log } from \"../../../Common/Log\";\r\nimport { ClampSpaceParse } from \"../../../Geometry/SpaceParse/ClampSpaceParse\";\r\nimport { ClampSpaceParseFix } from \"../../../Geometry/SpaceParse/ClampSpaceParseFix\";\r\nimport { AutoRecord } from \"../../AutoRecord\";\r\nimport { Factory } from \"../../CADFactory\";\r\nimport { CADFiler } from \"../../CADFiler\";\r\nimport { Board } from \"../../Entity/Board\";\r\nimport { ObjectId } from \"../../ObjectId\";\r\nimport { Positioning, PositioningParam } from \"./Positioning\";\r\n\r\n@Factory\r\nexport class PositioningClampSpace extends Positioning\r\n{\r\n @AutoRecord Objects: ObjectId[] = [];\r\n\r\n //按照 SplitType进行排序 0X 1Y 2Z\r\n @AutoRecord SelectBoxIndex: number[] = [0, 0, 0];//左右下\r\n @AutoRecord SignalDist = 100;//默认为100 防止空\r\n\r\n FromSpaceParse(parse: ClampSpaceParse)\r\n {\r\n this.SignalDist = parse.SignalDist || 100;\r\n this.Objects = parse.Boards.map(br => br.Id);\r\n for (let [splitType, index] of parse.SelectBoxRecord)\r\n this.SelectBoxIndex[splitType] = index;\r\n }\r\n\r\n _SpaceParse: ClampSpaceParseFix;\r\n /**\r\n * 定位\r\n */\r\n async Positioning(param?: PositioningParam)\r\n {\r\n let brs = this.Objects.filter(id => !id.IsErase).map(id => id.Object as Board);\r\n this._SpaceParse = new ClampSpaceParseFix(brs);\r\n for (let i = 0; i < 3; i++)\r\n this._SpaceParse.SelectBoxRecord.set(i, this.SelectBoxIndex[i]);\r\n\r\n this._SpaceParse.SignalDist = this.SignalDist;\r\n\r\n await this._SpaceParse.Parse();\r\n if (this._SpaceParse.ParseOK)\r\n {\r\n this.SpaceCS = this._SpaceParse.DrawCS;\r\n this.SpaceSize = this._SpaceParse.Size;\r\n }\r\n else\r\n {\r\n this.SpaceCS = undefined;\r\n this.SpaceSize = undefined;\r\n Log(\"模块定位错误!\");\r\n }\r\n }\r\n\r\n\r\n //#region File\r\n ReadFile(file: CADFiler): void\r\n {\r\n let ver = file.Read();\r\n let count = file.Read() as number;\r\n this.Objects.length = 0;\r\n for (let i = 0; i < count; i++)\r\n {\r\n let id = file.ReadObjectId();\r\n if (id) this.Objects.push(id);\r\n }\r\n\r\n this.SelectBoxIndex = file.Read();\r\n this.SignalDist = file.Read();\r\n }\r\n\r\n WriteFile(file: CADFiler): void\r\n {\r\n file.Write(1);\r\n file.Write(this.Objects.length);\r\n for (let id of this.Objects)\r\n file.WriteObjectId(id);\r\n\r\n file.Write(arrayClone(this.SelectBoxIndex));\r\n file.Write(this.SignalDist);\r\n }\r\n //#endregion\r\n\r\n}\r\n","import { Positioning } from \"./Positioning\";\r\nimport { Factory } from \"../../CADFactory\";\r\n\r\n/**\r\n * 临时定位\r\n * 在首次绘制时使用2点3点空间时通常不能使用定位,使用临时定位设置给模块后,模块在第一次使用后清空定位.\r\n */\r\n@Factory\r\nexport class PositioningTemporary extends Positioning\r\n{\r\n\r\n}\r\n","\r\n/**\r\n * 模版类型\r\n */\r\nexport enum TemplateType\r\n{\r\n //普通模板\r\n Usual = 0,\r\n //酒格 使用程序\r\n Grid = 1,\r\n //阵列模版\r\n Array = 2,\r\n //没有实体的\r\n Clear = 4,\r\n //展开的\r\n Expanded = 8,\r\n //隐藏的\r\n Hidden = 16,\r\n HiddenChildren = 32,\r\n //标记\r\n Sign = 64,\r\n}\r\n\r\nexport enum TemplateSplitType\r\n{\r\n None = -1,\r\n X = 0,\r\n Y = 1,\r\n Z = 2,\r\n}\r\n","import { Box3, MathUtils, Matrix4, Vector3 } from \"three\";\r\nimport { arrayRemoveOnce } from \"../../Common/ArrayExt\";\r\nimport { Log } from \"../../Common/Log\";\r\nimport { Intent, Toaster } from \"../../Common/Toaster\";\r\nimport { Box3Ext } from \"../../Geometry/Box\";\r\nimport { ISpaceParse } from \"../../Geometry/SpaceParse/ISpaceParse\";\r\nimport { AutoRecord } from \"../AutoRecord\";\r\nimport { Factory } from \"../CADFactory\";\r\nimport { CADFiler } from \"../CADFiler\";\r\nimport { Board } from \"../Entity/Board\";\r\nimport { Entity } from \"../Entity/Entity\";\r\nimport { ObjectId } from \"../ObjectId\";\r\nimport { SymbolTableRecord } from \"../SymbolTableRecord\";\r\nimport { TemplateParam } from \"./Param/TemplateParam\";\r\nimport { TemplateParamType } from \"./Param/TemplateParamType\";\r\nimport { Positioning } from \"./Positioning/Positioning\";\r\nimport { PositioningClampSpace } from \"./Positioning/PositioningClampSpace\";\r\nimport { PositioningTemporary } from \"./Positioning/PositioningTemporary\";\r\nimport { TemplateSplitType, TemplateType } from \"./TemplateType\";\r\n\r\nconst TemplateDefaultParams = [\"L\", \"W\", \"H\", \"PX\", \"PY\", \"PZ\", \"RX\", \"RY\", \"RZ\", \"BH\"];\r\nexport const TempateDefaultParamCount = TemplateDefaultParams.length;\r\n\r\n/**\r\n * ### 模板记录\r\n * 模版与实体总是互相关联的,所以添加实体进入模版的时候,应该保证这个记录已经加入到数据库\r\n *\r\n * 保留参数名称列表: L W H RX RY RZ X Y Z\r\n * 保留参数前缀: _ $\r\n *\r\n * #### 批量修改参数值.\r\n * 程序应该只传入expr的值,(禁止直接编辑value).传入后,交由模版进行计算更新.\r\n * 模版内部消化,决定是否保留expr.(当纯数字将被直接计算成value而不保存expr).\r\n *\r\n * 由于`DIV`变量的计算机制,`LWH`变量将不能依赖同层变量,(这可能会导致一些错误)\r\n *\r\n * 当模块节点处于切割空间内时,如果想重新绑定空间,那么空间树的位置将发生变更(实际上不管是不是在切割空间内,空间位置都可能发生变更)\r\n *\r\n */\r\n@Factory\r\nexport class TemplateRecord extends SymbolTableRecord\r\n{\r\n @AutoRecord Type: TemplateType = TemplateType.Usual;\r\n @AutoRecord SplitType = TemplateSplitType.None;\r\n private _Parent: ObjectId;\r\n @AutoRecord Children: ObjectId[];\r\n @AutoRecord Params: TemplateParam[];\r\n @AutoRecord Objects: ObjectId[];\r\n private _Positioning: Positioning;\r\n\r\n //展开的 这是UI数据我们暂时不序列化它(默认不展开有比较好的显示效果)\r\n isExpanded = false;\r\n\r\n constructor()\r\n {\r\n super();\r\n //监听\r\n this.Params = this.CreateProxyArray(\r\n value =>\r\n {\r\n if (value instanceof TemplateParam)\r\n value.parent = this;\r\n }\r\n );\r\n\r\n this.Objects = this.CreateProxyArray(\r\n value =>\r\n {\r\n if (value instanceof ObjectId && value.Object instanceof Entity)\r\n {\r\n if (!this.Id)\r\n console.warn(\"请先将模版添加到Database后在进行操作!\");\r\n value.Object.Template = this.Id;\r\n }\r\n }\r\n );\r\n\r\n this.Children = this.CreateProxyArray(\r\n value =>\r\n {\r\n if (value instanceof ObjectId && value.Object instanceof TemplateRecord)\r\n {\r\n if (!this.Id)\r\n console.warn(\"请先将模版添加到Database后在进行操作!\");\r\n value.Object.Parent = this.Id;\r\n }\r\n }\r\n );\r\n }\r\n\r\n get Name()\r\n {\r\n return this.name;\r\n }\r\n set Name(name: string)\r\n {\r\n if (name !== this.name)\r\n {\r\n this.WriteAllObjectRecord();\r\n this.name = name;\r\n }\r\n }\r\n\r\n get Parent()\r\n {\r\n return this._Parent;\r\n }\r\n\r\n set Parent(id: ObjectId)\r\n {\r\n if (id !== this._Parent)\r\n {\r\n this.WriteAllObjectRecord();\r\n if (this?._Parent?.Object)\r\n arrayRemoveOnce(((this.Parent.Object)).Children, this.Id);\r\n this._Parent = id;\r\n }\r\n }\r\n\r\n get Root(): TemplateRecord\r\n {\r\n return (this.Parent?.Object)?.Root ?? this;\r\n }\r\n\r\n get IsRoot()\r\n {\r\n return this._Parent === undefined;\r\n }\r\n\r\n get Entitys()\r\n {\r\n return this.Objects.map(o => o.Object as Entity);\r\n }\r\n\r\n get AllEntitys(): Entity[]\r\n {\r\n let entitys: Entity[] = [];\r\n this.Traverse((t) =>\r\n {\r\n for (let o of t.Objects)\r\n {\r\n if (!o.IsErase)\r\n entitys.push(o.Object as Entity);\r\n }\r\n });\r\n return entitys;\r\n }\r\n\r\n GetProperty(p: TemplateType): boolean { return (this.Type & p) !== 0; }\r\n SetProperty(p: TemplateType, v: boolean)\r\n {\r\n if (this.GetProperty(p) === v) return;\r\n if (v)\r\n this.Type |= p;\r\n else\r\n this.Type &= ~p;\r\n }\r\n\r\n get IsClear() { return this.GetProperty(TemplateType.Clear); }\r\n set IsClear(isClear: boolean) { this.SetProperty(TemplateType.Clear, isClear); }\r\n get IsSign() { return this.GetProperty(TemplateType.Sign); }\r\n set IsSign(isSign: boolean) { this.SetProperty(TemplateType.Sign, isSign); }\r\n\r\n get IsHidden() { return this.GetProperty(TemplateType.Hidden); }\r\n set IsHidden(isHidden: boolean) { this.SetProperty(TemplateType.Hidden, isHidden); }\r\n\r\n get IsHiddenChildren() { return this.GetProperty(TemplateType.HiddenChildren); }\r\n set IsHiddenChildren(isHidden: boolean) { this.SetProperty(TemplateType.HiddenChildren, isHidden); }\r\n\r\n Purge()\r\n {\r\n this.Children = this.Children.filter(rc => rc && !rc.IsErase && rc.Object instanceof TemplateRecord);\r\n this.Objects = this.Objects.filter(id => id?.IsErase === false);\r\n }\r\n\r\n Traverse(callback: (arg0: this) => void)\r\n {\r\n callback(this);\r\n for (let c of this.Children)\r\n {\r\n if (c && c.Object)\r\n {\r\n if (c.Object instanceof TemplateRecord)\r\n {\r\n let template = c.Object as TemplateRecord;\r\n template.Traverse(callback);\r\n }\r\n else\r\n {\r\n Toaster({\r\n message: \"模块子实体有个错误,程序已经暂时先忽略了这个错误!\",\r\n timeout: 8000,\r\n intent: Intent.DANGER,\r\n });\r\n }\r\n }\r\n }\r\n }\r\n async TraverseAsync(callback: (arg0: this) => Promise)\r\n {\r\n await callback(this);\r\n for (let c of this.Children)\r\n {\r\n if (c && c.Object)\r\n {\r\n let template = c.Object as TemplateRecord;\r\n await template.TraverseAsync(callback);\r\n }\r\n }\r\n }\r\n\r\n private _NodeDepthCache: number;\r\n /** 节点深度,根节点=0 */\r\n get NodeDepth()\r\n {\r\n if (this._NodeDepthCache !== undefined)\r\n return this._NodeDepthCache;\r\n\r\n if (!this.Parent?.Object) return 0;\r\n\r\n let parentTemplate = this.Parent.Object as TemplateRecord;\r\n this._NodeDepthCache = parentTemplate.NodeDepth + 1;\r\n\r\n return this._NodeDepthCache;\r\n }\r\n\r\n /** 模版定位 */\r\n get Positioning(): Positioning\r\n {\r\n if (this._Positioning)\r\n return this._Positioning;\r\n\r\n let spaceCS = this.GetTemplateRealitySpaceCS();\r\n let positioning = new PositioningTemporary();\r\n positioning.SpaceCS = spaceCS;\r\n positioning.SpaceSize = new Vector3(this.LParam.value as number, this.WParam.value as number, this.HParam.value as number);\r\n return positioning;\r\n }\r\n\r\n /**\r\n * 当存在夹层空间定位时,辅助定位表达式将使用夹层空间作为相对空间.\r\n */\r\n set Positioning(p: Positioning)\r\n {\r\n this.WriteAllObjectRecord();\r\n if (p) p.parent = this;\r\n this._Positioning = p;\r\n }\r\n\r\n //#region param\r\n\r\n /** 初始化基础参数 */\r\n InitBaseParams()\r\n {\r\n for (let paramName of TemplateDefaultParams)\r\n {\r\n let value = 0;\r\n let param = new TemplateParam();\r\n param.name = paramName;\r\n param.type = TemplateParamType.Float;\r\n param.value = value;\r\n this.Params.push(param);\r\n }\r\n this.LParam.description = \"宽\";\r\n this.WParam.description = \"深\";\r\n this.HParam.description = \"高\";\r\n this.Params[9].description = \"板厚\";\r\n this.Params[9].value = 18;\r\n return this;\r\n }\r\n\r\n get LParam() { return this.Params[0]; }\r\n get WParam() { return this.Params[1]; }\r\n get HParam() { return this.Params[2]; }\r\n\r\n get PXParam() { return this.Params[3]; }\r\n get PYParam() { return this.Params[4]; }\r\n get PZParam() { return this.Params[5]; }\r\n\r\n get RXParam() { return this.Params[6]; }\r\n get RYParam() { return this.Params[7]; }\r\n get RZParam() { return this.Params[8]; }\r\n\r\n GetParam(paramName: string): TemplateParam | undefined\r\n {\r\n return this.Params.find(param => param.name === paramName);\r\n }\r\n\r\n SetParamExpr(paramName: string, expr: string | number)\r\n {\r\n let param = this.GetParam(paramName);\r\n if (param)\r\n param.expr = expr;\r\n }\r\n\r\n DeleteParam(paramName: string)\r\n {\r\n let index = this.Params.findIndex(p => p.name === paramName);\r\n if (index !== -1 && index >= TempateDefaultParamCount)//LWH P R 禁止删除\r\n this.Params.splice(index, 1);\r\n\r\n return this;\r\n }\r\n\r\n //#endregion param\r\n\r\n /**\r\n * 通常UI操作的时候,都需要更新整个树,所以隐藏这个API.\r\n * see `UpdateTemplateTree`\r\n *\r\n * 更新当前节点\r\n *\r\n * ### 定位 (大小,方位)\r\n *\r\n * - (放弃)如果当前节点是更新树的最高层(但当前节点不是根节点)\r\n * 那么当存在夹层空间定位的时候,可以不重复进行夹层空间定位,因为此时该空间不会发生变化.\r\n * 补充:如果夹层空间的板件都在上层,那么可以做这个优化,如果定位的板件没在模块中,那么不能进行这个优化.\r\n *\r\n * - [更新优先]在没有实现变量依赖收集(类似mobx)时,我们认为`positioning`的优先级最高.\r\n * 所以`positioning`会被优先更新. `LWH`,`XYZ`.\r\n *\r\n * - 在使用变量定位时,需要传入上层的坐标系,以便进行相对定位.\r\n * 使用空间分析时,已经不需要上层坐标系.\r\n *\r\n * - 辅助定位:帮助空间坐标系进行旋转\r\n * 辅助定位的参数变量将暴露出来.{RX RY RZ}\r\n * 辅助定位作为参数变量时,用户使用值时很难正确的计算值,应~加入交互选择.(辅助计算)\r\n *\r\n * ### 变量表达式计算\r\n *\r\n * - `LWH`将被`positioning`替代,但变量定义仍然正常存在.\r\n *\r\n * - 变量大部分时候都是被批量更新,(同时传入许多参数).\r\n *\r\n */\r\n protected async Update()\r\n {\r\n this._CacheParamVars = this.GetParameterDefinition(false);\r\n let ens = this.Objects.filter(id => !id.IsErase).map(id => id.Object as Entity);\r\n let evaled = new Set();\r\n\r\n this._CacheSpaceCS = this.GetTemplateSpaceCS(false);\r\n\r\n let paramMap = new Map();\r\n for (let param of this.Params)\r\n paramMap.set(param.name, param);\r\n\r\n if (this._Positioning)\r\n {\r\n await this._Positioning.Positioning();\r\n if (!this._Positioning.SpaceCS)\r\n {\r\n //退化成个体坐标系\r\n if (ens.length)\r\n {\r\n this._Positioning.SpaceCS = ens[0].SpaceOCS;\r\n this._Positioning.SpaceSize = new Vector3(this.LParam.value as number, this.WParam.value as number, this.HParam.value as number);\r\n }\r\n else\r\n {\r\n Log(\"模块定位错误!\");\r\n return;//出事故\r\n }\r\n }\r\n }\r\n\r\n for (let en of ens)\r\n {\r\n en.ApplyMatrix(en.SpaceOCSInv);\r\n if (en instanceof Board)\r\n en.IsLazyGrooveCheck = true;\r\n }\r\n\r\n //#region 1.定位(坐标系和大小)\r\n /**\r\n * LWH在存在定位空间和继承空间时的表达式行为不一致.\r\n * - 在存在定位空间的时候,LWH是修改定位空间旋转后的值.\r\n * - 不存在定位空间的时候,修改的是空间旋转前的值,因为此时已经没有空间尺寸可供旋转了,\r\n * 只能先提供空间尺寸,然后才进行旋转.\r\n */\r\n\r\n if (this._Positioning)\r\n {\r\n this._CacheSpaceCS = this._Positioning.SpaceCS;\r\n this._CacheSpaceSize = this._Positioning.SpaceSize;\r\n\r\n this.RotateSpaceCS(paramMap, evaled);\r\n\r\n if (this.LParam.expr)\r\n this._CacheSpaceSize.x = this.LParam.EvalUpdate(this._CacheParamVars, paramMap, evaled, false);\r\n if (this.WParam.expr)\r\n this._CacheSpaceSize.y = this.WParam.EvalUpdate(this._CacheParamVars, paramMap, evaled, false);\r\n if (this.HParam.expr)\r\n this._CacheSpaceSize.z = this.HParam.EvalUpdate(this._CacheParamVars, paramMap, evaled, false);\r\n\r\n if (this._Positioning instanceof PositioningTemporary)\r\n this._Positioning = undefined;\r\n }\r\n else\r\n {\r\n let l = this.LParam.EvalUpdate(this._CacheParamVars, paramMap, evaled, false);\r\n let w = this.WParam.EvalUpdate(this._CacheParamVars, paramMap, evaled, false);\r\n let h = this.HParam.EvalUpdate(this._CacheParamVars, paramMap, evaled, false);\r\n this._CacheSpaceSize = new Vector3(l, w, h);\r\n\r\n this.RotateSpaceCS(paramMap, evaled);\r\n\r\n if (!this.Parent)\r\n {\r\n this.PXParam.value = 0;\r\n this.PYParam.value = 0;\r\n this.PZParam.value = 0;\r\n\r\n this.PXParam.expr = \"\";\r\n this.PYParam.expr = \"\";\r\n this.PZParam.expr = \"\";\r\n\r\n this.RXParam.value = 0;\r\n this.RYParam.value = 0;\r\n this.RZParam.value = 0;\r\n\r\n this.RXParam.expr = \"\";\r\n this.RYParam.expr = \"\";\r\n this.RZParam.expr = \"\";\r\n }\r\n }\r\n\r\n //相对定位. use PX PY PZ\r\n this.UpdatePosition(paramMap, evaled);\r\n\r\n //更新LWH(通过定位空间)\r\n this.LParam.UpdateParam(this._CacheSpaceSize.x);\r\n this.WParam.UpdateParam(this._CacheSpaceSize.y);\r\n this.HParam.UpdateParam(this._CacheSpaceSize.z);\r\n\r\n evaled.add(this.LParam);\r\n evaled.add(this.WParam);\r\n evaled.add(this.HParam);\r\n\r\n //#endregion\r\n\r\n //更新其他参数变量 Eval local params\r\n for (const param of this.Params)\r\n {\r\n param.EvalUpdate(this._CacheParamVars, paramMap, evaled);\r\n }\r\n\r\n //删除材质变量(材质变量仅在KJL导入中使用,重新出现在右侧列表中是不明智的?) (但是用户可能编辑更新了它?)\r\n // arrayRemoveIf(this.Params, p => p.type === TemplateParamType.Material);\r\n\r\n //变换到新的模版空间\r\n for (let en of ens)\r\n {\r\n en.ApplyMatrix(this._CacheSpaceCS);\r\n if (en instanceof Board)\r\n en.LazyGrooveCheckAll();\r\n }\r\n\r\n //更新顶层变量值\r\n if (!this.Parent)\r\n {\r\n for (const param of this.Params)\r\n this._CacheParamVars[`$${param.name}`] = param.value;\r\n }\r\n else\r\n {\r\n for (let param of this._CatchRootParam)\r\n this._CacheParamVars[`$${param.name}`] = param.value;\r\n }\r\n\r\n //保持SpaceCS\r\n for (let ent of ens)\r\n {\r\n ent.SpaceOCS = this._CacheSpaceCS;\r\n }\r\n }\r\n\r\n /**\r\n * 使用PXPYPZ更新空间位置\r\n */\r\n private UpdatePosition(paramMap: Map, evaled: Set)\r\n {\r\n let x = this.PXParam.EvalUpdate(this._CacheParamVars, paramMap, evaled, false);\r\n let y = this.PYParam.EvalUpdate(this._CacheParamVars, paramMap, evaled, false);\r\n let z = this.PZParam.EvalUpdate(this._CacheParamVars, paramMap, evaled, false);\r\n\r\n if (x !== 0 || y !== 0 || z !== 0)\r\n {\r\n this.PXParam.value = x;\r\n this.PYParam.value = y;\r\n this.PZParam.value = z;\r\n let baseP = new Vector3(x, y, z);\r\n baseP.applyMatrix4(this._CacheSpaceCS);\r\n this._CacheSpaceCS.setPosition(baseP);\r\n }\r\n }\r\n\r\n /**\r\n * 旋转空间定位,如果旋转成功,那么SpaceSize和SpaceCS都可能被更新\r\n */\r\n private RotateSpaceCS(paramMap: Map, evaled: Set)\r\n {\r\n this.RXParam.EvalUpdate(this._CacheParamVars, paramMap, evaled);\r\n this.RYParam.EvalUpdate(this._CacheParamVars, paramMap, evaled);\r\n this.RZParam.EvalUpdate(this._CacheParamVars, paramMap, evaled);\r\n //use RX RY RZ\r\n let rx = MathUtils.degToRad(this.RXParam.value as number);\r\n let ry = MathUtils.degToRad(this.RYParam.value as number);\r\n let rz = MathUtils.degToRad(this.RZParam.value as number);\r\n if (rx !== 0 || ry !== 0 || rz !== 0)\r\n {\r\n let mrx = new Matrix4().makeRotationX(rx);\r\n let mry = new Matrix4().makeRotationY(ry);\r\n let mrz = new Matrix4().makeRotationZ(rz);\r\n let mro = mrz.multiply(mry.multiply(mrx));\r\n let roSpace = mro.multiplyMatrices(this._CacheSpaceCS, mro);\r\n let roSpaceInv = mrx.getInverse(roSpace); //变量复用\r\n let transfromToRoSpace = roSpaceInv.multiply(this._CacheSpaceCS);\r\n let box = new Box3(new Vector3(), this._CacheSpaceSize.clone());\r\n box.applyMatrix4(transfromToRoSpace);\r\n box.getSize(this._CacheSpaceSize);\r\n let baseP = box.min.clone().applyMatrix4(roSpace);\r\n roSpace.setPosition(baseP);\r\n //更新LWH(通过定位空间)\r\n this.LParam.UpdateParam(this._CacheSpaceSize.x);\r\n this.WParam.UpdateParam(this._CacheSpaceSize.y);\r\n this.HParam.UpdateParam(this._CacheSpaceSize.z);\r\n this._CacheSpaceCS = roSpace;\r\n }\r\n this._CacheParamVars[\"L\"] = this._CacheSpaceSize.x;\r\n this._CacheParamVars[\"W\"] = this._CacheSpaceSize.y;\r\n this._CacheParamVars[\"H\"] = this._CacheSpaceSize.z;\r\n }\r\n\r\n /** 以广度搜索优先更新节点树 */\r\n async UpdateTemplateTree()\r\n {\r\n if (this.Parent && !this.Parent.IsErase)\r\n {\r\n let parent = this.Parent.Object as TemplateRecord;\r\n if (parent.SplitType !== TemplateSplitType.None || this.NeedUpdateParent)\r\n return await parent.UpdateTemplateTree();\r\n }\r\n\r\n let stack: TemplateRecord[] = [this];\r\n await this.Update();\r\n while (stack.length > 0)\r\n {\r\n let template = stack.shift();\r\n\r\n //清理历史记录时,子对象会被清理,为了防止被清理掉,清除不需要的id\r\n template.Children = template.Children.filter(id => id && !id.IsErase);\r\n\r\n //计算DIV(给子空间使用)\r\n if (template.Children.length > 0 && template.SplitType !== TemplateSplitType.None)\r\n {\r\n let vardefines = (template.Children[0].Object).GetParameterDefinition(false);\r\n vardefines._DIV = 0;\r\n let sum = 0;\r\n for (let c of template.Children)\r\n {\r\n let ctemplate = c.Object as TemplateRecord;\r\n let param = ctemplate.Params[template.SplitType];\r\n sum += param.EvalUpdate(vardefines, new Map(), new Set(), false);\r\n }\r\n\r\n let sumDiv = 0;\r\n vardefines._DIV = 1;\r\n for (let c of template.Children)\r\n {\r\n let ctemplate = c.Object as TemplateRecord;\r\n let param = ctemplate.Params[template.SplitType];\r\n sumDiv += param.EvalUpdate(vardefines, new Map(), new Set(), false);\r\n }\r\n\r\n let divCount = sumDiv - sum;\r\n\r\n if (divCount > 0)\r\n {\r\n //div可用总空间\r\n let divSum = (template.Params[template.SplitType].value as number - sum);\r\n if (divSum > 0)\r\n template._CacheParamVars.DIV = divSum / divCount;\r\n else\r\n template._CacheParamVars.DIV = 0;\r\n }\r\n\r\n template._CacheParamVars.POS = 0;\r\n }\r\n\r\n for (let c of template.Children)\r\n {\r\n let ctemplate = c.Object as TemplateRecord;\r\n stack.push(ctemplate);\r\n await ctemplate.Update();\r\n\r\n if (template._CacheParamVars.POS !== undefined)//更新POS\r\n template._CacheParamVars.POS += ctemplate.Params[template.SplitType].value as number;\r\n }\r\n }\r\n }\r\n\r\n /** 缓存本节点的变量定义值,当子层需要本层的参数时,可以直接获取 */\r\n protected _CacheParamVars: any;\r\n protected _CacheSpaceCS: Matrix4;\r\n protected _CacheSpaceSize: Vector3;\r\n protected _CatchRootParam: Set;\r\n /**\r\n * 本节点可用的所有变量定义.(包括变量继承)\r\n * @param [useCache=true] 当更新当前节点的时候,我们不希望使用缓存,(因为父节点的参数可能已经被更新)\r\n * @returns\r\n */\r\n GetParameterDefinition(useCache = true): any\r\n {\r\n if (this._CacheParamVars && useCache)\r\n return this._CacheParamVars;\r\n\r\n let vars = this.GetParentParams();\r\n this._CatchRootParam = new Set();\r\n for (const param of this.Params)\r\n {\r\n vars[param.name] = param.value;\r\n\r\n let rootParamName = \"$\" + param.name;\r\n\r\n if (!this.Parent)\r\n vars[rootParamName] = param.value;//root\r\n else if (!(rootParamName in vars))\r\n {\r\n this._CatchRootParam.add(param);\r\n vars[rootParamName] = param.value;//顶层变量捕获 root\r\n }\r\n }\r\n\r\n this._CacheParamVars = vars;\r\n return vars;\r\n }\r\n\r\n /**\r\n * 变量继承\r\n * - 每继承一层,前缀增加一个`_`\r\n * - 顶层前缀`$`\r\n *\r\n * @returns 继承于父空间的变量定义列表\r\n */\r\n private GetParentParams(): any\r\n {\r\n if (!this.Parent?.Object) return {};\r\n\r\n let parent = this.Parent.Object as TemplateRecord;\r\n let params = parent.GetParameterDefinition();\r\n\r\n let newParams: any = {};\r\n for (let key in params)\r\n {\r\n if (key[0] !== \"$\")\r\n newParams[\"_\" + key] = params[key];\r\n else\r\n newParams[key] = params[key];\r\n }\r\n\r\n if (newParams._DIV === undefined && parent.SplitType !== TemplateSplitType.None)\r\n newParams._DIV = 1;\r\n if (newParams._POS === undefined)\r\n newParams._POS = 0;\r\n\r\n return newParams;\r\n }\r\n\r\n get SpaceParse(): ISpaceParse\r\n {\r\n let spaceParse: ISpaceParse;\r\n\r\n if (this._Positioning && this._Positioning instanceof PositioningClampSpace)\r\n spaceParse = this._Positioning._SpaceParse;\r\n else\r\n spaceParse = new ISpaceParse();\r\n\r\n spaceParse.SpaceOCS = this._CacheSpaceCS;\r\n spaceParse.ParseOK = true;\r\n spaceParse.SpaceBox = new Box3Ext(new Vector3(), this._CacheSpaceSize);\r\n return spaceParse;\r\n }\r\n\r\n /**\r\n * 获得当前的模版空间的相对坐标系\r\n * - 存在父节点的时候使用父节点的模版空间坐标系\r\n * - 不存在父节点的时候使用自身的模版空间坐标系\r\n *\r\n * - 空间坐标系将被定位更新\r\n *\r\n * @param [useCache=true] 当更新当前节点的时候,我们不希望使用缓存,(因为父节点的参数可能已经被更新)\r\n */\r\n private GetTemplateSpaceCS(useCache = true): Matrix4\r\n {\r\n if (useCache && this._CacheSpaceCS)\r\n return this._CacheSpaceCS.clone();\r\n\r\n if (this.Parent?.Object)\r\n {\r\n let template = this.Parent.Object as TemplateRecord;\r\n return template.GetTemplateSpaceCS();\r\n }\r\n\r\n for (let brId of this.Objects)\r\n {\r\n if (brId.Object && !brId.IsErase)\r\n {\r\n let br = brId.Object as Entity;\r\n return br.SpaceOCS;\r\n }\r\n }\r\n\r\n return new Matrix4();\r\n }\r\n\r\n /**\r\n * 获得当前模块的实际位置坐标系.\r\n * 使用 GetTemplateSpaceCS 可能会得到不准确的位置.(得到Parent或者已经缓存的位置)\r\n */\r\n GetTemplateRealitySpaceCS()\r\n {\r\n for (let brId of this.Objects)\r\n {\r\n if (brId.Object && !brId.IsErase)\r\n {\r\n let br = brId.Object as Entity;\r\n return br.SpaceOCS;\r\n }\r\n }\r\n return this.GetTemplateSpaceCS(true);//此时已经可能不准确\r\n }\r\n\r\n get NeedUpdateParent(): boolean\r\n {\r\n if (this._Positioning) return false; //存在自我定位时,不需要更新父层\r\n\r\n if (this.Parent)\r\n {\r\n let template = this.Parent.Object as TemplateRecord;\r\n return template._CacheSpaceCS === undefined; //父层已更新时,不需要更新父层\r\n }\r\n\r\n return false; //没有父层时,不需要更新父层\r\n }\r\n\r\n protected get PositioningSupportBoards(): Board[]\r\n {\r\n let brs: Board[] = [];\r\n if (this._Positioning && this._Positioning instanceof PositioningClampSpace)\r\n {\r\n for (let id of this._Positioning.Objects)\r\n if (!id.IsErase && id.Object instanceof Board)\r\n brs.push(id.Object);\r\n }\r\n if (brs.length === 0)\r\n brs.push(new Board());\r\n return brs;\r\n }\r\n\r\n protected _Version: number;\r\n //#region -------------------------File-------------------------\r\n //对象应该实现dataIn和DataOut的方法,为了对象的序列化和反序列化\r\n //对象从文件中读取数据,初始化自身\r\n ReadFile(file: CADFiler)\r\n {\r\n this._Version = file.Read();\r\n super.ReadFile(file);\r\n this.Type = file.Read();\r\n this._Parent = file.ReadHardObjectId();\r\n let count = file.Read() as number;\r\n this.Children.length = 0;\r\n for (let i = 0; i < count; i++)\r\n {\r\n let id = file.ReadHardObjectId();\r\n if (id) this.Children.push(id);\r\n }\r\n count = file.Read();\r\n this.Params.length = 0;\r\n for (let i = 0; i < count; i++)\r\n this.Params.push(file.ReadObject());\r\n count = file.Read();\r\n this.Objects.length = 0;\r\n for (let i = 0; i < count; i++)\r\n {\r\n let id = file.ReadObjectId();\r\n if (id) this.Objects.push(id);\r\n }\r\n\r\n this._Positioning = file.ReadObject();\r\n\r\n if (this._Version > 1)\r\n this.SplitType = file.Read() ?? this.SplitType;\r\n\r\n //清空缓存,因为我们回滚了模块(BUG:修改参数->撤销->替换模块(此时读取了缓存的数据)\r\n this._CacheParamVars = undefined;\r\n this._CacheSpaceCS = undefined;\r\n this._CacheSpaceSize = undefined;\r\n this._CatchRootParam = undefined;\r\n this._NodeDepthCache = undefined;\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(3);\r\n super.WriteFile(file);\r\n\r\n let type = this.Type;\r\n //我们在保存文件的时候,才会去序列化它,否则我们不会自动添加历史记录(被动式)\r\n if (this.isExpanded)\r\n type |= TemplateType.Expanded;\r\n else\r\n type &= ~TemplateType.Expanded;\r\n\r\n file.Write(type);\r\n file.WriteHardObjectId(this._Parent);\r\n file.Write(this.Children.length);\r\n for (let id of this.Children)\r\n file.WriteHardObjectId(id);\r\n file.Write(this.Params.length);\r\n for (let param of this.Params)\r\n file.WriteObject(param);\r\n file.Write(this.Objects.length);\r\n for (let id of this.Objects)\r\n file.WriteHardObjectId(id);\r\n\r\n file.WriteObject(this._Positioning);\r\n\r\n file.Write(this.SplitType);\r\n }\r\n //#endregion\r\n}\r\n","import { Factory } from \"../../CADFactory\";\r\nimport { CADFiler } from \"../../CADFiler\";\r\nimport { Board } from \"../../Entity/Board\";\r\nimport { ObjectId } from \"../../ObjectId\";\r\nimport { TemplateAction } from \"./TemplateAction\";\r\n\r\nexport enum ThicknessDirection\r\n{\r\n Center = 0,\r\n Back = 1,\r\n Front = 2,\r\n}\r\n\r\nexport interface ThicknessActionData\r\n{\r\n //方向\r\n Direction: ThicknessDirection;\r\n /**\r\n * 附加的动作\r\n */\r\n Actions: TemplateAction[];\r\n}\r\n\r\n/**\r\n * 模版动作\r\n */\r\n@Factory\r\nexport class TempateThicknessAction extends TemplateAction\r\n{\r\n EntityDirectionMap: Map = new Map();\r\n protected _Update(paramDiff: number, newValue: number)\r\n {\r\n for (let [id, d] of this.EntityDirectionMap)\r\n {\r\n if (!id || id.IsErase) continue;\r\n\r\n let br = id.Object as Board;\r\n\r\n br.Thickness += paramDiff;\r\n if (d.Direction === ThicknessDirection.Back)\r\n br.Position = br.Position.sub(br.Normal.multiplyScalar(paramDiff));\r\n else if (d.Direction === ThicknessDirection.Center)\r\n br.Position = br.Position.sub(br.Normal.multiplyScalar(paramDiff * 0.5));\r\n\r\n for (let a of d.Actions)\r\n {\r\n a.parent = this.parent;\r\n a.Update(paramDiff, newValue);\r\n }\r\n }\r\n }\r\n\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 super.ReadFile(file);\r\n\r\n let count = file.Read() as number;\r\n this.EntityDirectionMap.clear();\r\n for (let i = 0; i < count; i++)\r\n {\r\n let id = file.ReadObjectId();\r\n let direction = file.Read() as ThicknessDirection;\r\n let actionsCount = file.Read() as number;\r\n let actions: TemplateAction[] = [];\r\n for (let j = 0; j < actionsCount; j++)\r\n {\r\n actions.push(file.ReadObject() as TemplateAction);\r\n }\r\n this.EntityDirectionMap.set(id, { Direction: direction, Actions: actions });\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\r\n file.Write(this.EntityDirectionMap.size);\r\n for (let [id, d] of this.EntityDirectionMap)\r\n {\r\n file.WriteObjectId(id);\r\n file.Write(d.Direction);\r\n file.Write(d.Actions.length);\r\n for (let a of d.Actions)\r\n file.WriteObject(a);\r\n }\r\n }\r\n}\r\n","import { Vector3 } from \"three\";\r\nimport { MoveMatrix } from \"../../../Geometry/GeUtils\";\r\nimport { Factory } from \"../../CADFactory\";\r\nimport { CADFiler } from \"../../CADFiler\";\r\nimport { Entity } from \"../../Entity/Entity\";\r\nimport { ObjectId } from \"../../ObjectId\";\r\nimport { TemplateAction } from \"./TemplateAction\";\r\n\r\n@Factory\r\nexport class TemplateMoveAction extends TemplateAction\r\n{\r\n\r\n constructor(public StretchDirection = new Vector3,\r\n public MoveEntitys: ObjectId[] = []\r\n )\r\n {\r\n super();\r\n }\r\n\r\n protected _CacheMoveVector: Vector3;\r\n protected _Update(paramDiff: number)\r\n {\r\n if (!this._CacheMoveVector) this._CacheMoveVector = new Vector3();\r\n\r\n this._CacheMoveVector.copy(this.StretchDirection).multiplyScalar(paramDiff);\r\n\r\n let moveMatrix = MoveMatrix(this._CacheMoveVector);\r\n for (let id of this.MoveEntitys)\r\n {\r\n if (id?.Object)\r\n {\r\n let ent = id.Object as Entity;\r\n ent.ApplyMatrix(moveMatrix);\r\n }\r\n }\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 super.ReadFile(file);\r\n this.StretchDirection.fromArray(file.Read());\r\n this.MoveEntitys.length = 0;\r\n let count = file.Read();\r\n for (let i = 0; i < count; i++)\r\n {\r\n let id = file.ReadObjectId();\r\n if (id) this.MoveEntitys.push(id);\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.StretchDirection.toArray());\r\n file.Write(this.MoveEntitys.length);\r\n for (let ent of this.MoveEntitys)\r\n file.WriteObjectId(ent);\r\n }\r\n}\r\n","import { arrayClone } from \"../../../Common/ArrayExt\";\r\nimport { GetBoardHighSeal, GetBoardSealingCurves, HandleRectBoardSealingData } from \"../../../GraphicsSystem/CalcEdgeSealing\";\r\nimport { Factory } from \"../../CADFactory\";\r\nimport { CADFiler } from \"../../CADFiler\";\r\nimport { Board } from \"../../Entity/Board\";\r\nimport { ObjectId } from \"../../ObjectId\";\r\nimport { TemplateAction } from \"./TemplateAction\";\r\n\r\n/**\r\n * 设置封边动作\r\n */\r\n@Factory\r\nexport class TemplateSetSealAction extends TemplateAction\r\n{\r\n EntitySealIndexsMap: {\r\n entity: ObjectId;\r\n indexs: number[];\r\n }[] = [];\r\n\r\n protected override _Update(diff: number, newV: number)\r\n {\r\n for (let { entity, indexs } of this.EntitySealIndexsMap)\r\n {\r\n if (entity?.Object && !entity.IsErase)\r\n {\r\n let br = entity.Object;\r\n let highSealData = GetBoardSealingCurves(br, true);\r\n let highseals = GetBoardHighSeal(br, highSealData);\r\n\r\n for (let i of indexs)\r\n {\r\n if (highseals[i])\r\n highseals[i].size = newV;\r\n }\r\n\r\n HandleRectBoardSealingData(br, highseals, highSealData);\r\n br.BoardProcessOption.highSealed = highseals;\r\n }\r\n }\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 super.ReadFile(file);\r\n this.EntitySealIndexsMap.length = 0;\r\n let count = file.Read() as number;\r\n for (let i = 0; i < count; i++)\r\n {\r\n let entity = file.ReadObjectId() as ObjectId;\r\n let indexs = file.Read();\r\n if (entity) this.EntitySealIndexsMap.push({ entity, indexs });\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.EntitySealIndexsMap.length);\r\n for (let d of this.EntitySealIndexsMap)\r\n {\r\n file.WriteObjectId(d.entity);\r\n file.Write(arrayClone(d.indexs));\r\n }\r\n }\r\n}\r\n","import { arrayClone } from \"../../../Common/ArrayExt\";\r\nimport { Factory } from \"../../CADFactory\";\r\nimport { CADFiler } from \"../../CADFiler\";\r\nimport { Entity } from \"../../Entity/Entity\";\r\nimport { ObjectId } from \"../../ObjectId\";\r\nimport { TemplateMoveAction } from \"./TemplateMoveAction\";\r\n\r\n/**\r\n * Stretch夹点动作\r\n */\r\n@Factory\r\nexport class TemplateStretchGripAction extends TemplateMoveAction\r\n{\r\n EntityStretchPointMap: {\r\n entity: ObjectId;\r\n indexs: number[];\r\n }[] = [];\r\n\r\n protected _Update(dist: number)\r\n {\r\n super._Update(dist);\r\n for (let { entity, indexs } of this.EntityStretchPointMap)\r\n {\r\n if (entity?.Object)\r\n {\r\n let ent = entity.Object as Entity;\r\n ent.MoveStretchPoints(indexs, this._CacheMoveVector);\r\n }\r\n }\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 super.ReadFile(file);\r\n this.EntityStretchPointMap.length = 0;\r\n let count = file.Read() as number;\r\n for (let i = 0; i < count; i++)\r\n {\r\n let entity = file.ReadObjectId();\r\n let indexs = file.Read();\r\n if (entity) this.EntityStretchPointMap.push({ entity, indexs });\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.EntityStretchPointMap.length);\r\n for (let d of this.EntityStretchPointMap)\r\n {\r\n file.WriteObjectId(d.entity);\r\n file.Write(arrayClone(d.indexs));\r\n }\r\n }\r\n}\r\n","import { Box3, Vector3 } from \"three\";\r\nimport { Factory } from \"../../CADFactory\";\r\nimport { CADFiler } from \"../../CADFiler\";\r\nimport { Entity } from \"../../Entity/Entity\";\r\nimport { ObjectId } from \"../../ObjectId\";\r\nimport { TemplateMoveAction } from \"./TemplateMoveAction\";\r\n\r\n/**\r\n * 拽拖比例盒子动作\r\n */\r\n@Factory\r\nexport class TemplateStretchScaleBoxAction extends TemplateMoveAction\r\n{\r\n /**\r\n * 正常不会直接修改下面的2个属性,如果真的需要修改,请调用 `this.WriteAllObjectRecord`;\r\n * 避免历史记录没有记录更新.\r\n */\r\n constructor(\r\n public StretchDirection: Vector3 = new Vector3(),\r\n public EntityStretchData: { entity: ObjectId; scaleBox: Box3; }[] = []\r\n )\r\n {\r\n super();\r\n }\r\n\r\n protected _Update(dist: number)\r\n {\r\n super._Update(dist);\r\n\r\n for (let { entity, scaleBox } of this.EntityStretchData)\r\n {\r\n if (!entity || entity.IsErase) continue;\r\n\r\n let ent = entity.Object as Entity;\r\n let pts = ent.GetStretchPoints();\r\n let ocsInv = ent.OCSInv;\r\n let entityBox = ent.BoundingBoxInOCS;\r\n let size = entityBox.getSize(new Vector3());\r\n scaleBox = scaleBox.clone();\r\n scaleBox.min.multiply(size).sub(new Vector3(1, 1, 1));\r\n scaleBox.max.multiply(size).add(new Vector3(1, 1, 1));\r\n let stretchIndexs: number[] = [];\r\n for (let i = 0, length = pts.length; i < length; i++)\r\n {\r\n let p = pts[i];\r\n p.applyMatrix4(ocsInv);\r\n if (scaleBox.containsPoint(p))\r\n stretchIndexs.push(i);\r\n }\r\n ent.MoveStretchPoints(stretchIndexs, this._CacheMoveVector);\r\n }\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 super.ReadFile(file);\r\n this.EntityStretchData.length = 0;\r\n let count = file.Read() as number;\r\n for (let i = 0; i < count; i++)\r\n {\r\n let entity = file.ReadObjectId();\r\n let min = new Vector3().fromArray(file.Read());\r\n let max = new Vector3().fromArray(file.Read());\r\n this.EntityStretchData.push({ entity, scaleBox: new Box3(min, max) });\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.EntityStretchData.length);\r\n for (let d of this.EntityStretchData)\r\n {\r\n file.WriteObjectId(d.entity);\r\n file.Write(d.scaleBox.min.toArray());\r\n file.Write(d.scaleBox.max.toArray());\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * 拽拖固定大小盒子动作(弃用)\r\n */\r\n/*\r\nclass TemplateStretchSizeBoxAction extends TemplateAction\r\n{\r\n StretchDirection: Vector3;\r\n\r\n EntityStretchPointMap: { entity: Entity, sizeBox: Box3 }[];\r\n}\r\n*/\r\n","import { Vector3 } from \"three\";\r\nimport { AutoRecord } from \"../../AutoRecord\";\r\nimport { Factory } from \"../../CADFactory\";\r\nimport { CADFiler } from \"../../CADFiler\";\r\nimport { Board } from \"../../Entity/Board\";\r\nimport { ObjectId } from \"../../ObjectId\";\r\nimport { Positioning } from \"./Positioning\";\r\n\r\n@Factory\r\nexport class PositioningBoardSpace extends Positioning\r\n{\r\n @AutoRecord ObjectId: ObjectId;\r\n /**\r\n * 定位\r\n */\r\n async Positioning()\r\n {\r\n this.SpaceCS = undefined;\r\n this.SpaceSize = undefined;\r\n\r\n if (this.ObjectId && !this.ObjectId.IsErase)\r\n {\r\n let ent = this.ObjectId.Object as Board;\r\n this.SpaceCS = ent.OCS;\r\n this.SpaceSize = new Vector3(ent.Width, ent.Height, ent.Thickness);\r\n }\r\n }\r\n\r\n //#region File\r\n ReadFile(file: CADFiler): void\r\n {\r\n let ver = file.Read();\r\n this.ObjectId = file.ReadObjectId();\r\n }\r\n\r\n WriteFile(file: CADFiler): void\r\n {\r\n file.Write(1);\r\n file.WriteObjectId(this.ObjectId);\r\n }\r\n //#endregion\r\n\r\n}\r\n","import { Vector3 } from \"three\";\r\nimport { safeEval } from \"../../Common/eval\";\r\nimport { Log } from \"../../Common/Log\";\r\nimport { Board } from \"../../DatabaseServices/Entity/Board\";\r\nimport { TemplateWineRackRecord } from \"../../DatabaseServices/Template/ProgramTempate/TemplateWineRackRecord\";\r\nimport { TemplateRecord } from \"../../DatabaseServices/Template/TemplateRecord\";\r\nimport { MoveMatrix } from \"../../Geometry/GeUtils\";\r\nimport { ISpaceParse } from \"../../Geometry/SpaceParse/ISpaceParse\";\r\nimport { BehindBoardOption, BehindHeightPositon, BoardType, BrRelativePos, IGrooveOption, LayerBoardOption, VerticalBoardOption } from \"../../UI/Store/BoardInterface\";\r\n\r\nexport function BuildLayerBoards(opt: LayerBoardOption, space: ISpaceParse, grooveOption?: IGrooveOption): Board[]\r\n{\r\n let spaceBox = space.SpaceBox;\r\n let spaceOCS = space.SpaceOCS;\r\n let size = spaceBox.getSize(new Vector3());\r\n const params = { L: size.x, W: size.y, H: size.z, BH: opt.thickness };\r\n\r\n let width: number;\r\n if (opt.isTotalLength)\r\n width = size.y;\r\n else\r\n {\r\n width = safeEval(opt.calcHeight, params);\r\n }\r\n let count = opt.count;\r\n let type = opt.boardRelative;\r\n let spaceSize = safeEval(opt.calcSpaceSize, params);\r\n let frontShrink = safeEval(opt.calcFrontShrink, params);\r\n width -= frontShrink;\r\n\r\n if (width <= 0)\r\n {\r\n Log(\"宽度无效,可能前缩过大,请修正\");\r\n return [];\r\n }\r\n\r\n let leftShrink = safeEval(opt.calcLeftShrink, params);\r\n let rightShrink = safeEval(opt.calcRightShrink, params);\r\n let thickness = opt.thickness;\r\n\r\n let len = size.x - leftShrink - rightShrink;\r\n if (len <= 0)\r\n {\r\n Log(\"长度无效,可能左缩右缩过大,请修正\");\r\n return [];\r\n }\r\n let board = Board.CreateBoard(len, width, thickness, BoardType.Layer);\r\n if (grooveOption)\r\n {\r\n board.KnifeRadius = safeEval(grooveOption.knifeRadius);\r\n board.GroovesAddDepth = safeEval(grooveOption.grooveAddDepth);\r\n board.GroovesAddWidth = safeEval(grooveOption.grooveAddWidth);\r\n board.GroovesAddLength = safeEval(grooveOption.grooveAddLength);\r\n }\r\n opt.height = len;\r\n opt.width = width;\r\n\r\n //等分单层空间大小\r\n let singleSize = (size.z - (thickness * count)) / (count + 1);\r\n\r\n\r\n let brs: Board[] = [];\r\n\r\n for (let i = 1; i <= count; i++)\r\n {\r\n let b = board.Clone() as Board;\r\n b.Name = opt.name;\r\n\r\n if (type === BrRelativePos.Top)\r\n b.ApplyMatrix(MoveMatrix(spaceBox.min.clone().add(\r\n new Vector3(size.x - rightShrink, frontShrink, size.z - (spaceSize + thickness) * i)\r\n )));\r\n else if (type === BrRelativePos.Bottom)\r\n b.ApplyMatrix(\r\n MoveMatrix(spaceBox.min.clone().add(\r\n new Vector3(size.x - rightShrink, frontShrink, spaceSize * i + (i - 1) * thickness)\r\n )));\r\n else\r\n {\r\n b.ApplyMatrix(\r\n MoveMatrix(spaceBox.min.clone().add(\r\n new Vector3(size.x - rightShrink, frontShrink, singleSize * i + (i - 1) * thickness))\r\n ));\r\n }\r\n b.ApplyMatrix(spaceOCS);\r\n brs.push(b);\r\n }\r\n return brs;\r\n}\r\n\r\nexport function BuildVerticalBoards(opt: VerticalBoardOption, space: ISpaceParse, grooveOption?: IGrooveOption): Board[]\r\n{\r\n const spaceBox = space.SpaceBox;\r\n const spaceOCS = space.SpaceOCS;\r\n let size = spaceBox.getSize(new Vector3());\r\n const params = { L: size.x, W: size.y, H: size.z, BH: opt.thickness };\r\n\r\n let frontShrink = safeEval(opt.calcFrontShrink, params);\r\n let bottomShink = safeEval(opt.calcBottomShrink, params);\r\n let width: number;\r\n if (opt.isTotalWidth)\r\n width = size.y - frontShrink;\r\n else\r\n {\r\n width = safeEval(opt.calcWidth, params);\r\n }\r\n\r\n if (width <= 0)\r\n {\r\n Log(\"宽度无效,可能前缩过大,请修正\");\r\n return [];\r\n }\r\n\r\n let length: number;\r\n if (opt.isTotalLength)\r\n length = size.z - bottomShink;\r\n else\r\n {\r\n length = safeEval(opt.calcHeight, params);\r\n }\r\n\r\n let count = opt.count;\r\n let type = opt.boardRelative;\r\n let spaceSize = safeEval(opt.calcSpaceSize, params);\r\n let thickness = opt.thickness;\r\n\r\n let board = Board.CreateBoard(length, width, thickness, BoardType.Vertical);\r\n if (grooveOption)\r\n {\r\n board.KnifeRadius = safeEval(grooveOption.knifeRadius);\r\n board.GroovesAddDepth = safeEval(grooveOption.grooveAddDepth);\r\n board.GroovesAddWidth = safeEval(grooveOption.grooveAddWidth);\r\n board.GroovesAddLength = safeEval(grooveOption.grooveAddLength);\r\n }\r\n opt.height = length;\r\n opt.width = width;\r\n\r\n //等分单层空间大小\r\n let singleSize = (size.x - (thickness * count)) / (count + 1);\r\n\r\n let brs: Board[] = [];\r\n for (let i = 1; i <= count; i++)\r\n {\r\n let b = board.Clone() as Board;\r\n b.Name = opt.name;\r\n\r\n if (type === BrRelativePos.Left)\r\n b.ApplyMatrix(MoveMatrix(spaceBox.min.clone().add(\r\n new Vector3(spaceSize * i + (i - 1) * thickness, frontShrink, bottomShink)\r\n )));\r\n else if (type === BrRelativePos.Right)\r\n b.ApplyMatrix(MoveMatrix(spaceBox.min.clone().add(\r\n new Vector3(size.x - (spaceSize + thickness) * i, frontShrink, bottomShink)\r\n )));\r\n else\r\n b.ApplyMatrix(MoveMatrix(spaceBox.min.clone().add(\r\n new Vector3(singleSize * i + (i - 1) * thickness, frontShrink, bottomShink)\r\n )));\r\n\r\n b.ApplyMatrix(spaceOCS);\r\n brs.push(b);\r\n }\r\n return brs;\r\n}\r\n\r\nexport function BuildBehindBoards(opt: BehindBoardOption, space: ISpaceParse, grooveOption?: IGrooveOption): Board[]\r\n{\r\n let newBox = space.SpaceBox.clone();\r\n let spaceOcs = space.SpaceOCS;\r\n //判断延伸\r\n let leftExt = opt.leftExt;\r\n let rightExt = opt.rightExt;\r\n let topExt = opt.topExt;\r\n let bottomExt = opt.bottomExt;\r\n newBox.max.add(new Vector3(leftExt + rightExt, 0, topExt + bottomExt));\r\n newBox.translate(new Vector3(-leftExt, 0, -bottomExt));\r\n\r\n //获取背板高度\r\n let size = newBox.getSize(new Vector3());\r\n const params = { L: size.x, W: size.y, H: size.z, BH: opt.thickness };\r\n let height: number;\r\n if (opt.boardPosition === BehindHeightPositon.AllHeight)\r\n height = size.z;\r\n else\r\n height = safeEval(opt.calcHeight, params);\r\n\r\n let moveDist = safeEval(opt.calcMoveDist, params);\r\n\r\n //判断背板位置,更新背板高度\r\n switch (opt.boardPosition)\r\n {\r\n case BehindHeightPositon.ForTop:\r\n newBox.min.add(new Vector3(0, 0, size.z - height));\r\n newBox.translate(new Vector3(0, 0, moveDist));\r\n break;\r\n case BehindHeightPositon.ForBottom:\r\n newBox.max.add(new Vector3(0, 0, height));\r\n newBox.translate(new Vector3(0, 0, -moveDist));\r\n break;\r\n }\r\n\r\n let count = opt.count;\r\n //相对位置\r\n let relPos = opt.boardRelative;\r\n //单层空间宽度\r\n let spaceSize = safeEval(opt.calcSpaceSize, params);\r\n let thickness = opt.thickness;\r\n\r\n let board = Board.CreateBoard(height, size.x, thickness, BoardType.Behind);\r\n if (grooveOption)\r\n {\r\n board.KnifeRadius = safeEval(grooveOption.knifeRadius);\r\n board.GroovesAddDepth = safeEval(grooveOption.grooveAddDepth);\r\n board.GroovesAddWidth = safeEval(grooveOption.grooveAddWidth);\r\n board.GroovesAddLength = safeEval(grooveOption.grooveAddLength);\r\n }\r\n\r\n opt.height = height;\r\n opt.width = size.x;\r\n\r\n //等分单层空间大小\r\n let singleSize = (size.y - (thickness * count)) / (count + 1);\r\n\r\n let brs: Board[] = [];\r\n //构建板件\r\n for (let i = 1; i <= count; i++)\r\n {\r\n let b = board.Clone();\r\n b.Name = opt.name;\r\n\r\n if (relPos === BrRelativePos.Front)\r\n b.ApplyMatrix(MoveMatrix(newBox.min.clone().add(new Vector3(0, spaceSize * i + thickness * i, 0))));\r\n else if (relPos === BrRelativePos.Back)\r\n b.ApplyMatrix(MoveMatrix(newBox.min.clone().add(\r\n new Vector3(0, size.y - spaceSize * i - (i - 1) * thickness, 0)\r\n )));\r\n else\r\n b.ApplyMatrix(MoveMatrix(newBox.min.clone().add(\r\n new Vector3(0, (singleSize + thickness) * i, 0)\r\n )));\r\n\r\n b.ApplyMatrix(spaceOcs);\r\n\r\n brs.push(b);\r\n }\r\n return brs;\r\n}\r\n\r\nexport function ExtendsBoardThickness(temp: TemplateRecord, thickness: number)\r\n{\r\n let bhPar = temp.GetParam(\"BH\");\r\n if (bhPar)\r\n {\r\n bhPar.expr = thickness;\r\n if (temp.Parent)\r\n {\r\n let rootBh = safeEval(temp.Root.GetParam(\"BH\")?.value as string);\r\n bhPar.expr = rootBh === thickness ? \"$BH\" : thickness;\r\n }\r\n }\r\n}\r\nexport function ExtendsbrThick2(temp: TemplateWineRackRecord)\r\n{\r\n let bh2Par = temp.GetParam(\"BH2\");\r\n if (bh2Par)\r\n {\r\n let bh2 = temp.Option.brThick2;\r\n bh2Par.value = bh2;\r\n if (temp.Option.isExtendsBH2)\r\n {\r\n if (temp.Parent)\r\n {\r\n let rootBh = safeEval(temp.Root.GetParam(\"BH\")?.value as string);\r\n bh2Par.expr = rootBh === bh2 ? \"$BH\" : bh2;\r\n }\r\n }\r\n else\r\n {\r\n bh2Par.expr = \"\";\r\n }\r\n }\r\n}\r\n","import { ExtendsBoardThickness } from \"../../../Add-on/DrawBoard/BuildBoardTool\";\r\nimport { EBoardKeyList } from \"../../../Common/BoardKeyList\";\r\nimport { ISpaceParse } from \"../../../Geometry/SpaceParse/ISpaceParse\";\r\nimport { BoardConfigOption, BoardProcessOption } from \"../../../UI/Store/BoardInterface\";\r\nimport { AutoRecord } from \"../../AutoRecord\";\r\nimport { Factory } from \"../../CADFactory\";\r\nimport { CADFiler } from \"../../CADFiler\";\r\nimport { Board } from \"../../Entity/Board\";\r\nimport { TemplateRecord } from \"../TemplateRecord\";\r\n\r\n/**\r\n * 板件模板的基类.(层板,立板,背板)\r\n */\r\n@Factory\r\nexport class TemplateBoardRecord extends TemplateRecord\r\n{\r\n //板件初始化的时候需要设置周围板件的数据,通常只有一次\r\n UseBoardProcessOption = false;\r\n BoardProcessOption: BoardProcessOption;\r\n\r\n @AutoRecord DrawBoardCount = 1;\r\n\r\n protected _option: BoardConfigOption;\r\n // InitBaseParams()\r\n // {\r\n // super.InitBaseParams();\r\n // return this;\r\n // }\r\n get Option()\r\n {\r\n return Object.assign({}, this._option);\r\n }\r\n set Option(option: BoardConfigOption)\r\n {\r\n this.WriteAllObjectRecord();\r\n Object.assign(this._option, option);\r\n ExtendsBoardThickness(this, option.thickness);\r\n }\r\n protected GeneralBoardList(space: ISpaceParse): Board[]\r\n {\r\n return [];\r\n }\r\n\r\n Purge()\r\n {\r\n super.Purge();\r\n if (this.Objects.length === 0)\r\n this.IsClear = true;\r\n }\r\n\r\n protected async Update()\r\n {\r\n await super.Update();\r\n if (this.IsClear) return;\r\n\r\n let thickness = this.GetParam(\"BH\")?.value as number;\r\n if (thickness)\r\n this._option.thickness = thickness;\r\n let nbrs = this.GeneralBoardList(this.SpaceParse);\r\n\r\n let sbrs = this.PositioningSupportBoards;\r\n\r\n if (this.BoardProcessOption)\r\n {\r\n for (let br of nbrs)\r\n br.BoardProcessOption = this.BoardProcessOption;\r\n this.BoardProcessOption = undefined;\r\n }\r\n if (this.UseBoardProcessOption && sbrs.length > 0)\r\n {\r\n let cname = sbrs[0].BoardProcessOption[EBoardKeyList.CabinetName];\r\n let rname = sbrs[0].BoardProcessOption[EBoardKeyList.RoomName];\r\n for (let br of nbrs)\r\n {\r\n br.BoardProcessOption[EBoardKeyList.CabinetName] = cname;\r\n br.BoardProcessOption[EBoardKeyList.RoomName] = rname;\r\n }\r\n\r\n this.UseBoardProcessOption = false;\r\n }\r\n\r\n let refBr: Board;\r\n if (this.Objects.length > 0)\r\n refBr = this.Objects[0].Object as Board;\r\n\r\n for (let i = nbrs.length; i < this.Objects.length; i++)\r\n this.Objects[i].Object.Erase();\r\n\r\n for (let i = 0; i < nbrs.length; i++)\r\n {\r\n if (i < this.Objects.length)\r\n {\r\n let br = this.Objects[i].Object as Board;\r\n if (i >= this.DrawBoardCount)\r\n br.Erase(false);\r\n br.Position = nbrs[i].Position;\r\n br.Width = nbrs[i].Width;\r\n br.Height = nbrs[i].Height;\r\n br.Thickness = nbrs[i].Thickness;\r\n }\r\n else\r\n {\r\n if (refBr)\r\n {\r\n nbrs[i].ContourCurve = refBr.ContourCurve.Clone();\r\n nbrs[i].BoardProcessOption = refBr.BoardProcessOption;\r\n }\r\n this._db.ModelSpace.Append(nbrs[i]);\r\n this.Objects.push(nbrs[i].Id);\r\n }\r\n }\r\n this.DrawBoardCount = nbrs.length;\r\n\r\n let brs = this.Objects.filter(id => !id.IsErase).map(id => id.Object as Board);\r\n brs.map(br => br.SpaceOCS = this._CacheSpaceCS);\r\n }\r\n\r\n ReadFile(file: CADFiler)\r\n {\r\n let ver = file.Read();\r\n super.ReadFile(file);\r\n this.DrawBoardCount = file.Read();\r\n }\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(1);\r\n super.WriteFile(file);\r\n file.Write(this.DrawBoardCount);\r\n }\r\n}\r\n","import { BuildBehindBoards } from \"../../../Add-on/DrawBoard/BuildBoardTool\";\r\nimport { ISpaceParse } from \"../../../Geometry/SpaceParse/ISpaceParse\";\r\nimport { BehindBoardOption, IGrooveOption } from \"../../../UI/Store/BoardInterface\";\r\nimport { Factory } from \"../../CADFactory\";\r\nimport { TemplateBoardRecord } from \"./TemplateBoard\";\r\nimport { DefaultBehindBoardConfig } from \"../../../Editor/DefaultConfig\";\r\nimport { CADFiler } from \"../../CADFiler\";\r\n\r\n/**\r\n * 背板模板\r\n */\r\n@Factory\r\nexport class TemplateBehindBoard extends TemplateBoardRecord\r\n{\r\n protected _option: BehindBoardOption = { ...DefaultBehindBoardConfig };\r\n private grooveoption: IGrooveOption = {\r\n grooveAddLength: \"0\",\r\n grooveAddWidth: \"0\",\r\n grooveAddDepth: \"0\",\r\n knifeRadius: \"3\",\r\n };\r\n constructor()\r\n {\r\n super();\r\n this.name = \"背板(自动)\";\r\n }\r\n set Grooveoption(option: IGrooveOption)\r\n {\r\n this.WriteAllObjectRecord();\r\n Object.assign(this.grooveoption, option);\r\n }\r\n GeneralBoardList(space: ISpaceParse)\r\n {\r\n return BuildBehindBoards(this._option, space, this.grooveoption);\r\n }\r\n ReadFile(file: CADFiler)\r\n {\r\n let ver = file.Read();\r\n super.ReadFile(file);\r\n this._option.type = file.Read();\r\n this._option.name = file.Read();\r\n this._option.leftExt = file.Read();\r\n this._option.rightExt = file.Read();\r\n this._option.topExt = file.Read();\r\n this._option.bottomExt = file.Read();\r\n this._option.thickness = file.Read();\r\n this._option.boardPosition = file.Read();\r\n this._option.calcHeight = file.Read();\r\n this._option.moveDist = file.Read();\r\n this._option.boardRelative = file.Read();\r\n this._option.spaceSize = file.Read();\r\n this._option.count = file.Read();\r\n\r\n this.grooveoption.grooveAddLength = file.Read();\r\n this.grooveoption.grooveAddWidth = file.Read();\r\n this.grooveoption.grooveAddDepth = file.Read();\r\n this.grooveoption.knifeRadius = file.Read();\r\n\r\n if (ver === 1)\r\n {\r\n this._option.calcSpaceSize = this._option.spaceSize.toString();\r\n this._option.calcMoveDist = this._option.moveDist.toString();\r\n }\r\n\r\n if (ver >= 2)\r\n {\r\n this._option.calcSpaceSize = file.Read();\r\n this._option.calcMoveDist = file.Read();\r\n }\r\n\r\n }\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(2);\r\n super.WriteFile(file);\r\n file.Write(this._option.type);\r\n file.Write(this._option.name);\r\n file.Write(this._option.leftExt);\r\n file.Write(this._option.rightExt);\r\n file.Write(this._option.topExt);\r\n file.Write(this._option.bottomExt);\r\n file.Write(this._option.thickness);\r\n file.Write(this._option.boardPosition);\r\n file.Write(this._option.calcHeight);\r\n file.Write(this._option.moveDist);\r\n file.Write(this._option.boardRelative);\r\n file.Write(this._option.spaceSize);\r\n file.Write(this._option.count);\r\n\r\n file.Write(this.grooveoption.grooveAddLength);\r\n file.Write(this.grooveoption.grooveAddWidth);\r\n file.Write(this.grooveoption.grooveAddDepth);\r\n file.Write(this.grooveoption.knifeRadius);\r\n\r\n file.Write(this._option.calcSpaceSize);\r\n file.Write(this._option.calcMoveDist);\r\n\r\n }\r\n}\r\n","import { Vector2, Vector3 } from \"three\";\r\nimport { arrayLast } from \"../../Common/ArrayExt\";\r\nimport { EBoardKeyList } from \"../../Common/BoardKeyList\";\r\nimport { Log } from \"../../Common/Log\";\r\nimport { Singleton } from \"../../Common/Singleton\";\r\nimport { Arc } from \"../../DatabaseServices/Entity/Arc\";\r\nimport { Board } from \"../../DatabaseServices/Entity/Board\";\r\nimport { Polyline } from \"../../DatabaseServices/Entity/Polyline\";\r\nimport { AsVector2, equalv3, isParallelTo, XAxis, YAxis } from \"../../Geometry/GeUtils\";\r\nimport { ISpaceParse } from \"../../Geometry/SpaceParse/ISpaceParse\";\r\nimport { BoardType, DrillType, IHighSealedItem, LinesType } from \"../../UI/Store/BoardInterface\";\r\nimport { ELatticeArrayType, ILatticeOption } from \"../../UI/Store/LatticeInterface\";\r\n\r\nexport class DrawLatticeDrawerTool extends Singleton\r\n{\r\n private _config: ILatticeOption;\r\n private space: ISpaceParse;\r\n private leftBr: Board;\r\n private rightBr: Board;\r\n private frontBr: Board;\r\n private backBr: Board;\r\n private haveTopBr: boolean = false;\r\n get Config()\r\n {\r\n return this._config;\r\n }\r\n Draw(space: ISpaceParse, config: ILatticeOption): Board[]\r\n {\r\n this._config = config;\r\n this.space = space;\r\n\r\n this.ParseSpaceBrs();\r\n\r\n this.HandleSpace();\r\n\r\n let size = space.Size;\r\n\r\n if (config.arrayType === ELatticeArrayType.ByWidth)\r\n {\r\n config.widthCount = Math.floor((size.x + config.thickness) / (config.gripWidth + config.thickness));\r\n config.depthCount = Math.floor((size.y + config.thickness) / (config.gripDepth + config.thickness));\r\n }\r\n\r\n if (config.widthCount <= 0 || config.depthCount <= 0)\r\n {\r\n this.End();\r\n return [];\r\n }\r\n\r\n let gripWidth = (size.x - ((config.widthCount - 1) * config.thickness)) / config.widthCount;\r\n let gripDepth = (size.y - (config.depthCount - 1) * config.thickness) / config.depthCount;\r\n config.gripWidth = gripWidth;\r\n config.gripDepth = gripDepth;\r\n\r\n let position = space.SpaceBox.min.clone();\r\n\r\n let verBr = Board.CreateBoard(size.z, size.y, config.thickness, BoardType.Vertical);\r\n //分析切角圆弧的结果\r\n let res = this.ParseArcLenOrObliuqeAng(verBr);\r\n if (!res)\r\n {\r\n this.End();\r\n return [];\r\n };\r\n //左右侧板跟随\r\n this.ChangeLeftRightBr(verBr);\r\n\r\n this.ParseBrTooth(verBr);\r\n this.ParseHighSealing(verBr, config.leftSealed, config.rightSealed, config.upSealed, config.downSealed, false);\r\n this.WriteBoardProcessOption(verBr);\r\n let lattices: Board[] = [];\r\n for (let i = 1; i < config.widthCount; i++)\r\n {\r\n let br = verBr.Clone();\r\n br.Name = \"竖板\" + i;\r\n let pos = position.clone();\r\n pos.add(new Vector3(gripWidth * i + (i - 1) * config.thickness));\r\n br.Position = pos;\r\n br.ApplyMatrix(space.SpaceOCS);\r\n lattices.push(br);\r\n }\r\n\r\n let beBr = Board.CreateBoard(size.z, size.x, config.thickness, BoardType.Behind);\r\n this.ParseBrTooth(beBr);\r\n this.ParseHighSealing(beBr, config.leftSealed, config.rightSealed, config.upSealed, config.downSealed, true);\r\n this.WriteBoardProcessOption(beBr);\r\n for (let i = 1; i < config.depthCount; i++)\r\n {\r\n let br = beBr.Clone();\r\n br.Name = \"横板\" + i;\r\n let pos = position.clone();\r\n pos.add(new Vector3(0, (gripDepth + config.thickness) * i));\r\n br.Position = pos;\r\n br.ApplyMatrix(space.SpaceOCS);\r\n lattices.push(br);\r\n }\r\n\r\n this.End();\r\n return lattices;\r\n }\r\n private HandleSpace()\r\n {\r\n const config = this.Config;\r\n let box = this.space.SpaceBox;\r\n box.max.add(new Vector3(0, 0, -this.Config.downDist));\r\n //处理间隙\r\n box.min.add(new Vector3(config.space, config.space));\r\n box.max.add(new Vector3(-config.space, -config.space));\r\n\r\n if (this.frontBr && this.backBr)\r\n {\r\n let backPos = this.backBr.Position.applyMatrix4(this.frontBr.OCSInv);\r\n\r\n let addH = backPos.y + this.backBr.Height - this.frontBr.Height;\r\n if (addH > 0)\r\n {\r\n this.space.SpaceBox.max.add(new Vector3(0, 0, addH));\r\n if (config.isAuto)\r\n config.arcLen = addH;\r\n }\r\n else\r\n Log(\"挡板高度大于等于格子抽板高度,无法自动识别弧度!\");\r\n }\r\n\r\n if (this.haveTopBr)\r\n {\r\n Log(\"顶板不为空,绘制格子抽可能错误!\");\r\n }\r\n }\r\n private ChangeLeftRightBr(refBr: Board)\r\n {\r\n const config = this.Config;\r\n if (this.leftBr && this.rightBr)\r\n {\r\n if (config.isChange)\r\n {\r\n let lWidth = this.leftBr.Width;\r\n let lHeight = this.leftBr.Height;\r\n let lgrooves = this.leftBr.Grooves.slice();\r\n let rgrooves = this.rightBr.Grooves.slice();\r\n\r\n let rWidth = this.rightBr.Width;\r\n let rHeight = this.rightBr.Height;\r\n\r\n this.leftBr.ContourCurve = refBr.ContourCurve.Clone();\r\n this.rightBr.ContourCurve = refBr.ContourCurve.Clone();\r\n\r\n this.leftBr.Width = lWidth;\r\n this.leftBr.Height = lHeight;\r\n this.rightBr.Width = rWidth;\r\n this.rightBr.Height = rHeight;\r\n\r\n if (this.leftBr.Grooves.length !== lgrooves.length)\r\n this.leftBr.AppendGrooves(lgrooves);\r\n if (this.rightBr.Grooves.length !== rgrooves.length)\r\n this.rightBr.AppendGrooves(rgrooves);\r\n\r\n }\r\n else\r\n {\r\n // 左右侧板不跟随更改的时候,不要把它变成矩形\r\n // this.leftBr.InitBoard(this.leftBr.Height, this.leftBr.Width, this.leftBr.Thickness, this.leftBr.BoardType);\r\n // this.rightBr.InitBoard(this.rightBr.Height, this.rightBr.Width, this.rightBr.Thickness, this.rightBr.BoardType);\r\n }\r\n }\r\n }\r\n private ParseBrTooth(br: Board)\r\n {\r\n const config = this.Config;\r\n\r\n let grooveLenAdd = config.knifeRad;\r\n\r\n let initPts: Vector3[] = [];\r\n if (br.BoardType === BoardType.Behind)\r\n {\r\n let addWidth = (config.grooveAddWidth - 2 * config.upSealed) / 2;\r\n let p1 = new Vector3(br.Width - config.gripWidth + addWidth, br.Height);\r\n let p2 = new Vector3(br.Width - config.gripWidth + addWidth, br.Height / 2 - grooveLenAdd);\r\n let p3 = new Vector3(br.Width - config.gripWidth - br.Thickness - addWidth, br.Height / 2 - grooveLenAdd);\r\n let p4 = new Vector3(br.Width - config.gripWidth - br.Thickness - addWidth, br.Height);\r\n initPts.push(p1, p2, p3, p4);\r\n for (let i = 2; i < config.widthCount; i++)\r\n {\r\n initPts.push(\r\n ...[p1, p2, p3, p4].map(p => p.clone().add(new Vector3(-(config.gripWidth + br.Thickness) * (i - 1))))\r\n );\r\n }\r\n let cu = br.ContourCurve as Polyline;\r\n cu.AddVertexAt(cu.EndParam - 1, initPts.map(p => AsVector2(p)));\r\n br.ContourCurve = cu;\r\n }\r\n else\r\n {\r\n let addWidth = (config.grooveAddWidth - 2 * config.downSealed) / 2;\r\n let p1 = new Vector3(config.gripDepth - addWidth, 0);\r\n let p2 = new Vector3(config.gripDepth - addWidth, br.Height / 2 + grooveLenAdd);\r\n let p3 = new Vector3(config.gripDepth + br.Thickness + addWidth, br.Height / 2 + grooveLenAdd);\r\n let p4 = new Vector3(config.gripDepth + br.Thickness + addWidth, 0);\r\n initPts.push(p1, p2, p3, p4);\r\n for (let i = 2; i < config.depthCount; i++)\r\n {\r\n initPts.push(\r\n ...[p1, p2, p3, p4].map(p => p.clone().add(new Vector3((config.gripDepth + br.Thickness) * (i - 1))))\r\n );\r\n }\r\n let cu = br.ContourCurve as Polyline;\r\n cu.AddVertexAt(1, initPts.map(p => AsVector2(p)));\r\n br.ContourCurve = cu;\r\n }\r\n }\r\n private ParseSpaceBrs()\r\n {\r\n let vertBrs: Board[] = this.space.BoardMap.get(BoardType.Vertical);\r\n if (vertBrs && vertBrs.length > 1)\r\n {\r\n vertBrs.sort((br1, br2) =>\r\n {\r\n return br1.Position.applyMatrix4(this.space.SpaceOCSInv).x - br2.Position.applyMatrix4(this.space.SpaceOCSInv).x;\r\n });\r\n this.leftBr = vertBrs[0];\r\n this.rightBr = arrayLast(vertBrs);\r\n }\r\n\r\n let behindBrs = this.space.BoardMap.get(BoardType.Behind);\r\n\r\n if (behindBrs && behindBrs.length > 1)\r\n {\r\n behindBrs.sort((br1, br2) =>\r\n {\r\n return br1.Position.applyMatrix4(this.space.SpaceOCSInv).y - br2.Position.applyMatrix4(this.space.SpaceOCSInv).y;\r\n });\r\n\r\n this.backBr = arrayLast(behindBrs);\r\n this.frontBr = behindBrs[0];\r\n }\r\n\r\n let lyBrs = this.space.BoardMap.get(BoardType.Layer);\r\n this.haveTopBr = lyBrs && lyBrs.length > 1;\r\n }\r\n private ParseArcLenOrObliuqeAng(br: Board)\r\n {\r\n const config = this.Config;\r\n const size = this.space.Size;\r\n\r\n if (config.isOpenCut)\r\n {\r\n if (config.upCut > size.z || config.downCut > size.z)\r\n return true;\r\n if (config.upCut < 1 || config.downCut < 1)\r\n return true;\r\n let cu = br.ContourCurve as Polyline;\r\n cu.AddVertexAt(3, new Vector2(config.upCut, br.Height));\r\n cu.SetPointAt(4, new Vector2(0, br.Height - config.downCut));\r\n }\r\n else\r\n {\r\n if (config.arcLen > size.z || config.arcLen > size.y)\r\n {\r\n Log(\"圆弧角过大\");\r\n return false;\r\n }\r\n let cu = br.ContourCurve as Polyline;\r\n if (config.arcLen === 0)\r\n {\r\n Log(\"圆弧角为0\");\r\n return true;\r\n }\r\n cu.AddVertexAt(3, new Vector2(config.arcLen, br.Height));\r\n cu.SetBulgeAt(3, Math.tan(Math.PI / 8));\r\n cu.SetPointAt(4, new Vector2(0, br.Height - config.arcLen));\r\n }\r\n\r\n return true;\r\n }\r\n private WriteBoardProcessOption(br: Board)\r\n {\r\n const config = this.Config;\r\n br.KnifeRadius = config.knifeRad;\r\n br.BoardProcessOption.sealedUp = config.upSealed.toString();\r\n br.BoardProcessOption.sealedDown = config.downSealed.toString();\r\n br.BoardProcessOption.sealedLeft = config.leftSealed.toString();\r\n br.BoardProcessOption.sealedRight = config.rightSealed.toString();\r\n br.BoardProcessOption.drillType = DrillType.None;\r\n br.BoardProcessOption.highDrill.fill(DrillType.None);\r\n br.BoardProcessOption[EBoardKeyList.Lines] = LinesType.Reverse; //生成的板设置为反纹\r\n }\r\n protected ParseHighSealing(br: Board, leftSealed: number, rightSealed: number, topSealed: number, downSealed: number, isHor: boolean)\r\n {\r\n let cu = br.ContourCurve as Polyline;\r\n br.BoardProcessOption.sealedLeft = leftSealed.toString();\r\n br.BoardProcessOption.sealedRight = rightSealed.toString();\r\n br.BoardProcessOption.sealedUp = topSealed.toString();\r\n br.BoardProcessOption.sealedDown = downSealed.toString();\r\n\r\n let highSeals: IHighSealedItem[] = [];\r\n\r\n let sizes = [...new Set([downSealed, rightSealed, topSealed, leftSealed])];\r\n let downSeal = {\r\n size: downSealed, color: sizes.indexOf(downSealed) + 1\r\n };\r\n let rigthSeal = {\r\n size: rightSealed, color: sizes.indexOf(rightSealed) + 1\r\n };\r\n let topSeal = { size: topSealed, color: sizes.indexOf(topSealed) + 1 };\r\n let leftSeal = { size: leftSealed, color: sizes.indexOf(leftSealed) + 1 };\r\n\r\n if (isHor)\r\n {\r\n highSeals.push(downSeal, rigthSeal);\r\n\r\n for (let i = 1; i <= cu.EndParam - 3; i++)\r\n {\r\n highSeals.push(topSeal);\r\n }\r\n highSeals.push(leftSeal);\r\n }\r\n else\r\n {\r\n let count = (this._config.depthCount - 1) * 3 + this._config.depthCount;\r\n\r\n for (let i = 0; i < count; i++)\r\n {\r\n highSeals.push(downSeal);\r\n }\r\n for (let i = count; i < cu.EndParam; i++)\r\n {\r\n let c = cu.GetCurveAtIndex(i);\r\n if (c instanceof Arc)\r\n break;\r\n let derv = c.GetFistDeriv(0).normalize();\r\n if (equalv3(derv, YAxis))\r\n highSeals.push(rigthSeal);\r\n else if (isParallelTo(derv, XAxis))\r\n highSeals.push(topSeal);\r\n else if (equalv3(derv, YAxis.clone().negate()))\r\n highSeals.push(leftSeal);\r\n else\r\n highSeals.push(topSeal);\r\n }\r\n }\r\n br.BoardProcessOption.highSealed = highSeals;\r\n }\r\n private End()\r\n {\r\n this._config = null;\r\n this.leftBr = null;\r\n this.rightBr = null;\r\n this.backBr = null;\r\n this.frontBr = null;\r\n this.haveTopBr = false;\r\n }\r\n}\r\n","import { Vector3 } from \"three\";\r\nimport { ExtendsBoardThickness } from \"../../../Add-on/DrawBoard/BuildBoardTool\";\r\nimport { DrawLatticeDrawerTool } from \"../../../Add-on/LatticeDrawer/LatticeDrawerTool\";\r\nimport { EBoardKeyList } from \"../../../Common/BoardKeyList\";\r\nimport { DefaultLatticeConfig } from \"../../../Editor/DefaultConfig\";\r\nimport { Box3Ext } from \"../../../Geometry/Box\";\r\nimport { ISpaceParse } from \"../../../Geometry/SpaceParse/ISpaceParse\";\r\nimport { ILatticeOption } from \"../../../UI/Store/LatticeInterface\";\r\nimport { Factory } from \"../../CADFactory\";\r\nimport { CADFiler } from \"../../CADFiler\";\r\nimport { Board } from \"../../Entity/Board\";\r\nimport { TemplateRecord } from \"../TemplateRecord\";\r\n\r\n@Factory\r\nexport class TemplateLatticeRecord extends TemplateRecord\r\n{\r\n private option: ILatticeOption = { ...DefaultLatticeConfig };\r\n constructor()\r\n {\r\n super();\r\n this.name = \"格子抽(自动)\";\r\n }\r\n get Option()\r\n {\r\n return Object.assign({}, this.option);\r\n }\r\n set Option(option: ILatticeOption)\r\n {\r\n this.WriteAllObjectRecord();\r\n Object.assign(this.option, option);\r\n ExtendsBoardThickness(this, option.thickness);\r\n }\r\n\r\n // InitBaseParams()\r\n // {\r\n // super.InitBaseParams();\r\n // return this;\r\n // }\r\n\r\n protected async Update()\r\n {\r\n await super.Update();\r\n\r\n let thickness = this.GetParam(\"BH\")?.value as number;\r\n if (thickness)\r\n this.option.thickness = thickness;\r\n\r\n let tool = DrawLatticeDrawerTool.GetInstance() as DrawLatticeDrawerTool;\r\n\r\n let sbrs = this.PositioningSupportBoards;\r\n let space = new ISpaceParse(sbrs, this._CacheSpaceCS);\r\n space.ParseOK = true;\r\n space.SpaceBox = new Box3Ext(new Vector3(), this._CacheSpaceSize);\r\n\r\n let nbrs = tool.Draw(space, this.Option);\r\n\r\n if (sbrs.length > 0)\r\n {\r\n for (let br of nbrs)\r\n {\r\n br.BoardProcessOption[EBoardKeyList.CabinetName] = sbrs[0].BoardProcessOption[EBoardKeyList.CabinetName];\r\n br.BoardProcessOption[EBoardKeyList.RoomName] = sbrs[0].BoardProcessOption[EBoardKeyList.RoomName];\r\n }\r\n }\r\n\r\n\r\n for (let i = nbrs.length; i < this.Objects.length; i++)\r\n this.Objects[i].Object.Erase();\r\n\r\n for (let i = 0; i < nbrs.length; i++)\r\n {\r\n if (i < this.Objects.length)\r\n {\r\n let br = this.Objects[i].Object as Board;\r\n br.Erase(false);\r\n br.CopyFrom(nbrs[i]);\r\n br.SpaceOCS = this._CacheSpaceCS;\r\n }\r\n else\r\n {\r\n nbrs[i].SpaceOCS = this._CacheSpaceCS;\r\n this._db.ModelSpace.Append(nbrs[i]);\r\n this.Objects.push(nbrs[i].Id);\r\n }\r\n }\r\n }\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 super.ReadFile(file);\r\n\r\n this.option.arrayType = file.Read();\r\n this.option.gripWidth = file.Read();\r\n this.option.gripDepth = file.Read();\r\n this.option.widthCount = file.Read();\r\n this.option.depthCount = file.Read();\r\n this.option.knifeRad = file.Read();\r\n this.option.thickness = file.Read();\r\n this.option.arcLen = file.Read();\r\n this.option.downDist = file.Read();\r\n this.option.space = file.Read();\r\n this.option.grooveAddWidth = file.Read();\r\n this.option.upSealed = file.Read();\r\n this.option.downSealed = file.Read();\r\n this.option.leftSealed = file.Read();\r\n this.option.rightSealed = file.Read();\r\n this.option.isAuto = file.Read();\r\n this.option.isChange = file.Read();\r\n this.option.isOpenCut = file.Read();\r\n this.option.upCut = file.Read();\r\n this.option.downCut = file.Read();\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.option.arrayType);\r\n file.Write(this.option.gripWidth);\r\n file.Write(this.option.gripDepth);\r\n file.Write(this.option.widthCount);\r\n file.Write(this.option.depthCount);\r\n file.Write(this.option.knifeRad);\r\n file.Write(this.option.thickness);\r\n\r\n file.Write(this.option.arcLen);\r\n file.Write(this.option.downDist);\r\n file.Write(this.option.space);\r\n file.Write(this.option.grooveAddWidth);\r\n file.Write(this.option.upSealed);\r\n file.Write(this.option.downSealed);\r\n file.Write(this.option.leftSealed);\r\n file.Write(this.option.rightSealed);\r\n file.Write(this.option.isAuto);\r\n file.Write(this.option.isChange);\r\n\r\n file.Write(this.option.isOpenCut);\r\n file.Write(this.option.upCut);\r\n file.Write(this.option.downCut);\r\n }\r\n //#endregion\r\n}\r\n","import { BufferGeometry, Object3D, Points, PointsMaterial } from 'three';\r\nimport { DisposeThreeObj } from '../Common/Dispose';\r\nimport { GetEntity, IsEntity } from '../Common/Utils';\r\nimport { BufferGeometryUtils } from '../Geometry/BufferGeometryUtils';\r\n\r\nexport class GripScene extends Object3D\r\n{\r\n\r\n _GripMaterial: PointsMaterial;\r\n\r\n _GripMap = new Map();\r\n constructor()\r\n {\r\n super();\r\n this._GripMaterial = new PointsMaterial({\r\n size: 15,\r\n color: 0x001dfa,\r\n sizeAttenuation: false\r\n });\r\n }\r\n //增加\r\n Append(obj: Object3D)\r\n {\r\n if (this._GripMap.has(obj))\r\n return;\r\n\r\n if (IsEntity(obj))\r\n {\r\n let en = GetEntity(obj);\r\n let pts = en.GetGripPoints();\r\n if (pts.length > 1000) return;//显示太多的夹点会导致性能过低\r\n let geo = BufferGeometryUtils.CreateFromPts(pts);\r\n let ptsObj = new Points(geo, this._GripMaterial);\r\n ptsObj.userData.Entity = en;\r\n this.add(ptsObj);\r\n this._GripMap.set(obj, ptsObj);\r\n }\r\n }\r\n Remove(obj: Object3D)\r\n {\r\n let pts = this._GripMap.get(obj);\r\n if (pts)\r\n {\r\n DisposeThreeObj(pts);\r\n this.remove(pts);\r\n this._GripMap.delete(obj);\r\n }\r\n }\r\n\r\n //删除所有.\r\n Clear()\r\n {\r\n for (let [, pts] of this._GripMap)\r\n {\r\n this.remove(pts);\r\n pts.geometry.dispose();\r\n }\r\n this._GripMap.clear();\r\n }\r\n Update(entity: Object3D)\r\n {\r\n this.Remove(entity);\r\n this.Append(entity);\r\n }\r\n UpdateAll()\r\n {\r\n for (let [obj, ptsObj] of this._GripMap)\r\n {\r\n if (obj.parent && obj.visible)\r\n {\r\n let en = GetEntity(obj);\r\n let geo = ptsObj.geometry as BufferGeometry;\r\n let pts = en.GetGripPoints();\r\n if (!BufferGeometryUtils.UpdatePts(geo, pts))\r\n {\r\n geo.dispose();\r\n ptsObj.geometry = BufferGeometryUtils.CreateFromPts(pts);\r\n }\r\n }\r\n else\r\n {\r\n this.Remove(obj);\r\n }\r\n }\r\n }\r\n}\r\n","import { Object3D } from \"three\";\r\nimport { GetEntity } from \"../Common/Utils\";\r\nimport { Entity } from \"../DatabaseServices/Entity/Entity\";\r\nimport { GripScene } from \"../GraphicsSystem/GripScene\";\r\n\r\nexport interface Filter\r\n{\r\n //需要过滤的图元类型,如[Line,Arc]].\r\n filterTypes?: any[];\r\n filterFunction?: (obj: Object3D, ent?: Entity) => boolean;\r\n /**\r\n * 过滤掉已经被删除的图元或者未加入到数据库的图元\r\n */\r\n filterErase?: boolean;\r\n}\r\n\r\nexport function CheckFilter(obj: Object3D, filter?: Filter)\r\n{\r\n if (!obj.visible || obj instanceof GripScene)\r\n return false;\r\n if (!filter)\r\n return true;\r\n\r\n let ent = GetEntity(obj);\r\n if (filter.filterErase && (!ent || ent.Id === undefined || ent.IsErase))\r\n return false;\r\n\r\n if (filter.filterFunction && !filter.filterFunction(obj, ent))\r\n return false;\r\n if (filter.filterTypes && filter.filterTypes.some(T => ent instanceof T) !== true)\r\n return false;\r\n return true;\r\n}\r\n","import { Box2, Matrix4, Object3D, OrthographicCamera, PerspectiveCamera, Vector2, Vector3 } from 'three';\r\nimport { BoxCheckIntersect } from '../Geometry/CheckIntersect';\r\nimport { IViewer } from '../GraphicsSystem/IView';\r\nimport { SelectSetBase } from './SelectBase';\r\n\r\n//https://knowledge.autodesk.com/search-result/caas/CloudHelp/cloudhelp/2015/ENU/AutoCAD-AutoLISP/files/GUID-0F37CC5E-1559-4011-B8CF-A3BA0973B2C3-htm.html\r\nexport enum SelectType\r\n{\r\n None = 0,\r\n C = 1,//Crossing selection.\r\n W = 2 //Window selection.\r\n}\r\n\r\n/**\r\n * 矩形选区\r\n * 如果图形无法选择,那么注意该图形是否调用计算图形的包围球.\r\n */\r\nexport class SelectBox extends SelectSetBase\r\n{\r\n\r\n private _SelectBox: Box2 = new Box2();\r\n private _BoxCheck: BoxCheckIntersect;\r\n _SelectType: SelectType;\r\n _bIsPerCamera: boolean;\r\n\r\n constructor(view: IViewer, p1: Vector2, p2: Vector2, selectType?: SelectType)\r\n {\r\n super(view);\r\n this._SelectBox.setFromPoints([p1, p2]);\r\n this._SelectBox.max.add(new Vector2(1, 1));//避免盒子为空\r\n this._BoxCheck = new BoxCheckIntersect(this._SelectBox);\r\n this._SelectType = selectType;\r\n\r\n let camera = this._Viewer.Camera;\r\n if (camera instanceof OrthographicCamera || camera instanceof PerspectiveCamera)\r\n {\r\n let size = this._SelectBox.getSize(new Vector2());\r\n\r\n camera.setViewOffset(view.Width, view.Height, this._SelectBox.min.x, this._SelectBox.min.y, size.x, size.y);\r\n camera.updateProjectionMatrix();\r\n\r\n let _projScreenMatrix = new Matrix4();\r\n _projScreenMatrix.multiplyMatrices(camera.projectionMatrix, camera.matrixWorldInverse);\r\n\r\n this._Frustum.setFromProjectionMatrix(_projScreenMatrix);\r\n\r\n camera.clearViewOffset();\r\n }\r\n }\r\n\r\n get SelectBox()\r\n {\r\n return this._SelectBox;\r\n }\r\n\r\n //重载\r\n CheckSelectTraverse(obj: Object3D): boolean\r\n {\r\n if (!obj.visible) return false;\r\n\r\n if (this._SelectType === SelectType.C)\r\n {\r\n let isSelect = false;\r\n const traverse = (o: Object3D) =>\r\n {\r\n if (!o.visible) return;\r\n\r\n isSelect = this.CheckSelectC(o);\r\n if (isSelect) return;\r\n for (let c of o.children)\r\n {\r\n traverse(c);\r\n if (isSelect) return;\r\n }\r\n };\r\n\r\n traverse(obj);\r\n\r\n return isSelect;\r\n }\r\n else\r\n {\r\n //对于窗选,需要所有的实体都被包含才能被选中,所以这里区分了三个状态,0,-1,1,必须要有1,并且没有-1才行\r\n let isSelect = 0;//0表示没有被选中 1表示有被选中 -1表示选不重 某些东西没有几何体,返回0\r\n const traverse = (o: Object3D) =>\r\n {\r\n if (!o.visible) return;\r\n\r\n let isSelectObject = this.CheckSelectW(o);\r\n if (isSelectObject === 1)\r\n isSelect = isSelectObject;\r\n else if (isSelectObject === -1)\r\n {\r\n isSelect = isSelectObject;\r\n return;\r\n }\r\n\r\n for (let c of o.children)\r\n {\r\n traverse(c);\r\n if (isSelect === -1) return;\r\n }\r\n };\r\n\r\n traverse(obj);\r\n\r\n return isSelect === 1;\r\n }\r\n }\r\n\r\n private CheckSelectC(obj: Object3D): boolean\r\n {\r\n //@ts-ignore\r\n if (!obj.geometry || !this.FrustomIntersectObject(obj))\r\n return false;\r\n\r\n return this.IntersectObject(obj);\r\n }\r\n\r\n private CheckSelectW(obj: Object3D): 0 | -1 | 1\r\n {\r\n //@ts-ignore\r\n if (!obj.geometry || !this.FrustomIntersectObject(obj))\r\n return 0;\r\n\r\n return this.ContainerObject(obj);\r\n }\r\n\r\n //重载\r\n IntersectLine(p1Screen: Vector3, p2Screen: Vector3): boolean\r\n {\r\n return this._BoxCheck.IsIntersectLine(p1Screen, p2Screen);\r\n }\r\n /**\r\n * 包含该对象. 采用所有点都在选区内的做法\r\n */\r\n ContainerObject(obj: Object3D): 1 | -1\r\n {\r\n let { pts, } = this.GetObjectVertices(obj);\r\n if (pts.length === 0)\r\n return -1;\r\n for (let p of pts)\r\n {\r\n if (!this.ContainsPoint(p))\r\n return -1;\r\n }\r\n return 1;\r\n }\r\n //选择框包含该顶点\r\n ContainsPoint(ptWcs: Vector3): boolean\r\n {\r\n return this._Frustum.containsPoint(ptWcs);\r\n }\r\n}\r\n","import { Intersection, Object3D, OrthographicCamera, Raycaster, Vector2, Vector3 } from 'three';\r\nimport { HostApplicationServices } from '../ApplicationServices/HostApplicationServices';\r\nimport { equaln } from '../Geometry/GeUtils';\r\nimport { IViewer } from '../GraphicsSystem/IView';\r\nimport { SelectBox, SelectType } from './SelectBox';\r\nimport { CheckFilter, Filter } from './SelectFilter';\r\n\r\n/**\r\n * 构造射线投射器.\r\n * @param {Vector3} ptVcs 屏幕坐标系的点\r\n */\r\nexport function GenerateRaycaster(ptVcs: Vector3, view: IViewer): Raycaster\r\n{\r\n let raycaster = new Raycaster();\r\n raycaster.setFromCamera({\r\n x: (ptVcs.x / view.Width) * 2 - 1, //-1 到 1 所以 (x-(w/2))/(w/2) =>\r\n y: - (ptVcs.y / view.Height) * 2 + 1 //y轴相反\r\n }, view.Camera);\r\n if (view.Camera instanceof OrthographicCamera)\r\n raycaster.ray.origin.sub(raycaster.ray.direction.clone().multiplyScalar(1e6));\r\n return raycaster;\r\n}\r\n\r\nlet boxSize = new Vector2;\r\nlet pCenter = new Vector2;\r\n\r\n/**\r\n * 根据鼠标位置确定鼠标范围内选中的实体.\r\n * @param {Vector3} ptVcs 鼠标的屏幕点\r\n * @param {IViewer} view 指定视图\r\n * @param {Object3D} [selectObject] 选择的对象. 如果为空则为app.view.scene\r\n * @param {Boolean} selectBoxGetLastestEn 点选曲线和点时是否选取最后创建的 默认true\r\n * @returns {Object3D[]} 返回选择到的对象,注意该返回的对象并不会得到它的子对象.\r\n */\r\nexport function PointPick(ptVcs: Vector3,\r\n view: IViewer,\r\n filter?: Filter,\r\n selectObjects: Object3D[] = view.Scene.children,\r\n selectSize = 10\r\n): Object3D[]\r\n{\r\n let raycaster = GenerateRaycaster(ptVcs, view);\r\n\r\n let intersection = Raycast(raycaster, selectObjects, filter);\r\n if (intersection && intersection.object)\r\n return [intersection.object];\r\n\r\n pCenter.set(ptVcs.x, ptVcs.y);\r\n boxSize.set(selectSize, selectSize);\r\n let minPt = pCenter.clone().sub(boxSize);\r\n let maxPt = pCenter.clone().add(boxSize);\r\n\r\n let selectBox = new SelectBox(view, minPt, maxPt, SelectType.C);\r\n selectBox.Select(selectObjects, filter);\r\n\r\n return [...selectBox._SelectList];\r\n}\r\n\r\nexport function PointPickOneObject(\r\n ptVcs: Vector3,\r\n view: IViewer,\r\n filter?: Filter,\r\n selectObjects: Object3D[] = view.Scene.children,\r\n useSelectBox = true\r\n): Object3D | undefined\r\n{\r\n let raycaster = GenerateRaycaster(ptVcs, view);\r\n\r\n let intersection = Raycast(raycaster, selectObjects, filter);\r\n if (intersection && intersection.object)\r\n return intersection.object;\r\n\r\n if (!useSelectBox) return;\r\n\r\n let pCenter = new Vector2(ptVcs.x, ptVcs.y);\r\n let selectSize = new Vector2(HostApplicationServices.cursorSize.SquareSize, HostApplicationServices.cursorSize.SquareSize);\r\n let minPt = pCenter.clone().sub(selectSize);\r\n let maxPt = pCenter.clone().add(selectSize);\r\n\r\n let selectBox = new SelectBox(view, minPt, maxPt, SelectType.C);\r\n selectBox.Select(selectObjects, filter);\r\n\r\n if (selectBox.SelectEntityList.length > 0)\r\n {\r\n let maxId = -Infinity;\r\n let object: Object3D;\r\n for (let o of selectBox._SelectList)\r\n {\r\n if (o.id > maxId)\r\n {\r\n maxId = o.id;\r\n object = o;\r\n }\r\n }\r\n return object;\r\n }\r\n}\r\n\r\nexport function Raycast(ray: Raycaster, objectCol: Object3D[], filter?: Filter): Intersection | undefined\r\n{\r\n let pick: Intersection;\r\n\r\n for (let obj of objectCol)\r\n {\r\n if (!CheckFilter(obj, filter))\r\n continue;\r\n\r\n let intersects: Intersection[] = [];\r\n obj.traverse(o =>\r\n {\r\n //@ts-ignore\r\n if (intersects.length === 0 && o.visible && !o.isLine && !o.isPoints)\r\n o.raycast(ray, intersects);\r\n });\r\n if (intersects.length > 0)\r\n {\r\n for (let i of intersects)\r\n {\r\n if (!pick\r\n || pick.distance > i.distance\r\n || (equaln(pick.distance, i.distance) && pick.object.id < i.object.id))\r\n {\r\n pick = i;\r\n pick.object = obj;\r\n }\r\n }\r\n }\r\n }\r\n return pick;\r\n}\r\n","import { Box2, Box3, Intersection, Matrix4, Object3D, Raycaster, Vector2, Vector3 } from \"three\";\r\nimport { GetEntity } from \"../../Common/Utils\";\r\nimport { CylinderHole, GangDrillType } from \"../../DatabaseServices/3DSolid/CylinderHole\";\r\nimport { Contour } from \"../../DatabaseServices/Contour\";\r\nimport { Board } from \"../../DatabaseServices/Entity/Board\";\r\nimport { Polyline } from \"../../DatabaseServices/Entity/Polyline\";\r\nimport { ObjectId } from \"../../DatabaseServices/ObjectId\";\r\nimport { Shape } from \"../../DatabaseServices/Shape\";\r\nimport { Raycast } from \"../../Editor/PointPick\";\r\nimport { BoardFaceType, BoardGetFace } from \"../../Geometry/DrillParse/BoardGetFace\";\r\nimport { Face } from \"../../Geometry/DrillParse/Face\";\r\nimport { angleTo, AsVector2, equaln, equalv3, isParallelTo, MoveMatrix } from \"../../Geometry/GeUtils\";\r\nimport { RenderType } from \"../../GraphicsSystem/RenderType\";\r\nimport { INailRule, IShinkOption, LayerNailOption } from \"../../UI/Store/BoardInterface\";\r\n\r\nclass ActivityLayerBoardTool\r\n{\r\n NailRules: INailRule[];\r\n private GetBoardIntersection(face: Face, objects: Object3D[], br: Board)\r\n {\r\n for (let s of [0.5, 0.1, 0.9])\r\n {\r\n let center = new Vector3(face.Length * s, face.Width * s).applyMatrix4(face.OCS).add(face.Normal.negate());\r\n\r\n let intersection = this.RayPoint(center, face.Normal, objects);\r\n if (intersection && intersection.object)\r\n {\r\n let en = GetEntity(intersection.object) as Board;\r\n if (en.BoardProcessOption.roomName === br.BoardProcessOption.roomName && en.BoardProcessOption.cabinetName === br.BoardProcessOption.cabinetName)\r\n return intersection;\r\n }\r\n }\r\n }\r\n private IntersectFace(otherBoard: Board, face: Face)\r\n {\r\n let size: Vector3 | Vector2 = new Vector3();\r\n let min = new Vector3();\r\n let diffMat = face.OCSInv.multiply(otherBoard.OCS);\r\n\r\n if (otherBoard.IsSpecialShape)\r\n {\r\n let rect = new Polyline().RectangleFrom2Pt(new Vector3(), new Vector3(face.Length, face.Width));\r\n let con = otherBoard.ContourCurve.Clone().ApplyMatrix(diffMat);\r\n con.Z0();\r\n let shape1 = new Shape(Contour.CreateContour([rect]));\r\n let shape2 = new Shape(Contour.CreateContour([con]));\r\n\r\n let shapes = shape1.IntersectionBoolOperation(shape2);\r\n if (shapes.length > 0)\r\n {\r\n let box = shapes[0].BoundingBox;\r\n min.copy(box.min);\r\n size = box.getSize(new Vector3);\r\n }\r\n }\r\n else\r\n {\r\n let b1 = new Box3(new Vector3(), new Vector3(otherBoard.Width, otherBoard.Height));\r\n b1.applyMatrix4(diffMat);\r\n\r\n let box = new Box2().setFromPoints([AsVector2(b1.min), AsVector2(b1.max)]);\r\n let box2 = new Box2(new Vector2(), new Vector2(face.Length, face.Width));\r\n\r\n box2.intersect(box);\r\n\r\n size = box2.getSize(new Vector2);\r\n min.set(box2.min.x, box2.min.y, 0);\r\n }\r\n\r\n face.Length = size.x;\r\n face.Width = size.y;\r\n face.OCS.multiply(MoveMatrix(min));\r\n }\r\n private GetShrinkDist(face: Face, br: Board, option: IShinkOption)\r\n {\r\n let fNoarmal = face.Normal;\r\n let xVec = new Vector3().setFromMatrixColumn(br.OCS, 0);\r\n let yVec = new Vector3().setFromMatrixColumn(br.OCS, 1);\r\n\r\n let shrink = 0;\r\n if (isParallelTo(fNoarmal, xVec))\r\n {\r\n if (equalv3(fNoarmal, xVec, 1e-5))\r\n shrink = option.back;\r\n else\r\n shrink = option.front;\r\n }\r\n else if (isParallelTo(fNoarmal, yVec))\r\n {\r\n if (equalv3(fNoarmal, yVec, 1e-5))\r\n shrink = option.left;\r\n else\r\n shrink = option.right;\r\n }\r\n return shrink;\r\n }\r\n private GetShrinkBoardIndexesMap(face: Face, br: Board, shrink: number, indexMap: Map)\r\n {\r\n if (shrink)\r\n {\r\n const FUZZ = 0.1;\r\n let scaleBox = new Box3().setFromPoints([new Vector3(-FUZZ, -FUZZ, -FUZZ), new Vector3(face.Length + FUZZ, face.Width + FUZZ, FUZZ)]).applyMatrix4(face.OCS);\r\n let pts = br.GetStretchPoints();\r\n let stretchIndexs: number[] = [];\r\n for (let i = 0, length = pts.length; i < length; i++)\r\n {\r\n let p = pts[i];\r\n if (scaleBox.containsPoint(p))\r\n stretchIndexs.push(i);\r\n }\r\n indexMap.set(face.Normal.negate().multiplyScalar(shrink), stretchIndexs);\r\n }\r\n }\r\n private GetRuleCount(width: number, rules: INailRule[])\r\n {\r\n if (this.NailRules)\r\n rules = this.NailRules;\r\n for (let rule of rules)\r\n {\r\n if (width > rule.startDist && width <= rule.endDist + 1e-6)\r\n {\r\n return rule.count;\r\n }\r\n }\r\n return 0;\r\n }\r\n private BuildNails(initNail: CylinderHole, nailOpt: LayerNailOption, face: Face, fYVec: Vector3)\r\n {\r\n let fXVec = new Vector3().setFromMatrixColumn(face.OCS, 0);\r\n let addCount = nailOpt.addCount;\r\n let count = nailOpt.count;\r\n let dist = nailOpt.dist;\r\n let frontDist = nailOpt.front;\r\n let backDist = nailOpt.behind;\r\n let singleDist: number;\r\n //绘制数量为1时,层板钉在中间位置\r\n if (count === 1)\r\n singleDist = face.Length / 2 - frontDist;\r\n else\r\n singleDist = (face.Length - frontDist - backDist) / (count - 1);\r\n\r\n let buildNails: CylinderHole[] = [];\r\n\r\n //构建层板钉\r\n for (let i = 0; i < count; i++)\r\n {\r\n if (count === 1)\r\n {\r\n initNail.ApplyMatrix(MoveMatrix(fXVec.multiplyScalar(singleDist)));\r\n buildNails.push(initNail);\r\n }\r\n else\r\n {\r\n let nail = initNail.Clone();\r\n nail.ApplyMatrix(MoveMatrix(fXVec.clone().multiplyScalar(i * singleDist)));\r\n buildNails.push(nail);\r\n }\r\n }\r\n\r\n //增加的层板钉\r\n let addNails: CylinderHole[] = [];\r\n for (let i = 1; i <= addCount; i++)\r\n {\r\n for (let nail of buildNails)\r\n {\r\n addNails.push(nail.Clone().ApplyMatrix(MoveMatrix(fYVec.clone().multiplyScalar(dist * i))));\r\n addNails.push(nail.Clone().ApplyMatrix(MoveMatrix(fYVec.clone().negate().multiplyScalar(dist * i))));\r\n }\r\n }\r\n buildNails.push(...addNails);\r\n return buildNails;\r\n }\r\n private RayPoint(p: Vector3, n: Vector3, brs: Object3D[]): Intersection\r\n {\r\n let ray = new Raycaster(p, n);\r\n let intersection = Raycast(ray, brs);\r\n return intersection;\r\n }\r\n Start(brs: Board[], nailOption: LayerNailOption, rules: INailRule[] = [], option?: IShinkOption)\r\n {\r\n if (brs.length === 0) return;\r\n\r\n let objects: Object3D[] = [];\r\n //如果层板和左右板得距离大于这个值,则这边不绘制层板钉\r\n let refDist = nailOption.length - nailOption.depth;\r\n\r\n for (let br of brs[0].Db.ModelSpace.Entitys)\r\n {\r\n if (!br.IsErase && br.Visible && br instanceof Board)\r\n {\r\n objects.push(br.GetDrawObjectFromRenderType(RenderType.Physical));\r\n }\r\n }\r\n for (let br of brs)\r\n {\r\n let faces = BoardGetFace.GetAllSidesFaces(br, true);\r\n let vecIndexMap: Map = new Map();\r\n let xVec = new Vector3().setFromMatrixColumn(br.OCS, 0);\r\n if (option?.name)\r\n br.Name = option.name;\r\n\r\n let nailBoardMap = new WeakMap();\r\n let allNails: CylinderHole[] = [];\r\n for (let face of faces)\r\n {\r\n if (face.type === BoardFaceType.Side)\r\n {\r\n let shrink = 0;\r\n if (option)\r\n {\r\n shrink = this.GetShrinkDist(face, br, option);\r\n this.GetShrinkBoardIndexesMap(face, br, shrink, vecIndexMap);\r\n }\r\n if (!nailOption.isDraw) continue;\r\n if (!nailOption.isInBack && isParallelTo(face.Normal, xVec)) continue;\r\n\r\n let intersection = this.GetBoardIntersection(face, objects, br);\r\n if (intersection)\r\n {\r\n //防止板件悬空 #I1DPHR\r\n if (intersection.distance - 1 + shrink >= refDist)\r\n continue;\r\n\r\n let otherBoard = GetEntity(intersection.object) as Board;\r\n\r\n this.IntersectFace(otherBoard, face);\r\n\r\n let nail = CylinderHole.CreateCylHole(nailOption.rad, nailOption.length, GangDrillType.Nail);\r\n nail.ColorIndex = 4;\r\n let fNor = face.Normal;\r\n let ang = -angleTo(fNor, otherBoard.Normal.negate());\r\n if (equaln(Math.abs(ang), Math.PI))\r\n ang = 0;\r\n\r\n let xDist = nailOption.front;\r\n let yDist = - nailOption.rad - shrink * Math.sin(ang);\r\n let zDist = 0;\r\n let zRoMat = new Matrix4().makeRotationX(ang);\r\n\r\n let p = new Vector3().setFromMatrixPosition(face.OCS.clone().multiply(zRoMat)).applyMatrix4(otherBoard.OCSInv);\r\n if (p.z < 1e-6)\r\n {\r\n zDist = -p.z;\r\n }\r\n else if (p.z > otherBoard.Thickness - 1e-6)\r\n {\r\n zDist = p.z - otherBoard.Thickness;\r\n }\r\n else\r\n {\r\n console.error(\"不该存在的情况\");\r\n }\r\n\r\n zDist += (- nail.Height + nailOption.depth);\r\n\r\n nail.Position = nail.Position.add(new Vector3(xDist, yDist, zDist));\r\n nail.ApplyMatrix(zRoMat).ApplyMatrix(face.OCS);\r\n\r\n if (option || this.NailRules)\r\n nailOption.count = this.GetRuleCount(face.Length, rules);\r\n\r\n let yVec = new Vector3().setFromMatrixColumn(otherBoard.OCS, 1);\r\n\r\n let nails = this.BuildNails(nail, nailOption, face, yVec);\r\n for (let nail of nails)\r\n nailBoardMap.set(nail, otherBoard);\r\n allNails.push(...nails);\r\n }\r\n }\r\n }\r\n this.AppendBoard(br, nailBoardMap, allNails);\r\n for (let [vec, indexes] of vecIndexMap)\r\n {\r\n br.MoveStretchPoints(indexes, vec);\r\n vec = null;\r\n }\r\n }\r\n this.NailRules = null;\r\n }\r\n private AppendBoard(br: Board, brNailMap: WeakMap, nails: CylinderHole[])\r\n {\r\n let oldNailIds = br.LayerNails.filter(n => n?.Object);\r\n this.HandleNailList(nails, oldNailIds, brNailMap);\r\n for (let i = nails.length; i < oldNailIds.length; i++)\r\n oldNailIds[i]?.Object?.Erase();\r\n for (let i = 0; i < nails.length; i++)\r\n {\r\n let nId: ObjectId;\r\n let otherBoard = brNailMap.get(nails[i]);\r\n if (i < oldNailIds.length && oldNailIds[i])\r\n {\r\n let nail = oldNailIds[i].Object as CylinderHole;\r\n if (nail.IsErase)\r\n nail.Erase(false);\r\n if (!equalv3(nail.Normal, nails[i].Normal))\r\n nail.OCS = nails[i].OCS;\r\n nail.Radius = nails[i].Radius;\r\n nail.Height = nails[i].Height;\r\n nail.Position = nails[i].Position;\r\n nId = nail.Id;\r\n\r\n if (nail.FId !== otherBoard.Id)\r\n {\r\n nail.FId = otherBoard.Id;\r\n otherBoard.AppendNails([nId]);\r\n }\r\n }\r\n else\r\n {\r\n br.Db.ModelSpace.Append(nails[i]);\r\n nId = nails[i].Id;\r\n br.AppendNails([nId]);\r\n nails[i].MId = br.Id;\r\n nails[i].FId = otherBoard.Id;\r\n otherBoard.AppendNails([nId]);\r\n }\r\n }\r\n }\r\n private HandleNailList(newNails: CylinderHole[], oldNails: ObjectId[], naiMap: WeakMap)\r\n {\r\n if (oldNails.length < newNails.length)\r\n {\r\n let temp: CylinderHole[] = [];\r\n for (let i = 0; i < oldNails.length; i++)\r\n {\r\n let nail = oldNails[i].Object as CylinderHole;\r\n if (newNails.length === 0) break;\r\n let j = 0;\r\n for (; j < newNails.length; j++)\r\n {\r\n let newNail = newNails[j] as CylinderHole;\r\n let otherBoard = naiMap.get(newNail);\r\n if (otherBoard.Id === nail.FId)\r\n break;\r\n }\r\n if (j < newNails.length)\r\n temp.push(...newNails.splice(j, 1));\r\n }\r\n newNails.unshift(...temp);\r\n }\r\n else\r\n {\r\n let temp: ObjectId[] = [];\r\n\r\n for (let i = 0; i < newNails.length; i++)\r\n {\r\n let nail = newNails[i];\r\n let otherBoard = naiMap.get(nail);\r\n let j = 0;\r\n for (; j < oldNails.length; j++)\r\n {\r\n let oldNail = oldNails[j].Object as CylinderHole;\r\n if (oldNail.FId === otherBoard.Id)\r\n break;\r\n }\r\n if (j < oldNails.length)\r\n temp.push(...oldNails.splice(j, 1));\r\n else\r\n temp.push(undefined); //不存在可以复用的层板钉,占个位 重新添加\r\n }\r\n oldNails.unshift(...temp);\r\n }\r\n }\r\n}\r\n\r\nexport const activityLayerBoardTool = new ActivityLayerBoardTool();\r\n","import { activityLayerBoardTool } from \"../../../Add-on/DrawBoard/ActivityLayerBoardTool\";\r\nimport { BuildLayerBoards } from \"../../../Add-on/DrawBoard/BuildBoardTool\";\r\nimport { DefaultLayerBoardConfig, DefaultNailOption } from \"../../../Editor/DefaultConfig\";\r\nimport { ISpaceParse } from \"../../../Geometry/SpaceParse/ISpaceParse\";\r\nimport { IGrooveOption, LayerBoardOption, LayerNailOption } from \"../../../UI/Store/BoardInterface\";\r\nimport { Factory } from \"../../CADFactory\";\r\nimport { CADFiler } from \"../../CADFiler\";\r\nimport { Board } from \"../../Entity/Board\";\r\nimport { TemplateBoardRecord } from \"./TemplateBoard\";\r\n\r\n/**\r\n * 层板模板\r\n */\r\n@Factory\r\nexport class TemplateLayerBoard extends TemplateBoardRecord\r\n{\r\n constructor()\r\n {\r\n super();\r\n this.name = \"层板(自动)\";\r\n }\r\n protected _option: LayerBoardOption = { ...DefaultLayerBoardConfig };\r\n private _nailOption: LayerNailOption = { ...DefaultNailOption };\r\n private grooveOption: IGrooveOption = {\r\n grooveAddLength: \"0\",\r\n grooveAddWidth: \"0\",\r\n grooveAddDepth: \"0\",\r\n knifeRadius: \"3\",\r\n };\r\n set GrooveOption(option: IGrooveOption)\r\n {\r\n this.WriteAllObjectRecord();\r\n Object.assign(this.grooveOption, option);\r\n }\r\n get NailOption()\r\n {\r\n return { ...this._nailOption };\r\n }\r\n set NailOption(nailOpt: LayerNailOption)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._nailOption = { ...nailOpt };\r\n }\r\n\r\n GeneralBoardList(space: ISpaceParse)\r\n {\r\n return BuildLayerBoards(this._option, space, this.grooveOption);\r\n }\r\n protected async Update()\r\n {\r\n await super.Update();\r\n\r\n let brs: Board[] = [];\r\n\r\n for (let id of this.Objects)\r\n {\r\n if (!id.IsErase)\r\n {\r\n let b = id.Object as Board;\r\n brs.push(b);\r\n }\r\n }\r\n if (this._option.isActive)\r\n activityLayerBoardTool.Start(brs, this._nailOption);\r\n }\r\n ReadFile(file: CADFiler)\r\n {\r\n let ver = file.Read();\r\n super.ReadFile(file);\r\n this._option.type = file.Read();\r\n this._option.name = file.Read();\r\n this._option.frontShrink = file.Read();\r\n this._option.leftShrink = file.Read();\r\n this._option.rightShrink = file.Read();\r\n this._option.calcHeight = file.Read();\r\n this._option.isTotalLength = file.Read();\r\n this._option.boardRelative = file.Read();\r\n this._option.thickness = file.Read();\r\n this._option.count = file.Read();\r\n this._option.spaceSize = file.Read();\r\n this._option.isActive = file.Read();\r\n\r\n if (ver > 1)\r\n {\r\n this._nailOption.isDraw = file.Read();\r\n this._nailOption.addCount = file.Read();\r\n this._nailOption.dist = file.Read();\r\n this._nailOption.isGroup = file.Read();\r\n this._nailOption.isInBack = file.Read();\r\n this._nailOption.front = file.Read();\r\n this._nailOption.behind = file.Read();\r\n this._nailOption.count = file.Read();\r\n this._nailOption.rad = file.Read();\r\n this._nailOption.length = file.Read();\r\n this._nailOption.depth = file.Read();\r\n }\r\n\r\n if (ver >= 3)\r\n {\r\n this._option.calcSpaceSize = file.Read();\r\n this._option.calcFrontShrink = file.Read();\r\n this._option.calcLeftShrink = file.Read();\r\n this._option.calcRightShrink = file.Read();\r\n }\r\n else\r\n {\r\n this._option.calcSpaceSize = this._option.spaceSize.toString();\r\n this._option.calcFrontShrink = this._option.frontShrink.toString();\r\n this._option.calcLeftShrink = this._option.leftShrink.toString();\r\n this._option.calcRightShrink = this._option.rightShrink.toString();\r\n }\r\n if (ver > 3)\r\n {\r\n this.grooveOption.grooveAddLength = file.Read();\r\n this.grooveOption.grooveAddWidth = file.Read();\r\n this.grooveOption.grooveAddDepth = file.Read();\r\n this.grooveOption.knifeRadius = file.Read();\r\n }\r\n else\r\n {\r\n this.grooveOption.grooveAddLength = this.grooveOption.grooveAddLength.toString();\r\n this.grooveOption.grooveAddWidth = this.grooveOption.grooveAddWidth.toString();\r\n this.grooveOption.grooveAddDepth = this.grooveOption.grooveAddDepth.toString();\r\n this.grooveOption.knifeRadius = this.grooveOption.knifeRadius.toString();\r\n }\r\n }\r\n\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(4);\r\n super.WriteFile(file);\r\n file.Write(this._option.type);\r\n file.Write(this._option.name);\r\n file.Write(this._option.frontShrink);\r\n file.Write(this._option.leftShrink);\r\n file.Write(this._option.rightShrink);\r\n file.Write(this._option.calcHeight);\r\n file.Write(this._option.isTotalLength);\r\n file.Write(this._option.boardRelative);\r\n file.Write(this._option.thickness);\r\n file.Write(this._option.count);\r\n file.Write(this._option.spaceSize);\r\n file.Write(this._option.isActive);\r\n\r\n //ver2\r\n file.Write(this._nailOption.isDraw);\r\n file.Write(this._nailOption.addCount);\r\n file.Write(this._nailOption.dist);\r\n file.Write(this._nailOption.isGroup);\r\n file.Write(this._nailOption.isInBack);\r\n file.Write(this._nailOption.front);\r\n file.Write(this._nailOption.behind);\r\n file.Write(this._nailOption.count);\r\n file.Write(this._nailOption.rad);\r\n file.Write(this._nailOption.length);\r\n file.Write(this._nailOption.depth);\r\n\r\n file.Write(this._option.calcSpaceSize);\r\n file.Write(this._option.calcFrontShrink);\r\n file.Write(this._option.calcLeftShrink);\r\n file.Write(this._option.calcRightShrink);\r\n\r\n //ver4\r\n file.Write(this.grooveOption.grooveAddLength);\r\n file.Write(this.grooveOption.grooveAddWidth);\r\n file.Write(this.grooveOption.grooveAddDepth);\r\n file.Write(this.grooveOption.knifeRadius);\r\n }\r\n}\r\n","import { Vector3 } from \"three\";\r\nimport { Factory } from \"../../CADFactory\";\r\nimport { CADFiler } from \"../../CADFiler\";\r\nimport { Board } from \"../../Entity/Board\";\r\nimport { TemplateParam } from \"../Param/TemplateParam\";\r\nimport { TemplateParamType } from \"../Param/TemplateParamType\";\r\nimport { TemplateRecord } from \"../TemplateRecord\";\r\n\r\n/**\r\n * 左右侧板模板\r\n */\r\n@Factory\r\nexport class TemplateLeftRightBoardRecord extends TemplateRecord\r\n{\r\n constructor()\r\n {\r\n super();\r\n this.name = \"左右侧板(自动)\";\r\n }\r\n InitBaseParams()\r\n {\r\n super.InitBaseParams();\r\n let lparam = new TemplateParam();\r\n lparam.name = \"ZS\";\r\n lparam.description = \"左缩\";\r\n lparam.type = TemplateParamType.Float;\r\n lparam.value = 0;\r\n this.Params.push(lparam);\r\n\r\n let rparam = new TemplateParam();\r\n rparam.name = \"YS\";\r\n rparam.description = \"右缩\";\r\n rparam.type = TemplateParamType.Float;\r\n rparam.value = 0;\r\n this.Params.push(rparam);\r\n return this;\r\n }\r\n protected async Update()\r\n {\r\n let [lId, rId] = this.Objects;\r\n\r\n if (!lId || lId.IsErase || !rId || rId.IsErase) return;\r\n\r\n let lBr = lId.Object as Board;\r\n let rBr = rId.Object as Board;\r\n let ls = this.GetParam(\"ZS\")?.value as number ?? 0;\r\n lBr.Position = lBr.Position.sub(new Vector3(0, ls));\r\n\r\n await super.Update();\r\n\r\n let thickness = this.GetParam(\"BH\")?.value as number ?? 18;\r\n ls = this.GetParam(\"ZS\")?.value as number ?? 0;\r\n let rs = this.GetParam(\"YS\")?.value as number ?? 0;\r\n\r\n lBr.Thickness = thickness;\r\n rBr.Thickness = thickness;\r\n\r\n if (!this._CacheSpaceSize)\r\n {\r\n console.warn(\"左右侧板模板数据错误无法更新\");\r\n return;\r\n }\r\n\r\n lBr.Height = this._CacheSpaceSize.z;\r\n rBr.Height = this._CacheSpaceSize.z;\r\n\r\n lBr.Width = this._CacheSpaceSize.y - ls;\r\n rBr.Width = this._CacheSpaceSize.y - rs;\r\n lBr.Position = lBr.Position.add(new Vector3(0, ls));\r\n\r\n let x = new Vector3().setFromMatrixColumn(this._CacheSpaceCS, 0);\r\n let y = new Vector3().setFromMatrixColumn(this._CacheSpaceCS, 1);\r\n x.multiplyScalar(this._CacheSpaceSize.x - lBr.Thickness);\r\n rBr.Position = lBr.Position.sub(y.multiplyScalar(ls - rs)).add(x);\r\n }\r\n ReadFile(file: CADFiler)\r\n {\r\n super.ReadFile(file);\r\n if (this._Version < 3)\r\n {\r\n if (!this.GetParam((\"ZS\")))\r\n {\r\n let lparam = new TemplateParam();\r\n lparam.name = \"ZS\";\r\n lparam.description = \"左缩\";\r\n lparam.type = TemplateParamType.Float;\r\n lparam.value = 0;\r\n this.Params.push(lparam);\r\n\r\n let rparam = new TemplateParam();\r\n rparam.name = \"YS\";\r\n rparam.description = \"右缩\";\r\n rparam.type = TemplateParamType.Float;\r\n rparam.value = 0;\r\n this.Params.push(rparam);\r\n }\r\n }\r\n\r\n }\r\n}\r\n","import { Factory } from \"../../CADFactory\";\r\nimport { Board } from \"../../Entity/Board\";\r\nimport { TemplateRecord } from \"../TemplateRecord\";\r\nimport { BoardType } from \"../../../UI/Store/BoardInterface\";\r\n\r\n@Factory\r\nexport class TemplateSizeBoard extends TemplateRecord\r\n{\r\n protected async Update()\r\n {\r\n await super.Update();\r\n if (this.Objects.length === 0) return;\r\n\r\n let originBr = this.Objects[0].Object as Board;\r\n\r\n if (!originBr.IsErase)\r\n {\r\n if (originBr.BoardType === BoardType.Layer)\r\n {\r\n originBr.Height = this._CacheSpaceSize.x;\r\n originBr.Width = this._CacheSpaceSize.y;\r\n originBr.Thickness = this._CacheSpaceSize.z;\r\n }\r\n else if (originBr.BoardType === BoardType.Vertical)\r\n {\r\n originBr.Height = this._CacheSpaceSize.z;\r\n originBr.Width = this._CacheSpaceSize.y;\r\n originBr.Thickness = this._CacheSpaceSize.x;\r\n }\r\n else\r\n {\r\n originBr.Height = this._CacheSpaceSize.z;\r\n originBr.Width = this._CacheSpaceSize.x;\r\n originBr.Thickness = this._CacheSpaceSize.y;\r\n }\r\n }\r\n }\r\n}\r\n","import { Vector3 } from \"three\";\r\nimport { Board } from \"../../DatabaseServices/Entity/Board\";\r\nimport { MoveMatrix } from \"../../Geometry/GeUtils\";\r\nimport { ISpaceParse } from \"../../Geometry/SpaceParse/ISpaceParse\";\r\nimport { TBBoardOption, BoardType } from \"../../UI/Store/BoardInterface\";\r\n\r\nexport function BuildTopBottomBoards(topOpt: TBBoardOption, bottomOpt: TBBoardOption, space: ISpaceParse): Board[]\r\n{\r\n let brs: Board[] = [];\r\n if (topOpt.isDraw)\r\n {\r\n let basePt = GetTopBoardBasePt(topOpt, space);\r\n brs.push(GetTopOrDownBoard(space, topOpt, basePt, true));\r\n }\r\n if (bottomOpt.isDraw)\r\n {\r\n let basePt = GetBottomBoardBasePt(bottomOpt, space);\r\n brs.push(GetTopOrDownBoard(space, bottomOpt, basePt, false));\r\n\r\n let size = space.Size;\r\n let refSize = size.y;\r\n const thickness = bottomOpt.footThickness;\r\n\r\n if (bottomOpt.offset > 0 && !bottomOpt.isWrapSide)\r\n {\r\n //绘制前地脚\r\n if (bottomOpt.isDrawFooter)\r\n {\r\n brs.push(GetFootBoard(bottomOpt, space, false));\r\n refSize -= thickness + bottomOpt.footBehindShrink;\r\n }\r\n\r\n //绘制后地脚\r\n if (bottomOpt.isDrawBackFooter)\r\n {\r\n brs.push(GetFootBoard(bottomOpt, space, true));\r\n refSize -= thickness + bottomOpt.footerOffset;\r\n }\r\n //绘制加强条\r\n if (bottomOpt.isDrawStrengthenStrip)\r\n brs.push(...GetStrengthenStrips(bottomOpt, space, refSize - bottomOpt.frontDist - bottomOpt.behindDistance));\r\n }\r\n }\r\n return brs;\r\n}\r\nfunction GetTopOrDownBoard(spaceParse: ISpaceParse, opt: TBBoardOption, basePt: Vector3, isTop = true)\r\n{\r\n //前后距\r\n let frontDist = -opt.frontDist;\r\n let backDist = -opt.behindDistance;\r\n //左右延伸\r\n let leftExt = opt.leftExt;\r\n let rightExt = opt.rightExt;\r\n\r\n //大小\r\n let size = spaceParse.Size;\r\n let length = size.x;\r\n let width = size.y + frontDist + backDist;\r\n let thickness = opt.thickness;\r\n if (opt.isWrapSide)\r\n {\r\n let leftBoardThickness = spaceParse.LeftBoard ? spaceParse.LeftBoard.Thickness : opt.thickness;\r\n let rightBoardThickness = spaceParse.RightBoard ? spaceParse.RightBoard.Thickness : opt.thickness;\r\n length += leftBoardThickness + rightBoardThickness + leftExt + rightExt;\r\n }\r\n else\r\n {\r\n leftExt = 0;\r\n rightExt = 0;\r\n }\r\n\r\n let board = Board.CreateBoard(length, width, thickness, BoardType.Layer);\r\n board.Name = \"顶板\";\r\n\r\n if (!isTop)\r\n {\r\n board.Name = \"底板\";\r\n }\r\n //移动右缩和前距的距离\r\n basePt.add(new Vector3(rightExt, -frontDist));\r\n board.ApplyMatrix(MoveMatrix(basePt));\r\n board.ApplyMatrix(spaceParse.SpaceOCS);\r\n\r\n return board;\r\n}\r\nfunction GetTopBoardBasePt(opt: TBBoardOption, spc: ISpaceParse)\r\n{\r\n let box = spc.SpaceBox;\r\n let min = box.min;\r\n let max = box.max;\r\n let basePoint = new Vector3();\r\n if (opt.isWrapSide)\r\n {\r\n let rightBoardThickness = spc.RightBoard ? spc.RightBoard.Thickness : opt.thickness;\r\n basePoint.set(max.x + rightBoardThickness, min.y, max.z);\r\n }\r\n else\r\n {\r\n basePoint.set(max.x, min.y, max.z - (opt.thickness + parseFloat(opt.offset as unknown as string)));\r\n }\r\n return basePoint;\r\n}\r\nfunction GetBottomBoardBasePt(opt: TBBoardOption, spc: ISpaceParse)\r\n{\r\n let box = spc.SpaceBox;\r\n let min = box.min;\r\n let max = box.max;\r\n let basePoint = new Vector3();\r\n if (opt.isWrapSide)\r\n {\r\n let rightBoardThickness = spc.RightBoard ? spc.RightBoard.Thickness : opt.thickness;\r\n basePoint.set(max.x + rightBoardThickness, min.y, min.z - opt.thickness);\r\n }\r\n else\r\n {\r\n basePoint.set(max.x, min.y, min.z + opt.offset);\r\n }\r\n return basePoint;\r\n}\r\nfunction GetFootBoard(opt: TBBoardOption, spaceParse: ISpaceParse, isBack: boolean)\r\n{\r\n let offset = opt.offset;\r\n let thickness = opt.footThickness;\r\n let footBoard = Board.CreateBoard(offset, spaceParse.Size.x, opt.footThickness, BoardType.Behind);\r\n footBoard.Name = isBack ? \"后地脚\" : \"地脚线\";\r\n let moveDist = isBack ? spaceParse.Size.y - opt.footerOffset - opt.behindDistance : thickness + opt.footBehindShrink + opt.frontDist;\r\n footBoard.ApplyMatrix(MoveMatrix(spaceParse.SpaceBox.min.clone().add(new Vector3(0, moveDist))))\r\n .ApplyMatrix(spaceParse.SpaceOCS);\r\n\r\n return footBoard;\r\n}\r\n\r\nfunction GetStrengthenStrips(opt: TBBoardOption, spaceParse: ISpaceParse, width: number)\r\n{\r\n let brs: Board[] = [];\r\n const thickness = opt.footThickness;\r\n let count = opt.divCount;\r\n if (count === 0) return brs;\r\n let spaceSize = (spaceParse.Size.x - count * thickness) / (count + 1);\r\n let br = Board.CreateBoard(opt.offset, width, thickness, BoardType.Vertical);\r\n\r\n let yDist = opt.frontDist;\r\n if (opt.isDrawFooter)\r\n yDist += (opt.footBehindShrink + thickness);\r\n\r\n for (let i = 1; i <= count; i++)\r\n {\r\n let b = br.Clone();\r\n b.Name = \"加强条\" + i;\r\n b.ApplyMatrix(MoveMatrix(spaceParse.SpaceBox.min.clone().add(new Vector3(spaceSize * i + (i - 1) * thickness, yDist))))\r\n .ApplyMatrix(spaceParse.SpaceOCS);\r\n brs.push(b);\r\n }\r\n return brs;\r\n}\r\n","import { ExtendsBoardThickness } from \"../../../Add-on/DrawBoard/BuildBoardTool\";\r\nimport { BuildTopBottomBoards } from \"../../../Add-on/DrawBoard/BuildTopBottomBoardTool\";\r\nimport { EBoardKeyList } from \"../../../Common/BoardKeyList\";\r\nimport { DefaultBottomBoardOption, DefaultTopBoardOption } from \"../../../Editor/DefaultConfig\";\r\nimport { BoardProcessOption, FaceDirection, LinesType, TBBoardOption } from \"../../../UI/Store/BoardInterface\";\r\nimport { AutoRecord } from \"../../AutoRecord\";\r\nimport { Factory } from \"../../CADFactory\";\r\nimport { CADFiler } from \"../../CADFiler\";\r\nimport { Board } from \"../../Entity/Board\";\r\nimport { TemplateRecord } from \"../TemplateRecord\";\r\n\r\n/**顶底板模板 */\r\n@Factory\r\nexport class TemplateTopBottomBoard extends TemplateRecord\r\n{\r\n private _topOption: TBBoardOption = { ...DefaultTopBoardOption };\r\n private _bottomOption: TBBoardOption = { ...DefaultBottomBoardOption };\r\n UseBoardProcessOption = false;\r\n BoardProcessOption: BoardProcessOption;\r\n @AutoRecord DrawCounts: [number, number, number] = [1, 1, 1];\r\n constructor()\r\n {\r\n super();\r\n this.name = \"顶底板\";\r\n }\r\n get TopOption()\r\n {\r\n return Object.assign({}, this._topOption);\r\n }\r\n set TopOption(option: TBBoardOption)\r\n {\r\n this.WriteAllObjectRecord();\r\n Object.assign(this._topOption, option);\r\n ExtendsBoardThickness(this, option.thickness);\r\n }\r\n get BottomOption()\r\n {\r\n return Object.assign({}, this._bottomOption);\r\n }\r\n set BottomOption(option: TBBoardOption)\r\n {\r\n this.WriteAllObjectRecord();\r\n Object.assign(this._bottomOption, option);\r\n }\r\n\r\n // InitBaseParams()\r\n // {\r\n // super.InitBaseParams();\r\n // return this;\r\n // }\r\n\r\n protected async Update()\r\n {\r\n await super.Update();\r\n\r\n let thickness = this.GetParam(\"BH\")?.value as number;\r\n if (thickness)\r\n {\r\n this._topOption.thickness = thickness;\r\n this._bottomOption.thickness = thickness;\r\n this._bottomOption.footThickness = thickness;\r\n }\r\n\r\n let spaceParse = this.SpaceParse;\r\n let nbrs = BuildTopBottomBoards(this._topOption, this._bottomOption, spaceParse);\r\n\r\n let sbrs = this.PositioningSupportBoards;\r\n\r\n if (this.BoardProcessOption)\r\n {\r\n let minSealed = GetMinSealed(this.BoardProcessOption);\r\n for (let br of nbrs)\r\n {\r\n br.BoardProcessOption = this.BoardProcessOption;\r\n this.SetBoardProcess(br, minSealed);\r\n }\r\n this.BoardProcessOption = undefined;\r\n }\r\n if (this.UseBoardProcessOption && sbrs.length > 0)\r\n {\r\n let cname = sbrs[0].BoardProcessOption[EBoardKeyList.CabinetName];\r\n let rname = sbrs[0].BoardProcessOption[EBoardKeyList.RoomName];\r\n for (let br of nbrs)\r\n {\r\n br.BoardProcessOption[EBoardKeyList.CabinetName] = cname;\r\n br.BoardProcessOption[EBoardKeyList.RoomName] = rname;\r\n }\r\n\r\n this.UseBoardProcessOption = false;\r\n }\r\n\r\n let oldBrss: [Board[], Board[], Board[]] = [[], [], []];\r\n let refBr: Board;\r\n let minSealed: string;\r\n\r\n for (let id of this.Objects)\r\n {\r\n let b = id.Object as Board;\r\n if (!refBr)\r\n refBr = b;\r\n oldBrss[b.BoardType].push(b);\r\n }\r\n\r\n if (refBr) minSealed = GetMinSealed(refBr.BoardProcessOption);\r\n\r\n let newBrss: [Board[], Board[], Board[]] = [[], [], []];\r\n\r\n for (let b of nbrs)\r\n {\r\n newBrss[b.BoardType].push(b);\r\n }\r\n for (let i = 0; i < oldBrss.length; i++)\r\n {\r\n let oldBrs = oldBrss[i];\r\n let newBrs = newBrss[i];\r\n\r\n let oldLen = oldBrs.length;\r\n for (let j = newBrs.length; j < oldLen; j++)\r\n oldBrs[j].Erase();\r\n\r\n for (let j = 0; j < newBrs.length; j++)\r\n {\r\n if (j < oldLen)\r\n {\r\n if (j >= this.DrawCounts[i])\r\n {\r\n oldBrs[j].Erase(false);\r\n }\r\n oldBrs[j].Name = newBrs[j].Name;\r\n oldBrs[j].Position = newBrs[j].Position;\r\n oldBrs[j].Width = newBrs[j].Width;\r\n oldBrs[j].Height = newBrs[j].Height;\r\n oldBrs[j].Thickness = newBrs[j].Thickness;\r\n }\r\n else\r\n {\r\n if (refBr)\r\n {\r\n newBrs[j].BoardProcessOption = refBr.BoardProcessOption;\r\n this.SetBoardProcess(newBrs[j], minSealed);\r\n }\r\n this._db.ModelSpace.Append(newBrs[j]);\r\n this.Objects.push(newBrs[j].Id);\r\n }\r\n }\r\n this.DrawCounts[i] = newBrs.length;\r\n }\r\n let brs = this.Objects.filter(id => !id.IsErase).map(id => id.Object as Board);\r\n brs.map(br => br.SpaceOCS = this._CacheSpaceCS);\r\n }\r\n private SetBoardProcess(br: Board, minSealed: string)\r\n {\r\n if (br.Name === \"底板\")\r\n {\r\n br.BoardProcessOption[EBoardKeyList.BigHole] = FaceDirection.Back;\r\n }\r\n else if (br.Name.includes(\"地脚\") || br.Name.includes(\"加强条\"))\r\n {\r\n // br.BoardProcessOption.composingFace = ComposingType.Reverse;\r\n br.BoardProcessOption.bigHoleDir = FaceDirection.Back;\r\n br.BoardProcessOption.lines = LinesType.Reverse;\r\n\r\n //用薄封边\r\n br.BoardProcessOption.sealedUp = minSealed;\r\n br.BoardProcessOption.sealedDown = minSealed;\r\n br.BoardProcessOption.sealedLeft = minSealed;\r\n br.BoardProcessOption.sealedRight = minSealed;\r\n }\r\n }\r\n ReadFile(file: CADFiler)\r\n {\r\n let ver = file.Read();\r\n super.ReadFile(file);\r\n this.DrawCounts[0] = file.Read();\r\n this.DrawCounts[1] = file.Read();\r\n this.DrawCounts[2] = file.Read();\r\n\r\n this._topOption.type = file.Read();\r\n this._topOption.name = file.Read();\r\n this._topOption.isDraw = file.Read();\r\n this._topOption.thickness = file.Read();\r\n this._topOption.frontDist = file.Read();\r\n this._topOption.behindDistance = file.Read();\r\n this._topOption.isWrapSide = file.Read();\r\n this._topOption.useLFData = file.Read();\r\n this._topOption.leftExt = file.Read();\r\n this._topOption.rightExt = file.Read();\r\n this._topOption.offset = file.Read();\r\n if (ver === 1 && typeof this._topOption.offset === \"string\")\r\n this._topOption.offset = parseFloat(this._topOption.offset) ?? 0;\r\n\r\n this._bottomOption.type = file.Read();\r\n this._bottomOption.name = file.Read();\r\n this._bottomOption.isDraw = file.Read();\r\n this._bottomOption.thickness = file.Read();\r\n this._bottomOption.frontDist = file.Read();\r\n this._bottomOption.behindDistance = file.Read();\r\n this._bottomOption.isWrapSide = file.Read();\r\n this._bottomOption.useLFData = file.Read();\r\n this._bottomOption.leftExt = file.Read();\r\n this._bottomOption.rightExt = file.Read();\r\n this._bottomOption.offset = file.Read();\r\n this._bottomOption.footThickness = file.Read();\r\n this._bottomOption.isDrawFooter = file.Read();\r\n this._bottomOption.footBehindShrink = file.Read();\r\n this._bottomOption.isDrawBackFooter = file.Read();\r\n this._bottomOption.isDrawStrengthenStrip = file.Read();\r\n this._bottomOption.footerOffset = file.Read();\r\n this._bottomOption.divCount = file.Read();\r\n\r\n }\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(2);\r\n super.WriteFile(file);\r\n file.Write(this.DrawCounts[0]);\r\n file.Write(this.DrawCounts[1]);\r\n file.Write(this.DrawCounts[2]);\r\n\r\n file.Write(this._topOption.type);\r\n file.Write(this._topOption.name);\r\n file.Write(this._topOption.isDraw);\r\n file.Write(this._topOption.thickness);\r\n file.Write(this._topOption.frontDist);\r\n file.Write(this._topOption.behindDistance);\r\n file.Write(this._topOption.isWrapSide);\r\n file.Write(this._topOption.useLFData);\r\n file.Write(this._topOption.leftExt);\r\n file.Write(this._topOption.rightExt);\r\n file.Write(this._topOption.offset);\r\n\r\n file.Write(this._bottomOption.type);\r\n file.Write(this._bottomOption.name);\r\n file.Write(this._bottomOption.isDraw);\r\n file.Write(this._bottomOption.thickness);\r\n file.Write(this._bottomOption.frontDist);\r\n file.Write(this._bottomOption.behindDistance);\r\n file.Write(this._bottomOption.isWrapSide);\r\n file.Write(this._bottomOption.useLFData);\r\n file.Write(this._bottomOption.leftExt);\r\n file.Write(this._bottomOption.rightExt);\r\n file.Write(this._bottomOption.offset);\r\n file.Write(this._bottomOption.footThickness);\r\n file.Write(this._bottomOption.isDrawFooter);\r\n file.Write(this._bottomOption.footBehindShrink);\r\n file.Write(this._bottomOption.isDrawBackFooter);\r\n file.Write(this._bottomOption.isDrawStrengthenStrip);\r\n file.Write(this._bottomOption.footerOffset);\r\n file.Write(this._bottomOption.divCount);\r\n }\r\n}\r\n\r\n//获得最薄的封边\r\nfunction GetMinSealed(opt: BoardProcessOption): string\r\n{\r\n return Math.max(0, Math.min(\r\n parseFloat(opt.sealedDown) || 0,\r\n parseFloat(opt.sealedLeft) || 0,\r\n parseFloat(opt.sealedRight) || 0,\r\n parseFloat(opt.sealedUp) || 0,\r\n )).toString();\r\n}\r\n","import { BuildVerticalBoards } from \"../../../Add-on/DrawBoard/BuildBoardTool\";\r\nimport { DefaultVerticalBoardConfig } from \"../../../Editor/DefaultConfig\";\r\nimport { ISpaceParse } from \"../../../Geometry/SpaceParse/ISpaceParse\";\r\nimport { IGrooveOption, VerticalBoardOption } from \"../../../UI/Store/BoardInterface\";\r\nimport { Factory } from \"../../CADFactory\";\r\nimport { CADFiler } from \"../../CADFiler\";\r\nimport { TemplateBoardRecord } from \"./TemplateBoard\";\r\n\r\n/**\r\n * 立板模板\r\n */\r\n@Factory\r\nexport class TemplateVerticalBoard extends TemplateBoardRecord\r\n{\r\n constructor()\r\n {\r\n super();\r\n this.name = \"立板(自动)\";\r\n }\r\n protected _option: VerticalBoardOption = { ...DefaultVerticalBoardConfig };\r\n private grooveOption: IGrooveOption = {\r\n grooveAddLength: \"0\",\r\n grooveAddWidth: \"0\",\r\n grooveAddDepth: \"0\",\r\n knifeRadius: \"3\",\r\n };\r\n set GrooveOption(option: IGrooveOption)\r\n {\r\n this.WriteAllObjectRecord();\r\n Object.assign(this.grooveOption, option);\r\n }\r\n GeneralBoardList(space: ISpaceParse)\r\n {\r\n return BuildVerticalBoards(this._option, space, this.grooveOption);\r\n }\r\n ReadFile(file: CADFiler)\r\n {\r\n let ver = file.Read();\r\n super.ReadFile(file);\r\n this._option.type = file.Read();\r\n this._option.name = file.Read();\r\n this._option.frontShrink = file.Read();\r\n this._option.bottomShrink = file.Read();\r\n this._option.calcWidth = file.Read();\r\n this._option.calcHeight = file.Read();\r\n this._option.isTotalLength = file.Read();\r\n this._option.isTotalWidth = file.Read();\r\n this._option.boardRelative = file.Read();\r\n this._option.thickness = file.Read();\r\n this._option.count = file.Read();\r\n this._option.spaceSize = file.Read();\r\n\r\n if (ver >= 2)\r\n {\r\n this._option.calcSpaceSize = file.Read();\r\n this._option.calcFrontShrink = file.Read();\r\n this._option.calcBottomShrink = file.Read();\r\n }\r\n else\r\n {\r\n this._option.calcSpaceSize = this._option.spaceSize.toString();\r\n this._option.calcFrontShrink = this._option.frontShrink.toString();\r\n this._option.calcBottomShrink = this._option.bottomShrink.toString();\r\n }\r\n if (ver > 2)\r\n {\r\n this.grooveOption.grooveAddLength = file.Read();\r\n this.grooveOption.grooveAddWidth = file.Read();\r\n this.grooveOption.grooveAddDepth = file.Read();\r\n this.grooveOption.knifeRadius = file.Read();\r\n }\r\n else\r\n {\r\n this.grooveOption.grooveAddLength = this.grooveOption.grooveAddLength.toString();\r\n this.grooveOption.grooveAddWidth = this.grooveOption.grooveAddWidth.toString();\r\n this.grooveOption.grooveAddDepth = this.grooveOption.grooveAddDepth.toString();\r\n this.grooveOption.knifeRadius = this.grooveOption.knifeRadius.toString();\r\n }\r\n }\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(3);\r\n super.WriteFile(file);\r\n file.Write(this._option.type);\r\n file.Write(this._option.name);\r\n file.Write(this._option.frontShrink);\r\n file.Write(this._option.bottomShrink);\r\n file.Write(this._option.calcWidth);\r\n file.Write(this._option.calcHeight);\r\n file.Write(this._option.isTotalLength);\r\n file.Write(this._option.isTotalWidth);\r\n file.Write(this._option.boardRelative);\r\n file.Write(this._option.thickness);\r\n file.Write(this._option.count);\r\n file.Write(this._option.spaceSize);\r\n\r\n file.Write(this._option.calcSpaceSize);\r\n file.Write(this._option.calcFrontShrink);\r\n file.Write(this._option.calcBottomShrink);\r\n\r\n file.Write(this.grooveOption.grooveAddLength);\r\n file.Write(this.grooveOption.grooveAddWidth);\r\n file.Write(this.grooveOption.grooveAddDepth);\r\n file.Write(this.grooveOption.knifeRadius);\r\n }\r\n}\r\n","import { VisualSpaceBox } from \"../../../Editor/VisualSpaceBox\";\r\nimport { AutoRecord } from \"../../AutoRecord\";\r\nimport { Factory } from \"../../CADFactory\";\r\nimport { CADFiler } from \"../../CADFiler\";\r\nimport { TemplateRecord } from \"../TemplateRecord\";\r\n\r\n@Factory\r\nexport class TemplateVisualSpace extends TemplateRecord\r\n{\r\n @AutoRecord IsVisible = true;\r\n constructor()\r\n {\r\n super();\r\n this.Name = \"可视化模块空间\";\r\n }\r\n\r\n protected async Update()\r\n {\r\n await super.Update();\r\n if (!this.Db) return;//如果没有绘制到DB空间,那么将不会进行更新(否则绘制失败)\r\n //在这里重建虚拟空间,(未来我们可能会避免自动重建)\r\n if (this.Objects.length === 0 || this.Objects[0].Object === undefined)\r\n {\r\n this.Objects.length = 0;\r\n let visualEntity = new VisualSpaceBox(this.LParam.value as number, this.WParam.value as number, this.HParam.value as number);\r\n visualEntity.ApplyMatrix(this._CacheSpaceCS);\r\n visualEntity.SpaceOCS = this._CacheSpaceCS;\r\n //这里避免使用app.Database,否则插入图纸后,会错误的在app的图纸里面绘制一个空间,导致程序错误.\r\n this.Db.ModelSpace.Append(visualEntity);\r\n this.Objects.push(visualEntity.Id);\r\n }\r\n let visualEntity = this.Objects[0].Object as VisualSpaceBox;\r\n\r\n let depth = this.NodeDepth;\r\n visualEntity.ColorIndex = depth === 0 ? 7 : depth + 1;\r\n\r\n let IsRoot = this.Parent === undefined;\r\n let isVisual = IsRoot || this.Children.length === 0;\r\n\r\n visualEntity.Visible = this.IsVisible && isVisual;\r\n visualEntity.SetSize(this.LParam.value as number, this.WParam.value as number, this.HParam.value as number);\r\n visualEntity.IsRoot = this.Children.length !== 0;\r\n\r\n if (!IsRoot)\r\n {\r\n let root = this.Root;\r\n visualEntity.DisplayLength = this.LParam.value !== root.LParam.value;\r\n visualEntity.DisplayWidth = this.WParam.value !== root.WParam.value;\r\n visualEntity.DisplayHeight = this.HParam.value !== root.HParam.value;\r\n }\r\n }\r\n\r\n //#region -------------------------File-------------------------\r\n\r\n //对象从文件中读取数据,初始化自身\r\n ReadFile(file: CADFiler)\r\n {\r\n let ver = file.Read();\r\n super.ReadFile(file);\r\n this.IsVisible = file.Read();\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.IsVisible);\r\n }\r\n // //局部撤销\r\n // ApplyPartialUndo(undoData: CADObject)\r\n // {\r\n // super.ApplyPartialUndo(undoData);\r\n // }\r\n //#endregion\r\n}\r\n","import { Vector3 } from \"three\";\r\nimport { EBoardKeyList } from \"../../Common/BoardKeyList\";\r\nimport { safeEval } from \"../../Common/eval\";\r\nimport { Singleton } from \"../../Common/Singleton\";\r\nimport { Board } from \"../../DatabaseServices/Entity/Board\";\r\nimport { ISpaceParse } from \"../../Geometry/SpaceParse/ISpaceParse\";\r\nimport { BoardType, DrillType, FaceDirection, IHighSealedItem } from \"../../UI/Store/BoardInterface\";\r\nimport { EFullDir, EFullType, EWRackArrayType, IWineRackOption } from \"../../UI/Store/WineRackInterface\";\r\n\r\nexport const SIN45 = Math.sin(Math.PI / 4);\r\n\r\nexport class DrawWineRackTool extends Singleton\r\n{\r\n private _config: IWineRackOption;\r\n protected space: ISpaceParse;\r\n public boardlist: Board[] = [];\r\n get Config()\r\n {\r\n return this._config;\r\n }\r\n Parse(space: ISpaceParse, config: IWineRackOption)\r\n {\r\n this._config = config;\r\n this.boardlist.length = 0;\r\n this.space = space;\r\n //处理格子深\r\n if (!config.isTotalDepth)\r\n {\r\n let depth = safeEval(config.calcDepth, { L: space.Size.x, W: space.Size.y, H: space.Size.z });;\r\n if (!isNaN(depth))\r\n {\r\n space.SpaceBox.max.setY(space.SpaceBox.min.y + depth);\r\n }\r\n }\r\n //处理前缩\r\n space.SpaceBox.min.add(new Vector3(0, config.frontCut));\r\n //左右缩\r\n space.SpaceBox.min.add(new Vector3(config.leftCut));\r\n space.SpaceBox.max.add(new Vector3(-config.rightCut));\r\n //上缩\r\n space.SpaceBox.max.add(new Vector3(0, 0, -config.topCut));\r\n }\r\n /** 拾取空间周围的板件柜名房名等信息*/\r\n protected GetBoardProcessOption(br: Board)\r\n {\r\n //获取空间周围的板件数据\r\n if (this.space.Boards.length > 0)\r\n {\r\n let refProcessData = this.space.Boards[0].BoardProcessOption;\r\n br.BoardProcessOption[EBoardKeyList.RoomName] = refProcessData[EBoardKeyList.RoomName];\r\n br.BoardProcessOption[EBoardKeyList.CabinetName] = refProcessData[EBoardKeyList.CabinetName];\r\n }\r\n }\r\n /**分析高级封边数据 */\r\n protected ParseHighSealing(br: Board, leftSealed: number, rightSealed: number, topSealed: number, downSealed: number, isLeft: boolean)\r\n {\r\n this.GetBoardProcessOption(br);\r\n let cu = br.ContourCurve;\r\n br.BoardProcessOption.sealedLeft = leftSealed.toString();\r\n br.BoardProcessOption.sealedRight = rightSealed.toString();\r\n br.BoardProcessOption.sealedUp = topSealed.toString();\r\n br.BoardProcessOption.sealedDown = downSealed.toString();\r\n\r\n let sizes = [...new Set([downSealed, rightSealed, topSealed, leftSealed])];\r\n let downSeal = {\r\n size: downSealed, color: sizes.indexOf(downSealed) + 1\r\n };\r\n let rigthSeal = {\r\n size: rightSealed, color: sizes.indexOf(rightSealed) + 1\r\n };\r\n let topSeal = { size: topSealed, color: sizes.indexOf(topSealed) + 1 };\r\n let leftSeal = { size: leftSealed, color: sizes.indexOf(leftSealed) + 1 };\r\n\r\n let highSeals: IHighSealedItem[] = [downSeal];\r\n if (isLeft)\r\n {\r\n highSeals.push(rigthSeal, topSeal);\r\n for (let i = 3; i <= cu.EndParam - 1; i++)\r\n {\r\n highSeals.push(leftSeal);\r\n }\r\n }\r\n else\r\n {\r\n for (let i = 1; i <= cu.EndParam - 3; i++)\r\n {\r\n highSeals.push(rigthSeal);\r\n }\r\n highSeals.push(topSeal, leftSeal);\r\n }\r\n br.BoardProcessOption.highSealed = highSeals;\r\n br.BoardProcessOption.drillType = DrillType.None;\r\n br.BoardProcessOption.highDrill.fill(DrillType.None);\r\n\r\n }\r\n /**补板 */\r\n protected AddLayerOrVerticalBoard(actWidth: number, actHeight: number)\r\n {\r\n const config = this.Config;\r\n const size = this.space.Size;\r\n let isDrawLy = false;\r\n //是否补层板\r\n if (config.isDrawLy && (config.arrayType === EWRackArrayType.Fixed || config.fullType === EFullType.ByWidth))\r\n {\r\n isDrawLy = true;\r\n\r\n let length = actWidth;\r\n let width = size.y + config.frontCut;\r\n let position = this.space.SpaceBox.min.clone();\r\n\r\n if (config.arrayType === EWRackArrayType.Fixed)\r\n {\r\n if (config.fullDir === EFullDir.Right)\r\n {\r\n length += config.rightCut;\r\n position.add(new Vector3(size.x + config.rightCut, -config.frontCut, actHeight + config.topCut));\r\n }\r\n else\r\n {\r\n length += config.leftCut;\r\n position.add(new Vector3(actWidth, -config.frontCut, actHeight + config.topCut));\r\n }\r\n }\r\n else\r\n {\r\n length += (config.leftCut + config.rightCut);\r\n position.add(new Vector3(actWidth + config.rightCut, -config.frontCut, actHeight + config.topCut));\r\n }\r\n //补板跟随\r\n if (config.followNarrow)\r\n {\r\n //处理前缩\r\n position.add(new Vector3(0, config.frontCut));\r\n width -= config.frontCut;\r\n }\r\n let br = Board.CreateBoard(length, width, config.brThick2);\r\n this.GetBoardProcessOption(br);\r\n br.BoardProcessOption.bigHoleDir = FaceDirection.Back;\r\n br.Position = position;\r\n br.ApplyMatrix(this.space.SpaceOCS);\r\n this.boardlist.push(br);\r\n }\r\n if (config.isDrawVer && (config.arrayType === EWRackArrayType.Fixed || config.fullType === EFullType.ByHeight))\r\n {\r\n let len = actHeight + config.topCut;\r\n if (isDrawLy)\r\n len += config.brThick2;\r\n\r\n let br = Board.CreateBoard(len, size.y + config.frontCut, config.brThick2, BoardType.Vertical);\r\n\r\n let position = this.space.SpaceBox.min.clone();\r\n\r\n if (config.fullDir === EFullDir.Right)\r\n position.x += size.x - actWidth - config.brThick2;\r\n else\r\n {\r\n br.BoardProcessOption.bigHoleDir = FaceDirection.Back;\r\n position.x += actWidth;\r\n }\r\n //补板跟随\r\n if (config.followNarrow)\r\n {\r\n br.WriteAllObjectRecord();\r\n position.y += config.frontCut;\r\n br.Width -= config.frontCut;\r\n }\r\n\r\n //这里要跟外面平\r\n position.y -= config.frontCut;\r\n\r\n this.GetBoardProcessOption(br);\r\n br.Position = position;\r\n br.ApplyMatrix(this.space.SpaceOCS);\r\n this.boardlist.push(br);\r\n }\r\n }\r\n}\r\n","import { Matrix4, Vector2, Vector3 } from \"three\";\r\nimport { arrayLast, arrayRemoveDuplicateBySort, arraySortByNumber } from \"../../Common/ArrayExt\";\r\nimport { MakeMirrorMtx } from \"../../Common/Matrix4Utils\";\r\nimport { Board } from \"../../DatabaseServices/Entity/Board\";\r\nimport { Line } from \"../../DatabaseServices/Entity/Line\";\r\nimport { Polyline } from \"../../DatabaseServices/Entity/Polyline\";\r\nimport { AsVector2, equaln, equalv3, isParallelTo, MoveMatrix, polar, XAxis, YAxis, ZAxis } from \"../../Geometry/GeUtils\";\r\nimport { ISpaceParse } from \"../../Geometry/SpaceParse/ISpaceParse\";\r\nimport { IntersectOption } from \"../../GraphicsSystem/IntersectWith\";\r\nimport { BoardType } from \"../../UI/Store/BoardInterface\";\r\nimport { EFullDir, EFullType, EWRackArrayType, IR2WROption, IWineRackOption } from \"../../UI/Store/WineRackInterface\";\r\nimport { DrawWineRackTool, SIN45 } from \"./DrawWinRackTool\";\r\n\r\nexport interface IWineRackData\r\n{\r\n basePt: Vector3;\r\n brLength: number;\r\n\r\n}\r\nexport interface IParsePlRes\r\n{\r\n isOk: boolean;\r\n isLeft?: boolean;\r\n pl?: Polyline;\r\n length?: number;\r\n matInv?: Matrix4;\r\n basePt?: Vector3;\r\n thickness?: number;\r\n isVer?: boolean;\r\n isRo?: boolean;\r\n}\r\n\r\nexport const R2WRTolerance = 1e-3;\r\n\r\n/**\r\n * 斜酒格\r\n */\r\nexport class DrawObliqueWineRackTool extends DrawWineRackTool\r\n{\r\n Parse(space: ISpaceParse, config: IWineRackOption)\r\n {\r\n super.Parse(space, config);\r\n const size = space.Size;\r\n const spaceHeight = size.z;\r\n const spaceWidth = size.x;\r\n const ptMid = new Vector3(0.5 * size.x, size.z / 2, 0);\r\n let mirrorMtx: Matrix4;\r\n if (config.fullType === EFullType.ByWidth)\r\n mirrorMtx = MakeMirrorMtx(YAxis, ptMid);\r\n else\r\n mirrorMtx = MakeMirrorMtx(XAxis, ptMid);\r\n\r\n ptMid.set(0.5 * size.x, size.z / 2, 0);\r\n polar(ptMid, Math.PI * 0.75, -config.boardThick);\r\n\r\n if (config.isFull && config.arrayType !== EWRackArrayType.Fixed)\r\n {\r\n switch (config.fullType)\r\n {\r\n case EFullType.ByHeight:\r\n this.CalGridWidth(spaceHeight);\r\n break;\r\n case EFullType.ByWidth:\r\n this.CalGridWidth(spaceWidth);\r\n break;\r\n case EFullType.Symmetry:\r\n this.CalGridWidth(spaceHeight);\r\n this.CalGridWidth(spaceWidth);\r\n default:\r\n break;\r\n }\r\n\r\n let rectPl = new Polyline().Rectangle(spaceWidth, spaceHeight);\r\n let gripWidth = config.boardThick + config.gripWidth;\r\n\r\n let retPls: Polyline[] = [];\r\n let pls1 = this.CalculationRectPolylineArr(ptMid, rectPl, gripWidth);\r\n polar(ptMid, Math.PI * 0.75, -gripWidth);\r\n let pls2 = this.CalculationRectPolylineArr(ptMid, rectPl, -gripWidth);\r\n retPls.push(...pls1, ...pls2);\r\n\r\n for (let pl of [...pls1, ...pls2])\r\n {\r\n let plClone = pl.Clone();\r\n plClone.ApplyMatrix(mirrorMtx);\r\n retPls.push(plClone);\r\n }\r\n this.DrawBoardFormPolyLine(retPls);\r\n }\r\n else\r\n {\r\n let lWRData: IWineRackData[] = [];\r\n let rWRData: IWineRackData[] = [];\r\n let res: { width: number, height: number; };\r\n switch (config.arrayType)\r\n {\r\n case EWRackArrayType.ByWidth:\r\n res = this.CalcWineRackDataByWidth(lWRData, rWRData);\r\n break;\r\n case EWRackArrayType.ByCount:\r\n res = this.CalcWineRackDataByCount(lWRData, rWRData);\r\n break;\r\n case EWRackArrayType.Fixed:\r\n res = this.CalcWineRackDataByFixed(lWRData, rWRData);\r\n }\r\n let pls: Polyline[] = [];\r\n for (let data of lWRData)\r\n {\r\n pls.push(this.CreatePolylineByWineData(data));\r\n }\r\n\r\n rWRData.sort((d1, d2) =>\r\n {\r\n if (equaln(d1.basePt.x, d2.basePt.x))\r\n {\r\n return d1.basePt.y - d2.basePt.y;\r\n }\r\n else\r\n return d2.basePt.x - d1.basePt.x;\r\n });\r\n\r\n for (let data of rWRData)\r\n {\r\n pls.push(this.CreatePolylineByWineData(data, false));\r\n }\r\n\r\n //补板\r\n this.AddLayerOrVerticalBoard(res.width, res.height);\r\n\r\n this.DrawBoardFormPolyLine(pls, res.width);\r\n }\r\n }\r\n\r\n private CalGridWidth(length: number)\r\n {\r\n const count = (length - this.Config.boardThick * 2 / SIN45) / ((this.Config.boardThick + this.Config.gripWidth) * Math.sqrt(2));\r\n this.Config.gripWidth = ((length - this.Config.boardThick / SIN45) / Math.floor(count)) / Math.sqrt(2) - this.Config.boardThick;\r\n }\r\n /**获取矩形多段线的4个对角点并判断是否有效 */\r\n private GetRect4Pts(xline: Line, rectPl: Polyline, p1: Vector3, p2: Vector3, p3: Vector3, p4: Vector3)\r\n {\r\n let res1 = this.GetRect2Pts(xline, rectPl, p1, p2);\r\n let vec = polar(new Vector3(), Math.PI * 0.75, this.Config.boardThick);\r\n xline.ApplyMatrix(MoveMatrix(vec));\r\n let res2 = this.GetRect2Pts(xline, rectPl, p3, p4);\r\n return res1 && res2 && p1.distanceTo(p2) > this.Config.gripWidth;\r\n }\r\n /**获取矩形一边的点 */\r\n private GetRect2Pts(xline: Line, rectPl: Polyline, p1: Vector3, p2: Vector3)\r\n {\r\n let intPts = xline.IntersectWith(rectPl, IntersectOption.ExtendBoth);\r\n if (intPts.length === 2)\r\n {\r\n p1.copy(intPts[0]);\r\n p2.copy(intPts[1]);\r\n if (p1.x > p2.x)\r\n {\r\n let tmpPt = p2.clone();\r\n p2.copy(p1);\r\n p1.copy(tmpPt);\r\n }\r\n return true;\r\n }\r\n return false;\r\n }\r\n /**按格子宽获取酒格数据 */\r\n private CalcWineRackDataByWidth(lWRDataList: IWineRackData[], rWRDataList: IWineRackData[])\r\n {\r\n let size = this.space.Size;\r\n let Config = this.Config;\r\n\r\n let widthCount = 0, heightCount = 0, gripWidth = 0;\r\n let width = size.x - 2 * Config.boardThick * SIN45;\r\n let height = size.z - 2 * Config.boardThick * SIN45;\r\n if (Config.fullType === EFullType.ByWidth)\r\n {\r\n widthCount = Math.floor(width / ((Config.gripWidth + Config.boardThick) * SIN45));\r\n gripWidth = width / widthCount;\r\n\r\n //处理锁定个数\r\n if (!Config.isLock)\r\n {\r\n heightCount = Math.floor(height / gripWidth);\r\n }\r\n else\r\n {\r\n heightCount = Math.floor(Config.heightCount * 2);\r\n }\r\n height = heightCount * gripWidth + 2 * Config.boardThick * SIN45;\r\n width = size.x;\r\n }\r\n else\r\n {\r\n heightCount = Math.floor(height / ((Config.gripWidth + Config.boardThick) * SIN45));\r\n gripWidth = height / heightCount;\r\n\r\n //处理锁定个数\r\n\r\n if (!Config.isLock)\r\n {\r\n widthCount = Math.floor(width / gripWidth);\r\n }\r\n else\r\n {\r\n widthCount = Math.floor(Config.widthCount * 2);\r\n }\r\n\r\n width = widthCount * gripWidth + 2 * Config.boardThick * SIN45;\r\n height = size.z;\r\n }\r\n this.GetWineRackData(width, height, gripWidth, Config.boardThick, widthCount, heightCount, lWRDataList, rWRDataList);\r\n return {\r\n width: width, height: height\r\n };\r\n }\r\n private CalcWineRackDataByCount(lWRDataList: IWineRackData[], rWRDataList: IWineRackData[])\r\n {\r\n const config = this.Config;\r\n const size = this.space.Size;\r\n let widthCount = Math.floor(config.widthCount * 2);\r\n let heightCount = Math.floor(config.heightCount * 2);\r\n let gripWidth = (size.x - 2 * config.boardThick * SIN45) / widthCount;\r\n let width = 0;\r\n let height = 0;\r\n\r\n if (config.fullType === EFullType.ByWidth)\r\n {\r\n gripWidth = (size.x - 2 * config.boardThick * SIN45) / widthCount;\r\n width = size.x;\r\n if (!config.isLock) //如果没锁定个数\r\n {\r\n heightCount = Math.floor((size.z - 2 * config.boardThick * SIN45) / gripWidth + 1e-3);\r\n }\r\n height = heightCount * gripWidth + 2 * config.boardThick * SIN45;\r\n }\r\n else\r\n {\r\n gripWidth = (size.z - 2 * config.boardThick * SIN45) / heightCount;\r\n if (!config.isLock)//如果没有锁定个数\r\n {\r\n widthCount = Math.floor((size.x - 2 * config.boardThick * SIN45) / gripWidth);\r\n }\r\n width = widthCount * gripWidth + 2 * config.boardThick * SIN45;\r\n height = size.z;\r\n }\r\n\r\n this.GetWineRackData(width, height, gripWidth, config.boardThick, widthCount, heightCount, lWRDataList, rWRDataList);\r\n return {\r\n width: width, height: height\r\n };\r\n }\r\n CalcWineRackDataByFixed(lWRDataList: IWineRackData[], rWRDataList: IWineRackData[])\r\n {\r\n const config = this.Config;\r\n let widthCount = Math.floor(config.widthCount * 2);\r\n let heightCount = Math.floor(config.heightCount * 2);\r\n let gripWidth = config.gripWidth * SIN45;\r\n let width = widthCount * gripWidth + 2 * config.boardThick * SIN45;\r\n let height = heightCount * gripWidth + 2 * config.boardThick * SIN45;\r\n\r\n this.GetWineRackData(width, height, gripWidth, config.boardThick, widthCount, heightCount, lWRDataList, rWRDataList);\r\n return {\r\n width: width, height: height\r\n };\r\n }\r\n /**构建酒格正面多段线组*/\r\n CalculationRectPolylineArr(ptMid: Vector3, rectPl: Polyline, gripWidth: number)\r\n {\r\n let pls: Polyline[] = [];\r\n let pt = ptMid.clone();\r\n while (true)\r\n {\r\n let pl = this.CalculationRectPolyline(pt, rectPl);\r\n if (!pl) break;\r\n\r\n polar(pt, Math.PI * 0.75, gripWidth);\r\n pls.push(pl);\r\n }\r\n return pls;\r\n }\r\n /**构建酒格正面多段线*/\r\n CalculationRectPolyline(pt: Vector3, rectPl: Polyline)\r\n {\r\n const xline = new Line(pt, pt.clone().add(new Vector3(1, 1)));\r\n const p1 = new Vector3();\r\n const p2 = new Vector3();\r\n const p3 = new Vector3();\r\n const p4 = new Vector3();\r\n if (!this.GetRect4Pts(xline, rectPl, p1, p2, p3, p4))\r\n {\r\n return null;\r\n }\r\n\r\n let minDis = this.Config.boardThick / Math.sqrt(2);\r\n //如果左边停靠\r\n if (p1.x < minDis)\r\n {\r\n p1.copy(polar(p3.clone(), Math.PI * -0.25, this.Config.boardThick));\r\n }\r\n else\r\n {\r\n p3.copy(polar(p1.clone(), Math.PI * 0.75, this.Config.boardThick));\r\n }\r\n //右边点 上面停靠\r\n let size = this.space.Size;\r\n if (p2.y > size.z - minDis)\r\n {\r\n p2.copy(polar(p4.clone(), -Math.PI * 0.25, this.Config.boardThick));\r\n }\r\n else\r\n {\r\n p4.copy(polar(p2.clone(), Math.PI * 0.75, this.Config.boardThick));\r\n }\r\n\r\n if (p1.distanceTo(p2) < (this.Config.gripWidth + this.Config.boardThick * 1.8) && p1.y > this.Config.boardThick * 2)\r\n return null;\r\n\r\n let lineData = [p1, p2, p4, p3].map(p =>\r\n {\r\n return {\r\n pt: AsVector2(p),\r\n bul: 0\r\n };\r\n });\r\n let pl = new Polyline(lineData);\r\n pl.CloseMark = true;\r\n return pl;\r\n }\r\n //获取酒格数据\r\n GetWineRackData(width: number,\r\n height: number,\r\n gripWidth: number,\r\n brThick: number,\r\n widthCount: number,\r\n heightCount: number,\r\n lWRDataList: IWineRackData[],\r\n rWRDataList: IWineRackData[])\r\n {\r\n let data: IWineRackData;\r\n for (let i = 0; i < Math.floor(widthCount / 2); i++)\r\n {\r\n let p1 = gripWidth + brThick * SIN45 + gripWidth * i * 2;\r\n data = {\r\n basePt: new Vector3(p1, 0, 0),\r\n brLength: 0\r\n };\r\n if (width - p1 > height - brThick * SIN45)\r\n {\r\n data.brLength = (height - brThick * SIN45) / SIN45;\r\n }\r\n else\r\n {\r\n data.brLength = (width - p1) / SIN45;\r\n }\r\n rWRDataList.push(data);\r\n }\r\n for (let i = 0; i < Math.floor(heightCount / 2); i++)\r\n {\r\n let p1 = gripWidth + brThick * SIN45 + i * gripWidth * 2;\r\n data = {\r\n basePt: new Vector3(brThick * SIN45, p1 - brThick * SIN45, 0),\r\n brLength: 0\r\n };\r\n if (height - p1 > width - brThick * SIN45)\r\n {\r\n data.brLength = (width - brThick * SIN45) / SIN45;\r\n }\r\n else\r\n {\r\n data.brLength = (height - p1) / SIN45;\r\n }\r\n rWRDataList.push(data);\r\n }\r\n for (let i = 0; i < Math.floor(widthCount / 2); i++)\r\n {\r\n let p1 = gripWidth + i * gripWidth * 2;\r\n data = {\r\n basePt: new Vector3(p1 + brThick * SIN45, 2 * brThick * SIN45, 0),\r\n brLength: 0\r\n };\r\n if (equaln(p1, height - brThick * SIN45 * 2))\r\n {\r\n data.brLength = (height - brThick * SIN45 * 2) / SIN45;\r\n }\r\n else if (p1 > height - brThick * SIN45 * 3)\r\n {\r\n data.brLength = (height - brThick * SIN45 * 3) / SIN45;\r\n }\r\n else\r\n {\r\n data.brLength = (p1 - brThick * SIN45) / SIN45;\r\n }\r\n lWRDataList.push(data);\r\n }\r\n\r\n if (widthCount % 2 === 0)\r\n {\r\n for (let i = 0; i < Math.floor(heightCount / 2); i++)\r\n {\r\n let p1 = gripWidth + 2 * brThick * SIN45 + i * gripWidth * 2;\r\n data = {\r\n basePt: new Vector3(width - brThick * SIN45, p1, 0),\r\n brLength: 0\r\n };\r\n if (equaln(height - p1, width - 2 * brThick * SIN45))\r\n {\r\n data.brLength = (height - p1) / SIN45;\r\n }\r\n else if (height - p1 - brThick * SIN45 > width - 2 * brThick * SIN45)\r\n {\r\n data.brLength = (width - brThick * SIN45 * 3) / SIN45;\r\n }\r\n else\r\n {\r\n data.brLength = (height - p1 - brThick * SIN45) / SIN45;\r\n }\r\n lWRDataList.push(data);\r\n }\r\n }\r\n else\r\n {\r\n for (let i = 0; i < Math.floor(heightCount / 2) + 1; i++)\r\n {\r\n let p1 = 0;\r\n if (i == 0)\r\n {\r\n p1 = brThick * SIN45;\r\n data = {\r\n basePt: new Vector3(width, p1, 0),\r\n brLength: 0\r\n };\r\n if (equaln(height, width, 1e-3))\r\n {\r\n data.brLength = (width - brThick * SIN45) / SIN45;\r\n }\r\n else if (height - p1 > width - 2 * brThick * SIN45)\r\n {\r\n data.brLength = (width - brThick * SIN45 * 2) / SIN45;\r\n }\r\n else\r\n {\r\n data.brLength = (height - p1 - brThick * SIN45) / SIN45;\r\n }\r\n }\r\n else\r\n {\r\n p1 = 2 * brThick * SIN45 + i * gripWidth * 2;\r\n data = {\r\n basePt: new Vector3(width - brThick * SIN45, p1, 0),\r\n brLength: 0\r\n };\r\n if (height - p1 > brThick)\r\n {\r\n if (equaln(height - p1, width - 2 * brThick * SIN45, 1e-3))\r\n {\r\n data.brLength = (height - p1) / SIN45;\r\n }\r\n else if (height - p1 > width - brThick * SIN45)\r\n {\r\n data.brLength = (width - brThick * SIN45 * 3) / SIN45;\r\n }\r\n else\r\n {\r\n data.brLength = (height - p1 - brThick * SIN45) / SIN45;\r\n }\r\n }\r\n else\r\n {\r\n continue;//这里需要跳出.\r\n }\r\n }\r\n lWRDataList.push(data);\r\n }\r\n }\r\n }\r\n /**根据酒格数据获取多段线 */\r\n private CreatePolylineByWineData(data: IWineRackData, isLeft = true)\r\n {\r\n let thick = this.Config.boardThick;\r\n let lineData = [\r\n {\r\n pt: new Vector2(),\r\n bul: 0\r\n },\r\n {\r\n pt: new Vector2(thick, 0),\r\n bul: 0\r\n },\r\n {\r\n pt: new Vector2(thick, data.brLength),\r\n bul: 0\r\n },\r\n {\r\n pt: new Vector2(0, data.brLength),\r\n bul: 0\r\n },\r\n ];\r\n let pl = new Polyline(lineData);\r\n pl.CloseMark = true;\r\n let mat = MoveMatrix(new Vector3(thick))\r\n .multiply(new Matrix4().makeRotationZ(0.25 * Math.PI * (isLeft ? 1 : -1)))\r\n .multiply(MoveMatrix(new Vector3(-thick)));\r\n pl.ApplyMatrix(mat)\r\n .ApplyMatrix(MoveMatrix(data.basePt.add(new Vector3(-thick))));\r\n return pl;\r\n }\r\n /**根据多段线组构建酒格 */\r\n protected DrawBoardFormPolyLine(pls: Polyline[], actualWidth?: number, config?: IR2WROption)\r\n {\r\n const leftData: IParsePlRes[] = [];\r\n const rightData: IParsePlRes[] = [];\r\n for (let pl of pls)\r\n {\r\n let data = this.ParsePolyLine(pl);\r\n if (!data.isOk)\r\n continue;\r\n if (data.isLeft)\r\n leftData.push(data);\r\n else\r\n rightData.push(data);\r\n }\r\n\r\n this.CreateBoard(leftData, rightData, actualWidth, config);\r\n this.CreateBoard(rightData, leftData, actualWidth, config);\r\n }\r\n private ParsePolyLine(pl: Polyline): IParsePlRes\r\n {\r\n if (pl.IsClose)\r\n {\r\n if (pl.EndParam !== 4)\r\n {\r\n return {\r\n isOk: false\r\n };\r\n }\r\n\r\n let pts = pl.GetStretchPoints();\r\n\r\n if (equalv3(pts[0], arrayLast(pts)))\r\n pts.pop();\r\n\r\n /*****统一初始形状\r\n * **** h\r\n * * *\r\n * 0 **** t\r\n */\r\n pts.sort((a, b) =>\r\n {\r\n if (equaln(a.y, b.y))\r\n return a.x - b.x;\r\n else\r\n return a.y - b.y;\r\n });\r\n let pts1 = pts.splice(0, 2);\r\n pts1.sort((a, b) => a.x - b.x);\r\n pts.sort((a, b) => a.distanceTo(pts1[1]) - b.distanceTo(pts1[1]));\r\n pts.unshift(...pts1);\r\n const area = pl.Area;\r\n\r\n let v1 = pts[1].clone().clone().sub(pts[0]);\r\n let v2 = arrayLast(pts).clone().sub(pts[0]);\r\n\r\n let [vecY, vecX] = v1.length() > v2.length() ? [v1, v2] : [v2, v1];\r\n\r\n let length = vecY.length();\r\n let thick = vecX.length();\r\n let mat = new Matrix4().makeBasis(vecX.normalize(), vecY.normalize(), ZAxis).setPosition(pts[0]);\r\n let matInv = new Matrix4().getInverse(mat);\r\n\r\n let bp = pts[0].clone().negate();\r\n\r\n if (equaln(length * thick, area, 5))\r\n {\r\n let an = vecY.angleTo(XAxis);\r\n\r\n if (equaln(an, Math.PI / 4, R2WRTolerance))\r\n {\r\n pts.sort((p1, p2) => p2.x - p1.x);\r\n return {\r\n isOk: true,\r\n isLeft: true,\r\n pl,\r\n length,\r\n matInv,\r\n basePt: new Vector3(pts[0].x, 0, pts[0].y),\r\n thickness: thick,\r\n isRo: true,\r\n };\r\n }\r\n else if (equaln(an, 3 * Math.PI / 4, R2WRTolerance))\r\n {\r\n pts.sort((p1, p2) => p1.y - p2.y);\r\n return {\r\n isOk: true,\r\n isLeft: false,\r\n pl,\r\n length,\r\n matInv,\r\n basePt: new Vector3(pts[0].x, 0, pts[0].y),\r\n thickness: thick,\r\n isRo: true,\r\n };\r\n }\r\n else if (isParallelTo(vecX, XAxis, R2WRTolerance))\r\n {\r\n return {\r\n isOk: true,\r\n isLeft: false,\r\n pl,\r\n length,\r\n matInv: new Matrix4().setPosition(bp),\r\n basePt: new Vector3(pts[0].x, 0, pts[0].y),\r\n thickness: thick,\r\n isVer: true,\r\n isRo: false,\r\n };\r\n }\r\n else if (isParallelTo(vecX, YAxis, R2WRTolerance))\r\n {\r\n return {\r\n isOk: true,\r\n isLeft: true,\r\n pl,\r\n length,\r\n matInv: new Matrix4().setPosition(bp),\r\n basePt: new Vector3(pts[1].x, 0, pts[1].y),\r\n thickness: thick,\r\n isRo: false,\r\n };\r\n }\r\n else\r\n {\r\n return {\r\n isOk: false\r\n };\r\n }\r\n }\r\n\r\n }\r\n return {\r\n isOk: false\r\n };\r\n }\r\n /**绘制酒格 */\r\n private CreateBoard(lData: IParsePlRes[], rData: IParsePlRes[], actualWidth?: number, cof?: IR2WROption)\r\n {\r\n if (!lData.length)\r\n return;\r\n\r\n let leftSeal: number, rightSeal: number, upSeal: number, downSeal: number, knifeRad: number;\r\n let config: IWineRackOption;\r\n if (cof)\r\n {\r\n leftSeal = cof.sealedLeft;\r\n rightSeal = cof.sealedRight;\r\n upSeal = cof.sealedUp;\r\n downSeal = cof.sealedDown;\r\n knifeRad = cof.knifeRadius;\r\n }\r\n else\r\n {\r\n config = this.Config;\r\n leftSeal = config.leftEdge;\r\n rightSeal = config.leftEdge;\r\n upSeal = config.leftEdge;\r\n downSeal = config.leftEdge;\r\n knifeRad = config.grooveLengthAdd;\r\n }\r\n\r\n for (let i = 0; i < lData.length; i++)\r\n {\r\n let d = lData[i];\r\n let dists: number[] = [];\r\n for (let d2 of rData)\r\n {\r\n let intPts = d.pl.IntersectWith(d2.pl, IntersectOption.ExtendNone);\r\n if (intPts.length === 4)\r\n {\r\n dists.push(...intPts.map(p =>\r\n {\r\n let p1 = p.applyMatrix4(d.matInv);\r\n\r\n if (!d.isRo && !d.isVer)\r\n return Math.abs(p1.x);\r\n return Math.abs(p1.y);\r\n }));\r\n }\r\n }\r\n arraySortByNumber(dists);\r\n arrayRemoveDuplicateBySort(dists, (n1, n2) => equaln(n1, n2, R2WRTolerance));\r\n\r\n let pl = this.GetPolyline(d, dists, cof);\r\n if (pl)\r\n {\r\n let br = Board.CreateBoard(1, 1, d.thickness ?? config.boardThick, d.isVer ? BoardType.Vertical : BoardType.Layer);\r\n if (d.isLeft)\r\n br.Name = \"右板\" + (lData.length - i);\r\n else\r\n br.Name = \"左板\" + (i + 1);\r\n br.ContourCurve = pl;\r\n this.ParseHighSealing(br, leftSeal, rightSeal, upSeal, downSeal, d.isLeft);\r\n br.KnifeRadius = knifeRad;\r\n if (d.isRo)\r\n br.RotateBoard(0, Math.PI / 4 * (d.isLeft ? -1 : 1), 0);\r\n br.ApplyMatrix(MoveMatrix(this.space.SpaceBox.min));\r\n br.ApplyMatrix(MoveMatrix(d.basePt));\r\n\r\n if (config && (config.fullType === EFullType.ByHeight || config.arrayType === EWRackArrayType.Fixed)\r\n && config.fullDir === EFullDir.Right)\r\n {\r\n br.ApplyMatrix(MoveMatrix(new Vector3(this.space.Size.x - (actualWidth ?? 0))));\r\n }\r\n br.ApplyMatrix(this.space.SpaceOCS);\r\n this.boardlist.push(br);\r\n }\r\n }\r\n }\r\n /**构建酒格形状,加入齿 */\r\n private GetPolyline(data: IParsePlRes, dists: number[], cof?: IR2WROption)\r\n {\r\n let len = data.length;\r\n let isLeft = data.isLeft;\r\n\r\n const size = this.space.Size;\r\n let pl = new Polyline();\r\n pl.Rectangle(size.y, len);\r\n\r\n let addWidth: number;\r\n let leftEdge: number;\r\n let rightEdge: number;\r\n let knifeRad: number;\r\n if (cof)\r\n {\r\n addWidth = cof.addLen;\r\n leftEdge = cof.sealedLeft;\r\n rightEdge = cof.sealedRight;\r\n knifeRad = cof.knifeRadius;\r\n }\r\n else\r\n {\r\n const config = this.Config;\r\n addWidth = config.grooveWidthAdd;\r\n leftEdge = config.leftEdge;\r\n rightEdge = config.rightEdge;\r\n knifeRad = config.grooveLengthAdd;\r\n }\r\n\r\n if (isLeft)\r\n {\r\n if (!data.isVer)\r\n {\r\n let newDist = dists.map(d => len - d);\r\n dists.length = 0;\r\n dists.push(...newDist);\r\n }\r\n addWidth = (addWidth - 2 * leftEdge) / 2;\r\n }\r\n else\r\n addWidth = (addWidth - 2 * rightEdge) / 2;\r\n\r\n if (dists.length % 2 === 0 && dists.length > 1)\r\n {\r\n let pts: Vector2[] = [];\r\n for (let i = 0; i < dists.length; i++)\r\n {\r\n if (i % 2 === 0)\r\n {\r\n if (isLeft)\r\n {\r\n pts.push(new Vector2(0, dists[i] + addWidth));\r\n pts.push(new Vector2(size.y / 2 + knifeRad, dists[i] + addWidth));\r\n }\r\n else\r\n {\r\n pts.push(new Vector2(size.y, dists[i] - addWidth));\r\n pts.push(new Vector2(size.y / 2 - knifeRad, dists[i] - addWidth));\r\n }\r\n }\r\n else\r\n {\r\n if (isLeft)\r\n {\r\n pts.push(new Vector2(size.y / 2 + knifeRad, dists[i] - addWidth));\r\n pts.push(new Vector2(0, dists[i] - addWidth));\r\n }\r\n else\r\n {\r\n pts.push(new Vector2(size.y / 2 - knifeRad, dists[i] + addWidth));\r\n pts.push(new Vector2(size.y, dists[i] + addWidth));\r\n }\r\n }\r\n }\r\n pl.AddVertexAt(isLeft ? pl.NumberOfVertices : 2, pts);\r\n }\r\n return pl;\r\n }\r\n}\r\n","import { Vector3 } from \"three\";\r\nimport { Board } from \"../../DatabaseServices/Entity/Board\";\r\nimport { Polyline } from \"../../DatabaseServices/Entity/Polyline\";\r\nimport { AsVector2, MoveMatrix } from \"../../Geometry/GeUtils\";\r\nimport { ISpaceParse } from \"../../Geometry/SpaceParse/ISpaceParse\";\r\nimport { BoardType } from \"../../UI/Store/BoardInterface\";\r\nimport { EWRackArrayType, IWineRackOption } from \"../../UI/Store/WineRackInterface\";\r\nimport { DrawWineRackTool } from \"./DrawWinRackTool\";\r\n\r\n/**\r\n * 正酒格\r\n */\r\nexport class DrawUprightWineRackTool extends DrawWineRackTool\r\n{\r\n Parse(space: ISpaceParse, config: IWineRackOption)\r\n {\r\n super.Parse(space, config);\r\n let size = space.Size;\r\n let gripWidth = config.gripWidth;\r\n let brThick = config.boardThick;\r\n let spaceHeight = size.z;\r\n let spaceWidth = size.x;\r\n let gripHeight = gripWidth;\r\n let actualHeight = spaceHeight;\r\n let actualWidth = spaceWidth;\r\n\r\n switch (config.arrayType)\r\n {\r\n case EWRackArrayType.ByWidth:\r\n // let tempWidthCount = 0;\r\n // let tempHeightCount = 0;\r\n // if (widCount > 0 || heightCount > 0)\r\n // {\r\n // tempWidthCount = Math.floor(spaceWidth / (gripWidth + brThick));\r\n // tempHeightCount = Math.floor(spaceHeight / (gripWidth + brThick));\r\n // gripWidth = (spaceWidth - (tempWidthCount - 1) * brThick) / tempWidthCount;\r\n // gripHeight = (spaceHeight - (tempHeightCount - 1) * brThick) / tempHeightCount;\r\n // if (widCount > 0)\r\n // {\r\n // heightCount = tempHeightCount;\r\n // actualWidth = gripWidth * widCount + brThick * (widCount - 1);\r\n // }\r\n // else if (heightCount > 0)\r\n // {\r\n // widCount = tempWidthCount;\r\n // actualWidth = gripWidth * widCount + brThick * (widCount - 1);\r\n // }\r\n // }\r\n config.widthCount = Math.floor(spaceWidth / (gripWidth + brThick));\r\n config.heightCount = Math.floor(spaceHeight / (gripWidth + brThick));\r\n config.gripWidth = (spaceWidth - (config.widthCount - 1) * brThick) / config.widthCount;\r\n gripHeight = (spaceHeight - (config.heightCount - 1) * brThick) / config.heightCount;\r\n break;\r\n case EWRackArrayType.ByCount:\r\n if (config.widthCount > 0)\r\n {\r\n config.widthCount = Math.floor(config.widthCount);\r\n }\r\n else\r\n {\r\n let gk = (spaceHeight - 2 * brThick) / config.heightCount;\r\n config.widthCount = Math.floor((spaceWidth - 2 * brThick) / gk + 1e-6);\r\n }\r\n if (config.heightCount > 0)\r\n {\r\n config.heightCount = Math.floor(config.heightCount);\r\n }\r\n else\r\n {\r\n let gk = (spaceWidth - 2 * config.heightCount) / config.heightCount;\r\n config.heightCount = Math.floor((spaceHeight - 2 * brThick) / gk + 1e-6);\r\n }\r\n config.gripWidth = (spaceWidth - (config.widthCount - 1) * brThick) / config.widthCount;\r\n gripHeight = (spaceHeight - (config.heightCount - 1) * brThick) / config.heightCount;\r\n break;\r\n case EWRackArrayType.Fixed:\r\n config.widthCount = Math.floor(config.widthCount);\r\n config.heightCount = Math.floor(config.heightCount);\r\n actualWidth = gripWidth * config.widthCount + brThick * (config.widthCount - 1);\r\n actualHeight = gripWidth * config.heightCount + brThick * (config.heightCount - 1);\r\n default:\r\n break;\r\n }\r\n\r\n if (config.widthCount <= 0 || config.heightCount <= 0)\r\n throw `绘制酒格失败,酒格个数异常! 宽个数:${config.widthCount} 高个数:${config.heightCount}`;\r\n\r\n config.widthCount--;\r\n config.heightCount--;\r\n this.BuildBoard(gripHeight, actualWidth, actualHeight, space);\r\n // this.AddLayerOrVerticalBoard(actualWidth, actualHeight);\r\n }\r\n BuildBoard(gripHeight: number, spaceWidth: number, spaceHeight: number, space: ISpaceParse)\r\n {\r\n const config = this.Config;\r\n let min = space.SpaceBox.min;\r\n let size = space.Size;\r\n let brThick = config.boardThick;\r\n\r\n let verBr = Board.CreateBoard(spaceHeight, size.y, brThick, BoardType.Vertical);\r\n this.ParseBrTooth(verBr, gripHeight);\r\n for (let i = 1; i <= config.widthCount; i++)\r\n {\r\n let br = verBr.Clone();\r\n br.Name = \"右板\" + i;\r\n br.ApplyMatrix(MoveMatrix(min.clone().add(new Vector3(config.gripWidth * i + (i - 1) * brThick)))).ApplyMatrix(space.SpaceOCS);\r\n this.boardlist.push(br);\r\n }\r\n\r\n let lyBr = Board.CreateBoard(spaceWidth, size.y, brThick);\r\n this.ParseBrTooth(lyBr);\r\n for (let i = 1; i <= config.heightCount; i++)\r\n {\r\n let br = lyBr.Clone();\r\n br.Name = \"左板\" + i;\r\n br.ApplyMatrix(MoveMatrix(\r\n min.clone().add(new Vector3(spaceWidth, 0, gripHeight * i + (i - 1) * brThick))))\r\n .ApplyMatrix(space.SpaceOCS);\r\n this.boardlist.push(br);\r\n }\r\n }\r\n ParseBrTooth(br: Board, gripHeight?: number)\r\n {\r\n const config = this.Config;\r\n let initPts: Vector3[] = [];\r\n\r\n let addWidth = config.grooveWidthAdd;\r\n let topEdge = config.topEdge;\r\n let bottomEdge = config.bottomEdge;\r\n let leftEdge = config.leftEdge;\r\n let rightEdge = config.rightEdge;\r\n let grooveLenAdd = config.grooveLengthAdd;\r\n\r\n br.BoardProcessOption.sealedUp = topEdge.toString();\r\n br.BoardProcessOption.sealedDown = bottomEdge.toString();\r\n br.BoardProcessOption.sealedLeft = leftEdge.toString();\r\n br.BoardProcessOption.sealedRight = rightEdge.toString();\r\n\r\n if (br.BoardType === BoardType.Layer)\r\n {\r\n addWidth = (addWidth - 2 * leftEdge) / 2;\r\n let p1 = new Vector3(0, config.gripWidth - addWidth);\r\n let p2 = new Vector3(br.Width / 2 + grooveLenAdd, config.gripWidth - addWidth);\r\n let p3 = new Vector3(br.Width / 2 + grooveLenAdd, config.gripWidth + br.Thickness + addWidth);\r\n let p4 = new Vector3(0, config.gripWidth + br.Thickness + addWidth);\r\n initPts.push(p1, p2, p3, p4);\r\n for (let i = 2; i <= config.widthCount; i++)\r\n {\r\n initPts.push(\r\n ...[p1, p2, p3, p4].map(p => p.clone().add(new Vector3(0, (config.gripWidth + br.Thickness) * (i - 1))))\r\n );\r\n }\r\n initPts.reverse();\r\n let cu = br.ContourCurve as Polyline;\r\n cu.AddVertexAt(cu.EndParam, initPts.map(p => AsVector2(p)));\r\n br.ContourCurve = cu;\r\n }\r\n else\r\n {\r\n addWidth = (addWidth - 2 * rightEdge) / 2;\r\n let p1 = new Vector3(br.Width, gripHeight - addWidth);\r\n let p2 = new Vector3(br.Width / 2 - grooveLenAdd, gripHeight - addWidth);\r\n let p3 = new Vector3(br.Width / 2 - grooveLenAdd, gripHeight + br.Thickness + addWidth);\r\n let p4 = new Vector3(br.Width, gripHeight + br.Thickness + addWidth);\r\n initPts.push(p1, p2, p3, p4);\r\n for (let i = 2; i <= config.heightCount; i++)\r\n {\r\n initPts.push(\r\n ...[p1, p2, p3, p4].map(p => p.clone().add(new Vector3(0, (gripHeight + br.Thickness) * (i - 1))))\r\n );\r\n }\r\n let cu = br.ContourCurve as Polyline;\r\n cu.AddVertexAt(2, initPts.map(p => AsVector2(p)));\r\n br.ContourCurve = cu;\r\n }\r\n this.ParseHighSealing(br, config.leftEdge, config.rightEdge, config.topEdge, config.bottomEdge, br.BoardType === BoardType.Layer);\r\n }\r\n}\r\n","import { Vector3 } from \"three\";\r\nimport { ExtendsBoardThickness } from \"../../../Add-on/DrawBoard/BuildBoardTool\";\r\nimport { DrawObliqueWineRackTool } from \"../../../Add-on/DrawWineRack/DrawObliqueWineRackTool\";\r\nimport { DrawUprightWineRackTool } from \"../../../Add-on/DrawWineRack/DrawUprightWineRackTool\";\r\nimport { DrawWineRackTool } from \"../../../Add-on/DrawWineRack/DrawWinRackTool\";\r\nimport { DefaultWineRackConfig } from \"../../../Editor/DefaultConfig\";\r\nimport { Box3Ext } from \"../../../Geometry/Box\";\r\nimport { ISpaceParse } from \"../../../Geometry/SpaceParse/ISpaceParse\";\r\nimport { EWineRackType, IWineRackOption } from \"../../../UI/Store/WineRackInterface\";\r\nimport { Factory } from \"../../CADFactory\";\r\nimport { CADFiler } from \"../../CADFiler\";\r\nimport { Board } from \"../../Entity/Board\";\r\nimport { TemplateRecord } from \"../TemplateRecord\";\r\n\r\n@Factory\r\nexport class TemplateWineRackRecord extends TemplateRecord\r\n{\r\n private option: IWineRackOption = { ...DefaultWineRackConfig };\r\n constructor()\r\n {\r\n super();\r\n this.name = \"酒格(自动)\";\r\n }\r\n get Option()\r\n {\r\n return Object.assign({}, this.option);\r\n }\r\n set Option(option: IWineRackOption)\r\n {\r\n this.WriteAllObjectRecord();\r\n Object.assign(this.option, option);\r\n ExtendsBoardThickness(this, option.boardThick);\r\n }\r\n protected async Update()\r\n {\r\n await super.Update();\r\n\r\n let bh = this.GetParam(\"BH\")?.value as number;\r\n if (bh)\r\n this.option.boardThick = bh;\r\n\r\n let bh2 = this.GetParam(\"BH2\")?.value as number;\r\n if (bh2)\r\n this.option.brThick2 = bh2;\r\n\r\n let wineRack: DrawWineRackTool;\r\n if (this.option.type === EWineRackType.Oblique)\r\n wineRack = DrawObliqueWineRackTool.GetInstance() as DrawObliqueWineRackTool;\r\n else\r\n wineRack = DrawUprightWineRackTool.GetInstance() as DrawUprightWineRackTool;\r\n\r\n let sbrs = this.PositioningSupportBoards;\r\n let space = new ISpaceParse(sbrs, this._CacheSpaceCS);\r\n space.ParseOK = true;\r\n space.SpaceBox = new Box3Ext(new Vector3(), this._CacheSpaceSize);\r\n\r\n wineRack.Parse(space, this.Option);\r\n\r\n let nbrs = wineRack.boardlist;\r\n\r\n for (let i = nbrs.length; i < this.Objects.length; i++)\r\n this.Objects[i].Object.Erase();\r\n\r\n for (let i = 0; i < nbrs.length; i++)\r\n {\r\n if (i < this.Objects.length)\r\n {\r\n let br = this.Objects[i].Object as Board;\r\n br.Erase(false);\r\n br.CopyFrom(nbrs[i]);\r\n br.SpaceOCS = this._CacheSpaceCS;\r\n }\r\n else\r\n {\r\n this._db.ModelSpace.Append(nbrs[i]);\r\n this.Objects.push(nbrs[i].Id);\r\n nbrs[i].SpaceOCS = this._CacheSpaceCS;\r\n }\r\n }\r\n }\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 super.ReadFile(file);\r\n\r\n this.option.type = file.Read();\r\n this.option.arrayType = file.Read();\r\n this.option.fullType = file.Read();\r\n this.option.isFull = file.Read();\r\n this.option.fullDir = file.Read();\r\n this.option.isLock = file.Read();\r\n this.option.heightCount = file.Read();\r\n this.option.widthCount = file.Read();\r\n\r\n this.option.isTotalDepth = file.Read();\r\n this.option.depth = file.Read();\r\n this.option.calcDepth = file.Read();\r\n this.option.gripWidth = file.Read();\r\n this.option.boardThick = file.Read();\r\n this.option.grooveWidthAdd = file.Read();\r\n\r\n this.option.leftEdge = file.Read();\r\n this.option.rightEdge = file.Read();\r\n this.option.topEdge = file.Read();\r\n this.option.bottomEdge = file.Read();\r\n\r\n this.option.frontCut = file.Read();\r\n this.option.leftCut = file.Read();\r\n this.option.rightCut = file.Read();\r\n this.option.topCut = file.Read();\r\n\r\n this.option.grooveLengthAdd = file.Read();\r\n this.option.isDrawLy = file.Read();\r\n this.option.isDrawVer = file.Read();\r\n this.option.brThick2 = file.Read();\r\n\r\n if (ver > 1)\r\n this.option.followNarrow = file.Read();\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(2);\r\n super.WriteFile(file);\r\n file.Write(this.option.type);\r\n file.Write(this.option.arrayType);\r\n file.Write(this.option.fullType);\r\n file.Write(this.option.isFull);\r\n file.Write(this.option.fullDir);\r\n file.Write(this.option.isLock);\r\n file.Write(this.option.heightCount);\r\n file.Write(this.option.widthCount);\r\n\r\n file.Write(this.option.isTotalDepth);\r\n file.Write(this.option.depth);\r\n file.Write(this.option.calcDepth);\r\n file.Write(this.option.gripWidth);\r\n file.Write(this.option.boardThick);\r\n file.Write(this.option.grooveWidthAdd);\r\n file.Write(this.option.leftEdge);\r\n file.Write(this.option.rightEdge);\r\n file.Write(this.option.topEdge);\r\n file.Write(this.option.bottomEdge);\r\n\r\n file.Write(this.option.frontCut);\r\n file.Write(this.option.leftCut);\r\n file.Write(this.option.rightCut);\r\n file.Write(this.option.topCut);\r\n\r\n file.Write(this.option.grooveLengthAdd);\r\n file.Write(this.option.isDrawLy);\r\n file.Write(this.option.isDrawVer);\r\n file.Write(this.option.brThick2);\r\n file.Write(this.option.followNarrow);\r\n }\r\n //#endregion\r\n}\r\n","import { Geometry, Vector3, WebGLRenderer } from \"three\";\r\nimport { CADFiler } from \"../../api\";\r\nimport { CameraUpdate } from \"../../GraphicsSystem/CameraUpdate\";\r\nimport { RenderType } from \"../../GraphicsSystem/RenderType\";\r\nimport { Factory } from \"../CADFactory\";\r\nimport { Entity } from \"../Entity/Entity\";\r\nimport { ObjectId } from \"../ObjectId\";\r\n\r\nconst MaxSize = 2048 * 2;\r\n\r\n/**\r\n * 更新视口实体的时机:\r\n * ->在布局状态下才应该更新,否则则标记为需要更新(或者不需要标记)\r\n * ->在缩放相机时,标记所有的需要更新(异步更新任务)(优先更新可见视口)\r\n * ->切换到布局时,更新全部视口(使用更新任务)\r\n */\r\n\r\n@Factory\r\nexport class ViewportEntity2 extends Entity\r\n{\r\n static Renderer: WebGLRenderer;\r\n OnlyRenderType = true;\r\n\r\n //当前视口的渲染类型\r\n private _RenderType: RenderType = RenderType.Conceptual;\r\n //当前视口绘制的图形列表\r\n private _DisplayEntitys: Set = new Set();\r\n\r\n private _CameraData = new CameraUpdate;\r\n constructor(\r\n private _Width: number = 1,\r\n private _Height: number = 1,\r\n )\r\n {\r\n super();\r\n }\r\n\r\n SetSize(width: number, height: number)\r\n {\r\n if (this._Width === width && this._Height === height) return;\r\n\r\n this.WriteAllObjectRecord();\r\n this._Width = width;\r\n this._Height = height;\r\n this.Update();\r\n }\r\n\r\n AppendEntity(ens: Iterable)\r\n {\r\n this.WriteAllObjectRecord();\r\n for (let e of ens)\r\n this._DisplayEntitys.add(e.Id);\r\n\r\n this.Update();\r\n }\r\n\r\n _Target = new Vector3(0, 0, -1);\r\n\r\n \r\n\r\n Destroy()\r\n {\r\n super.Destroy();\r\n }\r\n\r\n\r\n //#region -------------------------File-------------------------\r\n //对象从文件中读取数据,初始化自身\r\n protected _ReadFile(file: CADFiler)\r\n {\r\n let ver = file.Read();\r\n super._ReadFile(file);\r\n\r\n\r\n this._Width = file.Read();\r\n this._Height = file.Read();\r\n\r\n this._DisplayEntitys.clear();\r\n let count = file.Read();\r\n for (let i = 0; i < count; i++)\r\n {\r\n let id = file.ReadSoftObjectId();\r\n if (id)\r\n this._DisplayEntitys.add(id);\r\n }\r\n\r\n this._RenderType = file.Read();\r\n this._Target.fromArray(file.Read());\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(1);\r\n super.WriteFile(file);\r\n\r\n file.Write(this._Width);\r\n file.Write(this._Height);\r\n\r\n file.Write(this._DisplayEntitys.size);\r\n for (let id of this._DisplayEntitys)\r\n file.WriteSoftObjectId(id);\r\n\r\n file.Write(this._RenderType);\r\n file.Write(this._Target.toArray());\r\n }\r\n //#endregion\r\n}\r\n\r\n//\r\nfunction ScaleUV2(geo: Geometry, xScale = 1e-3, yScale = 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.x /= xScale;\r\n uv.y /= yScale;\r\n }\r\n }\r\n }\r\n}\r\n","import { Box3, BufferGeometry, Face3, Geometry, Line as TLine, LineSegments, MathUtils, Matrix3, Mesh, Object3D, ShapeUtils, Vector2, Vector3 } from \"three\";\r\nimport { HostApplicationServices } from \"../../../../ApplicationServices/HostApplicationServices\";\r\nimport { arrayPushArray } from \"../../../../Common/ArrayExt\";\r\nimport { ColorMaterial } from \"../../../../Common/ColorPalette\";\r\nimport { EntityUpdateWrap } from \"../../../../Common/EntityUpdateWrap\";\r\nimport { ObjectSnapMode } from \"../../../../Editor/ObjectSnapMode\";\r\nimport { Box3Ext } from \"../../../../Geometry/Box\";\r\nimport { BufferGeometryUtils } from \"../../../../Geometry/BufferGeometryUtils\";\r\nimport { equaln, equalv3, midPoint, MoveMatrix, ZAxis, ZeroVec } from \"../../../../Geometry/GeUtils\";\r\nimport { RenderType } from \"../../../../GraphicsSystem/RenderType\";\r\nimport { SubtractRange, Tape } from \"../../../../ueapi\";\r\nimport { Factory } from \"../../../CADFactory\";\r\nimport { CADFiler } from \"../../../CADFiler\";\r\nimport { Curve } from \"../../../Entity/Curve\";\r\nimport { Line } from \"../../../Entity/Line\";\r\nimport { GetLineParam } from \"../../ParseService/GetCurveParam\";\r\nimport { applyMixins, RoomWallBase } from \"./RoomWallBase\";\r\nimport { WallSnapMode } from \"./WallSnapMode\";\r\n\r\nconst SnapTempLine = new Line;\r\nconst TempP = new Vector3;\r\n\r\n@Factory\r\nexport class RoomWallLine extends RoomWallBase\r\n{\r\n\r\n constructor(private _StartPoint = new Vector3,\r\n private _EndPoint = new Vector3,\r\n _Thickness = 120\r\n )\r\n {\r\n super();\r\n this.Thickness = _Thickness;\r\n }\r\n\r\n UpdateOCSToMinBox()\r\n {\r\n this.WriteAllObjectRecord();\r\n let sp = this.StartPoint;\r\n let ep = this.EndPoint;\r\n\r\n let x = this.GetFistDeriv(0).normalize();\r\n let z = ZAxis;\r\n let y = z.clone().cross(x).normalize();\r\n this._Matrix.makeBasis(x, y, z).setPosition(sp);\r\n\r\n let inv = this.OCSInv;\r\n this._StartPoint.copy(sp).applyMatrix4(inv);\r\n this._EndPoint.copy(ep).applyMatrix4(inv);\r\n }\r\n\r\n get StartPoint(): Vector3\r\n {\r\n return this._StartPoint.clone().applyMatrix4(this.OCSNoClone);\r\n }\r\n\r\n get EndPoint(): Vector3\r\n {\r\n return this._EndPoint.clone().applyMatrix4(this.OCSNoClone);\r\n }\r\n\r\n set StartPoint(p: Vector3)\r\n {\r\n p = TempP.copy(p).applyMatrix4(this.OCSInv).setZ(0);\r\n if (!equalv3(p, this._StartPoint, 1e-4))\r\n {\r\n this.WriteAllObjectRecord();\r\n this._StartPoint.copy(p);\r\n this.Update();\r\n }\r\n }\r\n\r\n set EndPoint(p: Vector3)\r\n {\r\n p = TempP.copy(p).applyMatrix4(this.OCSInv).setZ(0);\r\n if (!equalv3(p, this._EndPoint, 1e-4))\r\n {\r\n this.WriteAllObjectRecord();\r\n this._EndPoint.copy(p);\r\n this.Update();\r\n }\r\n }\r\n\r\n Reverse(): this\r\n {\r\n this.WriteAllObjectRecord();\r\n [this._EndPoint, this._StartPoint] = [this._StartPoint, this._EndPoint];\r\n return this;\r\n }\r\n\r\n //中心轴线\r\n override get CenterAxisCurve(): Line\r\n {\r\n let line = new Line(this._StartPoint.clone(), this._EndPoint.clone());\r\n line.OCSNoClone.copy(this.OCSNoClone);\r\n return line;\r\n }\r\n\r\n get BoundingBox(): Box3\r\n {\r\n return this.BoundingBoxInOCS.applyMatrix4(this.OCSNoClone);\r\n }\r\n\r\n get BoundingBoxInOCS(): Box3Ext\r\n {\r\n let line = new Line(this._StartPoint, this._EndPoint);\r\n let parse = new GetLineParam(line);\r\n if (parse.Length > 1e-5)\r\n {\r\n let p1 = parse.OffsetPoint(this._StartPoint.clone(), this.Thickness * 0.5);//left\r\n let p2 = parse.OffsetPoint(this._StartPoint.clone(), this.Thickness * -0.5);//right\r\n\r\n let p3 = parse.OffsetPoint(this._EndPoint.clone(), this.Thickness * 0.5);//left\r\n let p4 = parse.OffsetPoint(this._EndPoint.clone(), this.Thickness * -0.5);//right\r\n\r\n p1.z = this._Height;\r\n\r\n return new Box3Ext().setFromPoints([p1, p2, p3, p4]);\r\n }\r\n\r\n return new Box3Ext().setFromPoints([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 let pts = [];\r\n pts = pts.concat(Line.prototype.GetObjectSnapPoints.call(this, snapMode, pickPoint, lastPoint, viewXform));\r\n const CurveSnap = (curve: Curve) =>\r\n {\r\n let bakZ = curve.Z;\r\n //底部线\r\n arrayPushArray(pts, curve.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform));\r\n\r\n //顶部线\r\n curve.Z += this._Height;\r\n arrayPushArray(pts, curve.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform));\r\n curve.Z = bakZ;\r\n\r\n //柱子线\r\n SnapTempLine.OCSNoClone.copy(curve.OCSNoClone);\r\n //@ts-ignore\r\n SnapTempLine._StartPoint.copy(curve._StartPoint);\r\n //@ts-ignore\r\n SnapTempLine._EndPoint.copy(curve._StartPoint);\r\n //@ts-ignore\r\n SnapTempLine._EndPoint.z += this._Height;\r\n\r\n arrayPushArray(pts, SnapTempLine.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform));\r\n\r\n //@ts-ignore\r\n SnapTempLine._StartPoint.copy(curve._EndPoint);\r\n //@ts-ignore\r\n SnapTempLine._EndPoint.copy(curve._EndPoint);\r\n //@ts-ignore\r\n SnapTempLine._EndPoint.z += this._Height;\r\n\r\n arrayPushArray(pts, SnapTempLine.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform));\r\n };\r\n\r\n if (this.LeftCurves && (RoomWallBase.SnapMode & WallSnapMode.Out) > 0)\r\n {\r\n this.LeftCurves.forEach(CurveSnap);\r\n this.RightCurves.forEach(CurveSnap);\r\n this.LidCurves.forEach(CurveSnap);\r\n }\r\n\r\n return pts;\r\n }\r\n\r\n GetGripPoints(): Vector3[]\r\n {\r\n let sp = this.StartPoint;\r\n let ep = this.EndPoint;\r\n let pts = [sp, midPoint(sp, ep), ep];\r\n for (let i = 0; i < 3; i++)\r\n {\r\n let p = pts[i].clone();\r\n pts.push(p.setZ(p.z + this._Height));\r\n }\r\n return pts;\r\n }\r\n\r\n MoveGripPoints(indexs: number[], vec: Vector3)\r\n {\r\n if (equalv3(vec, ZeroVec, 1e-4)) return;\r\n this.WriteAllObjectRecord();\r\n\r\n let set = new Set();\r\n for (let i of indexs)\r\n if (i > 2) set.add(i - 3);\r\n else set.add(i);\r\n\r\n EntityUpdateWrap(this, () =>\r\n {\r\n for (let index of set)\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\r\n GetStretchPoints(): Vector3[]\r\n {\r\n return [this.StartPoint, this.EndPoint];\r\n }\r\n MoveStretchPoints(indexList: number[], vec: Vector3)\r\n {\r\n if (equalv3(vec, ZeroVec, 1e-4)) return;\r\n this.WriteAllObjectRecord();\r\n EntityUpdateWrap(this, () =>\r\n {\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\r\n //#region //绘制\r\n\r\n UpdateDrawGeometry()\r\n {\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\r\n private _EdgeGeometry: BufferGeometry;\r\n get EdgeGeometry()\r\n {\r\n if (this._EdgeGeometry) return this._EdgeGeometry;\r\n\r\n for (let hole of this.RealHoles)\r\n if (hole.StartParam > hole.EndParam)\r\n [hole.StartParam, hole.EndParam] = [hole.EndParam, hole.StartParam];\r\n\r\n let pts: Vector3[];\r\n if (!this.LeftCurves)\r\n {\r\n let line = new Line(this._StartPoint, this._EndPoint);\r\n let parse = new GetLineParam(line);\r\n if (parse.Length > 0.1)\r\n {\r\n let p1 = parse.OffsetPoint(this._StartPoint.clone(), this.Thickness * 0.5);//left\r\n let p2 = parse.OffsetPoint(this._StartPoint.clone(), this.Thickness * -0.5);//right\r\n\r\n let p3 = parse.OffsetPoint(this._EndPoint.clone(), this.Thickness * 0.5);//left\r\n let p4 = parse.OffsetPoint(this._EndPoint.clone(), this.Thickness * -0.5);//right\r\n\r\n let [pz1, pz2, pz3, pz4] = [p1, p2, p3, p4].map(p => p.clone().setZ(this._Height));\r\n pts = [p1, p2, p2, p4, p4, p3, p3, p1,\r\n pz1, pz2, pz2, pz4, pz4, pz3, pz3, pz1,\r\n\r\n p1, pz1,\r\n p2, pz2,\r\n p3, pz3,\r\n p4, pz4\r\n ];\r\n }\r\n }\r\n else\r\n {\r\n pts = [];\r\n let inv = this.OCSInv;\r\n const DrawCurve = (curve: Curve, _leftRanges: [number, number][], _rightRanges: [number, number][]) =>\r\n {\r\n if (curve instanceof Line)\r\n {\r\n let p1 = curve.StartPoint.applyMatrix4(inv);\r\n let p2 = curve.EndPoint.applyMatrix4(inv);\r\n pts.push(p1, p2);\r\n\r\n for (let range of _leftRanges)\r\n pts.push(p1.clone().setZ(range[0]), p1.clone().setZ(range[1]));\r\n for (let range of _rightRanges)\r\n pts.push(p2.clone().setZ(range[0]), p2.clone().setZ(range[1]));\r\n\r\n pts.push(p1.clone().setZ(this._Height), p2.clone().setZ(this._Height));\r\n }\r\n };\r\n\r\n let lidRanges: [number, number][] = [[0, this._Height]];\r\n let leftRanges = lidRanges;\r\n let rightRanges = lidRanges;\r\n for (let hole of this.RealHoles)\r\n {\r\n if (equaln(hole.StartParam, 0))\r\n {\r\n let newLeftRanges = [];\r\n for (let range of leftRanges)\r\n arrayPushArray(newLeftRanges, SubtractRange(range[0], range[1], hole.Bottom, hole.Top, 1e5));\r\n leftRanges = newLeftRanges;\r\n }\r\n\r\n if (equaln(hole.EndParam, 1))\r\n {\r\n let newRightRanges = [];\r\n for (let range of rightRanges)\r\n arrayPushArray(newRightRanges, SubtractRange(range[0], range[1], hole.Bottom, hole.Top, 1e5));\r\n rightRanges = newRightRanges;\r\n }\r\n }\r\n\r\n for (let i = 0; i < this.LeftCurves.length; i++)\r\n {\r\n let curve = this.LeftCurves[i];\r\n DrawCurve(curve, i === 0 ? leftRanges : lidRanges, (i === this.LeftCurves.length - 1) ? rightRanges : lidRanges);\r\n }\r\n for (let i = 0; i < this.RightCurves.length; i++)\r\n {\r\n let curve = this.RightCurves[i];\r\n DrawCurve(curve, i === 0 ? leftRanges : lidRanges, (i === this.RightCurves.length - 1) ? rightRanges : lidRanges);\r\n }\r\n for (let i = 0; i < this.LidCurves.length; i++)\r\n {\r\n let curve = this.LidCurves[i];\r\n DrawCurve(curve, lidRanges, lidRanges);\r\n }\r\n }\r\n\r\n this._EdgeGeometry = BufferGeometryUtils.CreateFromPts(pts ?? []);\r\n return this._EdgeGeometry;\r\n }\r\n\r\n private _MeshGeometry: Geometry;\r\n get MeshGeometry()\r\n {\r\n if (this._MeshGeometry) return this._MeshGeometry;\r\n\r\n this._MeshGeometry = new Geometry;\r\n\r\n let geo = this._MeshGeometry;\r\n\r\n let normal = this.Normal;\r\n let normaln = normal.clone().negate();\r\n\r\n let line = new Line(this._StartPoint, this._EndPoint);\r\n let parse = new GetLineParam(line);\r\n if (!this.LeftCurves)\r\n {\r\n if (parse.Length > 0.1)\r\n {\r\n let p1 = parse.OffsetPoint(this._StartPoint.clone(), this.Thickness * 0.5);//left\r\n let p2 = parse.OffsetPoint(this._StartPoint.clone(), this.Thickness * -0.5);//right\r\n\r\n let p3 = parse.OffsetPoint(this._EndPoint.clone(), this.Thickness * 0.5);//left\r\n let p4 = parse.OffsetPoint(this._EndPoint.clone(), this.Thickness * -0.5);//right\r\n\r\n let [pz1, pz2, pz3, pz4] = [p1, p2, p3, p4].map(p => p.clone().setZ(this._Height));\r\n\r\n geo.vertices.push(p1, p2, p3, p4, pz1, pz2, pz3, pz4);\r\n\r\n geo.faces.push(\r\n //底部\r\n new Face3(0, 2, 1, normaln),\r\n new Face3(1, 2, 3, normaln),\r\n //顶部\r\n new Face3(0 + 4, 1 + 4, 2 + 4, normal),\r\n new Face3(1 + 4, 3 + 4, 2 + 4, normal),\r\n //开始盖子\r\n new Face3(0, 1, 5, parse.Direction.clone().negate()),\r\n new Face3(0, 5, 4, parse.Direction.clone().negate()),\r\n //结束盖子\r\n new Face3(2, 7, 3, parse.Direction),\r\n new Face3(2, 6, 7, parse.Direction),\r\n //left\r\n new Face3(0, 6, 2, parse.LeftDir),\r\n new Face3(0, 4, 6, parse.LeftDir),\r\n //right\r\n new Face3(1, 3, 7, parse.LeftDir.clone().negate()),\r\n new Face3(1, 7, 5, parse.LeftDir.clone().negate()),\r\n );\r\n\r\n //x\r\n let x = parse.Length * 1e-3;\r\n let y = this.Thickness * 1e-3;\r\n let z = this._Height * 1e-3;\r\n geo.faceVertexUvs[0].push(\r\n //floor\r\n [new Vector2(0, 0), new Vector2(x, 0), new Vector2(0, y)],\r\n [new Vector2(0, y), new Vector2(x, 0), new Vector2(x, y)],\r\n //top\r\n [new Vector2(0, 0), new Vector2(0, y), new Vector2(x, 0)],\r\n [new Vector2(0, y), new Vector2(x, y), new Vector2(x, 0)],\r\n //start lid\r\n [new Vector2(0, 0), new Vector2(y, 0), new Vector2(y, z)],\r\n [new Vector2(0, 0), new Vector2(y, z), new Vector2(0, z)],\r\n //end lid\r\n [new Vector2(y, 0), new Vector2(0, z), new Vector2(0, 0)],\r\n [new Vector2(y, 0), new Vector2(y, z), new Vector2(0, z)],\r\n //left\r\n [new Vector2(0, 0), new Vector2(x, z), new Vector2(x, 0)],\r\n [new Vector2(0, 0), new Vector2(0, z), new Vector2(x, z)],\r\n //right\r\n [new Vector2(0, 0), new Vector2(x, 0), new Vector2(0, z)],\r\n [new Vector2(0, 0), new Vector2(0, z), new Vector2(0, z)],\r\n );\r\n\r\n\r\n }\r\n }\r\n else\r\n {\r\n let inv = this.OCSInv;\r\n let thisParam = new GetLineParam(this as unknown as Line);\r\n const BuildLeftFace = (curve: Curve) =>\r\n {\r\n \r\n\r\n if (curve instanceof Line)\r\n {\r\n let tapes = [new Tape(0, 1, 0, this._Height)];\r\n let curveParam = new GetLineParam(curve);\r\n\r\n let holes = this.RealHoles;\r\n if (holes.length)\r\n {\r\n for (let hole of holes)\r\n {\r\n let start = equaln(hole.StartParam, 0) ? 0 : MathUtils.clamp(curveParam.GetParamAtPoint(thisParam.GetPointAtParam(hole.StartParam)), 0, 1);\r\n let end = equaln(hole.EndParam, 1) ? 1 : MathUtils.clamp(curveParam.GetParamAtPoint(thisParam.GetPointAtParam(hole.EndParam)), 0, 1);\r\n if (equaln(start, end, 1e-8)) continue;//重复的点造成了绘制错误\r\n\r\n if (start > end) [start, end] = [end, start];\r\n start = Math.max(0, start);\r\n end = Math.min(1, end);\r\n if (start >= end) continue;\r\n\r\n let holeTape = new Tape(start, end, hole.Bottom, hole.Top);\r\n\r\n let newTapes: Tape[] = [];\r\n for (let tape of tapes)\r\n arrayPushArray(newTapes, tape.Clip(holeTape));\r\n\r\n tapes = newTapes;\r\n }\r\n }\r\n\r\n for (let tape of tapes)\r\n {\r\n let startIndex = geo.vertices.length;\r\n\r\n let p1 = curveParam.GetPointAtParam(tape.start).applyMatrix4(inv);\r\n let p2 = curveParam.GetPointAtParam(tape.end).applyMatrix4(inv);\r\n geo.vertices.push(p1.setZ(tape.bottom), p2.setZ(tape.bottom));\r\n geo.vertices.push(p1.clone().setZ(tape.top));\r\n geo.vertices.push(p2.clone().setZ(tape.top));\r\n\r\n let startX = curveParam.Length * 1e-3 * tape.start;\r\n let endX = curveParam.Length * 1e-3 * tape.end;\r\n\r\n let startZ = tape.bottom * 1e-3;\r\n let endZ = tape.top * 1e-3;\r\n\r\n geo.faces.push(\r\n new Face3(startIndex, startIndex + 2, startIndex + 1, parse.LeftDir),\r\n new Face3(startIndex + 1, startIndex + 2, startIndex + 3, parse.LeftDir),\r\n );\r\n\r\n geo.faceVertexUvs[0].push(\r\n [new Vector2(startX, startZ), new Vector2(startX, endZ), new Vector2(endX, startZ)],\r\n [new Vector2(endX, startZ), new Vector2(startX, endZ), new Vector2(endX, endZ)],\r\n );\r\n }\r\n }\r\n };\r\n const BuildRightFace = (curve: Curve) =>\r\n {\r\n \r\n\r\n if (curve instanceof Line)\r\n {\r\n let tapes = [new Tape(0, 1, 0, this._Height)];\r\n let curveParam = new GetLineParam(curve);\r\n\r\n let holes = this.RealHoles;\r\n if (holes.length)\r\n {\r\n for (let hole of holes)\r\n {\r\n let start = equaln(hole.StartParam, 0) ? 0 : MathUtils.clamp(curveParam.GetParamAtPoint(thisParam.GetPointAtParam(hole.StartParam)), 0, 1);\r\n let end = equaln(hole.EndParam, 1) ? 1 : MathUtils.clamp(curveParam.GetParamAtPoint(thisParam.GetPointAtParam(hole.EndParam)), 0, 1);\r\n if (equaln(start, end, 1e-8)) continue;//重复的点造成了绘制错误\r\n\r\n if (start > end) [start, end] = [end, start];\r\n start = Math.max(0, start);\r\n end = Math.min(1, end);\r\n if (start >= end) continue;\r\n\r\n let holeTape = new Tape(start, end, hole.Bottom, hole.Top);\r\n\r\n let newTapes: Tape[] = [];\r\n for (let tape of tapes)\r\n arrayPushArray(newTapes, tape.Clip(holeTape));\r\n\r\n tapes = newTapes;\r\n }\r\n }\r\n\r\n for (let tape of tapes)\r\n {\r\n let startIndex = geo.vertices.length;\r\n\r\n let p1 = curveParam.GetPointAtParam(tape.start).applyMatrix4(inv);\r\n let p2 = curveParam.GetPointAtParam(tape.end).applyMatrix4(inv);\r\n geo.vertices.push(p1.setZ(tape.bottom), p2.setZ(tape.bottom));\r\n geo.vertices.push(p1.clone().setZ(tape.top));\r\n geo.vertices.push(p2.clone().setZ(tape.top));\r\n\r\n let startX = curveParam.Length * 1e-3 * tape.start;\r\n let endX = curveParam.Length * 1e-3 * tape.end;\r\n\r\n let startZ = tape.bottom * 1e-3;\r\n let endZ = tape.top * 1e-3;\r\n\r\n geo.faces.push(\r\n new Face3(startIndex, startIndex + 1, startIndex + 2, curveParam.RightDir),\r\n new Face3(startIndex + 1, startIndex + 3, startIndex + 2, curveParam.RightDir),\r\n );\r\n\r\n geo.faceVertexUvs[0].push(\r\n [new Vector2(startX, startZ), new Vector2(endX, startZ), new Vector2(startX, endZ)],\r\n [new Vector2(endX, startZ), new Vector2(endX, endZ), new Vector2(startX, endZ)],\r\n );\r\n }\r\n }\r\n };\r\n this.LeftCurves.forEach(BuildLeftFace);\r\n this.RightCurves.forEach(BuildRightFace);\r\n this.LidCurves.forEach(BuildRightFace);\r\n\r\n if (this.Region)\r\n {\r\n let bakZ = this.Region.OCSNoClone.elements[14];\r\n this.Region.OCSNoClone.elements[14] = this._Matrix.elements[14];\r\n\r\n let pts = this.Region.MatrixAlignTo2(this.OCSNoClone).pts;\r\n this.Region.OCSNoClone.elements[14] = bakZ;\r\n\r\n let faces = ShapeUtils.triangulateShape(pts, []);\r\n\r\n let startIndex = geo.vertices.length;\r\n for (let p of pts) geo.vertices.push(new Vector3(p.x, p.y, this._Height));\r\n if (HostApplicationServices.DrawWallBottomFace) for (let p of pts) geo.vertices.push(new Vector3(p.x, p.y, 0));\r\n\r\n for (let i = 0; i < faces.length; i++)\r\n {\r\n let [a, b, c] = faces[i];\r\n geo.faces.push(new Face3(startIndex + a, startIndex + b, startIndex + c, normal));\r\n let uvs = faces[i].map(index => pts[index].clone());\r\n geo.faceVertexUvs[0].push(uvs);\r\n\r\n if (HostApplicationServices.DrawWallBottomFace)\r\n {\r\n geo.faces.push(new Face3(startIndex + pts.length + c, startIndex + pts.length + b, startIndex + pts.length + a, normaln));\r\n geo.faceVertexUvs[0].push(uvs.concat().reverse().map(v => v.clone()));\r\n }\r\n }\r\n\r\n // //todo:为了优化显示 我们可以把侧面也画出来 (应该使用和酷家乐一样的技术 在视线对准时,隐藏整个墙)\r\n // let d = this._EndPoint.clone().sub(this._StartPoint).normalize();\r\n // let pre = pts[pts.length - 1];\r\n // let tempV = new Vector3;\r\n // for (let i = 0; i < pts.length; i++)\r\n // {\r\n // let p = pts[i];\r\n // tempV.set(p.x - pre.x, p.y - pre.y, 0).normalize();\r\n // //todo:盖子会重复绘制\r\n // if (!isParallelTo(d, tempV, 1e-3) && !isPerpendicularityTo(d, tempV, 1e-3))\r\n // {\r\n // startIndex = geo.vertices.length;\r\n // geo.vertices.push(AsVector3(pre), AsVector3(p));\r\n // geo.vertices.push(AsVector3(pre).setZ(this._Height));\r\n // geo.vertices.push(AsVector3(p).setZ(this._Height));\r\n\r\n // LEFT_ROTATE_MTX2.applyVector(tempV);\r\n // tempV.negate();\r\n\r\n // let n = tempV.clone();\r\n\r\n // geo.faces.push(\r\n // new Face3(startIndex, startIndex + 1, startIndex + 2, n),\r\n // new Face3(startIndex + 1, startIndex + 3, startIndex + 2, n),\r\n // );\r\n\r\n // geo.faceVertexUvs[0].push(\r\n // [new Vector2(), new Vector2(0, 0), new Vector2(0, 0)],\r\n // [new Vector2(0, 0), new Vector2(0, 0), new Vector2(0, 0)],\r\n // );\r\n // }\r\n\r\n // pre = p;\r\n // }\r\n }\r\n }\r\n\r\n geo.computeFaceNormals();\r\n geo.verticesNeedUpdate = true;\r\n geo.uvsNeedUpdate = true;\r\n\r\n return geo;\r\n }\r\n\r\n\r\n InitDrawObject(renderType: RenderType = RenderType.Wireframe): Object3D\r\n {\r\n 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\r\n let obj = new Object3D;\r\n if (renderType === RenderType.Wireframe || renderType === RenderType.Jig)\r\n {\r\n let pts = [this._StartPoint, this._EndPoint];\r\n let geo = new BufferGeometry().setFromPoints(pts);\r\n let axisLine = new TLine(geo, ColorMaterial.GetWallLineMtl(1));\r\n axisLine.computeLineDistances();\r\n obj.add(axisLine);\r\n\r\n let line = new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(this.ColorIndex));\r\n obj.add(line);\r\n }\r\n else if (renderType === RenderType.Conceptual)\r\n {\r\n let mesh = new Mesh(this.MeshGeometry, ColorMaterial.GetConceptualMaterial(this.ColorIndex));\r\n let line = new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(this.ColorIndex));\r\n obj.add(mesh, line);\r\n }\r\n return obj;\r\n }\r\n\r\n /**\r\n * 重载:更新绘制的实体\r\n * @param {RenderType} renderType\r\n * @param {Object3D} obj\r\n */\r\n UpdateDrawObject(renderType: RenderType, obj: Object3D)\r\n {\r\n if (renderType === RenderType.Wireframe || renderType === RenderType.Jig)\r\n {\r\n let [axisLine, outWallLine] = obj.children as [TLine, TLine];\r\n\r\n BufferGeometryUtils.UpdatePts(axisLine.geometry, [this._StartPoint, this._EndPoint]);\r\n axisLine.computeLineDistances();\r\n\r\n if (outWallLine.geometry !== this.EdgeGeometry)\r\n {\r\n outWallLine.geometry.dispose();\r\n outWallLine.geometry = this.EdgeGeometry;\r\n }\r\n }\r\n else if (renderType === RenderType.Conceptual)\r\n {\r\n let mesh = obj.children[0] as Mesh;\r\n if (mesh.geometry !== this.MeshGeometry)\r\n {\r\n mesh.geometry.dispose();\r\n mesh.geometry = this.MeshGeometry;\r\n }\r\n\r\n let line = obj.children[1] as LineSegments;\r\n if (line.geometry !== this.EdgeGeometry)\r\n {\r\n line.geometry.dispose();\r\n line.geometry = this.EdgeGeometry;\r\n }\r\n }\r\n else if (renderType === RenderType.Physical)\r\n {\r\n let mesh = obj as Mesh;\r\n if (mesh.geometry !== this.MeshGeometry)\r\n {\r\n mesh.geometry.dispose();\r\n mesh.geometry = this.MeshGeometry;\r\n }\r\n }\r\n }\r\n //#endregion\r\n\r\n\r\n //#region -------------------------File-------------------------\r\n //对象从文件中读取数据,初始化自身\r\n protected override _ReadFile(file: CADFiler)\r\n {\r\n let ver = file.Read();\r\n super._ReadFile(file);\r\n\r\n this._StartPoint.set(file.Read(), file.Read(), file.Read());\r\n this._EndPoint.set(file.Read(), file.Read(), file.Read());\r\n }\r\n //对象将自身数据写入到文件.\r\n override WriteFile(file: CADFiler)\r\n {\r\n file.Write(1);\r\n super.WriteFile(file);\r\n\r\n file.WriteVec3(this._StartPoint);\r\n file.WriteVec3(this._EndPoint);\r\n }\r\n //#endregion\r\n}\r\n\r\napplyMixins(RoomWallLine, Line);\r\n","import { Vector2, Vector3 } from \"three\";\r\nimport { Matrix2 } from \"../../../Geometry/Matrix2\";\r\nimport { Arc } from \"../../Entity/Arc\";\r\nimport { Line } from \"../../Entity/Line\";\r\nimport { RoomWallBase } from \"../Entity/Wall/RoomWallBase\";\r\nimport { RoomWallLine } from \"../Entity/Wall/RoomWallLine\";\r\n\r\nexport const LEFT_ROTATE_MTX2 = new Matrix2().set(0, 1, -1, 0);\r\n\r\nconst TempDiffVec = new Vector3;\r\n\r\nexport interface GetCurveParam\r\n{\r\n // Direction: Vector3;\r\n // NegDirection: Vector3;\r\n // Length: number;\r\n // LeftDir: Vector3;\r\n // RightDir: Vector3;\r\n\r\n GetParamAtPoint(p: Vector3): number;\r\n GetParamAtPoint2(p: Vector3): [number, boolean];\r\n GetPointAtParam(param: number): Vector3;\r\n // OffsetPoint(p: Vector3, dis: number): Vector3;\r\n}\r\n\r\nexport function CreateGetCurveParam(curve: Line | Arc | RoomWallBase)\r\n{\r\n if (curve instanceof Line || curve instanceof RoomWallLine) return new GetLineParam(curve as Line);\r\n else return new GetArcParam(curve as Arc);\r\n}\r\n\r\nexport class GetLineParam\r\n{\r\n Direction: Vector3;\r\n Length: number;\r\n LeftDir: Vector3;\r\n\r\n private _StartPoint: Vector3;\r\n constructor(line: Line)\r\n {\r\n this.Direction = line.GetFistDeriv(0);\r\n this.Length = this.Direction.length();\r\n this.Direction.divideScalar(this.Length);\r\n this._StartPoint = line.StartPoint;\r\n\r\n this.LeftDir = this.Direction.clone();\r\n\r\n LEFT_ROTATE_MTX2.applyVector(this.LeftDir);\r\n }\r\n\r\n private _RightDir: Vector3;\r\n get RightDir()\r\n {\r\n if (!this._RightDir) this._RightDir = this.LeftDir.clone().negate();\r\n\r\n return this._RightDir;\r\n }\r\n\r\n private _NegDirection: Vector3;\r\n get NegDirection()\r\n {\r\n if (!this._NegDirection) this._NegDirection = this.Direction.clone().negate();\r\n return this._NegDirection;\r\n }\r\n\r\n GetParamAtPoint(p: Vector3)\r\n {\r\n TempDiffVec.subVectors(p, this._StartPoint);\r\n let param = this.Direction.dot(TempDiffVec);\r\n\r\n return param / this.Length;\r\n }\r\n\r\n GetParamAtPoint2(p: Vector3): [number, boolean]\r\n {\r\n let param = this.GetParamAtPoint(p);\r\n let np = this.GetPointAtParam(param);\r\n return [param, Vector2.prototype.distanceToSquared.call(np, p) < 1e-4];\r\n }\r\n\r\n GetPointAtParam(param: number)\r\n {\r\n return this.Direction.clone().multiplyScalar(param * this.Length).add(this._StartPoint);\r\n }\r\n\r\n OffsetPoint(p: Vector3, dis: number)\r\n {\r\n return p.add(this.LeftDir.clone().multiplyScalar(dis));\r\n }\r\n}\r\n\r\nexport class GetArcParam implements GetCurveParam\r\n{\r\n constructor(private _Arc: Arc)\r\n {\r\n\r\n }\r\n\r\n GetParamAtPoint2(p: Vector3): [number, boolean]\r\n {\r\n let param = this._Arc.GetParamAtAngle(this._Arc.GetAngleAtPoint(p));\r\n return [param, this._Arc.ParamOnCurve(param)];\r\n }\r\n\r\n GetPointAtParam(param: number): Vector3\r\n {\r\n return this._Arc.GetPointAtParam(param);\r\n }\r\n\r\n GetParamAtPoint(p: Vector3): number\r\n {\r\n return this._Arc.GetParamAtAngle(this._Arc.GetAngleAtPoint(p));\r\n }\r\n}\r\n","import { Point } from \"./Point\";\r\n\r\n//点表面积\r\nexport function Area(pts: Point[]): number\r\n{\r\n let cnt = pts.length;\r\n if (cnt < 3)\r\n return 0;\r\n let a = 0;\r\n for (let i = 0, j = cnt - 1; i < cnt; ++i)\r\n {\r\n a += (pts[j].x + pts[i].x) * (pts[j].y - pts[i].y);\r\n j = i;\r\n }\r\n return -a * 0.5;\r\n}\r\n","import { Point } from \"./Point\";\r\n\r\nexport class Vector2\r\n{\r\n x: number;\r\n y: number;\r\n readonly isVector2: boolean = true;\r\n constructor(x: number = 0, y: number = 0)\r\n {\r\n this.x = x;\r\n this.y = y;\r\n }\r\n get width(): number { return this.x; }\r\n set width(value: number) { this.x = value; }\r\n get height(): number { return this.y; }\r\n set height(value: number) { this.y = value; }\r\n set(x: number, y: number): Vector2\r\n {\r\n this.x = x;\r\n this.y = y;\r\n return this;\r\n }\r\n setScalar(scalar: number): Vector2\r\n {\r\n this.x = scalar;\r\n this.y = scalar;\r\n return this;\r\n }\r\n setX(x: number): Vector2\r\n {\r\n this.x = x;\r\n return this;\r\n }\r\n setY(y: number): Vector2\r\n {\r\n this.y = y;\r\n return this;\r\n }\r\n setComponent(index: number, value: number): Vector2\r\n {\r\n switch (index)\r\n {\r\n case 0: this.x = value; break;\r\n case 1: this.y = value; break;\r\n default: throw new Error('index is out of range: ' + index);\r\n }\r\n return this;\r\n }\r\n getComponent(index: number): number\r\n {\r\n switch (index)\r\n {\r\n case 0: return this.x;\r\n case 1: return this.y;\r\n default: throw new Error('index is out of range: ' + index);\r\n }\r\n }\r\n clone(): Vector2\r\n {\r\n return new (this.constructor as any)().copy(this);\r\n }\r\n copy(v: Vector2): Vector2\r\n {\r\n this.x = v.x;\r\n this.y = v.y;\r\n return this;\r\n }\r\n add(v: Point): Vector2\r\n {\r\n this.x += v.x;\r\n this.y += v.y;\r\n return this;\r\n }\r\n addScalar(s: number): Vector2\r\n {\r\n this.x += s;\r\n this.y += s;\r\n return this;\r\n }\r\n addVectors(a: Vector2, b: Vector2): Vector2\r\n {\r\n this.x = a.x + b.x;\r\n this.y = a.y + b.y;\r\n return this;\r\n }\r\n addScaledVector(v: Vector2, s: number): Vector2\r\n {\r\n this.x += v.x * s;\r\n this.y += v.y * s;\r\n return this;\r\n }\r\n sub(v: Vector2): Vector2\r\n {\r\n this.x -= v.x;\r\n this.y -= v.y;\r\n return this;\r\n }\r\n subScalar(s: number): Vector2\r\n {\r\n this.x -= s;\r\n this.y -= s;\r\n return this;\r\n }\r\n subVectors(a: Vector2, b: Vector2): Vector2\r\n {\r\n this.x = a.x - b.x;\r\n this.y = a.y - b.y;\r\n return this;\r\n }\r\n multiply(v: Vector2): Vector2\r\n {\r\n this.x *= v.x;\r\n this.y *= v.y;\r\n return this;\r\n }\r\n multiplyScalar(scalar: number): Vector2\r\n {\r\n if (isFinite(scalar))\r\n {\r\n this.x *= scalar;\r\n this.y *= scalar;\r\n } else\r\n {\r\n this.x = 0;\r\n this.y = 0;\r\n }\r\n return this;\r\n }\r\n divide(v: Vector2): Vector2\r\n {\r\n this.x /= v.x;\r\n this.y /= v.y;\r\n return this;\r\n }\r\n divideScalar(scalar: number): Vector2\r\n {\r\n return this.multiplyScalar(1 / scalar);\r\n }\r\n min(v: Point): Vector2\r\n {\r\n this.x = Math.min(this.x, v.x);\r\n this.y = Math.min(this.y, v.y);\r\n return this;\r\n }\r\n max(v: Point): Vector2\r\n {\r\n this.x = Math.max(this.x, v.x);\r\n this.y = Math.max(this.y, v.y);\r\n return this;\r\n }\r\n clamp(min: Vector2, max: Vector2): Vector2\r\n {\r\n // This function assumes min < max, if this assumption isn't true it will not operate correctly\r\n this.x = Math.max(min.x, Math.min(max.x, this.x));\r\n this.y = Math.max(min.y, Math.min(max.y, this.y));\r\n return this;\r\n }\r\n private static clampScalar_min = new Vector2();\r\n private static clampScalar_max = new Vector2();\r\n clampScalar(minVal: number, maxVal: number): Vector2\r\n {\r\n const min: Vector2 = Vector2.clampScalar_min.set(minVal, minVal);\r\n const max: Vector2 = Vector2.clampScalar_max.set(maxVal, maxVal);\r\n return this.clamp(min, max);\r\n }\r\n clampLength(min: number, max: number): Vector2\r\n {\r\n const length: number = this.length();\r\n return this.multiplyScalar(Math.max(min, Math.min(max, length)) / length);\r\n }\r\n floor(): Vector2\r\n {\r\n this.x = Math.floor(this.x);\r\n this.y = Math.floor(this.y);\r\n return this;\r\n }\r\n ceil(): Vector2\r\n {\r\n this.x = Math.ceil(this.x);\r\n this.y = Math.ceil(this.y);\r\n return this;\r\n }\r\n round(): Vector2\r\n {\r\n this.x = Math.round(this.x);\r\n this.y = Math.round(this.y);\r\n return this;\r\n }\r\n roundToZero(): Vector2\r\n {\r\n this.x = (this.x < 0) ? Math.ceil(this.x) : Math.floor(this.x);\r\n this.y = (this.y < 0) ? Math.ceil(this.y) : Math.floor(this.y);\r\n return this;\r\n }\r\n negate(): Vector2\r\n {\r\n this.x = - this.x;\r\n this.y = - this.y;\r\n return this;\r\n }\r\n dot(v: Vector2): number\r\n {\r\n return this.x * v.x + this.y * v.y;\r\n }\r\n lengthSq(): number\r\n {\r\n return this.x * this.x + this.y * this.y;\r\n }\r\n length(): number\r\n {\r\n return Math.sqrt(this.x * this.x + this.y * this.y);\r\n }\r\n lengthManhattan(): number\r\n {\r\n return Math.abs(this.x) + Math.abs(this.y);\r\n }\r\n normalize(): Vector2\r\n {\r\n return this.divideScalar(this.length());\r\n }\r\n angle(): number\r\n {\r\n // computes the angle in radians with respect to the positive x-axis\r\n let angle: number = Math.atan2(this.y, this.x);\r\n if (angle < 0) angle += 2 * Math.PI;\r\n return angle;\r\n }\r\n distanceTo(v: Vector2): number\r\n {\r\n return Math.sqrt(this.distanceToSquared(v));\r\n }\r\n distanceToSquared(v: Vector2): number\r\n {\r\n const dx: number = this.x - v.x, dy: number = this.y - v.y;\r\n return dx * dx + dy * dy;\r\n }\r\n distanceToManhattan(v: Vector2): number\r\n {\r\n return Math.abs(this.x - v.x) + Math.abs(this.y - v.y);\r\n }\r\n setLength(length: number): Vector2\r\n {\r\n return this.multiplyScalar(length / this.length());\r\n }\r\n lerp(v: Vector2, alpha: number): Vector2\r\n {\r\n this.x += (v.x - this.x) * alpha;\r\n this.y += (v.y - this.y) * alpha;\r\n return this;\r\n }\r\n lerpVectors(v1: Vector2, v2: Vector2, alpha: number): Vector2\r\n {\r\n return this.subVectors(v2, v1).multiplyScalar(alpha).add(v1);\r\n }\r\n equals(v: Vector2): boolean\r\n {\r\n return ((v.x === this.x) && (v.y === this.y));\r\n }\r\n fromArray(array: Float32Array | number[], offset: number = 0): Vector2\r\n {\r\n this.x = array[offset];\r\n this.y = array[offset + 1];\r\n return this;\r\n }\r\n toArray(array: Float32Array | number[] = [], offset: number = 0): Float32Array | number[]\r\n {\r\n array[offset] = this.x;\r\n array[offset + 1] = this.y;\r\n return array;\r\n }\r\n fromAttribute(attribute: any, index: number, offset: number = 0): Vector2\r\n {\r\n index = index * attribute.itemSize + offset;\r\n this.x = attribute.array[index];\r\n this.y = attribute.array[index + 1];\r\n return this;\r\n }\r\n rotateAround(center: Vector2, angle: number): Vector2\r\n {\r\n const c: number = Math.cos(angle), s: number = Math.sin(angle);\r\n const x: number = this.x - center.x;\r\n const y: number = this.y - center.y;\r\n this.x = x * c - y * s + center.x;\r\n this.y = x * s + y * c + center.y;\r\n return this;\r\n }\r\n}\r\n","import { Vector2 } from \"./Vector2\";\r\nimport { Point } from \"./Point\";\r\n\r\nexport class Box2\r\n{\r\n min: Vector2;\r\n max: Vector2;\r\n constructor(min = new Vector2(+ Infinity, + Infinity), max = new Vector2(- Infinity, - Infinity))\r\n {\r\n this.min = min;\r\n this.max = max;\r\n }\r\n\r\n get area(): number\r\n {\r\n return (this.max.x - this.min.x) * (this.max.y - this.min.y);\r\n }\r\n\r\n set(min: Vector2, max: Vector2): Box2\r\n {\r\n this.min.copy(min);\r\n this.max.copy(max);\r\n return this;\r\n }\r\n setFromPoints(points: Iterable): Box2\r\n {\r\n this.makeEmpty();\r\n for (let p of points)\r\n {\r\n this.expandByPoint(p);\r\n }\r\n return this;\r\n }\r\n private static _setFromCenterAndSize_v1 = new Vector2();\r\n setFromCenterAndSize(center: Vector2, size: Vector2): Box2\r\n {\r\n const v1 = Box2._setFromCenterAndSize_v1;\r\n const halfSize = v1.copy(size).multiplyScalar(0.5);\r\n this.min.copy(center).sub(halfSize);\r\n this.max.copy(center).add(halfSize);\r\n return this;\r\n }\r\n clone(): Box2\r\n {\r\n return new (this.constructor as any)().copy(this);\r\n }\r\n copy(box: Box2): Box2\r\n {\r\n this.min.copy(box.min);\r\n this.max.copy(box.max);\r\n return this;\r\n }\r\n makeEmpty(): Box2\r\n {\r\n this.min.x = this.min.y = + Infinity;\r\n this.max.x = this.max.y = - Infinity;\r\n return this;\r\n }\r\n isEmpty(): boolean\r\n {\r\n // this is a more robust check for empty than (volume <= 0) because volume can get positive with two negative axes\r\n return (this.max.x < this.min.x) || (this.max.y < this.min.y);\r\n }\r\n getCenter(result: Vector2 = new Vector2()): Vector2\r\n {\r\n return this.isEmpty() ? result.set(0, 0) : result.addVectors(this.min, this.max).multiplyScalar(0.5);\r\n }\r\n getSize(result: Vector2 = new Vector2()): Vector2\r\n {\r\n return this.isEmpty() ? result.set(0, 0) : result.subVectors(this.max, this.min);\r\n }\r\n expandByPoint(point: Point): Box2\r\n {\r\n this.min.min(point);\r\n this.max.max(point);\r\n return this;\r\n }\r\n expandByVector(vector: Vector2): Box2\r\n {\r\n this.min.sub(vector);\r\n this.max.add(vector);\r\n return this;\r\n }\r\n expandByScalar(scalar: number): Box2\r\n {\r\n this.min.addScalar(- scalar);\r\n this.max.addScalar(scalar);\r\n return this;\r\n }\r\n containsPoint(point: Vector2): boolean\r\n {\r\n if (point.x < this.min.x || point.x > this.max.x ||\r\n point.y < this.min.y || point.y > this.max.y)\r\n {\r\n return false;\r\n }\r\n return true;\r\n }\r\n containsBox(box: Box2): boolean\r\n {\r\n if ((this.min.x <= box.min.x) && (box.max.x <= this.max.x) &&\r\n (this.min.y <= box.min.y) && (box.max.y <= this.max.y))\r\n {\r\n return true;\r\n }\r\n return false;\r\n }\r\n getParameter(point: Vector2, result: Vector2 = new Vector2()): Vector2\r\n {\r\n // This can potentially have a divide by zero if the box\r\n // has a size dimension of 0.\r\n return result.set(\r\n (point.x - this.min.x) / (this.max.x - this.min.x),\r\n (point.y - this.min.y) / (this.max.y - this.min.y)\r\n );\r\n }\r\n intersectsBox(box: Box2): boolean\r\n {\r\n // using 6 splitting planes to rule out intersections.\r\n if (box.max.x < this.min.x || box.min.x > this.max.x ||\r\n box.max.y < this.min.y || box.min.y > this.max.y)\r\n {\r\n return false;\r\n }\r\n return true;\r\n }\r\n clampPoint(point: Vector2, result: Vector2 = new Vector2()): Vector2\r\n {\r\n return result.copy(point).clamp(this.min, this.max);\r\n }\r\n private static _distanceToPoint_v1 = new Vector2();\r\n distanceToPoint(point: Vector2): number\r\n {\r\n const v1 = Box2._distanceToPoint_v1;\r\n const clampedPoint = v1.copy(point).clamp(this.min, this.max);\r\n return clampedPoint.sub(point).length();\r\n }\r\n intersect(box: Box2): Box2\r\n {\r\n this.min.max(box.min);\r\n this.max.min(box.max);\r\n return this;\r\n }\r\n union(box: Box2): Box2\r\n {\r\n this.min.min(box.min);\r\n this.max.max(box.max);\r\n return this;\r\n }\r\n translate(offset: Point): Box2\r\n {\r\n this.min.add(offset);\r\n this.max.add(offset);\r\n return this;\r\n }\r\n equals(box: Box2): boolean\r\n {\r\n return box.min.equals(this.min) && box.max.equals(this.max);\r\n }\r\n};\r\n","import { Area } from \"../Common/Area\";\r\nimport { Box2 } from \"../Common/Box2\";\r\nimport { clipperCpp } from \"../Common/ClipperCpp\";\r\nimport { NestFiler } from \"../Common/Filer\";\r\nimport { Point } from \"../Common/Point\";\r\nimport { equaln } from \"../Common/Util\";\r\nimport { Vector2 } from \"../Common/Vector2\";\r\n\r\n/**\r\n * 轮廓路径类\r\n * 可以求NFP,和保存NFPCahce\r\n * 因为NFP结果是按照最低点移动的,所以将点旋转后,按照盒子将点移动到0点.\r\n */\r\nexport class Path\r\n{\r\n Id: number;\r\n Points: Point[];\r\n OutsideNFPCache: { [key: number]: Point[][]; } = {};\r\n InsideNFPCache: { [key: number]: Point[][]; } = {};\r\n\r\n constructor(public OrigionPoints?: Point[], rotation: number = 0)\r\n {\r\n if (OrigionPoints)\r\n this.Init(OrigionPoints, rotation);\r\n }\r\n\r\n Origion: Path;\r\n //点表在旋转后的原始最小点.使用这个点将轮廓移动到0点\r\n OrigionMinPoint: Vector2;\r\n Rotation: number;\r\n\r\n Size: Vector2;//序列化\r\n private Init(origionPoints: Point[], rotation: number)\r\n {\r\n this.Rotation = rotation;\r\n if (rotation === 0)\r\n this.Points = origionPoints.map(p => { return { ...p }; });\r\n else\r\n {\r\n let c = Math.cos(rotation);\r\n let s = Math.sin(rotation);\r\n\r\n let npts: Point[] = [];\r\n for (let p of origionPoints)\r\n {\r\n let x = p.x;\r\n let y = p.y;\r\n const x1 = x * c - y * s;\r\n const y1 = x * s + y * c;\r\n npts.push({ x: x1, y: y1 });\r\n }\r\n this.Points = npts;\r\n }\r\n\r\n let box = new Box2();\r\n let v2 = new Vector2();\r\n for (let p of this.Points)\r\n {\r\n v2.x = p.x;\r\n v2.y = p.y;\r\n box.expandByPoint(v2);\r\n }\r\n\r\n this.OrigionMinPoint = box.min;\r\n this.Size = box.max.sub(box.min);\r\n\r\n for (let p of this.Points)\r\n {\r\n p.x -= box.min.x;\r\n p.y -= box.min.y;\r\n }\r\n }\r\n\r\n GetNFPs(path: Path, outside: boolean): (Point[])[]\r\n {\r\n // 寻找内轮廓时,面积应该比本path小,这个判断移交给使用者自己判断\r\n // if (!outside && this.Area < path.Area) return [];\r\n let nfps = clipperCpp.lib.minkowskiSumPath(this.BigIntPoints, path.MirrorPoints, true);\r\n\r\n //必须删除自交,否则将会出错\r\n nfps = clipperCpp.lib.simplifyPolygons(nfps);\r\n nfps = nfps.filter((nfp) =>\r\n {\r\n let area = Area(nfp);\r\n // if (area > 1) return outside;//第一个不一定是外轮廓,但是面积为正时肯定为外轮廓 (因为使用了简化多段线,所以这个代码已经不能有了)\r\n if (Math.abs(area) < 10) return false;//应该不用在移除这个了\r\n\r\n let { x, y } = nfp[0];\r\n if (outside)\r\n {\r\n if (this.Area > path.Area)\r\n {\r\n let p = { x: path.InPoint.x + x, y: path.InPoint.y + y };\r\n if (p.x < 0 || p.y < 0 || p.x > this.BigSize.x || p.y > this.BigSize.y)\r\n return true;\r\n let dir = clipperCpp.lib.pointInPolygon(p, this.BigIntPoints);\r\n return dir === 0;\r\n }\r\n else\r\n {\r\n let p = { x: this.InPoint.x - x, y: this.InPoint.y - y };\r\n if (p.x < 0 || p.y < 0 || p.x > path.BigSize.x || p.y > path.BigSize.y)\r\n return true;\r\n let dir = clipperCpp.lib.pointInPolygon(p, path.BigIntPoints);\r\n return dir === 0;\r\n }\r\n }\r\n else\r\n {\r\n let p = { x: path.InPoint.x + x, y: path.InPoint.y + y };\r\n if (p.x < 0 || p.y < 0 || p.x > this.BigSize.x || p.y > this.BigSize.y)\r\n return false;\r\n let dir = clipperCpp.lib.pointInPolygon(p, this.BigIntPoints);\r\n return dir === 1;\r\n }\r\n });\r\n return nfps;\r\n }\r\n\r\n GetOutsideNFP(path: Path): (Point[])[]\r\n {\r\n let nfps = this.OutsideNFPCache[path.Id];\r\n if (nfps) return nfps;\r\n\r\n if (this.IsRect && path.IsRect)\r\n {\r\n let [ax, ay] = [this.Size.x * 1e4, this.Size.y * 1e4];\r\n let [bx, by] = [path.Size.x * 1e4, path.Size.y * 1e4];\r\n nfps = [[\r\n { x: -bx, y: -by },\r\n { x: ax, y: -by },\r\n { x: ax, y: ay },\r\n { x: -bx, y: ay },\r\n ]];\r\n }\r\n else\r\n nfps = this.GetNFPs(path, true);\r\n this.OutsideNFPCache[path.Id] = nfps;\r\n //虽然有这种神奇的特性,但是好像并不会提高性能。\r\n // path.OutsideNFPCache[this.id] = (this, nfps.map(nfp =>\r\n // {\r\n // return nfp.map(p =>\r\n // {\r\n // return { x: -p.x, y: -p.y };\r\n // });\r\n // }));\r\n return nfps;\r\n }\r\n GetInsideNFP(path: Path): (Point[])[]\r\n {\r\n if (path.Area > this.Area) return;\r\n let nfp = this.InsideNFPCache[path.Id];\r\n if (nfp) return nfp;\r\n\r\n let nfps: (Point[])[];\r\n if (this.IsRect)\r\n {\r\n let [ax, ay] = [this.Size.x * 1e4, this.Size.y * 1e4];\r\n let [bx, by] = [path.Size.x * 1e4, path.Size.y * 1e4];\r\n\r\n let l = ax - bx;\r\n let h = ay - by;\r\n\r\n const MinNumber = 200;//清理的数值是100,所以200是可以接受的, 200=0.020问题不大(过盈配合)\r\n if (l < -MinNumber || h < -MinNumber)\r\n return;\r\n\r\n if (l < MinNumber)\r\n l = MinNumber;\r\n else\r\n l += MinNumber;\r\n\r\n if (h < MinNumber)\r\n h = MinNumber;\r\n else\r\n h += MinNumber;\r\n\r\n nfps = [[\r\n { x: 0, y: 0 },\r\n { x: l, y: 0 },\r\n { x: l, y: h },\r\n { x: 0, y: h }\r\n ]];\r\n }\r\n else\r\n nfps = this.GetNFPs(path, false);\r\n\r\n if (path.Id !== undefined)\r\n this.InsideNFPCache[path.Id] = nfps;\r\n return nfps;\r\n }\r\n\r\n private _InPoint: Point;\r\n\r\n /**\r\n * 用这个点来检测是否在Path内部\r\n */\r\n private get InPoint()\r\n {\r\n if (this._InPoint) return this._InPoint;\r\n let mp = { x: (this.Points[0].x + this.Points[1].x) / 2, y: (this.Points[0].y + this.Points[1].y) / 2 };\r\n let normal = new Vector2(this.Points[1].x - this.Points[0].x, this.Points[1].y - this.Points[0].y).normalize();\r\n // [normal.x, normal.y] = [normal.y, -normal.x];\r\n mp.x -= normal.y;\r\n mp.y += normal.x;\r\n\r\n mp.x *= 1e4;\r\n mp.y *= 1e4;\r\n this._InPoint = mp;\r\n return mp;\r\n }\r\n\r\n protected _BigIntPoints: Point[];\r\n get BigIntPoints()\r\n {\r\n if (this._BigIntPoints) return this._BigIntPoints;\r\n this._BigIntPoints = this.Points.map(p =>\r\n {\r\n return {\r\n x: Math.round(p.x * 1e4),\r\n y: Math.round(p.y * 1e4),\r\n };\r\n });\r\n return this._BigIntPoints;\r\n }\r\n\r\n private _BigSize: Vector2;\r\n get BigSize()\r\n {\r\n if (this._BigSize) return this._BigSize;\r\n this._BigSize = new Vector2(this.Size.x * 1e4, this.Size.y * 1e4);\r\n return this._BigSize;\r\n }\r\n\r\n protected _MirrorPoints: Point[];\r\n get MirrorPoints()\r\n {\r\n if (!this._MirrorPoints)\r\n this._MirrorPoints = this.BigIntPoints.map(p =>\r\n {\r\n return { x: -p.x, y: -p.y };\r\n });\r\n\r\n return this._MirrorPoints;\r\n }\r\n\r\n protected _BoundingBox: Box2;\r\n get BoundingBox()\r\n {\r\n if (!this._BoundingBox)\r\n this._BoundingBox = new Box2(new Vector2, this.Size);\r\n return this._BoundingBox;\r\n }\r\n\r\n protected _Area: number;\r\n get Area()\r\n {\r\n if (this._Area === undefined)\r\n this._Area = Area(this.Points);\r\n return this._Area;\r\n }\r\n set Area(a: number)\r\n {\r\n this._Area = a;\r\n }\r\n\r\n private _IsRect: boolean;\r\n get IsRect()\r\n {\r\n if (this._IsRect === undefined)\r\n {\r\n let s = this.BoundingBox.getSize(new Vector2);\r\n this._IsRect = equaln(this.Area, s.x * s.y, 1);\r\n }\r\n return this._IsRect;\r\n }\r\n\r\n ReadFile(file: NestFiler): void\r\n {\r\n let ver = file.Read();\r\n this.Id = file.Read();\r\n let arr = file.Read();\r\n this.Points = [];\r\n for (let i = 0; i < arr.length; i += 2)\r\n {\r\n let p = { x: arr[i], y: arr[i + 1] };\r\n this.Points.push(p);\r\n }\r\n\r\n this.Size = new Vector2(file.Read(), file.Read());\r\n this._Area = file.Read();\r\n let id = file.Read();\r\n if (id !== -1)\r\n {\r\n this.Origion = id;\r\n this.Rotation = file.Read();\r\n this.OrigionMinPoint = new Vector2(file.Read(), file.Read());\r\n }\r\n }\r\n WriteFile(file: NestFiler): void\r\n {\r\n file.Write(1);//ver\r\n file.Write(this.Id);\r\n let arr: number[] = [];\r\n for (let p of this.Points)\r\n arr.push(p.x, p.y);\r\n file.Write(arr);\r\n\r\n file.Write(this.Size.x);\r\n file.Write(this.Size.y);\r\n file.Write(this._Area);\r\n if (this.Origion && this.Origion.Id)\r\n {\r\n //如果有原始的id,则传递它,以便后续进行NFP复用.\r\n file.Write(this.Origion.Id);\r\n file.Write(this.Rotation);\r\n file.Write(this.OrigionMinPoint.x);\r\n file.Write(this.OrigionMinPoint.y);\r\n }\r\n else\r\n file.Write(-1);\r\n }\r\n}\r\n\r\n/**\r\n * 平移点表,返回新点表\r\n */\r\nexport function TranslatePath(pts: Point[], p: Point): Point[]\r\n{\r\n return pts.map(px =>\r\n {\r\n return { x: p.x + px.x, y: p.y + px.y };\r\n });\r\n}\r\n\r\nexport function TranslatePath_Self(pts: Point[], mx: number, my: number): Point[]\r\n{\r\n for (let pt of pts)\r\n {\r\n pt.x += mx;\r\n pt.y += my;\r\n }\r\n return pts;\r\n}\r\n\r\n//缩放点表,返回原始点表\r\nexport function PathScale(pts: Point[], scale: number): Point[]\r\n{\r\n for (let p of pts)\r\n {\r\n p.x *= scale;\r\n p.y *= scale;\r\n }\r\n return pts;\r\n}\r\n","import { Point } from \"../Common/Point\";\r\nimport { Path } from \"./Path\";\r\n\r\nexport class NestCache\r\n{\r\n //放置零件时,命中缓存的次数\r\n static CachePartPosCount = 0;\r\n //放置零件时,命中无法放置缓存的次数\r\n static CacheNoSetCount = 0;//noset\r\n\r\n static PositionCache: { [key: string]: Point; } = {};\r\n static NoPutCache: { [key: string]: Set; } = {};\r\n private static CacheRect = new Map();\r\n\r\n /**\r\n * 用于创建原点在0点的矩形路径\r\n */\r\n static CreatePath(x: number, y: number, knifRadius = 3.5): Path\r\n {\r\n let minX = -knifRadius;\r\n let maxX = x + knifRadius;\r\n let minY = -knifRadius;\r\n let maxY = y + knifRadius;\r\n return new Path([\r\n { x: minX, y: minY },\r\n { x: maxX, y: minY },\r\n { x: maxX, y: maxY },\r\n { x: minX, y: maxY },\r\n ]);\r\n }\r\n\r\n static Clear()\r\n {\r\n this.CachePartPosCount = 0;\r\n this.CacheNoSetCount = 0;\r\n this.CacheRect.clear();\r\n this.PositionCache = {};\r\n }\r\n}\r\n","import { Point } from \"../Common/Point\";\r\nimport { Polyline } from \"../../DatabaseServices/Entity/Polyline\";\r\nimport { AsVector2 } from \"../../Geometry/GeUtils\";\r\n\r\nexport function Path2Polyline(path: Point[]): Polyline\r\n{\r\n let pl = new Polyline();\r\n pl.LineData = path.map(p =>\r\n {\r\n return { pt: AsVector2(p), bul: 0 };\r\n });\r\n pl.CloseMark = true;\r\n return pl;\r\n}\r\n","import { EndType, JoinType } from \"js-angusj-clipper/web\";\r\nimport { Arc } from \"../../DatabaseServices/Entity/Arc\";\r\nimport { Circle } from \"../../DatabaseServices/Entity/Circle\";\r\nimport { Polyline } from \"../../DatabaseServices/Entity/Polyline\";\r\nimport { polar } from \"../../Geometry/GeUtils\";\r\nimport { clipperCpp } from \"../Common/ClipperCpp\";\r\nimport { Point } from \"../Common/Point\";\r\nimport { PathScale } from \"../Core/Path\";\r\nimport { Circle2Points } from \"./Curves2Parts\";\r\n\r\nexport let Rotations = [\r\n [0, Math.PI],\r\n [Math.PI / 2, Math.PI * 1.5],\r\n [0, Math.PI, Math.PI / 2, Math.PI * 1.5],\r\n];\r\n\r\n/**\r\n * 针对板件的曲线变点表做的特殊优化\r\n */\r\nexport function Curves2Points(cu: Circle | Polyline, outside: boolean, knifeRadius: number): [(Circle | Polyline), Point[]]\r\n{\r\n if (cu instanceof Circle)\r\n return [cu.Clone(), Circle2Points(cu, knifeRadius, 8, outside)];\r\n else\r\n return Polyline2Points(cu, outside, knifeRadius);\r\n}\r\n\r\nexport function Polyline2Points(pl: Polyline, outside: boolean, knifeRadius: number): [Polyline, Point[]]\r\n{\r\n let pts: Point[] = [];\r\n\r\n if (!outside) knifeRadius = -knifeRadius;\r\n if (pl.IsClockWise) pl.Reverse();\r\n for (let i = 0; i < pl.EndParam; i++)\r\n {\r\n pts.push(pl.GetPointAtParam(i));\r\n\r\n let bul = pl.GetBulgeAt(i);\r\n if (bul !== 0)\r\n {\r\n let arc = pl.GetCurveAtIndex(i) as Arc;\r\n\r\n let allAngle = arc.AllAngle;\r\n let arcLength = arc.Length;\r\n\r\n let minCount = Math.floor(allAngle * 4 / Math.PI);\r\n\r\n let splitCount = Math.round(allAngle / 0.4);\r\n if (arcLength < 300)\r\n splitCount = Math.max(2, minCount);\r\n else\r\n splitCount = Math.max(arcLength / 200, splitCount, 2, minCount);\r\n\r\n let radius = arc.Radius;\r\n if (outside === bul > 0)\r\n radius = radius / Math.cos(allAngle / (splitCount * 2));\r\n\r\n let cp = arc.Center;\r\n for (let j = 0.5; j < splitCount; j++)\r\n {\r\n let a = arc.GetAngleAtParam(j * (1 / splitCount));\r\n let p = polar(cp.clone(), a, radius);\r\n pts.push(p);\r\n }\r\n }\r\n }\r\n\r\n if (knifeRadius !== 0)\r\n {\r\n pts = clipperCpp.lib.offsetToPaths({\r\n delta: knifeRadius * 1e4,\r\n offsetInputs: [{ data: PathScale(pts, 1e4), joinType: JoinType.Miter, endType: EndType.ClosedPolygon }]\r\n })[0];\r\n PathScale(pts, 1e-4);\r\n }\r\n return [pl, pts];\r\n}\r\n","import polylabel from \"polylabel\";\r\nimport { Vector3 } from \"three\";\r\nimport { Area } from \"../../../Nest/Common/Area\";\r\nimport { Point } from \"../../../Nest/Common/Point\";\r\nimport { Max } from \"../../../Nest/Common/Util\";\r\nimport { Path2Polyline } from \"../../../Nest/Converter/Path2Polyline\";\r\nimport { NestCache } from \"../../../Nest/Core/NestCache\";\r\nimport { Path, PathScale, TranslatePath_Self } from \"../../../Nest/Core/Path\";\r\nimport { Contour } from \"../../Contour\";\r\nimport { Polyline } from \"../../Entity/Polyline\";\r\nimport { Shape } from \"../../Shape\";\r\nimport { ShapeManager } from \"../../ShapeManager\";\r\n\r\nexport const TEXT_BOX = NestCache.CreatePath(570, 110);\r\n\r\n//分析文字放置位置\r\nexport function ParseRegionTextPos(contour: Point[], holes: (Point[])[])\r\n{\r\n let hasTextBox = true;\r\n let path = new Path(contour);\r\n let nfps: Polyline[] = path.GetInsideNFP(TEXT_BOX)?.map(nfp => Path2Polyline(TranslatePath_Self(PathScale(nfp, 1e-4), path.OrigionMinPoint.x, path.OrigionMinPoint.y))); //可能无法获得\r\n if (!nfps || nfps.length === 0)\r\n {\r\n nfps = [Path2Polyline(contour)];\r\n hasTextBox = false;\r\n }\r\n\r\n let holenfps: Contour[] = [];\r\n for (let hole of holes)\r\n {\r\n let hpath = new Path(hole);\r\n let nfps = hpath.GetOutsideNFP(TEXT_BOX);\r\n let nfp = nfps[Max(nfps, (n1, n2) => Area(n2) > Area(n1))];\r\n\r\n let pl = Path2Polyline(TranslatePath_Self(PathScale(nfp, 1e-4), hpath.OrigionMinPoint.x, hpath.OrigionMinPoint.y));\r\n let box = pl.BoundingBox;\r\n\r\n let boxpl = new Polyline().RectangleFrom2Pt(new Vector3(box.min.x - 1e5, box.min.y - 1), new Vector3(box.max.x + 1e5, box.min.y + 1));\r\n\r\n let con1 = Contour.CreateContour(pl, false);\r\n let con2 = Contour.CreateContour(boxpl, false);\r\n\r\n holenfps.push(\r\n ...con1.UnionBoolOperation(con2).contours\r\n );\r\n }\r\n\r\n let shapes = nfps.map(pl => new Shape(Contour.CreateContour(pl, false)));\r\n let subShapes = new ShapeManager;\r\n holenfps.forEach(pl =>\r\n {\r\n subShapes.UnionBoolOperation(new ShapeManager([new Shape(pl)]));\r\n });\r\n\r\n let resShapes: Shape[] = [];\r\n for (let shape of shapes)\r\n {\r\n // TestDraw(shape.Outline.Curve, 6);\r\n resShapes.push(...shape.SubstactBoolOperation(subShapes.ShapeList)); //可能减完丢了\r\n }\r\n\r\n if (resShapes.length === 0)\r\n resShapes = shapes;\r\n\r\n let maxDist = -Infinity;\r\n let minp: number[];\r\n let curve: Polyline;\r\n\r\n for (let shape of resShapes)\r\n {\r\n let pl = shape.Outline.Curve as Polyline;\r\n if (pl.Area < 1)\r\n {\r\n if (!minp) minp = pl.BoundingBox.getCenter(new Vector3).toArray();\r\n continue;\r\n }\r\n // TestDraw(pl, 3); //绘制裁剪后的线\r\n let p = polylabel([pl.LineData.map(p => p.pt.toArray())], 1.0);//这里不再需要转换 因为我们传递进来的就是没有凸度的点表\r\n\r\n let dist = p[\"distance\"];\r\n if (dist > maxDist)\r\n {\r\n maxDist = dist;\r\n let pos = pl.Position;\r\n minp = p;\r\n minp[0] += pos.x;\r\n minp[1] += pos.y;\r\n\r\n curve = pl;\r\n }\r\n }\r\n\r\n let p = new Vector3(minp[0], minp[1]);\r\n //左右均分\r\n // TestDraw(new Point(p));\r\n // let line = new Line(p, p.clone().setX(minp[0] + 1));\r\n\r\n // let pts = curve.IntersectWith(line, IntersectOption.ExtendArg);\r\n // pts.push(p);\r\n // pts.sort(ComparePoint(\"xyz\"));\r\n // let index = pts.indexOf(p);\r\n // p = midPoint(pts[index - 1], pts[index + 1]);\r\n // TestDraw(new Point(p));\r\n\r\n // //上下居中\r\n // line = new Line(p, p.clone().setY(p.y + 1));\r\n // pts = curve.IntersectWith(line, IntersectOption.ExtendArg);\r\n // pts.push(p);\r\n // pts.sort(ComparePoint(\"xyz\"));\r\n // index = pts.indexOf(p);\r\n // p = midPoint(pts[index - 1], pts[index + 1]);\r\n // TestDraw(new Point(p));\r\n\r\n if (hasTextBox)\r\n {\r\n p.x += 280;\r\n p.y += 60;\r\n }\r\n return p;\r\n}\r\n","import Flatbush from 'flatbush';\r\nimport { Vector3 } from 'three';\r\nimport { Polyline } from '../../Entity/Polyline';\r\nimport { RoomFlatBase, UpdateTempPolyline } from \"../Entity/Flat/RoomFlatBase\";\r\nimport { RoomRegion } from \"../Entity/Region/RoomRegion\";\r\n\r\n//区域更迭(新老新区交换)\r\nexport class RegionReplacement\r\n{\r\n fb: Flatbush;\r\n contours: [Polyline, Polyline[]][] = [];\r\n constructor(private oldRegions: RoomRegion[])\r\n {\r\n if (oldRegions.length === 0) return;\r\n this.fb = new Flatbush(oldRegions.length);\r\n oldRegions.forEach(r =>\r\n {\r\n let flat = (r.Floor?.Object ?? r.Top.Object) as RoomFlatBase;\r\n //TODO:备份轮廓和网洞\r\n let box = flat.BoundingBox;\r\n this.fb.add(box.min.x, box.min.y, box.max.x, box.max.y);\r\n\r\n this.contours.push([flat.Contour.Clone().ApplyMatrix(flat.OCSNoClone), flat.HoleDatas.map(h => UpdateTempPolyline(h).Clone().ApplyMatrix(flat.OCSNoClone))]);\r\n });\r\n this.fb.finish();\r\n }\r\n\r\n //获得旧的区域\r\n GetReplaceOldReg(p: Vector3)\r\n {\r\n if (!this.fb) return;\r\n\r\n let ids = this.fb.search(p.x - 1, p.y - 1, p.x + 1, p.y + 1);\r\n for (let id of ids)\r\n {\r\n let [con, holes] = this.contours[id];\r\n if (con.PtInCurve(p) && !holes.some(h => h.PtInCurve(p)))\r\n {\r\n return this.oldRegions[id];\r\n }\r\n }\r\n }\r\n}\r\n","import { EntitysUpdateWrap } from \"../../../Common/EntityUpdateWrap\";\r\nimport { Route } from \"../../../Geometry/CurveMap\";\r\nimport { RegionParse } from \"../../../Geometry/RegionParse\";\r\nimport { Polyline2Points } from \"../../../Nest/Converter/Curves2Points\";\r\nimport { ContourTreeNode } from \"../../../ueapi\";\r\nimport { Contour } from \"../../Contour\";\r\nimport { Database } from \"../../Database\";\r\nimport { Curve } from \"../../Entity/Curve\";\r\nimport { Polyline } from \"../../Entity/Polyline\";\r\nimport { UpdateTempPolyline } from \"../Entity/Flat/RoomFlatBase\";\r\nimport { RoomFlatFloor } from \"../Entity/Flat/RoomFlatFloor\";\r\nimport { RoomFlatTop } from \"../Entity/Flat/RoomFlatTop\";\r\nimport { RoomRegion } from \"../Entity/Region/RoomRegion\";\r\nimport { CURVE_FACE_TYPE_KEY, RoomWallBase, WallFaceType } from \"../Entity/Wall/RoomWallBase\";\r\nimport { ParseRegionTextPos } from \"./ParseRegionTextPos\";\r\nimport { RegionReplacement } from \"./RegionReplacement\";\r\n\r\n//获取所有的曲线 ?:并且知道每个曲线是墙体的左边还是右边 (有没有用?)\r\n\r\n//分析面域\r\n\r\n//分析可用的内空间(墙面方向指向空间内部为内空间) 否则为外墙空间\r\n\r\n//构造面域树? 不需要了? 还是需要的 需要一个最大的天花板\r\n\r\n//区域对象 (地面+天花?)\r\n\r\n\r\n\r\n/**\r\n * 区域分析(房间+外墙+全屋顶)\r\n */\r\nexport class RoomRegionParse\r\n{\r\n rr: RegionReplacement;//区域替换工具\r\n reped: Set;//已经替换的区域\r\n oldregs: RoomRegion[];//旧的区域\r\n\r\n /**\r\n * @param _UpdateDb 当提供db时,我们更新了区域的信息\r\n */\r\n constructor(private _UpdateDb: Database)\r\n {\r\n if (this._UpdateDb)\r\n {\r\n this.oldregs = this._UpdateDb.ModelSpace.Entitys.filter(e => !e.IsErase && e instanceof RoomRegion) as RoomRegion[];\r\n this.rr = new RegionReplacement(this.oldregs);\r\n this.reped = new Set();\r\n }\r\n }\r\n\r\n Do(walls: RoomWallBase[])\r\n {\r\n let curves: Curve[] = [];\r\n\r\n let aloneWalls: RoomWallBase[] = [];\r\n\r\n let leftCurves = new Set();\r\n\r\n let maxZ = -Infinity;\r\n let minZ = walls[0].Z;\r\n for (let wall of walls)\r\n {\r\n maxZ = Math.max(wall.Z + wall.Height, maxZ);\r\n if (!wall.LeftCurves)\r\n {\r\n aloneWalls.push(wall);\r\n continue;\r\n }\r\n\r\n for (let c of wall.LeftCurves)\r\n {\r\n curves.push(c);\r\n leftCurves.add(c);\r\n }\r\n for (let c of wall.RightCurves)\r\n curves.push(c);\r\n\r\n for (let c of wall.LidCurves)\r\n curves.push(c);\r\n }\r\n\r\n const REGION_PARSE_NUM = 3;\r\n const POLYLINE_JOIN_FUZZ = Math.pow(10, -REGION_PARSE_NUM);\r\n\r\n let parse = new RegionParse(curves, REGION_PARSE_NUM);\r\n\r\n for (let [orgArc, arcs] of parse.ExpLineMap)\r\n {\r\n if (leftCurves.has(orgArc))\r\n for (let arc of arcs)\r\n leftCurves.add(arc);\r\n }\r\n\r\n let regionPolylines: Polyline[] = [];\r\n\r\n let map = new Map();\r\n //分析内外墙1内2外\r\n for (let routes of parse.RegionsOutline)\r\n {\r\n let pl = Polyline.Combine(routes.map(r => r.curve), POLYLINE_JOIN_FUZZ);\r\n\r\n // for (let i = 0; i < routes.length; i++)\r\n // {\r\n if (leftCurves.has(routes[0].curve))\r\n pl.ColorIndex = routes[0].isReverse ? 1 : 2;\r\n else //if (right.has(routes[0].curve))\r\n pl.ColorIndex = routes[0].isReverse ? 2 : 1;\r\n // else //因为盖子不分左右 所以我们忽略盖子 (现在盖子和右侧的一致)\r\n // continue;\r\n\r\n // break;\r\n // }\r\n\r\n // TestDraw(routes[0].curve); //test\r\n regionPolylines.push(pl);\r\n map.set(pl, routes);\r\n }\r\n\r\n //不可能有内部轮廓 如果有 就证明错了\r\n for (let routes of parse.RegionsInternal)\r\n {\r\n let pl = Polyline.Combine(routes.map(r => r.curve));\r\n pl.ColorIndex = pl.Area2 > 0 ? 3 : 4;\r\n // throw \"未知错误 出现外部轮廓\"\r\n }\r\n\r\n let cons = regionPolylines.map(pl => new ContourTreeNode(Contour.CreateContour(pl, false)));\r\n ContourTreeNode.ParseContourTree(cons);\r\n\r\n let roofs: Polyline[] = [];\r\n\r\n //解析 天花板区域 内空区域\r\n for (let con of cons)\r\n {\r\n let routes = map.get(con.contour.Curve as Polyline);\r\n if (con.contour.Curve.ColorIndex === 2)//天花板区域(或者柱子)\r\n {\r\n if (con.Depth !== 0 || con.area < 1e6)//柱子\r\n for (let r of routes)\r\n r.curve[CURVE_FACE_TYPE_KEY] = WallFaceType.Pillar;\r\n else\r\n for (let r of routes)\r\n r.curve[CURVE_FACE_TYPE_KEY] = WallFaceType.Outside;\r\n\r\n //我们需要返回这个轮廓,以便在ue中可以绘制真正的屋顶\r\n con.contour.Curve.Z = maxZ;\r\n roofs.push(con.contour.Curve as Polyline);\r\n }\r\n else if (con.contour.Curve.ColorIndex === 1)//内空区域\r\n {\r\n for (let r of routes)\r\n r.curve[CURVE_FACE_TYPE_KEY] = WallFaceType.Inside;\r\n\r\n if (this._UpdateDb && con.contour.Area > 1e4)\r\n {\r\n //组合外圈和网洞 画出来 就行了\r\n let floor = new RoomFlatFloor();\r\n let top = new RoomFlatTop();\r\n floor.OCS = con.contour.Curve.OCSNoClone;//设置坐标系 以便我们正常的应用轮廓\r\n top.OCS = con.contour.Curve.OCSNoClone;\r\n\r\n floor.Contour = con.contour.Curve as Polyline;\r\n top.Contour = con.contour.Curve as Polyline;\r\n\r\n floor.Holes = con.children.map(c => c.contour.Curve as Polyline);\r\n top.Holes = con.children.map(c => c.contour.Curve as Polyline);\r\n\r\n floor.Z = minZ;\r\n top.Z = maxZ;//等轮廓设置完在移动 否则设置失败\r\n\r\n let conPts = Polyline2Points(floor.Contour, false, 0)[1];\r\n let holePts = floor.HoleDatas.map(h => Polyline2Points(UpdateTempPolyline(h), false, 0)[1]);\r\n\r\n let pos = ParseRegionTextPos(conPts, holePts);\r\n pos.applyMatrix4(floor.OCSNoClone);\r\n let oldR = this.rr.GetReplaceOldReg(pos);\r\n\r\n let name = \"\";\r\n if (oldR)\r\n {\r\n if (this.reped.has(oldR)) //新增\r\n {\r\n //继承信息\r\n if (oldR.TextString)//继承名称\r\n {\r\n name = oldR.TextString;\r\n }\r\n }\r\n else//替换旧的\r\n {\r\n floor = oldR.Floor.Object as RoomFlatFloor;\r\n top = oldR.Top.Object as RoomFlatTop;\r\n\r\n EntitysUpdateWrap([floor, top, oldR], () =>\r\n {\r\n top.WriteAllObjectRecord();//因为修改了ocs 所以我们先记录下原始数据\r\n top.OCS = con.contour.Curve.OCSNoClone;\r\n\r\n floor.WriteAllObjectRecord();\r\n floor.OCS = con.contour.Curve.OCSNoClone;\r\n\r\n floor.UpdateContourHoles(con.contour.Curve as Polyline, con.children.map(c => c.contour.Curve as Polyline));\r\n top.UpdateContourHoles(con.contour.Curve as Polyline, con.children.map(c => c.contour.Curve as Polyline));\r\n\r\n floor.Z = minZ;\r\n top.Z = maxZ;//等轮廓设置完在移动 否则设置失败\r\n\r\n oldR.Position = pos;\r\n oldR.Area = floor.Area;\r\n });\r\n\r\n this.reped.add(oldR);\r\n continue;\r\n }\r\n }\r\n\r\n this._UpdateDb.ModelSpace.Append(floor);\r\n this._UpdateDb.ModelSpace.Append(top);\r\n let region = new RoomRegion(name, top.Id, floor.Id, floor.Area);\r\n region.Position = pos;\r\n this._UpdateDb.ModelSpace.Append(region);\r\n floor.RegionId = region.Id;\r\n top.RegionId = region.Id;\r\n }\r\n }\r\n }\r\n\r\n for (let [orgArc, arcs] of parse.ExpLineMap)\r\n orgArc[CURVE_FACE_TYPE_KEY] = arcs[0][CURVE_FACE_TYPE_KEY];\r\n\r\n for (let wall of walls)\r\n {\r\n // 因为我们现在没有分裂圆弧 所以我们不需要在合并线\r\n // wall.LeftCurves && arrayRemoveDuplicateBySort(wall.LeftCurves, (cu1: Curve, cu2: Curve) => cu1.Join(cu2) === Status.True);\r\n // wall.RightCurves && arrayRemoveDuplicateBySort(wall.RightCurves, (cu1: Curve, cu2: Curve) => cu1.Join(cu2) === Status.True);\r\n wall.Update();\r\n }\r\n\r\n return roofs;\r\n }\r\n\r\n End()\r\n {\r\n if (this._UpdateDb)\r\n {\r\n for (let r of this.oldregs)\r\n if (!this.reped.has(r))\r\n {\r\n r.Erase();\r\n r.Floor?.Object.Erase();\r\n r.Top?.Object.Erase();\r\n }\r\n }\r\n }\r\n}\r\n","import { Vector3 } from \"three\";\r\nimport { arrayRemoveDuplicateBySort, arraySortByNumber } from \"../../../Common/ArrayExt\";\r\nimport { CurveIntersection2 } from \"../../../Geometry/CurveIntersection\";\r\nimport { equaln } from \"../../../Geometry/GeUtils\";\r\nimport { IntersectOption } from \"../../../GraphicsSystem/IntersectWith\";\r\nimport { Curve } from \"../../Entity/Curve\";\r\n\r\n/**\r\n * 1.自动合理的延伸墙体,以便保证吸附失败的时候自动吸附(当被MOVE时,我们希望修复吸附失败的问题!)\r\n * 可延伸的距离等于墙体的厚度\r\n *\r\n * 2.在交点处把墙体打断,以便我们分析区域\r\n */\r\nexport class RoomWallExtendAndBreak\r\n{\r\n\r\n //曲线->分裂曲线的映射\r\n _Curve2SplitCurveMap = new Map();\r\n //分裂曲线->原始曲线的映射\r\n _SplitCurve2OrgCurveMap = new Map();\r\n\r\n ExtendCurves = new Set();\r\n AloneCurves: Curve[] = [];\r\n\r\n OrgCurveMapGroup: (Curve[])[] = [];\r\n\r\n constructor(curves: Curve[])\r\n {\r\n let intersect = new CurveIntersection2(curves, true, IntersectOption.ExtendBoth, 100, true);\r\n\r\n let breakCurves: Curve[] = [];\r\n //延伸+打断\r\n for (let [cu, pmap] of intersect.intersect2)\r\n {\r\n pmap.sort((p1, p2) => p1[0] - p2[0]);\r\n\r\n if (pmap.length > 0) breakCurves.push(cu);\r\n else this.AloneCurves.push(cu);\r\n\r\n //#region 1.延伸\r\n let hasExtend = false;\r\n let endParam = cu.EndParam;\r\n\r\n //最接近起点的点(我们使用这个点来决定我们是否延伸,这样有效避免了距离小于间距的一半时,但是距离却又大于设置参数时延伸时的尴尬!) 例如 | --|--------- 该例子不延伸到左边\r\n let index1 = FindMin(pmap, 0);\r\n let index2 = FindMin(pmap, endParam);\r\n\r\n let start = pmap[index1];\r\n let end = pmap[index2];\r\n\r\n if (start[0] < -1e-8)\r\n {\r\n cu.Extend(start[0]);\r\n hasExtend = true;\r\n }\r\n\r\n if (end[0] > (endParam + 1e-8))\r\n {\r\n cu.Extend(hasExtend ? cu.GetParamAtPoint(end[1]) : end[0]);\r\n hasExtend = true;\r\n\r\n pmap.splice(index2);//移除多余的交点参数\r\n }\r\n\r\n if (start[0] < -1e-8)\r\n pmap.splice(0, index1);//移除多余的交点参数\r\n\r\n if (hasExtend)//记录这个曲线被延伸了\r\n this.ExtendCurves.add(cu);\r\n }\r\n\r\n //有效的相交数据(用来切割)\r\n let intersectData = new Map();\r\n for (let cu of breakCurves)\r\n intersectData.set(cu, []);\r\n\r\n //去除无效的交点 移除多余的交点参数\r\n for (let [c1, c2, pts] of intersect.intersect3)\r\n {\r\n let c1arr = intersectData.get(c1);\r\n let c2arr = intersectData.get(c2);\r\n\r\n for (let p of pts)\r\n {\r\n let c1param = c1.GetParamAtPoint(p);\r\n if (!c1.ParamOnCurve(c1param)) continue;\r\n\r\n let c2param = c2.GetParamAtPoint(p);\r\n\r\n if (!c2.ParamOnCurve(c2param)) continue;\r\n\r\n c1arr.push(c1param);\r\n c2arr.push(c2param);\r\n }\r\n }\r\n\r\n //打断\r\n for (let [cu, params] of intersectData)\r\n {\r\n params = params.filter(p => p > 1e-3 && p < 0.999);\r\n // let isArc = cu instanceof Arc;\r\n // if (isArc)\r\n // {\r\n // let param = cu.GetParamAtPoint2((cu as Arc).Center.add(YAxisN));\r\n // if (cu.ParamOnCurve(param))\r\n // params.push(param);//保证切割\r\n // }\r\n if (params.length)\r\n {\r\n arraySortByNumber(params);\r\n arrayRemoveDuplicateBySort(params, (e1, e2) => equaln(e1, e2, 1e-4));\r\n // if (equaln(params[params.length - 1], 1, 1e-4)) //已经filter 不再需要\r\n // params[params.length - 1] = 1;\r\n }\r\n\r\n let splitCurves = params.length === 0 ? [cu.Clone()] : cu.GetSplitCurves(params);\r\n\r\n // if (isArc && splitCurves.length > 1)//将短圆弧转换为直线 我们由上层业务代码决定何时转换 不在此转换\r\n // {\r\n // // for (let i = 0; i < splitCurves.length; i++)\r\n // // {\r\n // // let c = splitCurves[i] as Arc;\r\n // // if (c.Radius < 100) //不能歧视 否则轮廓就错了\r\n // // splitCurves[i] = new Line(c.StartPoint, c.EndPoint);\r\n // // }\r\n // }\r\n\r\n //记录关联关系\r\n this._Curve2SplitCurveMap.set(cu, splitCurves);\r\n for (let scu of splitCurves)\r\n this._SplitCurve2OrgCurveMap.set(scu, cu);\r\n }\r\n\r\n //分组(只有相交的部分才会在一个组)\r\n let parsed = new Set();\r\n for (let cu of curves)\r\n {\r\n if (parsed.has(cu)) continue;\r\n parsed.add(cu);\r\n\r\n let group: Curve[] = [cu];\r\n\r\n for (let i = 0; i < group.length; i++)\r\n {\r\n let interMap = intersect.intersect.get(group[i]);\r\n if (!interMap) continue;\r\n for (let [ic] of interMap)\r\n {\r\n if (parsed.has(ic)) continue;\r\n parsed.add(ic);\r\n\r\n group.push(ic);\r\n }\r\n }\r\n\r\n if (group.length > 1)\r\n this.OrgCurveMapGroup.push(group);\r\n }\r\n }\r\n}\r\n\r\n//找到最接近某个参数的索引位置\r\nfunction FindMin(params: [number, Vector3][], closeToParam: number)\r\n{\r\n if (params.length < 2) return params.length - 1;\r\n\r\n let minDist = Infinity;\r\n let minIndex = -1;\r\n for (let i = 0; i < params.length; i++)\r\n {\r\n let absDist = Math.abs(params[i][0] - closeToParam);\r\n if (absDist < minDist)\r\n {\r\n minDist = absDist;\r\n minIndex = i;\r\n }\r\n }\r\n return minIndex;\r\n}\r\n","import Flatbush from 'flatbush';\r\nimport { Box3, Vector3 } from \"three\";\r\nimport { arrayPushArray } from '../../../Common/ArrayExt';\r\nimport { CurveMap, Vertice } from \"../../../Geometry/CurveMap\";\r\nimport { AsVector2, equalv3, midPoint, SelectNearP } from \"../../../Geometry/GeUtils\";\r\nimport { CalcRouteAngle, RegionParse } from \"../../../Geometry/RegionParse\";\r\nimport { IntersectOption } from \"../../../GraphicsSystem/IntersectWith\";\r\nimport { EntityEncode2 } from \"../../../GraphicsSystem/OffsetPolyline\";\r\nimport { Contour } from \"../../Contour\";\r\nimport { Database } from '../../Database';\r\nimport { Arc } from \"../../Entity/Arc\";\r\nimport { Curve } from \"../../Entity/Curve\";\r\nimport { Line } from \"../../Entity/Line\";\r\nimport { Polyline } from \"../../Entity/Polyline\";\r\nimport { RoomWallBase } from \"../Entity/Wall/RoomWallBase\";\r\nimport { CurveTrim, CurveTrimArc, CurveTrimLine } from \"./CurveTrim\";\r\nimport { CreateGetCurveParam, GetCurveParam, GetLineParam } from './GetCurveParam';\r\nimport { RoomRegionParse } from './RoomRegionParse';\r\nimport { RoomWallExtendAndBreak } from \"./RoomWallExtendAndBreak\";\r\n\r\nconst SHOW_PERF = false;\r\nconst ROOM_WALL_INDEX_KEY = \"__ROOM_WALL_INDEX_KEY__\";\r\nconst SAVE_SP_KEY = \"__SAVE_SP__\";\r\nconst SAVE_EP_KEY = \"__SAVE_EP__\";\r\n\r\n/**\r\n * 户型分析服务:\r\n * 1.自动延伸墙\r\n * 2.合理的构建墙\r\n * 3.自动分析地板\r\n *\r\n * 墙体被分裂后合并(join line)\r\n *\r\n * TODO:\r\n * 删除重复的墙(例如 2个rec wall)\r\n * 增量更新 diff walls(始作俑者 1) -> dep walls(需要更新 2) ->dep's dep walls(需要被依赖 3) +[可能被影响到的wall 2(比如被切割的墙) (依赖墙 3)]\r\n * ->1.用盒子搜索范围依赖(盒子1级依赖)\r\n * ->2.用盒子扩大搜索范围依赖(盒子2级依赖)\r\n * ->正确的分析1级依赖 2级依赖 (或者不要分析? 直接用盒子来?)\r\n * ->分析\r\n * ->更新1级 2级 的墙\r\n */\r\nexport class RoomWallParse\r\n{\r\n\r\n static _CacheWallNodePoints: Vector3[] = [];\r\n static _CacheWallMaps: [RoomWallExtendAndBreak, CurveMap][] = [];\r\n static _CacheCurveWallMaps: Map = new Map();\r\n static _CacheRoofs: Polyline[] = [];\r\n\r\n /**\r\n * @param [_ExtendsWalls=true] 更新墙体,在开图时不更新图纸\r\n * @param [_UpdateDb] 更新的图纸(新绘制Region)\r\n * @param [_IsCacheWallNodePoints] 需要把节点缓存下来?\r\n */\r\n constructor(private _ExtendsWalls: boolean, private _UpdateDb: Database, private _IsCacheWallNodePoints: boolean)\r\n {\r\n\r\n }\r\n\r\n /**\r\n * @param walls 需要解析的墙体列表\r\n * @param changeWalls 更新的墙体列表(如果提供 增量模式)\r\n */\r\n Parse(walls: RoomWallBase[], changeWalls: RoomWallBase[] = undefined)\r\n {\r\n if (this._IsCacheWallNodePoints)\r\n {\r\n RoomWallParse._CacheWallNodePoints = [];\r\n RoomWallParse._CacheWallMaps = [];\r\n RoomWallParse._CacheCurveWallMaps = new Map();\r\n RoomWallParse._CacheRoofs = [];\r\n }\r\n\r\n let regionPrase = new RoomRegionParse(this._UpdateDb);\r\n\r\n const GroupWalls = (walls: RoomWallBase[], fn: (wall: RoomWallBase) => number) =>\r\n {\r\n let map = new Map();\r\n for (let w of walls)\r\n {\r\n if (w.Length < 1e-6)\r\n {\r\n // w.Erase();//删除空长度的墙\r\n\r\n //避免窗户0长度错误\r\n w.LeftCurves = [];\r\n w.RightCurves = [];\r\n w.LidCurves = [];\r\n continue;\r\n };\r\n\r\n let value = fn(w);\r\n let arr = map.get(value);\r\n if (!arr)\r\n {\r\n arr = [];\r\n map.set(value, arr);\r\n }\r\n arr.push(w);\r\n }\r\n return map;\r\n };\r\n\r\n //按Z轴区分\r\n let zgroupMap = GroupWalls(walls, w => Math.round(w.Z * 100));\r\n\r\n for (let [, walls] of zgroupMap)\r\n {\r\n this.PraseWallsFromSameFloor(walls, changeWalls);\r\n let roofs = regionPrase.Do(walls);\r\n\r\n if (this._IsCacheWallNodePoints)\r\n arrayPushArray(RoomWallParse._CacheRoofs, roofs);\r\n }\r\n\r\n regionPrase.End();\r\n }\r\n\r\n private PraseWallsFromSameFloor(walls: RoomWallBase[], changeWalls: RoomWallBase[] = undefined)\r\n {\r\n SHOW_PERF && console.time(\"尖角化+裁剪面\");\r\n //{墙}->{轴线} {轴线}->{墙}\r\n let wallCurveMap = new Map();\r\n let curveWallMap = new Map();\r\n\r\n let axisCurves = walls.map(wall =>\r\n {\r\n //清理\r\n wall.LeftCurves = [];\r\n wall.RightCurves = [];\r\n wall.LidCurves = [];\r\n wall.Region = undefined;\r\n\r\n let cu = wall.CenterAxisCurve;\r\n\r\n wallCurveMap.set(wall, cu);\r\n curveWallMap.set(cu, wall);\r\n\r\n if (this._IsCacheWallNodePoints)\r\n RoomWallParse._CacheCurveWallMaps.set(cu, wall);\r\n return cu;\r\n });\r\n\r\n //打断数据\r\n let breakData = new RoomWallExtendAndBreak(axisCurves);\r\n\r\n if (this._ExtendsWalls)//墙体延伸\r\n for (let cu of breakData.ExtendCurves)\r\n {\r\n let wall = curveWallMap.get(cu);\r\n\r\n wall.StartPoint = cu.StartPoint;\r\n wall.EndPoint = cu.EndPoint;\r\n }\r\n\r\n let orgCurveLeftMap = new Map();\r\n let orgCurveRightMap = new Map();\r\n\r\n //{打断后的曲线}指向{新生成曲线}\r\n let curveLeftCurveMap: Map = new Map;\r\n let curveRightCurveMap: Map = new Map;\r\n //新生成的曲线的补盖子\r\n let curveStartLidCurveMap: Map = new Map;\r\n let curveEndLidCurveMap: Map = new Map;\r\n //半盖\r\n let curveStarLeftHalfLidCurveMap: Map = new Map;\r\n let curveStarRightHalfLidCurveMap: Map = new Map;\r\n let curveEndLeftHalfLidCurveMap: Map = new Map;\r\n let curveEndRightHalfLidCurveMap: Map = new Map;\r\n\r\n //尖角连接\r\n for (let groupCurves of breakData.OrgCurveMapGroup)\r\n {\r\n let curveMap = new CurveMap(4, true);\r\n\r\n for (let orgCurve of groupCurves)\r\n {\r\n let orgWall = curveWallMap.get(orgCurve);\r\n let splitCurves = breakData._Curve2SplitCurveMap.get(orgCurve);\r\n for (let cu of splitCurves)\r\n {\r\n //TODO:墙体重复时, 使用大厚度的墙?\r\n if (curveMap.AddCurveToMap(cu, cu instanceof Arc, true, true) || true)//避免重叠墙体构建错误 我们设置了true 参考用例 `重叠墙分析丢失墙体`\r\n {\r\n //左右线\r\n let leftCurve = cu.GetOffsetCurves(-orgWall.Thickness * 0.5)[0];\r\n let rightCurve = cu.GetOffsetCurves(orgWall.Thickness * 0.5)[0];\r\n\r\n leftCurve.ColorIndex = 2;\r\n rightCurve.ColorIndex = 3;\r\n\r\n curveLeftCurveMap.set(cu, leftCurve);\r\n curveRightCurveMap.set(cu, rightCurve);\r\n }\r\n }\r\n }\r\n\r\n if (this._IsCacheWallNodePoints)\r\n RoomWallParse._CacheWallMaps.push([breakData, curveMap]);\r\n\r\n //逆时针\r\n for (let v of curveMap._Vertices)\r\n {\r\n if (this._IsCacheWallNodePoints)\r\n RoomWallParse._CacheWallNodePoints.push(v.position);\r\n\r\n if (v.routes.length === 0) continue;\r\n if (v.routes.length < 2)\r\n {\r\n let r = v.routes[0];\r\n let preCurve = curveLeftCurveMap.get(r.curve);//左边的\r\n let nowCurve = curveRightCurveMap.get(r.curve);//右边的\r\n\r\n let sp = r.isReverse ? preCurve.EndPoint : preCurve.StartPoint;\r\n let ep = r.isReverse ? nowCurve.EndPoint : nowCurve.StartPoint;\r\n let l = new Line(sp, ep);\r\n l.ColorIndex = 6;\r\n if (r.isReverse)\r\n curveEndLidCurveMap.set(r.curve, new Line(ep, sp));\r\n else\r\n curveStartLidCurveMap.set(r.curve, new Line(sp, ep));\r\n continue;\r\n };\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 //倒角\r\n let pre = v.routes.length - 1;\r\n for (let i = 0; i < v.routes.length; i++)\r\n {\r\n let preR = v.routes[pre];\r\n let nowR = v.routes[i];\r\n\r\n let preCurve = preR.isReverse ? curveRightCurveMap.get(preR.curve) : curveLeftCurveMap.get(preR.curve);//左边的\r\n let nowCurve = nowR.isReverse ? curveLeftCurveMap.get(nowR.curve) : curveRightCurveMap.get(nowR.curve);//右边的\r\n\r\n let sp = preR.isReverse ? preCurve.EndPoint : preCurve.StartPoint;\r\n let ep = nowR.isReverse ? nowCurve.EndPoint : nowCurve.StartPoint;\r\n if (equalv3(sp, ep))//直连\r\n {\r\n pre = i;\r\n continue;\r\n }\r\n\r\n let iPam = preCurve.IntersectWith2(nowCurve, IntersectOption.ExtendBoth);\r\n let iPts = iPam.map(p => p.pt);\r\n let tPts = iPam.filter(p => preCurve.ParamOnCurve(p.thisParam) && nowCurve.ParamOnCurve(p.argParam)).map(p => p.pt);\r\n\r\n let code = EntityEncode2(preCurve, nowCurve);\r\n let tp: Vector3;\r\n if (code === 1)//都是直线\r\n {\r\n if (tPts.length > 0)\r\n {\r\n tp = iPts[0];\r\n\r\n //奇怪的行为,避免它\r\n if (equalv3(tp, preCurve.StartPoint, 1e-3)\r\n || equalv3(tp, preCurve.EndPoint, 1e-3)\r\n || equalv3(tp, nowCurve.StartPoint, 1e-3)\r\n || equalv3(tp, nowCurve.EndPoint, 1e-3)\r\n )\r\n tp = undefined;\r\n }\r\n else\r\n {\r\n if (iPts.length > 0)\r\n {\r\n //fuck 没有括号导致的错误\r\n //尖角时才延伸,否则补盖 (延伸或者在线上)\r\n let isExtend = (preR.isReverse ? iPam[0].thisParam > 0 : iPam[0].thisParam < 1)\r\n && (nowR.isReverse ? iPam[0].argParam > 0 : iPam[0].argParam < 1);\r\n\r\n let distSq = iPts[0].distanceToSquared(v.position);\r\n if (isExtend && distSq < 500 * 500)//尖角\r\n tp = iPts[0];\r\n else\r\n {\r\n //钝角 直接连接 在下面的代码连接\r\n // console.log();\r\n }\r\n }\r\n }\r\n }\r\n else//直线与圆弧\r\n {\r\n if (tPts.length > 0) //ipts = 1 or ipts = 2\r\n tp = SelectNearP(tPts, v.position);\r\n else\r\n {\r\n if (iPts.length === 0)\r\n {\r\n //直接连接 在下面的代码连接\r\n }\r\n else\r\n {\r\n let p: Vector3;\r\n\r\n if (code === 2 && iPts.length === 2)\r\n {\r\n let preArc = preCurve as Arc;\r\n let minArc = new Arc(preArc.Center, preArc.Radius,\r\n preR.isReverse ? preArc.EndAngle : preArc.StartAngle,\r\n 0,\r\n preR.isReverse ? preArc.IsClockWise : !preArc.IsClockWise\r\n );\r\n\r\n let p1 = iPts[0];\r\n let a1 = minArc.GetAngleAtPoint(p1);\r\n let anAll1 = preArc.ParamOnCurve(preArc.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 = preArc.ParamOnCurve(preArc.GetParamAtAngle(a2)) ? Infinity : minArc.ComputeAnlge(a2);\r\n\r\n if (anAll2 < anAll1)\r\n {\r\n p = p2;\r\n iPam[0] = iPam[1];\r\n }\r\n else\r\n p = p1;\r\n }\r\n else\r\n {\r\n p = SelectNearP(iPts, v.position);\r\n if (p === iPts[1])\r\n iPam[0] = iPam[1];\r\n }\r\n\r\n let isExtend = (preR.isReverse ? iPam[0].thisParam > 1 : iPam[0].thisParam < 0)\r\n && (nowR.isReverse ? iPam[0].argParam > 1 : iPam[0].argParam < 0);\r\n\r\n //tp 必须不能破坏圆弧,否则造成裁剪错误\r\n if (!isExtend || p.distanceToSquared(v.position) > 500 * 500)\r\n p = undefined;\r\n else//预习 如果破坏的圆弧轮廓,则不允许连接\r\n {\r\n let line: Line;\r\n if (preCurve instanceof Arc)\r\n {\r\n let tempC = preCurve.Clone();\r\n if (preR.isReverse) tempC.EndPoint = p;\r\n else tempC.StartPoint = p;\r\n\r\n line = new Line(v.position.clone(), p);\r\n let ipts = line.IntersectWith(tempC, IntersectOption.ExtendNone);\r\n if (ipts.length === 2)\r\n p = undefined;\r\n }\r\n\r\n if (p && nowCurve instanceof Arc)\r\n {\r\n let tempC = nowCurve.Clone();\r\n if (nowR.isReverse) tempC.EndPoint = p;\r\n else tempC.StartPoint = p;\r\n\r\n if (!line) line = new Line(v.position.clone(), p);\r\n let ipts = line.IntersectWith(tempC, IntersectOption.ExtendNone);\r\n if (ipts.length === 2)\r\n p = undefined;\r\n }\r\n }\r\n\r\n tp = p;\r\n }\r\n }\r\n }\r\n\r\n if (tp)\r\n {\r\n if (preR.isReverse) preCurve[SAVE_EP_KEY] = tp;\r\n else preCurve[SAVE_SP_KEY] = tp;\r\n\r\n if (nowR.isReverse) nowCurve[SAVE_EP_KEY] = tp;\r\n else nowCurve[SAVE_SP_KEY] = tp;\r\n }\r\n else\r\n {\r\n //如果两线(直线)平行 无交点时,应该只补厚墙的盖子\r\n if (code === 1 && iPts.length === 0)//&& false 尽管是false 这里的代码还是成立的 没有禁用这个代码是因为能带来一丢丢性能提升\r\n {\r\n let w1 = curveWallMap.get(breakData._SplitCurve2OrgCurveMap.get(preR.curve));\r\n let w2 = curveWallMap.get(breakData._SplitCurve2OrgCurveMap.get(nowR.curve));\r\n\r\n let sp = preR.isReverse ? preCurve.EndPoint : preCurve.StartPoint;\r\n let ep = nowR.isReverse ? nowCurve.EndPoint : nowCurve.StartPoint;\r\n\r\n if (w1.Thickness > w2.Thickness)\r\n {\r\n if (preR.isReverse)\r\n curveEndLeftHalfLidCurveMap.set(preR.curve, new Line(sp, ep));\r\n else\r\n curveStarLeftHalfLidCurveMap.set(preR.curve, new Line(sp, ep));\r\n }\r\n else\r\n {\r\n if (nowR.isReverse)\r\n curveEndRightHalfLidCurveMap.set(nowR.curve, new Line(sp, ep));\r\n else\r\n curveStarRightHalfLidCurveMap.set(nowR.curve, new Line(sp, ep));\r\n }\r\n }\r\n // else if (equalv3(sp, ep, 10)) //在sp ep接近时,我们直接连接sp ep 会更好? 看起来是没必要的\r\n // {\r\n // if (preR.isReverse)\r\n // curveEndLeftHalfLidCurveMap.set(preR.curve, new Line(ep, sp));\r\n // else\r\n // curveStarLeftHalfLidCurveMap.set(preR.curve, new Line(sp, ep));\r\n // }\r\n else\r\n {\r\n if (preR.isReverse)\r\n curveEndLeftHalfLidCurveMap.set(preR.curve, new Line(sp, v.position.clone()));//yep\r\n else\r\n curveStarLeftHalfLidCurveMap.set(preR.curve, new Line(sp, v.position.clone()));//yep\r\n\r\n if (nowR.isReverse)\r\n curveEndRightHalfLidCurveMap.set(nowR.curve, new Line(v.position.clone(), ep));//yep\r\n else\r\n curveStarRightHalfLidCurveMap.set(nowR.curve, new Line(v.position.clone(), ep));//yep\r\n }\r\n }\r\n\r\n pre = i;\r\n }\r\n }\r\n\r\n //延迟连接\r\n for (let orgCurve of groupCurves)\r\n {\r\n let splitCurves = breakData._Curve2SplitCurveMap.get(orgCurve);\r\n for (let cu of splitCurves)\r\n {\r\n let left = curveLeftCurveMap.get(cu);\r\n let right = curveRightCurveMap.get(cu);\r\n\r\n UpdateStartEndPoint(left);\r\n UpdateStartEndPoint(right);\r\n }\r\n }\r\n\r\n class RegionParse2 extends RegionParse\r\n {\r\n protected override GenerateVerticeMap(curveList: Curve[]): Vertice[]\r\n {\r\n return curveMap.Stands;\r\n }\r\n }\r\n\r\n //现在已经不再需要移除小房间了\r\n // //移除过小房间的内墙(空间过小 或者 没有空间)\r\n // let regionData = new RegionParse2(undefined);\r\n // const RemoveSmallSpaceInteriorWall = (routes: Route[]) =>\r\n // {\r\n // let polyline = Polyline.Combine(routes.map(r => r.curve), 1e-3);\r\n // let space = polyline.GetOffsetCurves(-120)[0];\r\n\r\n // if (!space || space.Area < 1e4)//0.1平米\r\n // {\r\n // for (let r of routes)\r\n // {\r\n // let cu: Curve;\r\n // //因为是逆时针 所以我们删除右边的线\r\n // if (r.isReverse)\r\n // {\r\n // cu = curveLeftCurveMap.get(r.curve);\r\n // curveLeftCurveMap.delete(r.curve);\r\n // }\r\n // else\r\n // {\r\n // cu = curveRightCurveMap.get(r.curve);\r\n // curveRightCurveMap.delete(r.curve);\r\n // }\r\n\r\n // //还要删除补的盖子\r\n // if (cu)\r\n // {\r\n // curveStarLeftHalfLidCurveMap.delete(cu);\r\n // curveEndLeftHalfLidCurveMap.delete(cu);\r\n\r\n // curveStartLidCurveMap.delete(cu);\r\n // curveEndLidCurveMap.delete(cu);\r\n // }\r\n // }\r\n // }\r\n // };\r\n // regionData.RegionsInternal.forEach(RemoveSmallSpaceInteriorWall);\r\n // regionData.RegionsOutline.forEach(RemoveSmallSpaceInteriorWall);\r\n }\r\n\r\n //构建裁剪面\r\n let trimContours: Contour[] = [];\r\n let orgCurveParams: GetCurveParam[] = [];\r\n for (let i = 0; i < axisCurves.length; i++)\r\n {\r\n let orgCurve = axisCurves[i];\r\n orgCurve[ROOM_WALL_INDEX_KEY] = i;\r\n let parse = CreateGetCurveParam(orgCurve);\r\n orgCurveParams.push(parse);\r\n\r\n let splitCurves = breakData._Curve2SplitCurveMap.get(orgCurve);\r\n let orgWall = curveWallMap.get(orgCurve);\r\n\r\n let leftStartParam = 1, leftEndParam = 0,\r\n rightStartParam = 1, rightEndParam = 0;\r\n if (!splitCurves)\r\n {\r\n //左右线\r\n let leftCurve = orgCurve.GetOffsetCurves(-orgWall.Thickness * 0.5)[0];\r\n let rightCurve = orgCurve.GetOffsetCurves(orgWall.Thickness * 0.5)[0];\r\n\r\n leftCurve.ColorIndex = 2;\r\n rightCurve.ColorIndex = 3;\r\n\r\n curveLeftCurveMap.set(orgCurve, leftCurve);\r\n curveRightCurveMap.set(orgCurve, rightCurve);\r\n\r\n curveStartLidCurveMap.set(orgCurve, new Line(leftCurve.StartPoint, rightCurve.StartPoint));\r\n curveEndLidCurveMap.set(orgCurve, new Line(rightCurve.EndPoint, leftCurve.EndPoint));\r\n\r\n breakData._SplitCurve2OrgCurveMap.set(orgCurve, orgCurve);//直接定位到自己\r\n\r\n //更新 孤独的墙也应该被切割,所以移除这个代码\r\n // orgWall.Region = undefined;\r\n // orgWall.LeftCurves = undefined;\r\n // orgWall.RightCurves = undefined;\r\n // orgWall.LidCurves = undefined;\r\n\r\n if (this._IsCacheWallNodePoints)\r\n RoomWallParse._CacheWallNodePoints.push(orgCurve.StartPoint, orgCurve.EndPoint);\r\n\r\n // continue;//孤独的墙(TODO:) //update:孤独的墙也应该裁剪被人\r\n leftStartParam = rightStartParam = 0;\r\n leftEndParam = rightEndParam = 1;\r\n }\r\n else\r\n {\r\n for (let cu of splitCurves)\r\n {\r\n let left = curveLeftCurveMap.get(cu);\r\n let right = curveRightCurveMap.get(cu);\r\n\r\n if (left)\r\n {\r\n leftStartParam = Math.min(leftStartParam, parse.GetParamAtPoint(left.StartPoint));\r\n leftEndParam = Math.max(leftEndParam, parse.GetParamAtPoint(left.EndPoint));\r\n }\r\n\r\n if (right)\r\n {\r\n rightStartParam = Math.min(rightStartParam, parse.GetParamAtPoint(right.StartPoint));\r\n rightEndParam = Math.max(rightEndParam, parse.GetParamAtPoint(right.EndPoint));\r\n }\r\n }\r\n\r\n if (leftStartParam > leftEndParam)\r\n {\r\n leftStartParam = 0;\r\n leftEndParam = 1;\r\n }\r\n if (rightStartParam > rightEndParam)\r\n {\r\n rightStartParam = 0;\r\n rightEndParam = 1;\r\n }\r\n }\r\n\r\n let sp = orgCurve.StartPoint;\r\n let ep = orgCurve.EndPoint;\r\n if (orgCurve instanceof Line)\r\n {\r\n let lparse = parse as GetLineParam;\r\n let p1 = parse.GetPointAtParam(leftStartParam);\r\n let p2 = parse.GetPointAtParam(leftEndParam);\r\n lparse.OffsetPoint(p1, orgWall.Thickness * 0.5);\r\n lparse.OffsetPoint(p2, orgWall.Thickness * 0.5);\r\n\r\n let p3 = lparse.GetPointAtParam(rightStartParam);\r\n let p4 = lparse.GetPointAtParam(rightEndParam);\r\n lparse.OffsetPoint(p3, orgWall.Thickness * -0.5);\r\n lparse.OffsetPoint(p4, orgWall.Thickness * -0.5);\r\n\r\n\r\n let pts: Vector3[] = [];\r\n if (!equalv3(midPoint(p1, p3), sp))\r\n pts.push(sp);\r\n\r\n pts.push(p1, p2);\r\n\r\n if (!equalv3(midPoint(p2, p4), ep))\r\n pts.push(ep);\r\n\r\n pts.push(p4, p3);\r\n\r\n let pl = new Polyline(pts.map(p => { return { pt: AsVector2(p), bul: 0 }; }));\r\n pl.CloseMark = true;\r\n pl.Z = p1.z;\r\n\r\n let contour = Contour.CreateContour(pl, false);\r\n\r\n // let reg = Region.CreateFromCurves([contour.Curve]);\r\n // if (reg)\r\n // TestDraw(reg);\r\n\r\n trimContours.push(contour);\r\n orgWall.Region = pl;\r\n\r\n orgCurveLeftMap.set(orgCurve, new Line(p1, p2));\r\n orgCurveRightMap.set(orgCurve, new Line(p3, p4));\r\n }\r\n else\r\n {\r\n //左右线\r\n let leftCurve = orgCurve.GetOffsetCurves(-orgWall.Thickness * 0.5)[0];\r\n let rightCurve = orgCurve.GetOffsetCurves(orgWall.Thickness * 0.5)[0];\r\n\r\n leftCurve.EndAngle = orgCurve.GetAngleAtParam(leftEndParam);\r\n leftCurve.StartAngle = orgCurve.GetAngleAtParam(leftStartParam);\r\n\r\n rightCurve.EndAngle = orgCurve.GetAngleAtParam(rightEndParam);\r\n rightCurve.StartAngle = orgCurve.GetAngleAtParam(rightStartParam);\r\n\r\n let curves: (Line | Arc)[] = [];\r\n let [p1, p2] = [leftCurve.StartPoint, leftCurve.EndPoint];\r\n let [p3, p4] = [rightCurve.StartPoint, rightCurve.EndPoint];\r\n\r\n if (!equalv3(midPoint(p1, p3), sp))\r\n curves.push(new Line(p3, sp), new Line(sp, p1));\r\n else\r\n curves.push(new Line(p1, p3));\r\n curves.push(leftCurve);\r\n if (!equalv3(midPoint(p2, p4), ep))\r\n curves.push(new Line(p2, ep), new Line(ep, p4));\r\n else\r\n curves.push(new Line(p2, p4));\r\n curves.push(rightCurve);\r\n\r\n let contour = Contour.CreateContour(curves, false);\r\n if (!contour)\r\n {\r\n // for (let i = 0; i < curves.length; i++)\r\n // TestDraw(curves[i], i + 1);\r\n contour = Contour.CreateContour(new Polyline().RectangleFrom2Pt(new Vector3, new Vector3(100, 100)), false);\r\n console.error(\"生成轮廓失败\");\r\n }\r\n else\r\n {\r\n // let reg = Region.CreateFromCurves([contour.Curve]);\r\n // if (reg)\r\n // TestDraw(reg);\r\n }\r\n trimContours.push(contour);\r\n orgWall.Region = contour.Curve as Polyline;\r\n\r\n orgCurveLeftMap.set(orgCurve, leftCurve);\r\n orgCurveRightMap.set(orgCurve, rightCurve);\r\n }\r\n }\r\n\r\n // jig.End();\r\n\r\n SHOW_PERF && console.timeEnd(\"尖角化+裁剪面\");\r\n\r\n SHOW_PERF && console.time(\"墙体裁剪\");\r\n\r\n this.GenFB(trimContours);\r\n\r\n enum CurveType\r\n {\r\n Left = 0,\r\n Right = 1,\r\n StartLid = 2,\r\n EndLid = 3,\r\n }\r\n\r\n const Trim = (splitCurve: Curve, offsetCurve: Curve, index: number, type: CurveType) =>\r\n {\r\n let trim: CurveTrim;\r\n if (offsetCurve instanceof Line)\r\n {\r\n let getParam = orgCurveParams[index] as GetLineParam;\r\n let dir: Vector3;\r\n if (type === CurveType.Left) dir = getParam.Direction;\r\n else if (type === CurveType.Right) dir = getParam.NegDirection;\r\n else if (type === CurveType.StartLid) dir = getParam.LeftDir;\r\n else if (type === CurveType.EndLid) dir = getParam.RightDir;\r\n\r\n if (!dir)\r\n {\r\n dir = offsetCurve.GetFistDeriv(0).normalize().negate();\r\n }\r\n\r\n trim = new CurveTrimLine(offsetCurve, dir);\r\n }\r\n else\r\n trim = new CurveTrimArc(offsetCurve as Arc, type !== CurveType.Left);\r\n\r\n //需要更快的判断直线会不会被轮廓切割?\r\n\r\n this.fb.search(trim._Box.min.x - 1e-2, trim._Box.min.y - 1e-2, trim._Box.max.x + 1e-2, trim._Box.max.y + 1e-2, (id =>\r\n {\r\n // if (id !== index) //裁剪的好处是有些细的盖子将会消失\r\n trim.TrimBy(trimContours[id], this.boxs[id], index > id);\r\n return false;\r\n }));\r\n\r\n let curves = trim.Curves;\r\n return curves as (Arc | Line)[];\r\n };\r\n\r\n for (let [orgCurve, offsetCurve] of orgCurveLeftMap)\r\n {\r\n let orgWall = curveWallMap.get(orgCurve);\r\n arrayPushArray(orgWall.LeftCurves, Trim(orgCurve, offsetCurve, orgCurve[ROOM_WALL_INDEX_KEY], CurveType.Left));\r\n }\r\n for (let [orgCurve, offsetCurve] of orgCurveRightMap)\r\n {\r\n let orgWall = curveWallMap.get(orgCurve);\r\n arrayPushArray(orgWall.RightCurves, Trim(orgCurve, offsetCurve, orgCurve[ROOM_WALL_INDEX_KEY], CurveType.Right));\r\n }\r\n\r\n for (let [splitCurve, offsetCurve] of curveStartLidCurveMap)\r\n {\r\n let orgCurve = breakData._SplitCurve2OrgCurveMap.get(splitCurve);\r\n let orgWall = curveWallMap.get(orgCurve);\r\n arrayPushArray(orgWall.LidCurves, Trim(splitCurve, offsetCurve, orgCurve[ROOM_WALL_INDEX_KEY], CurveType.StartLid));\r\n }\r\n for (let [splitCurve, offsetCurve] of curveEndLidCurveMap)\r\n {\r\n let orgCurve = breakData._SplitCurve2OrgCurveMap.get(splitCurve);\r\n let orgWall = curveWallMap.get(orgCurve);\r\n arrayPushArray(orgWall.LidCurves, Trim(splitCurve, offsetCurve, orgCurve[ROOM_WALL_INDEX_KEY], CurveType.EndLid));\r\n }\r\n\r\n for (let [splitCurve, offsetCurve] of curveStarLeftHalfLidCurveMap)\r\n {\r\n let orgCurve = breakData._SplitCurve2OrgCurveMap.get(splitCurve);\r\n let orgWall = curveWallMap.get(orgCurve);\r\n arrayPushArray(orgWall.LidCurves, Trim(splitCurve, offsetCurve, orgCurve[ROOM_WALL_INDEX_KEY], CurveType.StartLid));\r\n }\r\n for (let [splitCurve, offsetCurve] of curveStarRightHalfLidCurveMap)\r\n {\r\n let orgCurve = breakData._SplitCurve2OrgCurveMap.get(splitCurve);\r\n let orgWall = curveWallMap.get(orgCurve);\r\n arrayPushArray(orgWall.LidCurves, Trim(splitCurve, offsetCurve, orgCurve[ROOM_WALL_INDEX_KEY], CurveType.StartLid));\r\n }\r\n\r\n for (let [splitCurve, offsetCurve] of curveEndLeftHalfLidCurveMap)\r\n {\r\n let orgCurve = breakData._SplitCurve2OrgCurveMap.get(splitCurve);\r\n let orgWall = curveWallMap.get(orgCurve);\r\n arrayPushArray(orgWall.LidCurves, Trim(splitCurve, offsetCurve, orgCurve[ROOM_WALL_INDEX_KEY], CurveType.EndLid));\r\n }\r\n for (let [splitCurve, offsetCurve] of curveEndRightHalfLidCurveMap)\r\n {\r\n let orgCurve = breakData._SplitCurve2OrgCurveMap.get(splitCurve);\r\n let orgWall = curveWallMap.get(orgCurve);\r\n arrayPushArray(orgWall.LidCurves, Trim(splitCurve, offsetCurve, orgCurve[ROOM_WALL_INDEX_KEY], CurveType.EndLid));\r\n }\r\n\r\n //Update:2022-04-28 我们不再分裂圆弧,所以也不再需要合并线\r\n //区域分析需要破裂的圆弧,这里暂时不合并墙(在room region parse中合并)\r\n // for (let wall of walls)\r\n // {\r\n // wall.LeftCurves && arrayRemoveDuplicateBySort(wall.LeftCurves, (cu1: Curve, cu2: Curve) => cu1.Join(cu2) === Status.True);\r\n // wall.RightCurves && arrayRemoveDuplicateBySort(wall.RightCurves, (cu1: Curve, cu2: Curve) => cu1.Join(cu2) === Status.True);\r\n // }\r\n\r\n SHOW_PERF && console.timeEnd(\"墙体裁剪\");\r\n }\r\n\r\n fb: Flatbush;\r\n boxs: Box3[];\r\n GenFB(trimContours: Contour[])\r\n {\r\n if (trimContours.length === 0) return;\r\n\r\n let fb = new Flatbush(trimContours.length);\r\n this.boxs = [];\r\n\r\n let v = new Vector3(1e-2, 1e-2);\r\n for (let con of trimContours)\r\n {\r\n let box = con.BoundingBox;\r\n box.expandByVector(v);\r\n fb.add(box.min.x, box.min.y, box.max.x, box.max.y);\r\n this.boxs.push(box);\r\n }\r\n fb.finish();\r\n\r\n this.fb = fb;\r\n }\r\n\r\n}\r\n\r\nfunction UpdateStartEndPoint(curve: Curve)\r\n{\r\n let sp = curve[SAVE_SP_KEY];\r\n let ep = curve[SAVE_EP_KEY];\r\n\r\n if (sp && ep)\r\n {\r\n let param1 = curve.GetParamAtPoint(sp);\r\n let param2 = curve.GetParamAtPoint(ep);\r\n\r\n if (curve.ParamOnCurve(param1) && curve.ParamOnCurve(param2) && param1 > param2)\r\n [sp, ep] = [ep, sp];\r\n }\r\n if (sp)\r\n curve.StartPoint = sp;\r\n if (ep)\r\n curve.EndPoint = ep;\r\n}\r\n"],"names":["Vector3","Matrix4","RenderType","Status","UpdateDraw","DuplicateRecordCloning","Box3","Entity","AllObjectData","EraseEntityData","iaop","HistorycRecord","MaterialTableRecord","UVType","PhysicalMaterialRecord","Color","FrontSide","MeshPhysicalMaterial","EntityColorHistoryRecord","equaln","Object3D","FixIndex","Vector2","Quaternion","MathUtils","Shape","Arc","EllipseCurve","LineBasicMaterial","DoubleSide","LineDashedMaterial","MeshBasicMaterial","ShaderMaterial","LineMaterial","BufferGeometry","ShapeGeometry","BufferAttribute","ExtendType","Curve","LineGeometry","Line2","TLine","Plane","Line3","Line","Circle","Polyline","Ellipse","Spline","CatmullRomCurve3","cache","TempPolyline","TShape","Path","Region","BufferGeometryUtils2","LineSegments","Mesh","Hole","GangDrillType","CylinderHole","CylinderBufferGeometry","Float32BufferAttribute","Geometry","ShapeUtils","Face3","SweepSolid","BoxBufferGeometry","InstancedInterleavedBuffer","InterleavedBufferAttribute","HardwareTopline","Board","geom3","intersect","create","DepthType","Flatbush","ExtrudeSolid","ExtrudeGeometry","BoxGeometry","ExtrudeHole","CompositeEntity","HardwareCompositeEntity","clipperLib","RoomBase","RoomHoleBase","RoomHolePolyline","RoomWallLine","WallFaceType","RoomWallBase","RoomWallArc","CreateObjectData","RemoveObjectData","SymbolTable","observable","BlockTable","ObjectCollection","BlockTableRecord","end","ObjectAllDataHistoryRecord","CommandHistoryRecord","CameraSnapshootRecord","GroupTable","HistoricManage","Light","AmbientLight","TAmbientLight","DirectionalLightHelper","SphereBufferGeometry","DirectionalLight","Matrix3","Group","TDirectionalLight","HemisphereLight","THemisphereLight","ProcessingGroupTable","TemplateTable","TextureTableRecord","MirroredRepeatWrapping","Texture","TextureTable","Database","FaceEntity","GroupRecord","TextAligen","Text","VisualSpaceBox","CameraType","OrthographicCamera","PerspectiveCamera","ViewportEntity","Scene","WebGLRenderTarget","Frustum","Cylineder","MeshNormalMaterial","RevolveSolid","Dimension","LineAngularDimension","AlignedDimension","ArcDimension","RadiusDimension","DiameterDimension","LinearDimension","BoxSolid","EntityRef","Point","PointLight","TPointLight","SphereGeometry","BackSide","RectAreaLight","TRectAreaLight","SpotLight","TSpotLight","ConeGeometry","ProcessingGroupRecord","RoomFlatBase","RoomFlatFloor","RoomFlatTop","RoomRegion","TempP","RoomHoleLine","TemplateAction","TemplateFilletAction","TemplateMaterialAction","TemplateParam","Positioning","PositioningClampSpace","PositioningTemporary","TemplateRecord","ThicknessDirection","TempateThicknessAction","TemplateMoveAction","TemplateSetSealAction","TemplateStretchGripAction","TemplateStretchScaleBoxAction","PositioningBoardSpace","TemplateBoardRecord","TemplateBehindBoard","TemplateLatticeRecord","PointsMaterial","Points","Box2","Raycaster","TemplateLayerBoard","TemplateLeftRightBoardRecord","TemplateSizeBoard","TemplateTopBottomBoard","TemplateVerticalBoard","TemplateVisualSpace","TemplateWineRackRecord","ViewportEntity2","JoinType","EndType","polylabel"],"mappings":"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,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;AACjB,IAAA,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;AACnB,IAAA,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;AAChB,IAAA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;AACjB,IAAA,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;AAChB,IAAA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;AACjB,IAAA,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;AAClB,IAAA,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACpB,IAAA,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;AAClB,IAAA,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;AACnB,IAAA,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;AAClB,IAAA,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;AACnB,IAAA,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;AAChB,IAAA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;AACjB,IAAA,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;AAChB,IAAA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;AACjB,IAAA,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;AAClB,IAAA,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACpB,IAAA,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;AAClB,IAAA,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;AACnB,IAAA,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;AACjB,IAAA,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;AACnB,IAAA,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;AAChB,IAAA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;AACjB,IAAA,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;AAChB,IAAA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;AACjB,IAAA,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;AAClB,IAAA,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACpB,IAAA,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;AACjB,IAAA,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;AACnB,IAAA,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;AACjB,IAAA,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;AAClB,IAAA,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;AAChB,IAAA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;AACjB,IAAA,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;AAChB,IAAA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;AACjB,IAAA,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;AACjB,IAAA,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACpB,IAAA,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;AACjB,IAAA,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;AACnB,IAAA,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;AACjB,IAAA,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;AAClB,IAAA,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;AAChB,IAAA,C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AA,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AAClB,IAAA,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACpB,IAAA,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AAClB,IAAA,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACnB,IAAA,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AAClB,IAAA,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACnB,IAAA,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;AAChB,IAAA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;AACjB,IAAA,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;AAChB,IAAA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;AACjB,IAAA,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AAClB,IAAA,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACpB,IAAA,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AAClB,IAAA,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACnB,IAAA,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;AACjB,IAAA,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACnB,IAAA,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;AAChB,IAAA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;AACjB,IAAA,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;AAChB,IAAA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;AACjB,IAAA,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AAClB,IAAA,CAAC,GAAG,EAAE,GAAG,E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AC,EAAE,GAAG,EAAE,GAAG,CAAC;AACjB,IAAA,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;AAClB,IAAA,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;AAChB,IAAA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;AACjB,IAAA,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;AAChB,IAAA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;AACjB,IAAA,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;AAClB,IAAA,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACpB,IAAA,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;AAClB,IAAA,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;AACnB,IAAA,CAAC,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;AACjB,IAAA,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;AACnB,IAAA,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;AAChB,IAAA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;AACjB,IAAA,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;AAChB,IAAA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;AACjB,IAAA,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;AAClB,IAAA,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACpB,IAAA,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;AAClB,IAAA,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;AACnB,IAAA,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;AAClB,IAAA,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;AACnB,IAAA,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;AAChB,IAAA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;AACjB,IAAA,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;AAChB,IAAA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;AACjB,IAAA,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;AAClB,IAAA,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACpB,IAAA,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;AAClB,IAAA,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;AACnB,IAAA,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;AACjB,IAAA,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;AACnB,IAAA,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;AAChB,IAAA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;AACjB,IAAA,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;AAChB,IAAA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;AACjB,IAAA,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;AAClB,IAAA,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACpB,IAAA,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;AACjB,IAAA,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;AACnB,IAAA,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;AACjB,IAAA,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;AAClB,IAAA,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;AAChB,IAAA,CAAC,EAAE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"} \ No newline at end of file +{"version":3,"file":"api.cjs.js","sources":["../src/Geometry/CoordinateSystem.ts","../src/Common/SystemEnum.ts","../src/GraphicsSystem/RenderType.ts","../src/ApplicationServices/HostApplicationServices.ts","../src/Common/Dispose.ts","../src/Common/Status.ts","../src/Geometry/Box.ts","../src/DatabaseServices/AutoRecord.ts","../src/DatabaseServices/CADFactory.ts","../src/DatabaseServices/ObjectId.ts","../src/DatabaseServices/CADFiler.ts","../src/DatabaseServices/AllObjectData.ts","../src/DatabaseServices/EraseEntityData.ts","../src/DatabaseServices/CADObject.ts","../src/DatabaseServices/HistorycRecord.ts","../src/Add-on/testEntity/USE_WORLD_UV.ts","../src/DatabaseServices/SymbolTableRecord.ts","../src/DatabaseServices/MaterialTableRecord.ts","../src/DatabaseServices/PhysicalMaterialRecord.ts","../src/DatabaseServices/Entity/Entity.ts","../src/Common/eval.ts","../src/Common/StoreageKeys.ts","../src/Common/Utils.ts","../src/Geometry/GeUtils.ts","../src/Common/Matrix4Utils.ts","../src/Editor/ObjectSnapMode.ts","../src/Geometry/Orbit.ts","../src/Common/ArrayExt.ts","../src/DatabaseServices/Shape2.ts","../src/Geometry/CreatePolylinePath.ts","../src/GLSL/GoochShader.ts","../src/Common/ColorPalette.ts","../src/Editor/BufferGeometry2GeometryCacheMap.ts","../src/Geometry/BufferGeometryUtils.ts","../src/DatabaseServices/Entity/Curve.ts","../src/DatabaseServices/Entity/DragPointType.ts","../src/Geometry/Plane.ts","../src/DatabaseServices/Entity/Line.ts","../src/DatabaseServices/Entity/Ellipse.ts","../src/DatabaseServices/Entity/Circle.ts","../src/DatabaseServices/SplineConver2Polyline.ts","../src/DatabaseServices/Spline.ts","../src/Geometry/CurveIntersection.ts","../src/Geometry/CurveMap.ts","../src/Geometry/RegionParse.ts","../src/Geometry/CreateContour2.ts","../src/GraphicsSystem/BoolOperateUtils.ts","../src/DatabaseServices/Contour.ts","../src/GraphicsSystem/OffsetPolyline.ts","../src/DatabaseServices/PointInPolyline.ts","../src/DatabaseServices/Entity/Polyline.ts","../src/GraphicsSystem/IntersectWith.ts","../src/DatabaseServices/Entity/Arc.ts","../src/Geometry/Count.ts","../src/Common/CurveUtils.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/DatabaseServices/3DSolid/Hole.ts","../src/DatabaseServices/3DSolid/CylinderHole.ts","../src/UI/Store/BoardInterface.ts","../src/Add-on/DrawDrilling/HoleUtils.ts","../src/Geometry/BoardUVGenerator.ts","../src/Geometry/PointShapeUtils.ts","../src/Common/Toaster.ts","../src/UI/Components/RightPanel/RightPanelInterface.ts","../src/UI/Store/BoardFindInterface.ts","../src/UI/Store/DoorInterface.ts","../src/UI/Store/LatticeInterface.ts","../src/UI/Store/WineRackInterface.ts","../src/Editor/OrderType.ts","../src/Editor/DefaultConfig.ts","../src/Nest/Common/Util.ts","../src/Common/Log.ts","../src/Geometry/SweepGeometry.ts","../src/Geometry/OBB/obb.ts","../src/DatabaseServices/3DSolid/SweepSolid.ts","../src/DatabaseServices/Hardware/HardwareTopline.ts","../src/Add-on/LookOverBoardInfos/LookOverBoardInfosTool.ts","../src/Common/Report.ts","../src/Common/ShowSelectObjects.ts","../src/Geometry/CreateWireframe.ts","../src/Geometry/SimpleExtrudeEdgeGeometry.ts","../src/Common/CSGIntersect.ts","../src/csg/core/math/IsMirrot.ts","../src/csg/core/math/Polygon3.ts","../src/csg/core/Geometry2CSG.ts","../src/Geometry/BSPGroupParse.ts","../src/Geometry/FastOffset.ts","../src/Geometry/ExtrudeMeshGeomBuilder/SplitCurveParams.ts","../src/Geometry/ExtrudeMeshGeomBuilder/ExtrudeEdgeGeometry2.ts","../src/DatabaseServices/Entity/GenUVForWorld.ts","../src/DatabaseServices/Entity/Extrude.ts","../src/DatabaseServices/3DSolid/ExtrudeHole.ts","../src/Common/AddEntityDrawObject.ts","../src/DatabaseServices/Entity/CompositeEntity.ts","../src/DatabaseServices/Hardware/HardwareCompositeEntity.ts","../src/Geometry/DrillParse/Face.ts","../src/Geometry/DrillParse/BoardGetFace.ts","../src/Common/Singleton.ts","../src/GraphicsSystem/ToolPath/OptimizeToolPath.ts","../src/GraphicsSystem/ToolPath/FeedingToolPath.ts","../src/Production/Convert2PtsBul.ts","../src/Production/Product.ts","../src/GraphicsSystem/ParseEdgeSealDir.ts","../src/GraphicsSystem/CalcEdgeSealing.ts","../src/GraphicsSystem/ToolPath/VKnifToolPath.ts","../src/DatabaseServices/Entity/Board.ts","../src/DatabaseServices/Room/ParseService/RangeUtils.ts","../src/DatabaseServices/Room/ParseService/CurveTrim.ts","../src/Geometry/Matrix2.ts","../src/Common/EntityUpdateWrap.ts","../src/Nest/Common/ClipperCpp.ts","../src/DatabaseServices/Room/Entity/RoomBase.ts","../src/DatabaseServices/Room/Entity/Wall/Hole/RoomHoleBase.ts","../src/DatabaseServices/Room/Entity/Wall/Hole/RoomHolePolyline.ts","../src/DatabaseServices/Room/Entity/Wall/WallSnapMode.ts","../src/DatabaseServices/Room/Entity/Wall/RoomWallBase.ts","../src/DatabaseServices/Room/Entity/Wall/RoomWallArc.ts","../src/DatabaseServices/Room/ParseService/Hole/RoomWallPlaceIHoleHelper.ts","../src/Reactor/RoomHoleReactor.ts","../src/Add-on/Purge.ts","../src/DatabaseServices/CreateObjectData.ts","../src/DatabaseServices/RemoveObjectData.ts","../src/DatabaseServices/SymbolTable.ts","../src/DatabaseServices/BlockTable.ts","../src/DatabaseServices/ObjectCollection.ts","../src/DatabaseServices/BlockTableRecord.ts","../src/DatabaseServices/ObjectAllDataHistoryRecord.ts","../src/DatabaseServices/CommandHistoryRecord.ts","../src/DatabaseServices/CameraSnapshoot/CameraSnapshootRecord.ts","../src/DatabaseServices/DeepCloneFiler.ts","../src/DatabaseServices/GroupTable.ts","../src/Editor/CommandState.ts","../src/DatabaseServices/HistoricManage.ts","../src/DatabaseServices/Lights/Light.ts","../src/DatabaseServices/Lights/AmbientLight.ts","../src/DatabaseServices/Lights/SunLightHelper.ts","../src/DatabaseServices/Lights/DirectionalLight.ts","../src/DatabaseServices/Lights/HemisphereLight.ts","../src/DatabaseServices/MaterialTable.ts","../src/DatabaseServices/ProcessingGroup/ProcessingGroupTable.ts","../src/DatabaseServices/Template/TemplateTable.ts","../src/DatabaseServices/Texture.ts","../src/DatabaseServices/TextureTable.ts","../src/DatabaseServices/WblockCloneFiler.ts","../src/DatabaseServices/Database.ts","../src/DatabaseServices/FaceEntity.ts","../src/DatabaseServices/GroupTableRecord.ts","../src/Add-on/DrawBoard/BuildBoardTool.ts","../src/Add-on/LatticeDrawer/LatticeDrawerTool.ts","../src/Geometry/SpaceParse/ISpaceParse.ts","../src/DatabaseServices/Template/Action/TemplateAction.ts","../src/Editor/PromptResult.ts","../src/Add-on/FilletUtils.ts","../src/DatabaseServices/Template/Action/TemplateFilletAction.ts","../src/UI/Components/ApplyGoodInfo.tsx","../src/DatabaseServices/Template/Action/TemplateMaterialAction.ts","../src/DatabaseServices/Template/Param/TemplateParamType.ts","../src/DatabaseServices/Template/Param/TemplateParam.ts","../src/Geometry/SpaceParse/ClampSpaceParse.ts","../src/Geometry/SpaceParse/ClampSpaceParseFix.ts","../src/DatabaseServices/Template/Positioning/Positioning.ts","../src/DatabaseServices/Template/Positioning/PositioningClampSpace.ts","../src/DatabaseServices/Template/Positioning/PositioningTemporary.ts","../src/DatabaseServices/Template/TemplateType.ts","../src/DatabaseServices/Template/TemplateRecord.ts","../src/DatabaseServices/Template/ProgramTempate/TemplateLatticeRecord.ts","../src/Add-on/DrawBoard/BuildTopBottomBoardTool.ts","../src/DatabaseServices/Template/ProgramTempate/TemplateTopBottomBoard.ts","../src/Add-on/DrawWineRack/DrawWinRackTool.ts","../src/Add-on/DrawWineRack/DrawObliqueWineRackTool.ts","../src/Add-on/DrawWineRack/DrawUprightWineRackTool.ts","../src/DatabaseServices/Template/ProgramTempate/TemplateWineRackRecord.ts","../src/Add-on/HideSelect/HideSelectUtils.ts","../src/DatabaseServices/Text/Text.ts","../src/Editor/VisualSpaceBox.ts","../src/GraphicsSystem/CameraUpdate.ts","../src/DatabaseServices/ViewportEntity.ts","../src/DatabaseServices/3DSolid/Cylineder.ts","../src/DatabaseServices/3DSolid/RevolveSolid.ts","../src/DatabaseServices/Dimension/Dimension.ts","../src/DatabaseServices/Dimension/GetDimLineMaterial.ts","../src/DatabaseServices/Dimension/2LineAngularDimension.ts","../src/DatabaseServices/Dimension/AlignedDimension.ts","../src/DatabaseServices/Dimension/ArcDimension.ts","../src/DatabaseServices/Dimension/RadiusDimension.ts","../src/DatabaseServices/Dimension/DiameterDimension.ts","../src/DatabaseServices/Dimension/LinearDimension.ts","../src/DatabaseServices/Entity/BoxSolid.ts","../src/Add-on/testEntity/BoxLine.ts","../src/DatabaseServices/Entity/EntityRef.ts","../src/DatabaseServices/Entity/Point.ts","../src/DatabaseServices/Lights/PointLightHelper.ts","../src/DatabaseServices/Lights/PointLight.ts","../src/DatabaseServices/Lights/RectAreaLightHelper.ts","../src/DatabaseServices/Lights/RectAreaLight.ts","../src/DatabaseServices/Lights/SpotLightHelper.ts","../src/DatabaseServices/Lights/SpotLight.ts","../src/DatabaseServices/ProcessingGroup/ProcessingGroupRecord.ts","../src/DatabaseServices/Room/Entity/Flat/RoomFlatBase.ts","../src/DatabaseServices/Room/Entity/Flat/RoomFlatFloor.ts","../src/DatabaseServices/Room/Entity/Flat/RoomFlatTop.ts","../src/DatabaseServices/Room/Entity/Region/RoomRegion.ts","../src/DatabaseServices/Room/Entity/Wall/Hole/RoomHoleLine.ts","../src/DatabaseServices/Template/Action/TempateThicknessAction.ts","../src/DatabaseServices/Template/Action/TemplateMoveAction.ts","../src/DatabaseServices/Template/Action/TemplateSetSealAction.ts","../src/DatabaseServices/Template/Action/TemplateStretchGripAction.ts","../src/DatabaseServices/Template/Action/TemplateStretchScaleBoxAction.ts","../src/DatabaseServices/Template/Positioning/PositioningBoardSpace.ts","../src/DatabaseServices/Template/ProgramTempate/TemplateBoard.ts","../src/DatabaseServices/Template/ProgramTempate/TemplateBehindBoard.ts","../src/GraphicsSystem/GripScene.ts","../src/Editor/SelectFilter.ts","../src/Editor/SelectBox.ts","../src/Editor/PointPick.ts","../src/Add-on/DrawBoard/ActivityLayerBoardTool.ts","../src/DatabaseServices/Template/ProgramTempate/TemplateLayerBoard.ts","../src/DatabaseServices/Template/ProgramTempate/TemplateLeftRightBoardRecord.ts","../src/DatabaseServices/Template/ProgramTempate/TemplateSizeBoard.ts","../src/DatabaseServices/Template/ProgramTempate/TemplateVerticalBoard.ts","../src/DatabaseServices/Template/ProgramTempate/TemplateVisualSpace.ts","../src/DatabaseServices/ViewportEntity/ViewportEntity2.ts","../src/DatabaseServices/Room/Entity/Wall/RoomWallLine.ts","../src/DatabaseServices/Room/ParseService/GetCurveParam.ts","../src/Nest/Common/Area.ts","../src/Nest/Common/Vector2.ts","../src/Nest/Common/Box2.ts","../src/Nest/Core/Path.ts","../src/Nest/Core/NestCache.ts","../src/Nest/Converter/Path2Polyline.ts","../src/Nest/Converter/Curves2Points.ts","../src/DatabaseServices/Room/ParseService/ParseRegionTextPos.ts","../src/DatabaseServices/Room/ParseService/RegionReplacement.ts","../src/DatabaseServices/Room/ParseService/RoomRegionParse.ts","../src/DatabaseServices/Room/ParseService/RoomWallExtendAndBreak.ts","../src/DatabaseServices/Room/ParseService/RoomWallParse.ts"],"sourcesContent":["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(m = new Matrix4): Matrix4\r\n {\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","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\r\nexport enum FractionDigitsType\r\n{\r\n zero = 0,\r\n one = 1,\r\n two = 2,\r\n three = 3,\r\n four = 4,\r\n five = 5,\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 PlaceFace = 8,//排版面\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\r\nexport function IsPhysical(renderType: RenderType)\r\n{\r\n return renderType === RenderType.Physical || renderType === RenderType.Physical2 || renderType === RenderType.PhysicalPrint || renderType === RenderType.Physical2Print;\r\n}\r\n","import { MeshBasicMaterial, MeshStandardMaterial, Texture } from 'three';\r\nimport { FractionDigitsType } from '../Common/SystemEnum';\r\nimport { ICursorConfig } from '../Editor/ICursorConfig';\r\nimport { RenderType } from '../GraphicsSystem/RenderType';\r\nimport { DrillingOption } from '../UI/Store/drillInterface';\r\n\r\nexport class IHostApplicationServices\r\n{\r\n DefaultMeshMaterial?: MeshBasicMaterial | MeshStandardMaterial;\r\n @ProxyValue isShowLightShadow: boolean = true;//灯光阴影 (除太阳光外)\r\n ShowHistoryLog: boolean = true;\r\n\r\n @ProxyValue Physical2EdgeColor = 7;//真实视图带线框的线框颜色 默认白色\r\n @ProxyValue ConceptualEdgeColor = 7;//概念线框的颜色\r\n\r\n DrawWallBottomFace = false;//绘制底面\r\n\r\n private __ProxyObject__: any;//代理对象,当代理对象存在时,获取内部的值指向代理对象\r\n static __ProxyKeys__: string[] = [];//代理对象,当代理对象存在时,获取内部的值指向代理对象\r\n get ProxyObject() { return this.__ProxyObject__; }\r\n set ProxyObject(obj: any)\r\n {\r\n this.__ProxyObject__ = obj;\r\n\r\n for (let key of IHostApplicationServices.__ProxyKeys__)\r\n {\r\n let v = this.__ProxyObject__[key];\r\n if (v === undefined)\r\n throw \"程序内部错误:未能代理变量!\";\r\n }\r\n }\r\n\r\n //#region _RenderType 渲染类型\r\n @ProxyValue _renderType: RenderType = RenderType.Wireframe;\r\n //#endregion\r\n\r\n //#region 排钻数据\r\n @ProxyValue DrillConfigs: Map = new Map;\r\n //#endregion\r\n\r\n //#region 开启排钻反应器\r\n @ProxyValue openDrillingReactor = true;\r\n //#endregion\r\n\r\n //#region 封边数据\r\n @ProxyValue sealingColorMap: [string, string][] = [];\r\n //#endregion\r\n\r\n //#endregion 显示纹路\r\n @ProxyValue showLines = false;\r\n //#endregion\r\n\r\n //#region\r\n @ProxyValue uese: string;\r\n //#endregion\r\n\r\n //#region 偏心轮过滤\r\n @ProxyValue forceFilterPxl: boolean = false;\r\n //#endregion\r\n\r\n @ProxyValue 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 statTk: false,//统计通孔排钻\r\n statSt: false,//统计双头排钻\r\n };\r\n\r\n @ProxyValue viewSize = {\r\n minViewHeight: 1e-3,\r\n maxViewHeight: 3e6,\r\n zoomSpeed: 0.6\r\n };\r\n\r\n @ProxyValue cursorSize: ICursorConfig = {\r\n D2: 1000,\r\n D3: 100,\r\n SquareSize: 10,\r\n };\r\n\r\n @ProxyValue dimTextHeight = 60;\r\n @ProxyValue lineWidth = 2; //打印线框\r\n @ProxyValue fractionDigitsType: FractionDigitsType = FractionDigitsType.two;\r\n\r\n private constructor() { };\r\n\r\n private static _SingleInstance: IHostApplicationServices;\r\n static GetInstance(): IHostApplicationServices\r\n {\r\n if (this._SingleInstance) return this._SingleInstance;\r\n this._SingleInstance = new IHostApplicationServices;\r\n return this._SingleInstance;\r\n }\r\n\r\n //加载贴图,将在index.ts中设置实现的函数\r\n async LoadDefaultExr(): Promise { return; }\r\n async LoadMetalEnv(): Promise { return; }\r\n}\r\n\r\nexport let HostApplicationServices = IHostApplicationServices.GetInstance();\r\n\r\n\r\n//将属性字段指向代理对象\r\nfunction ProxyValue(\r\n target: any,\r\n propertyKey: string,\r\n descriptor?: PropertyDecorator)\r\n{\r\n let privateKey = '__' + propertyKey;\r\n IHostApplicationServices.__ProxyKeys__.push(propertyKey);\r\n\r\n Object.defineProperty(target, propertyKey,\r\n {\r\n set: function (value)\r\n {\r\n if (this.ProxyObject)\r\n this.ProxyObject[propertyKey] = value;\r\n else\r\n this[privateKey] = value;\r\n },\r\n get: function ()\r\n {\r\n if (this.ProxyObject)\r\n return this.ProxyObject[propertyKey];\r\n return this[privateKey];\r\n },\r\n enumerable: true,\r\n configurable: true\r\n }\r\n );\r\n}\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","\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","import { Box3, Vector3 } 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 BoxIsSolid(this, 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\r\nlet size = new Vector3;\r\nexport function BoxIsSolid(box: Box3, minSize = 1)\r\n{\r\n box.getSize(size);\r\n return size.x > minSize && size.y > minSize && size.z > minSize;\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 * ! 仅在{数组}或者{值}类型上使用,如果是Object,请使用AutoRecordObject\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 // arr.length = value.length;\r\n // for (let i = 0; i < value.length; i++)\r\n // arr[i] = value[i];\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\r\n\r\nexport function AutoRecordObject(\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 Object)\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 return Reflect.get(target, key, receiver);\r\n }\r\n });\r\n }\r\n else\r\n {\r\n let obj = this[privateKey] as any;\r\n for (let key in value)\r\n {\r\n if (obj[key] !== value[key])\r\n {\r\n this.WriteAllObjectRecord();\r\n obj[key] = value[key];\r\n }\r\n }\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","\r\n//const UE_REX_DEL = /_.*/g;\r\n\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.replace(UE_REX_DEL, \"\"), C);\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 { 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 _Object?: T) { }\r\n\r\n get IsErase(): boolean\r\n {\r\n return !this._Object || this._Object.IsErase;\r\n }\r\n\r\n set Object(obj: T)\r\n {\r\n this._Object = obj;\r\n }\r\n get Object(): T | undefined\r\n {\r\n return this._Object;\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 { Vec3 } from '../Geometry/IVec3';\r\nimport { CADFactory } from './CADFactory';\r\nimport { CADObject } from './CADObject';\r\nimport { Database } from './Database';\r\nimport { Entity } from './Entity/Entity';\r\nimport { ISerialize } from './ISerialize';\r\nimport { ObjectId } from './ObjectId';\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 if (!obj)\r\n console.error(\"未注册类名:\", className);\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 WriteVec3(v3: Vec3)\r\n {\r\n this._datas.push(v3.x, v3.y, v3.z);\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)// id?.Object 为什么没有这么写? 这么写会精简图纸,但是不确定会不会引发新的问题? 其他地方有没有可能依赖这个特性实现一些功能? 比如排钻,如果排钻被删除,我们依然知道排钻的顺序?(曾经拥有?) 暂时不优化似乎也没事?\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 { 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","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 if (this.objectId)\r\n this.objectId.Object = undefined;//解除绑定(关联bug:绘制关联切割板后删除切割板,在pu时调用了这个,此时obj被删除但是还会被拷贝,导致错误崩溃)\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() as ObjectId;\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 let id = file.ReadObjectId() as ObjectId;\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) 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 f.database = this._db;//这样保证了关联的数据(例如材质)\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 { Factory } from './CADFactory';\r\nimport { CADFiler } from './CADFiler';\r\nimport { ISerialize } from './ISerialize';\r\n\r\n/**\r\n * 历史记录,用于撤销和重做的数据.\r\n */\r\n@Factory\r\nexport class HistorycRecord\r\n{\r\n //指定撤销时所需要的数据\r\n undoData: ISerialize;\r\n //制定重做时所需要的数据\r\n redoData: ISerialize;\r\n userData: ISerialize;\r\n\r\n //#region -------------------------File-------------------------\r\n //对象应该实现dataIn和DataOut的方法,为了对象的序列化和反序列化\r\n\r\n //对象从文件中读取数据,初始化自身\r\n ReadFile(file: CADFiler)\r\n {\r\n let ver = file.Read();\r\n this.undoData = file.ReadObject();\r\n this.redoData = file.ReadObject();\r\n this.userData = file.ReadObject();\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(1);\r\n file.WriteObject(this.undoData);\r\n file.WriteObject(this.redoData);\r\n file.WriteObject(this.userData);\r\n }\r\n //#endregion\r\n}\r\n","\r\nexport const USE_WORLD_UV = \"USE_WORLD_UV\";\r\nexport const U_WORLD_REP = \"u_w_rep\";\r\nexport const V_WORLD_REP = \"v_w_rep\";\r\n\r\nexport const U_WORLD_MOVE = \"u_w_move\";\r\nexport const V_WORLD_MOVE = \"v_w_move\";\r\n\r\nexport const U_WORLD_RO = \"v_w_ro\";\r\n\r\nexport const U_REP = \"u_rep\";\r\nexport const V_REP = \"v_rep\";\r\n\r\nexport const U_MOVE = \"u_move\";\r\nexport const V_MOVE = \"v_move\";\r\n\r\nexport const U_RO = \"v_ro\";\r\n","import { CADObject } from \"./CADObject\";\r\nimport { CADFiler } from \"./CADFiler\";\r\nimport { SymbolTable } from \"./SymbolTable\";\r\nimport { Status } from \"../Common/Status\";\r\n\r\nexport class SymbolTableRecord extends CADObject\r\n{\r\n protected name: string = \"\";\r\n get Name()\r\n {\r\n return this.name;\r\n }\r\n set Name(name: string)\r\n {\r\n if (this.name === name) return;\r\n this.WriteAllObjectRecord();\r\n if (this.Owner)\r\n {\r\n let symbolTable = this.Owner.Object as SymbolTable;\r\n if (!symbolTable.ChangeRecordName(this, name))\r\n return;\r\n }\r\n this.name = name;\r\n }\r\n\r\n Add(obj: CADObject, isCheckObjectCleanly = true): Status\r\n {\r\n return Status.False;\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.name);\r\n }\r\n\r\n ReadFile(file: CADFiler)\r\n {\r\n super.ReadFile(file);\r\n file.Read();\r\n this.name = file.Read();\r\n }\r\n\r\n}\r\n","import { SymbolTableRecord } from \"./SymbolTableRecord\";\r\nimport { Factory } from \"./CADFactory\";\r\n\r\n@Factory\r\nexport class MaterialTableRecord extends SymbolTableRecord\r\n{\r\n}\r\n","import { Color, FrontSide, MeshPhysicalMaterial, Side } from \"three\";\r\nimport { USE_WORLD_UV, U_WORLD_MOVE, U_WORLD_REP, U_WORLD_RO, V_WORLD_MOVE, V_WORLD_REP } from \"../Add-on/testEntity/USE_WORLD_UV\";\r\nimport { HostApplicationServices } from \"../ApplicationServices/HostApplicationServices\";\r\nimport { AutoRecord } from \"./AutoRecord\";\r\nimport { Factory } from \"./CADFactory\";\r\nimport { CADFiler } from \"./CADFiler\";\r\nimport { MaterialType } from \"./IMaterialDefaultParam\";\r\nimport { MaterialTableRecord } from \"./MaterialTableRecord\";\r\nimport { ObjectId } from \"./ObjectId\";\r\nimport { TextureTableRecord } from \"./Texture\";\r\n\r\n\r\nexport interface IGoodProps\r\n{\r\n name: string;\r\n material: string;\r\n color: string;\r\n}\r\n\r\nexport enum UVType\r\n{\r\n LocalUV = 0,\r\n WorldUV = 1,\r\n}\r\n\r\n\r\n//有关于pbr材质的属性解释说明: https://knowledge.autodesk.com/zh-hans/support/3ds-max/learn-explore/caas/CloudHelp/cloudhelp/2021/CHS/3DSMax-Lighting-Shading/files/GUID-18087194-B2A6-43EF-9B80-8FD1736FAE52-htm.html\r\n\r\n@Factory\r\nexport class PhysicalMaterialRecord extends MaterialTableRecord\r\n{\r\n @AutoRecord type: MaterialType = \"木纹\";\r\n @AutoRecord ref: string = \"\";//参考材质,当存在这个变量时,使用ue材质\r\n\r\n //基础色\r\n @AutoRecord color: string = \"#ffffff\";//基础色\r\n //#region 基础色附加 默认折叠\r\n @AutoRecord baseColorLuminance = 0;//基础色亮度 默认0 范围±1\r\n @AutoRecord baseColorLightColor = new Color(0.5, 0.5, 0.5);//基础色_亮部颜色 默认0.5灰色 范围RGB颜色\r\n @AutoRecord baseColorDarkColor = new Color(0, 0, 0);//基础色_暗部颜色 默认 0黑色 范围RGB颜色\r\n @AutoRecord baseColorSaturability = 1;//基础色饱和度 默认1 范围0-10;\r\n //#endregion\r\n\r\n //透明\r\n @AutoRecord transparent: boolean = false; //透明度 0-1\r\n @AutoRecord opacity: number = 1;//不透明度.\r\n //#region 透明度附加 默认折叠\r\n @AutoRecord opacityContrast = 1; //不透明度对比 默认1\r\n @AutoRecord opacityBorder = 1; //不透明度边界 默认1\r\n @AutoRecord opacityMaximum = 1; //不透明度最大值 默认1\r\n @AutoRecord opacityMinimum = 0.3; // 不透明度最小值 默认0.3\r\n //#endregion\r\n\r\n //折射\r\n @AutoRecord refraction = 1; //玻璃折射 默认1\r\n\r\n @AutoRecord matalness: number = 0;//金属性 0-1\r\n @AutoRecord bumpScale: number = 0;//凹凸比例 UE:法线强度 默认0 范围0-20\r\n @AutoRecord roughness: number = 0.2; //粗糙度 0-1\r\n @AutoRecord specular: number = 1; //高光 范围0-1\r\n @AutoRecord selfLuminous: number = 0;//自发光强度 0-200\r\n\r\n @AutoRecord useMap: boolean = true;\r\n @AutoRecord map: ObjectId;//纹理贴图\r\n //#region 法线贴图和粗糙贴图默认折叠\r\n @AutoRecord useBumpMap: boolean = true;\r\n @AutoRecord bumpMap: ObjectId;//凹凸贴图\r\n @AutoRecord useRoughnessMap: boolean = true;\r\n @AutoRecord roughnessMap: ObjectId;//粗糙贴图\r\n //#endregion\r\n\r\n @AutoRecord IsFull: boolean = false;//完全平铺板(此时修改板的uv)\r\n @AutoRecord side: Side = FrontSide; //双面\r\n\r\n @AutoRecord UVType = UVType.LocalUV;\r\n\r\n\r\n //#region 菲涅尔 默认折叠(绒毛?) 反射?(皮革 布料中可用)\r\n @AutoRecord fresnelPO = 1;//菲涅尔对比度 默认1 范围-1至10\r\n @AutoRecord fresnelST = 1;//菲涅尔强度 默认1 范围0至20\r\n @AutoRecord fresnelLuminance = 1;//菲涅尔亮度 默认1 范围0至20\r\n @AutoRecord fresnelLightColor = new Color(1, 1, 1);//菲涅尔亮部颜色 默认白色 范围RGB\r\n @AutoRecord fresnelDarkColor = new Color(1, 1, 1);//菲涅尔暗部颜色 默认白色 范围RGB\r\n //#endregion\r\n\r\n @AutoRecord sharpen = 1;//锐化 默认1 范围0-20 默认折叠\r\n\r\n get UseWorldUV() { return this.UVType === UVType.WorldUV; }\r\n set UseWorldUV(b: boolean) { this.UVType = b ? UVType.WorldUV : UVType.LocalUV; }\r\n\r\n @AutoRecord UWroldRep = 1;\r\n @AutoRecord VWroldRep = 1;\r\n @AutoRecord UWroldRo = 0;\r\n @AutoRecord UWorldMove = 0;\r\n @AutoRecord VWorldMove = 0;\r\n\r\n @AutoRecord depthTest: boolean = true;//深度测试(默认true)(弃用(不在UI上显示)\r\n\r\n private _goodsInfo: IGoodProps = {\r\n name: \"\",\r\n color: \"\",\r\n material: \"\",\r\n };\r\n private material = new MeshPhysicalMaterial({});\r\n async Update()\r\n {\r\n this.material[USE_WORLD_UV] = this.UseWorldUV;\r\n if (this.material[USE_WORLD_UV])\r\n {\r\n this.material[U_WORLD_REP] = this.UWroldRep;\r\n this.material[V_WORLD_REP] = this.VWroldRep;\r\n\r\n this.material[U_WORLD_RO] = this.UWroldRo;\r\n\r\n this.material[U_WORLD_MOVE] = this.UWorldMove;\r\n this.material[V_WORLD_MOVE] = this.VWorldMove;\r\n }\r\n\r\n if (!this.material.color)\r\n this.material.color = new Color(this.color);\r\n else\r\n this.material.color.set(this.color);\r\n\r\n this.material.transparent = this.transparent;\r\n\r\n if (this.type === \"玻璃\")\r\n {\r\n this.material.metalness = 0.2;\r\n this.material.reflectivity = Math.abs(this.refraction);\r\n } else\r\n this.material.metalness = this.matalness;\r\n\r\n this.material.side = this.side;\r\n\r\n this.material.opacity = Math.max(0.1, this.opacity);\r\n this.material.depthTest = this.depthTest;\r\n this.material.bumpScale = this.bumpScale;\r\n this.material.roughness = this.roughness;\r\n\r\n\r\n if (this.material.metalness > 0.9)\r\n HostApplicationServices.LoadMetalEnv().then(env =>\r\n {\r\n this.material.envMap = env;\r\n this.material.needsUpdate = true;\r\n });\r\n else\r\n HostApplicationServices.LoadDefaultExr().then(exr =>\r\n {\r\n this.material.envMap = exr;\r\n this.material.needsUpdate = true;\r\n });\r\n\r\n this.material.needsUpdate = true;\r\n if (this.useMap && this.map && !this.map.IsErase)\r\n {\r\n let map = this.map.Object as TextureTableRecord;\r\n let texture = map.GetThreeTexture();\r\n await map.WaitUpdate();\r\n this.material.map = texture;\r\n this.material.needsUpdate = true;\r\n }\r\n else\r\n this.material.map = undefined;\r\n\r\n if (this.type === \"自发光\")\r\n {\r\n this.material.emissiveIntensity = this.selfLuminous;\r\n this.material.emissive.copy(this.material.color);\r\n this.material.emissiveMap = this.material.map;\r\n }\r\n else\r\n {\r\n this.material.emissiveIntensity = 1;\r\n this.material.emissive.setRGB(0, 0, 0);\r\n this.material.emissiveMap = undefined;\r\n }\r\n\r\n if (this.useMap && this.useBumpMap && this.bumpMap && !this.bumpMap.IsErase)\r\n {\r\n let map = this.bumpMap.Object as TextureTableRecord;\r\n let texture = map.GetThreeTexture();\r\n await map.WaitUpdate();\r\n this.material.bumpMap = texture;\r\n this.material.needsUpdate = true;\r\n }\r\n else\r\n this.material.bumpMap = undefined;\r\n\r\n if (this.useMap && this.roughnessMap && this.roughnessMap && !this.roughnessMap.IsErase)\r\n {\r\n let map = this.roughnessMap.Object as TextureTableRecord;\r\n let texture = map.GetThreeTexture();\r\n await map.WaitUpdate();\r\n this.material.roughnessMap = texture;\r\n this.material.needsUpdate = true;\r\n }\r\n else\r\n this.material.roughnessMap = undefined;\r\n\r\n this.material.needsUpdate = true;\r\n\r\n this.AsyncUpdated();\r\n }\r\n get Material(): MeshPhysicalMaterial\r\n {\r\n return this.material;\r\n }\r\n get GoodsInfo()\r\n {\r\n return this._goodsInfo;\r\n }\r\n set GoodsInfo(info: IGoodProps)\r\n {\r\n if (info.color === this._goodsInfo.color\r\n && info.material === this._goodsInfo.material\r\n && info.name === this._goodsInfo.name\r\n )\r\n return;\r\n\r\n this.WriteAllObjectRecord();\r\n Object.assign(this._goodsInfo, info);\r\n }\r\n //#region -------------------------File-------------------------\r\n ReadFile(file: CADFiler)\r\n {\r\n super.ReadFile(file);\r\n let ver = file.Read();\r\n if (ver === 1)\r\n this.name = file.Read();\r\n this.color = file.Read();\r\n this.transparent = file.Read();\r\n this.matalness = file.Read();\r\n this.opacity = file.Read();\r\n this.depthTest = file.Read();\r\n this.map = file.ReadObjectId();\r\n this.bumpMap = file.ReadObjectId();\r\n this.bumpScale = file.Read();\r\n this.roughnessMap = file.ReadObjectId();\r\n this.roughness = file.Read();\r\n this.useMap = file.Read();\r\n this.useBumpMap = file.Read();\r\n this.useRoughnessMap = file.Read();\r\n if (ver <= 2)\r\n file.Read();\r\n if (ver > 2)\r\n {\r\n this._goodsInfo.name = file.Read();\r\n this._goodsInfo.material = file.Read();\r\n this._goodsInfo.color = file.Read();\r\n }\r\n\r\n if (ver > 3)\r\n this.IsFull = file.Read();\r\n\r\n if (ver > 4)\r\n {\r\n this.baseColorLuminance = file.Read();\r\n this.baseColorLightColor.r = file.Read();\r\n this.baseColorLightColor.g = file.Read();\r\n this.baseColorLightColor.b = file.Read();\r\n\r\n this.baseColorDarkColor.r = file.Read();\r\n this.baseColorDarkColor.g = file.Read();\r\n this.baseColorDarkColor.b = file.Read();\r\n\r\n this.baseColorSaturability = file.Read();\r\n\r\n this.opacityContrast = file.Read();\r\n this.opacityBorder = file.Read();\r\n this.opacityMaximum = file.Read();\r\n this.opacityMinimum = file.Read();\r\n\r\n this.specular = file.Read();\r\n this.selfLuminous = file.Read();\r\n\r\n this.fresnelPO = file.Read();\r\n this.fresnelST = file.Read();\r\n this.fresnelLuminance = file.Read();\r\n\r\n this.fresnelLightColor.r = file.Read();\r\n this.fresnelLightColor.g = file.Read();\r\n this.fresnelLightColor.b = file.Read();\r\n\r\n this.fresnelDarkColor.r = file.Read();\r\n this.fresnelDarkColor.g = file.Read();\r\n this.fresnelDarkColor.b = file.Read();\r\n\r\n this.sharpen = file.Read();\r\n\r\n if (ver > 5)\r\n this.UVType = file.Read();\r\n\r\n if (ver > 6)\r\n this.type = file.Read();\r\n if (ver > 7)\r\n this.ref = file.Read();\r\n\r\n if (ver > 8)\r\n {\r\n this.UWroldRep = file.Read();\r\n this.VWroldRep = file.Read();\r\n this.UWroldRo = file.Read();\r\n this.UWorldMove = file.Read();\r\n this.VWorldMove = file.Read();\r\n }\r\n if (ver > 9)\r\n {\r\n this.refraction = file.Read();\r\n this.side = file.Read();\r\n }\r\n }\r\n\r\n this.Update();\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.color);\r\n file.Write(this.transparent);\r\n file.Write(this.matalness);\r\n file.Write(this.opacity);\r\n file.Write(this.depthTest);\r\n file.WriteHardObjectId(this.map);\r\n file.WriteHardObjectId(this.bumpMap);\r\n file.Write(this.bumpScale);\r\n file.WriteHardObjectId(this.roughnessMap);\r\n file.Write(this.roughness);\r\n file.Write(this.useMap);\r\n file.Write(this.useBumpMap);\r\n file.Write(this.useRoughnessMap);\r\n file.Write(this._goodsInfo.name);\r\n file.Write(this._goodsInfo.material);\r\n file.Write(this._goodsInfo.color);\r\n file.Write(this.IsFull);\r\n\r\n //ver 5\r\n file.Write(this.baseColorLuminance);\r\n file.Write(this.baseColorLightColor.r);\r\n file.Write(this.baseColorLightColor.g);\r\n file.Write(this.baseColorLightColor.b);\r\n\r\n file.Write(this.baseColorDarkColor.r);\r\n file.Write(this.baseColorDarkColor.g);\r\n file.Write(this.baseColorDarkColor.b);\r\n\r\n file.Write(this.baseColorSaturability);\r\n\r\n file.Write(this.opacityContrast);\r\n file.Write(this.opacityBorder);\r\n file.Write(this.opacityMaximum);\r\n file.Write(this.opacityMinimum);\r\n\r\n file.Write(this.specular);\r\n file.Write(this.selfLuminous);\r\n\r\n file.Write(this.fresnelPO);\r\n file.Write(this.fresnelST);\r\n file.Write(this.fresnelLuminance);\r\n\r\n file.Write(this.fresnelLightColor.r);\r\n file.Write(this.fresnelLightColor.g);\r\n file.Write(this.fresnelLightColor.b);\r\n\r\n file.Write(this.fresnelDarkColor.r);\r\n file.Write(this.fresnelDarkColor.g);\r\n file.Write(this.fresnelDarkColor.b);\r\n\r\n file.Write(this.sharpen);\r\n\r\n //ver 6\r\n file.Write(this.UVType);\r\n\r\n //ver 7\r\n file.Write(this.type);\r\n\r\n //ver8\r\n file.Write(this.ref);\r\n\r\n //ver9\r\n file.Write(this.UWroldRep);\r\n file.Write(this.VWroldRep);\r\n file.Write(this.UWroldRo);\r\n file.Write(this.UWorldMove);\r\n file.Write(this.VWorldMove);\r\n\r\n //ver10\r\n file.Write(this.refraction);\r\n file.Write(this.side);\r\n }\r\n //#endregion\r\n}\r\n","import { 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 { Box3Ext } from '../../Geometry/Box';\r\nimport { equaln, equalv3, GetBox, IdentityMtx4, UpdateBoundingSphere } from '../../Geometry/GeUtils';\r\nimport { Vec3 } from '../../Geometry/IVec3';\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 { HistorycRecord } from '../HistorycRecord';\r\nimport { ISerialize } from '../ISerialize';\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 HasEdgeRenderType = false;//拥有封边检查绘制模式\r\n protected HasPlaceFaceRenderType = false;//拥有排版面绘制模式\r\n\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 CacheDrawObject() { return this._CacheDrawObject; }\r\n\r\n get SpaceCSNoClone() { return this._SpaceOCS; }\r\n get SpaceOCS()\r\n {\r\n return this._SpaceOCS.clone();\r\n }\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 get SpaceOCSInv()\r\n {\r\n return new Matrix4().getInverse(this._SpaceOCS);\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 CopyInRenderTpye: RenderType; //记录在哪种RenderType下copy的\r\n set Material(materialId: ObjectId)\r\n {\r\n if (materialId === this._MaterialId) return;\r\n\r\n if (this._db && materialId?.Object)//我们放宽校验,当图形未加入到图纸时,我们允许它任意设置材质\r\n {\r\n if (!(materialId.Object instanceof PhysicalMaterialRecord))\r\n throw \"程序内部错误!设置材质错误:该对象不是材质\";\r\n\r\n if (materialId.Object.Db !== this.Db)\r\n throw \"程序内部错误!设置材质错误:不同图纸间材质\";\r\n }\r\n\r\n this.WriteAllObjectRecord();\r\n this._MaterialId = materialId;\r\n for (let [type, obj] of this._CacheDrawObject)\r\n this.UpdateDrawObjectMaterial(type, obj);\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 let undoRec = this.UndoRecord();\r\n if (undoRec)\r\n {\r\n let hisRec = new HistorycRecord();\r\n hisRec.redoData = new EntityColorHistoryRecord(color);\r\n hisRec.undoData = new EntityColorHistoryRecord(this._Color);\r\n undoRec.WriteObjectHistoryPath(this, hisRec);\r\n }\r\n\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()\r\n {\r\n for (let [, obj] of this._CacheDrawObject)\r\n return GetBox(obj);\r\n return GetBox(this.GetDrawObjectFromRenderType());\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 Move(v: Vec3)\r\n {\r\n if (equaln(v.x, 0) && equaln(v.y, 0) && equaln(v.z, 0)) return;\r\n\r\n this.WriteAllObjectRecord();\r\n\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 this._SpaceOCS.elements[12] += v.x;\r\n this._SpaceOCS.elements[13] += v.y;\r\n this._SpaceOCS.elements[14] += v.z;\r\n this.Update(UpdateDraw.Matrix);\r\n return this;\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 get Z() { return this._Matrix.elements[14]; }\r\n set Z(z: number)\r\n {\r\n if (equaln(this.Z, z)) return;\r\n this.Move({ x: 0, y: 0, z: z - this.Z });\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.Move({ x: 0, y: 0, z: -this.Z });\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\r\n protected get CaseShadow()\r\n {\r\n if (!this.MeshMaterial) return true;\r\n return !this.MeshMaterial.transparent || this.MeshMaterial.opacity === 1;\r\n }\r\n\r\n protected get ReceiveShadow()\r\n {\r\n return this.CaseShadow;\r\n }\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 = HostApplicationServices._renderType;\r\n let obj = this.GetDrawObjectFromRenderType(HostApplicationServices._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 if (renderType === RenderType.Edge && !this.HasEdgeRenderType)\r\n renderType = RenderType.Conceptual;\r\n if (renderType === RenderType.PlaceFace && !this.HasPlaceFaceRenderType)\r\n renderType = RenderType.Wireframe;\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 {\r\n this.DeferUpdate();\r\n // if (this.__ReadFileIng__) //!警告\r\n // console.error(\"在读取文件时更新实体的显示!\");\r\n }\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(HostApplicationServices._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 static _xa = new Vector3;\r\n static _ya = new Vector3;\r\n static _za = new Vector3;\r\n /**\r\n * 使用统一的方法设置对象的矩阵.\r\n * 需要对缩放矩形进行重载.避免对象矩阵不是单位矩阵\r\n */\r\n ApplyMatrix(m: Matrix4): this\r\n {\r\n this.WriteAllObjectRecord();\r\n\r\n m.extractBasis(Entity._xa, Entity._ya, Entity._za);\r\n if (\r\n equaln(Entity._xa.lengthSq(), 1, 1e-4) &&\r\n equaln(Entity._ya.lengthSq(), 1, 1e-4) &&\r\n equaln(Entity._za.lengthSq(), 1, 1e-4)\r\n )\r\n {\r\n this._Matrix.multiplyMatrices(m, this._Matrix);\r\n this._SpaceOCS.multiplyMatrices(m, this._SpaceOCS);\r\n if (!equalv3(Entity._xa.cross(Entity._ya).normalize(), Entity._za))\r\n this.ApplyMirrorMatrix(m);\r\n }\r\n else\r\n this.ApplyScaleMatrix(m);\r\n this.Update(UpdateDraw.Matrix);\r\n return this;\r\n }\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 /**\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 GetGripPoints(): Vector3[]\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 GetStretchPoints(): Array\r\n {\r\n return [];\r\n }\r\n\r\n /**\r\n * 拉伸夹点,用于Stretch命令\r\n * @param {Array} indexList 拉伸点索引列表.\r\n * @param {Vector3} vec 移动向量\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 override 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.__ReadFileIng__ = false;\r\n this.Update();\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 {\r\n let id = file.ReadHardObjectId();\r\n if (id) this.ProcessingGroupList.push(id);\r\n }\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 if (undoData instanceof EntityColorHistoryRecord)\r\n this.ColorIndex = undoData.color;\r\n }\r\n\r\n override 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\r\n@Factory\r\nexport class EntityColorHistoryRecord implements ISerialize\r\n{\r\n constructor(public color: number) { }\r\n ReadFile(file: CADFiler): this\r\n {\r\n this.color = file.Read();\r\n return this;\r\n }\r\n WriteFile(file: CADFiler): this\r\n {\r\n file.Write(this.color);\r\n return this;\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, defaultParam);\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 HistoryWs = \"HistoryWs\",\r\n}\r\n","import { Object3D } from \"three\";\r\nimport { Entity } from \"../DatabaseServices/Entity/Entity\";\r\nimport { ObjectId } from \"../DatabaseServices/ObjectId\";\r\nimport { equaln } from \"../Geometry/GeUtils\";\r\nimport { safeEval } from \"./eval\";\r\nimport { StoreageKeys } from \"./StoreageKeys\";\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 (Math.abs(v) < Math.pow(0.1, fractionDigits) * 0.49) return \"0\";\r\n if (!fractionDigits)\r\n return v.toFixed(0);\r\n else\r\n return v.toFixed(fractionDigits).replace(/[.]?0+$/, \"\");\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\nimport { Vec3 } from './IVec3';\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\nexport const ZAxisN = new Vector3(0, 0, -1);\r\n\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: Vec3, v2: Vec3, 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 * @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 * @param {Vector3} v1\r\n * @param {Vector3} v2\r\n * @param {Vector3} [ref] 参考向量,如果为世界坐标系则为0,0,1\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\nlet tempBox = new Box3();\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 = false): 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 //@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 tempBox.copy(geo.boundingBox).applyMatrix4(o.matrixWorld);\r\n box.union(tempBox);\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 {\r\n geo.computeBoundingSphere();\r\n geo.computeBoundingBox();//样条线更新位置和更新点位置后,无法被选中\r\n }\r\n}\r\n\r\n\r\nexport type compareVectorFn = (v1: Vector, v2: Vector) => 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 ComparePointFnGenerate(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: Vector): 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, Quaternion, 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} mtx 矩阵\r\n * @param {number} col 列索引,0x 1y 2z 3org\r\n * @param {Vector3} v 向量或点\r\n */\r\nexport function SetMtxVector(mtx: Matrix4, col: number, v: Vector3)\r\n{\r\n let index = col * 4;\r\n mtx.elements[index] = v.x;\r\n mtx.elements[index + 1] = v.y;\r\n mtx.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 scaleMtx = new Matrix4().makeScale(scale, scale, scale);\r\n if (center) scaleMtx.setPosition(center.clone().multiplyScalar(1 - scale));\r\n return scaleMtx;\r\n}\r\n\r\n//缩放矩阵 不等比例\r\nexport function MakeScaleMatrix(scaleX: number, scaleY: number, scaleZ: number, center?: Vector3)\r\n{\r\n let scaleMtx = new Matrix4().makeScale(scaleX, scaleY, scaleZ);\r\n if (center) scaleMtx.setPosition(center.clone().applyMatrix4(scaleMtx).sub(center).negate());\r\n return scaleMtx;\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, index = 1): Matrix4\r\n{\r\n let cs = new CoordinateSystem().applyMatrix4(mtx);\r\n if (index === 0)\r\n cs.XAxis.negate();\r\n else if (index === 1)\r\n cs.YAxis.negate();\r\n else\r\n cs.ZAxis.negate();\r\n\r\n return cs.getMatrix4(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 cacheVec.z = 0;\r\n\r\n cacheVec.applyMatrix4(mtx);\r\n\r\n vec.x = cacheVec.x;\r\n vec.y = cacheVec.y;\r\n}\r\n\r\nexport function MakeMirrorMtx(planeNormal: Vector3, pos?: Vector3)\r\n{\r\n let mirrorMtx = new Matrix4();\r\n let xAxis = new Vector3(1 - 2 * planeNormal.x ** 2, -2 * planeNormal.x * planeNormal.y, -2 * planeNormal.x * planeNormal.z);\r\n let yAxis = new Vector3(-2 * planeNormal.x * planeNormal.y, 1 - 2 * planeNormal.y ** 2, -2 * planeNormal.y * planeNormal.z);\r\n let zAxis = new Vector3(-2 * planeNormal.x * planeNormal.z, -2 * planeNormal.y * planeNormal.z, 1 - 2 * planeNormal.z ** 2);\r\n mirrorMtx.makeBasis(xAxis, yAxis, zAxis);\r\n\r\n if (pos)\r\n mirrorMtx.setPosition(pos.clone().applyMatrix4(mirrorMtx).sub(pos).negate());\r\n\r\n return mirrorMtx;\r\n}\r\n\r\n/**\r\n * 对向量进行方向变换 (如果是pos 请使用pos.applyMatrix4)\r\n * @param vec 向量\r\n * @param m 矩阵\r\n * @returns vec\r\n */\r\nexport function TransformVector(vec: T, m: Matrix4): T\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\nexport function MakeRotateMatrix4(cen: Vector3, axis: Vector3, angle: number, roMtx: Matrix4 = new Matrix4)\r\n{\r\n roMtx.makeRotationAxis(axis, angle);\r\n roMtx.setPosition(cen.clone().applyMatrix4(roMtx).negate().add(cen));\r\n return roMtx;\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\nlet p = new Vector3;\r\nlet s = new Vector3;\r\nlet q = new Quaternion;\r\n//归一化矩阵 避免轴不是非标准向量\r\nexport function NormalMatrix(mtx: Matrix4)\r\n{\r\n mtx.decompose(p, q, s);\r\n s.set(1, 1, 1);\r\n mtx.compose(p, q, s);\r\n return mtx;\r\n}\r\n\r\n//四舍五入\r\nexport function RoundMatrix(mtx: Matrix4, fuzz = 1e-6)\r\n{\r\n let el = mtx.elements;\r\n for (let i = 0; i < 16; i++)\r\n {\r\n let re = Math.round(el[i]);\r\n if (equaln(re, el[i], fuzz))\r\n el[i] = re;\r\n }\r\n return mtx;\r\n}\r\n\r\nexport const tempMatrix1 = new Matrix4;\r\n\r\nexport const ZMirrorMatrix = MakeMirrorMtx(new Vector3(0, 0, 1));\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 { MathUtils, Vector3 } from \"three\";\r\nimport { equaln, YAxis, ZAxis } 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","/**\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\nexport function FindLast(arr: T[], searchFn: (item: T) => boolean)\r\n{\r\n for (let i = arr.length; i--;)\r\n if (searchFn(arr[i]))\r\n return i;\r\n return -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] 校验对象相等函数,如果相等 则删除e2\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//因为多段线的数据关系,我们需要保留下一段的数据\r\nexport function ArrayRemoveDupSavePre(baseCompareArray: any[], arrs: (any[])[])\r\n{\r\n let index = 0;//set index\r\n let pre = 0;//前一个点\r\n for (let next = 1; next <= baseCompareArray.length; next++)\r\n {\r\n if (baseCompareArray[pre] !== baseCompareArray[next])\r\n {\r\n baseCompareArray[index] = baseCompareArray[pre];\r\n\r\n for (let arr of arrs)\r\n arr[index] = arr[pre];\r\n\r\n index++;\r\n }\r\n\r\n pre++;\r\n }\r\n\r\n baseCompareArray.length = index;\r\n for (let arr of arrs)\r\n arr.length = index;\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","import { EllipseCurve, Shape, Vector2 } from \"three\";\r\nimport { clamp } from \"../Common/Utils\";\r\nimport { equalv2 } from \"../Geometry/GeUtils\";\r\nimport { Arc } from \"./Entity/Arc\";\r\n\r\nlet tempArc: Arc;\r\nexport class Shape2 extends Shape\r\n{\r\n getPoints(divisions: number = 12, optimizeArc = true): Vector2[]\r\n {\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] as EllipseCurve;\r\n let resolution = divisions;\r\n\r\n //@ts-ignore\r\n if (curve && curve.isEllipseCurve)\r\n {\r\n if (optimizeArc)\r\n {\r\n if (!tempArc) tempArc = new Arc;\r\n else tempArc.ClearDraw();\r\n\r\n tempArc.IsClockWise = curve.aClockwise;\r\n tempArc.StartAngle = curve.aStartAngle;\r\n tempArc.EndAngle = curve.aEndAngle;\r\n tempArc.Radius = Math.abs(curve.xRadius);\r\n\r\n //根据圆弧的角度,来确定绘制个数\r\n let count = Math.max(2, Math.abs(Math.ceil((tempArc.AllAngle) / Math.PI)) * divisions);\r\n\r\n resolution = clamp(Math.ceil(tempArc.Length / 20), count, 60);\r\n }\r\n else\r\n resolution = divisions * 2;\r\n }\r\n else\r\n {\r\n //@ts-ignore\r\n resolution = (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\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 { Shape, Vector2 } from 'three';\r\nimport { Shape2 } from '../DatabaseServices/Shape2';\r\nimport { angle, equaln, equalv2, polar } from './GeUtils';\r\n\r\n//解析二维圆弧\r\nclass Arc2d\r\n{\r\n _StartAn: number;\r\n _EndAn: number;\r\n _Center: Vector2;\r\n _Radius: number;\r\n constructor(p1: Vector2, p2: Vector2, bul: number)\r\n {\r\n p1 = p1.clone();\r\n p2 = p2.clone();\r\n\r\n //a (* 2 (atan b))\r\n let a = Math.atan(bul) * 2;\r\n //r (/ (distance p1 p2) 2 (sin a))\r\n let r = p1.distanceTo(p2) / 2 / Math.sin(a);\r\n //c (polar p1 (+ (- (/ pi 2) a) (angle p1 p2)) r)\r\n let c = polar(p1.clone(), Math.PI / 2 - a + angle(p2.clone().sub(p1)), r);\r\n\r\n this._Radius = Math.abs(r);\r\n\r\n this._StartAn = angle(p1.sub(c));\r\n this._EndAn = angle(p2.sub(c));\r\n\r\n this._Center = c;\r\n }\r\n}\r\n\r\n//创建轮廓 通过点表和凸度\r\nexport function CreatePolylinePath(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 prePt = pts[i];\r\n let nextPt = pts[i + 1];\r\n if (equaln(buls[i], 0, 1e-8) || equalv2(prePt, nextPt, 1e-2))\r\n {\r\n shape.lineTo(nextPt.x, nextPt.y);\r\n }\r\n else\r\n {\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(prePt, 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\nexport function CreateShapeFromPoints()\r\n{\r\n\r\n}\r\n","import { FrontSide, 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, side = FrontSide): ShaderMaterialParameters\r\n{\r\n return {\r\n uniforms: {\r\n \"SurfaceColor\": { value: color }\r\n },\r\n \r\n side,\r\n polygonOffset: true,\r\n polygonOffsetFactor: 1,\r\n polygonOffsetUnits: 1\r\n };\r\n}\r\n","import { Color, DoubleSide, FrontSide, LineBasicMaterial, LineDashedMaterial, MeshBasicMaterial, ShaderMaterial, Side, Vector2, Vector3 } from 'three';\r\nimport { LineMaterial } from 'three/examples/jsm/lines/LineMaterial';\r\nimport { HostApplicationServices } from '../ApplicationServices/HostApplicationServices';\r\nimport { GetGoodShaderSimple } from '../GLSL/GoochShader';\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 UseLogBuf = false;\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 private static _WallLineMtlMap = new Map();\r\n static GetWallLineMtl(color: number): LineDashedMaterial\r\n {\r\n if (this._WallLineMtlMap.has(color)) return this._WallLineMtlMap.get(color);\r\n let mtl = new LineDashedMaterial({\r\n color: this.GetColor(color),\r\n dashSize: 10,\r\n gapSize: 10,\r\n });\r\n this._WallLineMtlMap.set(color, mtl);\r\n return mtl;\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, side: Side = FrontSide)\r\n {\r\n let key = `${color}${side}`;\r\n if (this._ConceptualMaterial.has(key))\r\n return this._ConceptualMaterial.get(key);\r\n\r\n let shaderParams = GetGoodShaderSimple(new Vector3().fromArray(this.GetColor(color).toArray()), side);\r\n let mtl = new ShaderMaterial(shaderParams);\r\n this._ConceptualMaterial.set(key, mtl);\r\n return mtl;\r\n }\r\n\r\n static UpdateConceptualMaterial(useLogBuf: boolean)\r\n {\r\n \r\n }\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 \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, color: this.GetColor(color) });\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 mtl = this._BasicTransparentMaterialMap2.get(key);\r\n if (mtl) return mtl;\r\n mtl = new MeshBasicMaterial({ transparent: true, opacity: opacity, color: this.GetColor(color) });\r\n this._BasicTransparentMaterialMap2.set(key, mtl);\r\n return mtl;\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 private static _ConceptualEdgeMaterial: LineBasicMaterial;\r\n static GetConceptualEdgeMaterial()\r\n {\r\n if (!this._ConceptualEdgeMaterial)\r\n this._ConceptualEdgeMaterial = new LineBasicMaterial({ color: this.GetColor(HostApplicationServices.ConceptualEdgeColor).clone(), side: DoubleSide });\r\n\r\n return this._ConceptualEdgeMaterial;\r\n }\r\n static UpdateConceptualEdgeMaterial()\r\n {\r\n if (this._ConceptualEdgeMaterial)\r\n this._ConceptualEdgeMaterial.color.copy(this.GetColor(HostApplicationServices.ConceptualEdgeColor));\r\n }\r\n private static _Physical2EdgeMaterial: LineBasicMaterial;\r\n static GetPhysical2EdgeMaterial()\r\n {\r\n if (!this._Physical2EdgeMaterial)\r\n this._Physical2EdgeMaterial = new LineBasicMaterial({ color: this.GetColor(HostApplicationServices.Physical2EdgeColor).clone(), side: DoubleSide });\r\n\r\n return this._Physical2EdgeMaterial;\r\n }\r\n static UpdatePhysical2EdgeMaterial()\r\n {\r\n if (this._Physical2EdgeMaterial)\r\n this._Physical2EdgeMaterial.color.copy(this.GetColor(HostApplicationServices.Physical2EdgeColor));\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","import { BufferGeometry, Geometry } from \"three\";\r\n\r\nexport const BufferGeometry2GeometryCacheMap = new WeakMap();\r\nglobalThis.fuck = BufferGeometry2GeometryCacheMap;\r\n","import { BufferAttribute, BufferGeometry, Shape, ShapeGeometry, Vector3 } 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 * @param ignoreBoxError 忽略更新点后盒子错误的问题\r\n * @returns 当成功时返回true,更新失败时返回false\r\n */\r\n export function UpdatePts(geo: BufferGeometry, pts: Vector3[], ignoreBoxError = false): 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 || (ignoreBoxError && 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//此时这个Geometry.Dispose后在进行重新生成会比较后,否则属性没有被回收导致内存泄漏\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 { BufferGeometry, Curve as TCurve, Line, Line as TLine, Material, Object3D, Vector3 } from 'three';\r\nimport { Line2 } from 'three/examples/jsm/lines/Line2';\r\nimport { LineGeometry } from 'three/examples/jsm/lines/LineGeometry';\r\nimport { arrayRemoveDuplicateBySort, arraySortByNumber } from '../../Common/ArrayExt';\r\nimport { ColorMaterial } from '../../Common/ColorPalette';\r\nimport { Status } from '../../Common/Status';\r\nimport { BufferGeometryUtils } from '../../Geometry/BufferGeometryUtils';\r\nimport { equaln, equalv3, updateGeometry } 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 get Shape(): TCurve { throw \"未实现\"; }\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 * @param {(number | Vector3)} param\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 */\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 override OnlyRenderType = true;\r\n\r\n //样条线重载了这个,得到了更高的绘制精度\r\n protected GetDrawCount() { return 30; }\r\n\r\n /**\r\n * @param {RenderType} [renderType=RenderType.Wireframe]\r\n */\r\n protected override InitDrawObject(renderType: RenderType = RenderType.Wireframe): Object3D\r\n {\r\n let pts = this.Shape.getPoints(this.GetDrawCount());\r\n if (renderType === RenderType.WireframePrint)\r\n {\r\n let array: number[] = [];\r\n for (let p of pts) array.push(p.x, p.y, 0);\r\n let geometry = new LineGeometry().setPositions(array);\r\n return new Line2(geometry, ColorMaterial.PrintLineMatrial);\r\n }\r\n let geo = new BufferGeometry().setFromPoints(pts);\r\n return new TLine(geo, ColorMaterial.GetLineMaterial(this._Color));\r\n }\r\n\r\n /**\r\n * 重载:更新绘制的实体\r\n * @param {RenderType} type\r\n * @param {Object3D} obj\r\n */\r\n override UpdateDrawObject(type: RenderType, obj: Object3D)\r\n {\r\n let pts = this.Shape.getPoints(this.GetDrawCount());\r\n let plObj = obj as TLine;\r\n let geo = plObj.geometry as BufferGeometry | LineGeometry;\r\n if (geo instanceof LineGeometry)\r\n {\r\n let array: number[] = [];\r\n for (let p of pts) array.push(p.x, p.y, 0);\r\n (geo as LineGeometry).setPositions(array);\r\n }\r\n else\r\n {\r\n //@ts-ignore\r\n for (let p of pts) p.z = 0;\r\n if (!BufferGeometryUtils.UpdatePts(geo, pts as unknown as Vector3[]))\r\n updateGeometry(plObj, new BufferGeometry().setFromPoints(pts));\r\n }\r\n }\r\n\r\n /**\r\n * 重载:更新实体材质\r\n */\r\n override 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 override 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","export enum DragPointType\r\n{\r\n Grip = 0,\r\n Stretch = 1\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, 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 { Box3Ext } from '../../Geometry/Box';\r\nimport { BufferGeometryUtils } from '../../Geometry/BufferGeometryUtils';\r\nimport { AsVector2, equaln, equalv3, isParallelTo, MoveMatrix, updateGeometry } 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 let ocsInv = this.OCSInv;\r\n let sp = this.StartPoint.setZ(0).applyMatrix4(ocsInv);\r\n let ep = this.EndPoint.setZ(0).applyMatrix4(ocsInv);\r\n this._StartPoint.copy(sp);\r\n this._EndPoint.copy(ep);\r\n this.Update();\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\r\n InitDrawObject(renderType: RenderType = RenderType.Wireframe): Object3D\r\n {\r\n let pts = [this._StartPoint, this._EndPoint];\r\n if (renderType === RenderType.WireframePrint)\r\n {\r\n let array: number[] = [];\r\n for (let p of pts) array.push(p.x, p.y, p.z);\r\n let geometry = new LineGeometry().setPositions(array);\r\n return new Line2(geometry, ColorMaterial.PrintLineMatrial);\r\n }\r\n let geo = new BufferGeometry().setFromPoints(pts);\r\n return new TLine(geo, ColorMaterial.GetLineMaterial(this._Color));\r\n }\r\n\r\n /**\r\n * 重载:更新绘制的实体\r\n * @param {RenderType} type\r\n * @param {Object3D} obj\r\n */\r\n UpdateDrawObject(type: RenderType, obj: Object3D)\r\n {\r\n let pts = [this._StartPoint, this._EndPoint];\r\n let plObj = obj as TLine;\r\n let geo = plObj.geometry as BufferGeometry | LineGeometry;\r\n if (geo instanceof LineGeometry)\r\n {\r\n let array: number[] = [];\r\n for (let p of pts) array.push(p.x, p.y, p.z);\r\n (geo as LineGeometry).setPositions(array);\r\n }\r\n else\r\n {\r\n if (!BufferGeometryUtils.UpdatePts(geo, pts as unknown as Vector3[]))\r\n updateGeometry(plObj, new BufferGeometry().setFromPoints(pts));\r\n }\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.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(): Vector3[]\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 || curve.constructor.name === \"RoomWallLine\")\r\n {\r\n return IntersectLineAndLine(this, curve as Line, intType, tolerance);\r\n }\r\n if (curve instanceof Arc || curve.constructor.name === \"RoomWallArc\")\r\n {\r\n return IntersectLineAndArc(this, curve as Arc, 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.SetStartEndPoint(\r\n pts[i],\r\n pts[i + 1]\r\n );\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 || cu.constructor.name === \"RoomWallLine\")\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.SetStartEndPoint(\r\n this.StartPoint.add(derv),\r\n this.EndPoint.add(derv)\r\n );\r\n return [newLine];\r\n }\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 /**\r\n * 返回对象在自身坐标系下的Box\r\n */\r\n get BoundingBoxInOCS(): Box3Ext\r\n {\r\n return new Box3Ext().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 override _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 override 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.OCSNoClone);\r\n }\r\n\r\n get EndPoint(): Vector3\r\n {\r\n return this._EndPoint.clone().applyMatrix4(this.OCSNoClone);\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 SetStartEndPoint(s: Vector3, e: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n let inv = this.OCSInv;\r\n this._StartPoint.copy(s).applyMatrix4(inv);\r\n this._EndPoint.copy(e).applyMatrix4(inv);\r\n this.Update();\r\n }\r\n\r\n //#endregion\r\n}\r\n","import { MathUtils, Matrix3, Matrix4, Shape, Vector3 } from 'three';\r\nimport { arrayLast, arrayRemoveDuplicateBySort } from '../../Common/ArrayExt';\r\nimport { getArcOrCirNearPts, getDeterminantFor2V, getTanPtsOnEllipse, Pts2Polyline } from '../../Common/CurveUtils';\r\nimport { Status } from '../../Common/Status';\r\nimport { ObjectSnapMode } from '../../Editor/ObjectSnapMode';\r\nimport { angle, angleTo, AsVector2, equaln, equalv3, MoveMatrix, rotatePoint } from '../../Geometry/GeUtils';\r\nimport { IntersectEllipse, IntersectEllipseAndCircleOrArc, IntersectEllipseAndLine, IntersectOption, IntersectPolylineAndCurve, reverseIntersectOption } from '../../GraphicsSystem/IntersectWith';\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 { Line } from './Line';\r\nimport { Polyline } from './Polyline';\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\r\n protected ApplyScaleMatrix(m: Matrix4): this\r\n {\r\n //或许我们应该在缩放一下轴尺寸 但是先不做了\r\n let p = this.Position;\r\n p.applyMatrix4(m);\r\n this.Position = p;\r\n return this;\r\n }\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\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 vec.set(0, -1, 0);\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\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.ColorIndex = this.ColorIndex;\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 { 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, equalv2, MoveMatrix, polar, ZeroVec } from '../../Geometry/GeUtils';\r\nimport { Orbit } from '../../Geometry/Orbit';\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, fuzz = 1e-5)\r\n {\r\n return equaln(pt.distanceToSquared(this.Center), this._Radius * this._Radius, fuzz);\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 BoundingBoxInOCS(): Box3Ext\r\n {\r\n return new Box3Ext(new Vector3(-this.Radius, -this.Radius), new Vector3(this.Radius, this.Radius));\r\n }\r\n\r\n get BoundingBox(): Box3Ext\r\n {\r\n let z = this.Normal;\r\n let x = new Vector3;\r\n let y = new Vector3;\r\n Orbit.ComputUpDirection(z, y, x);\r\n let m = new Matrix4().makeBasis(x, y, z).setPosition(this.Center);\r\n //使用任意轴坐标系 以便我们正确的对齐世界坐标系\r\n return this.BoundingBoxInOCS.applyMatrix4(m);\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);\r\n if (equalv2(pt, ZeroVec, 1e-8))\r\n return this.GetPointAtParam(0);\r\n\r\n let a = Math.atan2(pt.y, pt.x);\r\n return polar(new Vector3, a, this._Radius).applyMatrix4(this._Matrix);\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","import { Vec2, Vector2, Vector3 } from \"three\";\r\nimport { arrayLast } from \"../Common/ArrayExt\";\r\nimport { orientation } from \"../Geometry/DoIntersect\";\r\nimport { AsVector2, AsVector3, equaln, equalv2 } from \"../Geometry/GeUtils\";\r\nimport { Arc } from \"./Entity/Arc\";\r\nimport { Curve } from \"./Entity/Curve\";\r\nimport { Line } from \"./Entity/Line\";\r\nimport { Polyline, PolylineProps } from \"./Entity/Polyline\";\r\nimport { Spline } from \"./Spline\";\r\n\r\nexport function SplineConver2Polyline(spl: Spline, tolerance = 0.1): Polyline\r\n{\r\n let cu = spl.Shape;\r\n\r\n let cacheParam = new Map();\r\n let cacheTange = new Map();\r\n\r\n const GetPointAtParam = (param: number) =>\r\n {\r\n let p = cacheParam.get(param);\r\n if (p) return p;\r\n\r\n p = cu.getPoint(param);\r\n cacheParam.set(param, p);\r\n return p;\r\n };\r\n\r\n const GetTangentAtParam = (param: number) =>\r\n {\r\n let t = cacheTange.get(param);\r\n if (t) return t;\r\n\r\n if (equaln(param, 1))\r\n {\r\n if (spl.CloseMark)\r\n t = cu.getPoint(1e-4).sub(GetPointAtParam(param)).normalize();\r\n else\r\n t = GetPointAtParam(param).clone().sub(cu.getPoint(1 - 1e-4)).normalize();\r\n }\r\n else\r\n t = cu.getPoint(param + 1e-4).sub(GetPointAtParam(param)).normalize();\r\n cacheTange.set(param, t);\r\n return t;\r\n };\r\n\r\n let count = spl.EndParam;\r\n let stepx = 1 / count;\r\n\r\n let curves: Curve[] = [];\r\n for (let i = 0; i < 1;)\r\n {\r\n let step = 0.25 * stepx;//0.5的时候也可以有不错的收敛,但是在0.25的时候会有比较贴合的效果\r\n while (true)\r\n {\r\n let param1 = i;\r\n let param2 = Math.min(1, i + step);\r\n\r\n let x = param2 - param1;\r\n let midp1 = GetPointAtParam(param1 + x * 0.25);\r\n let midp2 = GetPointAtParam(param1 + x * 0.75);\r\n\r\n let p1 = GetPointAtParam(param1);\r\n let p2 = GetPointAtParam(param2);\r\n\r\n let t1 = GetTangentAtParam(param1);\r\n let t2 = GetTangentAtParam(param2);\r\n\r\n let [c1, c2] = ComputeBiarc(p1, p2, t1, t2);\r\n\r\n // TestDraw(new Point(midp1));\r\n // TestDraw(new Point(midp2));\r\n\r\n // TestDraw(new Point(c1.GetPointAtParam(0.5)));\r\n // TestDraw(new Point(c2.GetPointAtParam(0.5)));\r\n\r\n if (\r\n c1.GetClosestPointTo(midp1, false).distanceTo(midp1) < tolerance &&\r\n c2.GetClosestPointTo(midp2, false).distanceTo(midp2) < tolerance\r\n )\r\n {\r\n curves.push(c1, c2);\r\n break;\r\n }\r\n else\r\n step = step * 0.5;\r\n }\r\n i += step;\r\n }\r\n\r\n let polyline = Polyline.Combine(curves, 1e-3);\r\n polyline.ApplyMatrix(spl.OCSNoClone);\r\n polyline.ColorIndex = spl.ColorIndex;\r\n return polyline;\r\n}\r\n\r\n//传入的一定是碎点,不是碎点,没有6个点请不要进来\r\nfunction PointsSimplify2Polyline(pts: Vector3[], tolerance = 0.1): Polyline\r\n{\r\n let tolSq = tolerance * tolerance;\r\n let cacheTange = new Map();\r\n\r\n let ptsCount = pts.length;\r\n\r\n const GetIndexAtParam = (param: number) =>\r\n {\r\n if (param === 1) return pts.length - 1;\r\n return Math.floor(ptsCount * param);\r\n };\r\n const GetPointAtParam = (param: number) =>\r\n {\r\n return pts[GetIndexAtParam(param)];\r\n };\r\n\r\n const GetTangentAtParam = (param: number) =>\r\n {\r\n let t = cacheTange.get(param);\r\n if (t) return t;\r\n\r\n let index = Math.floor(ptsCount * param);\r\n if (equaln(param, 1) || index + 1 >= pts.length)\r\n t = arrayLast(pts).clone().sub(pts[pts.length - 1]).normalize();\r\n else\r\n t = pts[index + 1].clone().sub(pts[index]).normalize();\r\n cacheTange.set(param, t);\r\n return t;\r\n };\r\n\r\n let stepx = 1;\r\n\r\n let curves: Curve[] = [];\r\n for (let i = 0; i < 1;)\r\n {\r\n let step = 0.25 * stepx;//0.5的时候也可以有不错的收敛,但是在0.25的时候会有比较贴合的效果\r\n while (true)\r\n {\r\n let param1 = i;\r\n let param2 = Math.min(1, i + step);\r\n\r\n let index1 = GetIndexAtParam(param1);\r\n let index2 = GetIndexAtParam(param2);\r\n if ((index2 - index1) < 4)//当点个数等于4时,我们计算双圆弧插值必然成功.(但是也失去了意义)\r\n {\r\n if (index2 - index1 > 0)\r\n {\r\n let lineD: PolylineProps[] = [];\r\n for (let i = index1; i <= index2; i++)\r\n lineD.push({ pt: AsVector2(pts[i]), bul: 0 });\r\n curves.push(new Polyline(lineD));\r\n }\r\n break;\r\n }\r\n\r\n let x = param2 - param1;\r\n let midp1 = GetPointAtParam(param1 + x * 0.25);\r\n let midp2 = GetPointAtParam(param1 + x * 0.75);\r\n\r\n let p1 = pts[index1];\r\n let p2 = pts[index2];\r\n\r\n let t1 = GetTangentAtParam(param1);\r\n let t2 = GetTangentAtParam(param2);\r\n\r\n let [c1, c2] = ComputeBiarc(p1, p2, t1, t2);\r\n\r\n if (\r\n c1.GetClosestPointTo(midp1, false).distanceToSquared(midp1) < tolSq &&\r\n c2.GetClosestPointTo(midp2, false).distanceToSquared(midp2) < tolSq\r\n )\r\n {\r\n curves.push(c1, c2);\r\n break;\r\n }\r\n else\r\n step = step * 0.5;\r\n }\r\n i += step;\r\n }\r\n\r\n let polyline = Polyline.Combine(curves, 1e-3);\r\n return polyline;\r\n}\r\n\r\n/**\r\n * 将碎点简化为多段线,(尝试转换为简单圆弧,或者使用双圆弧插值)\r\n * @param pts 点表\r\n * @param [tolerance=0.1] 容差\r\n * @param [parseArc=true] 解析成简单圆弧\r\n * @param [lineLengthSq=2000]\r\n * @returns 多段线\r\n */\r\nexport function PointsSimplify2PolylineAndParseArc(pts: Vector2[], buls: number[] = undefined, tolerance = 0.1, parseArc = true, lineLengthSq = 2000): Polyline\r\n{\r\n let tolSq = tolerance * tolerance;\r\n let ptsCount = pts.length;\r\n\r\n const CreateLineOrArc = (startIndex: number, endIndex: number) =>\r\n {\r\n if (!buls || equaln(buls[startIndex], 0, 1e-4))\r\n return new Line(AsVector3(pts[startIndex]), AsVector3(pts[endIndex]));\r\n else\r\n return new Arc().ParseFromBul(AsVector3(pts[startIndex]), AsVector3(pts[endIndex]), buls[startIndex]);\r\n };\r\n\r\n let retPolyline = new Polyline;\r\n let start = 0;\r\n for (let next = start + 1; next <= ptsCount; next++)\r\n {\r\n if (next === ptsCount || pts[next].distanceToSquared(pts[next - 1]) > lineLengthSq || (buls && !equaln(buls[next - 1], 0, 1e-4)))//长度大于50,我们才认为它是一条直线\r\n {\r\n //1.将start->next-1部分组成圆弧\r\n if (parseArc || (next - start) < 6)\r\n while (start < next - 1)\r\n {\r\n if ((next - 1) - start === 1)//直线\r\n {\r\n retPolyline.Join(CreateLineOrArc(start, next - 1));\r\n break;\r\n }\r\n\r\n //第一个三角形的方向\r\n let firstDir = orientation(pts[start], pts[start + 1], pts[start + 2]);\r\n let to = start;\r\n for (; to + 3 < next; to++)\r\n {\r\n let dir = orientation(pts[to + 1], pts[to + 2], pts[to + 3]);\r\n if (dir !== firstDir)\r\n break;\r\n }\r\n\r\n if (start === to)//三个点\r\n {\r\n retPolyline.Join(CreateLineOrArc(start, start + 1));\r\n retPolyline.Join(CreateLineOrArc(start + 1, start + 2));\r\n start = to + 2;\r\n continue;\r\n }\r\n else if ((to - start) < 3)\r\n {\r\n retPolyline.Join(PointsSimplify2Polyline(pts.slice(start, to + 2 + 1).map(AsVector3)));\r\n }\r\n else\r\n {\r\n let sp = pts[start];\r\n let ep = pts[to + 2];\r\n let mp = pts[Math.floor((start + to + 2) / 2)];\r\n let arc = new Arc().FromThreePoint(AsVector3(sp), AsVector3(mp), AsVector3(ep));\r\n\r\n let c = to + 2 - start;\r\n\r\n let p1 = AsVector3(pts[start + Math.floor(c * 0.25)]);\r\n let p2 = AsVector3(pts[start + Math.floor(c * 0.75)]);\r\n if (arc.GetClosestPointTo(p1, false).distanceToSquared(p1) < tolSq\r\n && arc.GetClosestPointTo(p2, false).distanceToSquared(p2) < tolSq)\r\n retPolyline.Join(arc);\r\n else\r\n retPolyline.Join(PointsSimplify2Polyline(pts.slice(start, to + 2 + 1).map(AsVector3)));\r\n }\r\n\r\n start = to + 2;//闪烁到圆弧终点\r\n\r\n if (start === next - 2)\r\n {\r\n retPolyline.Join(PointsSimplify2Polyline(pts.slice(start, next).map(AsVector3)));\r\n start = next;\r\n break;\r\n };\r\n }\r\n else\r\n retPolyline.Join(PointsSimplify2Polyline(pts.slice(start, next).map(AsVector3)));\r\n\r\n //2.加入直线\r\n if (next !== ptsCount)\r\n retPolyline.Join(CreateLineOrArc(next - 1, next));\r\n start = next;\r\n }\r\n }\r\n\r\n return retPolyline;\r\n}\r\n\r\nexport function SmartPointsSimply2Polyline(pts: Vector2[], buls: number[] = undefined, tolerance = 0.1, lineLengthSq = 2000)\r\n{\r\n let pl1 = PointsSimplify2PolylineAndParseArc(pts, buls, tolerance, true, lineLengthSq);\r\n let pl2 = PointsSimplify2PolylineAndParseArc(pts, buls, tolerance, false, lineLengthSq);\r\n\r\n if (pl1.EndParam < pl2.EndParam)\r\n return pl1;\r\n else\r\n return pl2;\r\n}\r\n\r\n/**\r\n * 简化多段线,返回结果比较好的多段线\r\n * @param pl\r\n * @param [tolerance=0.1]\r\n * @param [lineLengthSq=2000]\r\n * @returns 返回undefined时,简化失败\r\n */\r\nexport function SmartPolylineSimply2Polyline(pl: Polyline, tolerance = 0.1, lineLengthSq = 2000): Polyline | undefined\r\n{\r\n if (pl.EndParam < 3) return;\r\n\r\n let ld = pl.LineData;\r\n let pts: Vector2[] = [ld[0].pt];\r\n let buls: number[] = [ld[0].bul];\r\n let prep = pts[0];\r\n for (let i = 1; i < ld.length; i++)\r\n {\r\n let d = ld[i];\r\n let p = d.pt;\r\n if (!equalv2(p, prep, 1e-3))\r\n {\r\n pts.push(p);\r\n buls.push(d.bul);\r\n prep = p;\r\n }\r\n }\r\n\r\n if (pl.CloseMark && !equalv2(pts[0], arrayLast(pts)))\r\n pts.push(pts[0].clone());\r\n\r\n let npl = SmartPointsSimply2Polyline(pts, pl.LineData.map(p => p.bul), tolerance, lineLengthSq);\r\n npl.ApplyMatrix(pl.OCSNoClone);\r\n npl.ColorIndex = pl.ColorIndex;\r\n return npl;\r\n}\r\n\r\n//types\r\nfunction Vec2(x: number, y: number)\r\n{\r\n this.x = x;\r\n this.y = y;\r\n}\r\n\r\nlet c_Epsilon = 0.0001;\r\n\r\n// math functions\r\nfunction Sqr(val: number)\r\n{\r\n return val * val;\r\n}\r\nfunction IsEqualEps(lhs: number, rhs: number)\r\n{\r\n return Math.abs(lhs - rhs) <= c_Epsilon;\r\n}\r\n\r\nfunction ToNumber_Safe(input: number)\r\n{\r\n let output = Number(input);\r\n return isNaN(output) ? 0 : output;\r\n}\r\n\r\nfunction Vec2_Add(lhs: Vec2, rhs: Vec2)\r\n{\r\n return new Vec2(lhs.x + rhs.x, lhs.y + rhs.y);\r\n}\r\nfunction Vec2_Sub(lhs: Vec2, rhs: Vec2)\r\n{\r\n return new Vec2(lhs.x - rhs.x, lhs.y - rhs.y);\r\n}\r\nfunction Vec2_Scale(lhs: { x: number; y: number; }, scale: number)\r\n{\r\n return new Vec2(lhs.x * scale, lhs.y * scale);\r\n}\r\nfunction Vec2_AddScaled(lhs: Vec2, rhs: Vec2, scale: number)\r\n{\r\n return new Vec2(lhs.x + rhs.x * scale, lhs.y + rhs.y * scale);\r\n}\r\n\r\nfunction Vec2_Dot(lhs: Vec2, rhs: Vec2)\r\n{\r\n return lhs.x * rhs.x + lhs.y * rhs.y;\r\n}\r\n\r\nfunction Vec2_MagSqr(val: { x: number; y: number; })\r\n{\r\n return val.x * val.x + val.y * val.y;\r\n}\r\n\r\nfunction CreateArcFromEdge(p1: Vec2, t1: Vec2, p2: Vec2, fromP1: boolean): Arc | Line\r\n{\r\n let chord = Vec2_Sub(p2, p1);\r\n let n1 = new Vec2(-t1.y, t1.x);\r\n let chordDotN1 = Vec2_Dot(chord, n1);\r\n\r\n if (IsEqualEps(chordDotN1, 0))\r\n return new Line(AsVector3(p1), AsVector3(p2));\r\n else\r\n {\r\n let radius = Vec2_MagSqr(chord) / (2 * chordDotN1);\r\n let center = Vec2_AddScaled(p1, n1, radius);\r\n\r\n let p1Offset = Vec2_Sub(p1, center);\r\n let p2Offset = Vec2_Sub(p2, center);\r\n\r\n let p1Ang1 = Math.atan2(p1Offset.y, p1Offset.x);\r\n let p2Ang1 = Math.atan2(p2Offset.y, p2Offset.x);\r\n if (p1Offset.x * t1.y - p1Offset.y * t1.x > 0)\r\n return new Arc(AsVector3(center), Math.abs(radius), p1Ang1, p2Ang1, !fromP1);\r\n else\r\n return new Arc(AsVector3(center), Math.abs(radius), p1Ang1, p2Ang1, fromP1);\r\n }\r\n}\r\n\r\n/**\r\n * 计算双圆弧插值的圆弧\r\n * @param p1 起点\r\n * @param p2 终点\r\n * @param t1 起点切线\r\n * @param t2 终点切线\r\n * @returns 两个圆弧(或者其中一个是直线)\r\n */\r\nexport function ComputeBiarc(p1: Vec2, p2: Vec2, t1: Vec2, t2: Vec2): [Arc | Line, Arc | Line]\r\n{\r\n let v = Vec2_Sub(p2, p1);\r\n let vMagSqr = Vec2_MagSqr(v);\r\n\r\n let vDotT1 = Vec2_Dot(v, t1);\r\n\r\n if (true)//自动d1 d2=d1\r\n {\r\n let t = Vec2_Add(t1, t2);\r\n let tMagSqr = Vec2_MagSqr(t);\r\n\r\n let equalTangents = IsEqualEps(tMagSqr, 4.0);\r\n\r\n let perpT1 = IsEqualEps(vDotT1, 0.0);\r\n if (equalTangents && perpT1) //2个半圆\r\n {\r\n let angle = Math.atan2(v.y, v.x);\r\n let center1 = Vec2_AddScaled(p1, v, 0.25);\r\n let center2 = Vec2_AddScaled(p1, v, 0.75);\r\n let radius = Math.sqrt(vMagSqr) * 0.25;\r\n let cross = v.x * t1.y - v.y * t1.x;\r\n\r\n return [\r\n new Arc(AsVector3(center1), radius, angle, angle + Math.PI, cross < 0),\r\n new Arc(AsVector3(center2), radius, angle, angle + Math.PI, cross > 0)\r\n ];\r\n }\r\n else\r\n {\r\n let vDotT = Vec2_Dot(v, t);\r\n\r\n let d1: number;\r\n if (equalTangents)\r\n d1 = vMagSqr / (4 * vDotT1);\r\n else\r\n {\r\n let denominator = 2 - 2 * Vec2_Dot(t1, t2);\r\n let discriminant = Sqr(vDotT) + denominator * vMagSqr;\r\n d1 = (Math.sqrt(discriminant) - vDotT) / denominator;\r\n }\r\n\r\n let joint = Vec2_Scale(Vec2_Sub(t1, t2), d1);\r\n joint = Vec2_Add(joint, p1);\r\n joint = Vec2_Add(joint, p2);\r\n joint = Vec2_Scale(joint, 0.5);\r\n\r\n return [\r\n CreateArcFromEdge(p1, t1, joint, true),\r\n CreateArcFromEdge(p2, t2, joint, false)\r\n ];\r\n }\r\n }\r\n\r\n //使用自定义d1\r\n else\r\n {\r\n let d1_min = -500;\r\n let d1_max = 500;\r\n let d1 = d1_min + (d1_max - d1_min) * ToNumber_Safe(60) / 100.0;\r\n\r\n let vDotT2 = Vec2_Dot(v, t2);\r\n let t1DotT2 = Vec2_Dot(t1, t2);\r\n let denominator = (vDotT2 - d1 * (t1DotT2 - 1));\r\n\r\n if (IsEqualEps(denominator, 0.0))\r\n {\r\n //第二个圆弧是半圆\r\n let joint = Vec2_AddScaled(p1, t1, d1);\r\n joint = Vec2_AddScaled(joint, t2, vDotT2 - d1 * t1DotT2);\r\n\r\n return [\r\n CreateArcFromEdge(p1, t1, joint, true),\r\n CreateArcFromEdge(p2, t2, joint, false)\r\n ];\r\n }\r\n else\r\n {\r\n let d2 = (0.5 * vMagSqr - d1 * vDotT1) / denominator;\r\n\r\n let invLen = 1.0 / (d1 + d2);\r\n\r\n let joint = Vec2_Scale(Vec2_Sub(t1, t2), d1 * d2);\r\n joint = Vec2_AddScaled(joint, p2, d1);\r\n joint = Vec2_AddScaled(joint, p1, d2);\r\n joint = Vec2_Scale(joint, invLen);\r\n\r\n return [\r\n CreateArcFromEdge(p1, t1, joint, true),\r\n CreateArcFromEdge(p2, t2, joint, false)\r\n ];\r\n }\r\n }\r\n}\r\n","import { CatmullRomCurve3, Matrix3, Vector3 } from 'three';\r\nimport { arrayLast } from '../Common/ArrayExt';\r\nimport { ObjectSnapMode } from '../Editor/ObjectSnapMode';\r\nimport { AsVector2, AsVector3, equalv3 } from '../Geometry/GeUtils';\r\nimport { Factory } from './CADFactory';\r\nimport { CADFiler } from './CADFiler';\r\nimport { Curve } from './Entity/Curve';\r\nimport { Polyline } from './Entity/Polyline';\r\nimport { SplineConver2Polyline } from './SplineConver2Polyline';\r\n\r\n\r\nconst DrawSplitCount = 120;\r\n\r\n@Factory\r\nexport class Spline extends Curve\r\n{\r\n private _ClosedMark: boolean = false;\r\n constructor(private _PointList: Vector3[] = [])\r\n {\r\n super();\r\n }\r\n\r\n get Shape()\r\n {\r\n return new CatmullRomCurve3(this.Points, this._ClosedMark);\r\n }\r\n\r\n get Length()\r\n {\r\n //TODO:这个的性能挺低的(因为还需要重新获取一遍点表(如果我们有绘制对象,应该用绘制对象的点表来计算长度))\r\n return this.Shape.getLength();\r\n }\r\n\r\n get Points()\r\n {\r\n return this._PointList;\r\n }\r\n set Points(pts: Vector3[])\r\n {\r\n if (pts.length < 2) return;\r\n this.WriteAllObjectRecord();\r\n let ocsInv = this.OCSInv;\r\n this._PointList = pts.map(p => p.clone().applyMatrix4(ocsInv));\r\n\r\n if (pts.length > 2 && equalv3(this._PointList[0], arrayLast(this._PointList), 1e-3))\r\n {\r\n this._PointList.pop();\r\n this._ClosedMark = true;\r\n }\r\n\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 if (this._ClosedMark === v) return;\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\r\n get EndParam()\r\n {\r\n return this._ClosedMark ? this._PointList.length : this._PointList.length - 1;\r\n }\r\n\r\n GetClosestPointTo(pt: Vector3, extend: boolean): Vector3\r\n {\r\n return this.Convert2Polyline().GetClosestPointTo(pt, extend);\r\n }\r\n\r\n GetOffsetCurves(offsetDist: number): Array\r\n {\r\n if (offsetDist === 0) return [];\r\n let pld = this._PointList.map(p =>\r\n {\r\n return { pt: AsVector2(p), bul: 0 };\r\n });\r\n\r\n let pl = new Polyline(pld);\r\n let pls = pl.GetOffsetCurves(offsetDist);\r\n\r\n return pls.map(pl =>\r\n {\r\n let pts = pl.LineData.map(p => AsVector3(p.pt));\r\n let spl = new Spline(pts);\r\n spl.OCS = this._Matrix;\r\n spl._ClosedMark = this._ClosedMark;\r\n return spl;\r\n });\r\n }\r\n\r\n GetGripPoints()\r\n {\r\n return this._PointList.map(p => p.clone().applyMatrix4(this.OCSNoClone));\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 vec = vec.clone().applyMatrix4(this.OCSInv.setPosition(0, 0, 0)).setZ(0);\r\n this.WriteAllObjectRecord();\r\n for (let index of indexList)\r\n this._PointList[index].add(vec);\r\n this.Update();\r\n }\r\n MoveStretchPoints(indexList: Array, vec: Vector3)\r\n {\r\n vec = vec.clone().applyMatrix4(this.OCSInv.setPosition(0, 0, 0)).setZ(0);\r\n this.WriteAllObjectRecord();\r\n for (let index of indexList)\r\n this._PointList[index].add(vec);\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\r\n protected GetDrawCount()\r\n {\r\n return this.EndParam * DrawSplitCount;\r\n }\r\n\r\n Convert2Polyline(): Polyline\r\n {\r\n return SplineConver2Polyline(this);\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 if (ver > 1)\r\n this._ClosedMark = file.Read();\r\n }\r\n WriteFile(file: CADFiler)\r\n {\r\n super.WriteFile(file);\r\n file.Write(2);//ver\r\n file.Write(this._PointList.length);\r\n this._PointList.forEach(p => file.Write(p.toArray()));\r\n file.Write(this._ClosedMark);\r\n }\r\n}\r\n","import { Box3, Vector3 } from \"three\";\r\nimport { arrayPushArray } from \"../Common/ArrayExt\";\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 //交点参数集\r\n intersect2: Map = new Map();\r\n\r\n intersect3: [Curve, Curve, Vector3[]][] = [];\r\n\r\n /**\r\n * @param {Curve[]} cus 请注意数组的顺序会被更改,如果你在意数组的顺序,请拷贝数组后传进来\r\n * @memberof CurveIntersection\r\n */\r\n constructor(cus: Curve[], parseIntersectionParam = false, intType = IntersectOption.ExtendNone, protected fuzz = 1e-6, parseRecord = false)\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 (parseRecord)\r\n this.intersect3.push([c1, c2, pts]);\r\n\r\n if (parseIntersectionParam)\r\n {\r\n this.AppendIntersectionParams(c1, ints.map(i => [i.thisParam, i.pt]));\r\n this.AppendIntersectionParams(c2, ints.map(i => [i.argParam, i.pt]));\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, Vector3][])\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 arrayPushArray(arr, 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) || (p.thisParam < 0 ? 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) || (p.argParam < 0 ? 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 { 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 for (let hashpart of hashparts)\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\nconst _overlap_ = \"_overlap_\";\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 = [];//外轮廓和内轮廓重叠时,只有外轮廓有数据,可以使用RegionParse.RegionsIsOverlap来取得\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\r\n maxWalk[_overlap_] = true;\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 //大小圈重叠\r\n static RegionsIsOverlap(Route: Route[])\r\n {\r\n return Boolean(Route[_overlap_]);\r\n }\r\n\r\n private 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 private 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 protected 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 > 1e-4 && param < 0.9999)\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\nexport function 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 { arrayPushArray } from \"../Common/ArrayExt\";\r\nimport { Contour } from \"../DatabaseServices/Contour\";\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 { Spline } from \"../DatabaseServices/Spline\";\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 CreateContours(curves: Curve[], fuzz = 1e-4): Contour[]\r\n{\r\n let contours: Contour[] = [];\r\n let extendsMinDistSq = fuzz * fuzz;\r\n //炸开多段线(防止自交多段线)\r\n let newCurves: Curve[] = [];\r\n for (let cu of curves)\r\n {\r\n if (cu instanceof Circle)\r\n contours.push(Contour.CreateContour(cu.Clone()));//避免将原始曲线传递给板,导致撤销这个圆失败\r\n else if (cu instanceof Polyline)\r\n arrayPushArray(newCurves, cu.Explode());\r\n else if (cu instanceof Spline)\r\n {\r\n let pl = cu.Convert2Polyline();\r\n if (pl.IsClose)\r\n contours.push(Contour.CreateContour(pl, false));\r\n else\r\n newCurves.push(pl);\r\n }\r\n else if (cu instanceof Ellipse)\r\n Contour.CreateContour(cu.Convert2Polyline(), false);\r\n else\r\n newCurves.push(cu);\r\n }\r\n\r\n let intersect = new CurveIntersection2(newCurves, 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 arrayPushArray(ipts, 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 arrayPushArray(tempCus, c.Explode());\r\n else\r\n tempCus.push(c);\r\n }\r\n\r\n arrayPushArray(curves2, 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 let contour = Contour.CreateContour(curves, false);\r\n if (contour)\r\n contours.push(contour);\r\n }\r\n return contours;\r\n}\r\n\r\nexport function CreateContour2(curves: Curve[], fuzz = 1e-4): Contour | undefined\r\n{\r\n return CreateContours(curves, fuzz)[0];\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.ExtendNone);\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 { 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 { CreateContour2 } from \"../Geometry/CreateContour2\";\r\nimport { Route } from \"../Geometry/CurveMap\";\r\nimport { equaln, equalv2, 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 //同心圆\r\n if (this._Curve instanceof Circle && target._Curve instanceof Circle && equalv2(this._Curve.Center, target._Curve.Center, 1e-3))\r\n {\r\n if (this._Curve.Radius > target._Curve.Radius)\r\n return { intersectionList: [target._Curve], unionList: [this._Curve] };\r\n else\r\n return { intersectionList: [this._Curve], unionList: [target._Curve] };\r\n }\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.ExtendNone, 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.ExtendNone, 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) ?? CreateContour2(cs);\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.ExtendNone, 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//也许有一天这个中点算法需要改一下, 使用.MidPoint比较稳妥\r\nfunction fastCurveInCurve(sourceCu: Polyline | Circle, targetCu: Curve)\r\n{\r\n return sourceCu.PtInCurve(targetCu.Midpoint);\r\n}\r\n\r\n//当交点小于等于1时\r\nexport function fastCurveInCurve2(sourceCu: Polyline | Circle, targetCu: Curve)\r\n{\r\n return sourceCu.PtInCurve(targetCu.StartPoint) ||\r\n sourceCu.PtInCurve(targetCu.Midpoint);\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 ep?: Vector3;\r\n preCurve?: Curve;\r\n nextCurve?: Curve;\r\n paddingCurve?: Curve[];\r\n}\r\n\r\nexport class CurveTreeNode\r\n{\r\n children: this[];\r\n box: Box3;\r\n used: boolean;\r\n\r\n Create(curve: Curve, box?: Box3): this { return new (this.constructor)(curve, box) as this; }\r\n\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.ExtendNone)\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(this.Create(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: this[] = [];\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 this.RepairResultPolylineClosemark();\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 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.nextCurve = curveNext;\r\n curveResNext.preCurve = 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.ExtendNone, 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.ExtendNone);\r\n let ipts2 = cu2.IntersectWith(l2, IntersectOption.ExtendNone);\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.preCurve && d.preCurve instanceof Arc)\r\n {\r\n let a = d.preCurve;\r\n if (Math.sign(a.Bul) !== this._OffsetDistSign && a.AllAngle > 1e-6)\r\n {\r\n let ipts = a.IntersectWith(l1, IntersectOption.ExtendNone);\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.nextCurve && d.nextCurve instanceof Arc)\r\n {\r\n let a = d.nextCurve;\r\n if (Math.sign(a.Bul) !== this._OffsetDistSign && a.AllAngle > 1e-6)\r\n {\r\n let ipts = a.IntersectWith(l2, IntersectOption.ExtendNone);\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, 8e-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 private RepairResultPolylineClosemark()\r\n {\r\n if (!this._RetCurves.length) return;\r\n\r\n if (this._Polyline.CloseMark)\r\n {\r\n if (!equalv2(this._Polyline.LineData[0].pt, arrayLast(this._Polyline.LineData).pt, 8e-2))//缺省一个点\r\n {\r\n for (let pl of this._RetCurves)\r\n {\r\n if (pl.IsClose && //封闭\r\n equaln(arrayLast(pl.LineData).bul, 0, 1e-5) &&//是直线\r\n equalv2(pl.LineData[0].pt, arrayLast(pl.LineData).pt, 8e-2))//首尾重复(一般已经是了)\r\n {\r\n pl.LineData.pop();//移除最后一点\r\n pl.CloseMark = true;\r\n }\r\n }\r\n }\r\n else\r\n {\r\n for (let pl of this._RetCurves)\r\n {\r\n if (pl.IsClose)\r\n pl.CloseMark = true;\r\n }\r\n }\r\n }\r\n else if (this._IsClose)\r\n {\r\n for (let pl of this._RetCurves)\r\n {\r\n let firstP = pl.LineData[0].pt;\r\n let lastP = arrayLast(pl.LineData).pt;\r\n if (equalv2(firstP, lastP, 8e-2))\r\n lastP.copy(firstP);\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\nexport function EntityEncode2(c1: Curve, c2: Curve)\r\n{\r\n return EntityEncode(c1) & EntityEncode(c2);\r\n}\r\n\r\n//表示这个是一个正常的曲线,不是0长度的线,也不是0长度的圆弧\r\nexport function 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 { Vec2, 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.GetBulgeAt(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\nexport function IsPointInPolygon(pt: Vec2, pts: Vec2[])\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","import { Box3, Matrix3, Matrix4, Shape, Vec2, Vector2, Vector3 } from 'three';\r\nimport { arrayLast, arrayRemoveDuplicateBySort, changeArrayStartIndex } from '../../Common/ArrayExt';\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 { CreatePolylinePath } from '../../Geometry/CreatePolylinePath';\r\nimport { AsVector2, AsVector3, equaln, equalv2, equalv3, MatrixIsIdentityCS } from '../../Geometry/GeUtils';\r\nimport { IntersectOption, IntersectPolylineAndCurve } from '../../GraphicsSystem/IntersectWith';\r\nimport { OffsetPolyline } from '../../GraphicsSystem/OffsetPolyline';\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\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 UpdateOCSTo(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.OCSNoClone, 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.NumberOfVertices,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 let inv = this.OCSInv;\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(inv);\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 let inv = this.OCSInv;\r\n for (let i = 0; i < oldPts.length; i++)\r\n {\r\n let newP = oldPts[i].applyMatrix4(inv);\r\n let newBul = -this.GetBulgeAt(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\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\r\n GetBulgeAt(index: number): number\r\n {\r\n return this._LineData[index].bul;\r\n }\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\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 FromPoints2d(pts: Vec2[]): this\r\n {\r\n this.WriteAllObjectRecord();\r\n this._LineData.length = 0;\r\n for (let p of pts)\r\n this._LineData.push({ pt: AsVector2(p), bul: 0 });\r\n this.Update();\r\n return this;\r\n }\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.GetBulgeAt(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.GetBulgeAt(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 */\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.OCSNoClone);\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 cuCount = paramFloor > this.EndParam ? this.EndParam : paramFloor;\r\n\r\n let dist = 0;\r\n //首先计算完整曲线的长度\r\n for (let i = 0; i < cuCount; i++)\r\n {\r\n dist += this.GetCurveAtIndex(i).Length;\r\n }\r\n\r\n //参数已经大于索引,证明参数在线外.\r\n if (paramFloor !== cuCount)\r\n {\r\n dist += this.GetCurveAtParam(param).GetDistAtParam(param - cuCount);\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 if (equaln(dist, 0)) return 0;\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 let normal = pl.Normal;\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 {\r\n let dir = equalv3(normal, cu.Normal.negate(), 1e-3) ? -1 : 1;\r\n bul = cu.Bul * dir;\r\n }\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 //偏移\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-5))\r\n curve = new Line(AsVector3(d1.pt), AsVector3(d2.pt)).ApplyMatrix(this.OCSNoClone);\r\n else\r\n curve = new Arc().ParseFromBul(d1.pt, d2.pt, d1.bul).ApplyMatrix(this.OCSNoClone);\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.ExtendNone);\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(): Shape\r\n {\r\n let { pts, buls } = this.PtsBuls;\r\n return CreatePolylinePath(pts, buls);\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.GetBulgeAt(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\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 ptCount = this._LineData.length;\r\n\r\n let frontIndex = cuIndex - 1;\r\n if (this._ClosedMark)\r\n frontIndex = FixIndex(frontIndex, ptCount);\r\n\r\n if (frontIndex >= 0 && this.GetBulgeAt(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 !== ptCount - 1) && this.GetBulgeAt(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 ptCount = this._LineData.length;\r\n\r\n for (let index of indexList)\r\n {\r\n if (index >= ptCount)\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, ptCount);\r\n nextIndex = FixIndex(nextIndex, ptCount);\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 count = file.Read();\r\n for (let i = 0; i < count; 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 { ComparePointFnGenerate, 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 ExtendNone = 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(ComparePointFnGenerate(\"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.ExtendNone;\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 { Box3, Matrix3, Matrix4, Vector2, Vector3 } from 'three';\r\nimport { getArcOrCirNearPts, getCircleCenter, GetTanPtsOnArcOrCircle } from '../../Common/CurveUtils';\r\nimport { reviseMirrorMatrix, SetMtxVector, TransformVector } from '../../Common/Matrix4Utils';\r\nimport { Status } from '../../Common/Status';\r\nimport { ObjectSnapMode } from '../../Editor/ObjectSnapMode';\r\nimport { Box3Ext } from '../../Geometry/Box';\r\nimport { angle, AsVector3, clampRad, equaln, equalv2, equalv3, MoveMatrix, polar, ZeroVec } from '../../Geometry/GeUtils';\r\nimport { Orbit } from '../../Geometry/Orbit';\r\nimport { IntersectArcAndArc, IntersectCircleAndArc, IntersectEllipseAndCircleOrArc, IntersectLineAndArc, IntersectOption, IntersectPolylineAndCurve, reverseIntersectOption } from '../../GraphicsSystem/IntersectWith';\r\nimport { Factory } from '../CADFactory';\r\nimport { CADFiler } from '../CADFiler';\r\nimport { Shape2 } from '../Shape2';\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 = ZeroVec, 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 Shape2();\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 SetMtxVector(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 private get BoundingBoxPtsInOCS()\r\n {\r\n let pts = [\r\n polar(new Vector3(), this._StartAngle, this._Radius),\r\n polar(new Vector3(), this._EndAngle, this._Radius),\r\n ];\r\n\r\n if (this.ParamOnCurve(this.GetParamAtAngle(0)))\r\n pts.push(new Vector3(this._Radius, 0));\r\n\r\n if (this.ParamOnCurve(this.GetParamAtAngle(Math.PI / 2)))\r\n pts.push(new Vector3(0, this._Radius));\r\n\r\n if (this.ParamOnCurve(this.GetParamAtAngle(Math.PI)))\r\n pts.push(new Vector3(-this._Radius, 0));\r\n\r\n if (this.ParamOnCurve(this.GetParamAtAngle(Math.PI * 3 / 2)))\r\n pts.push(new Vector3(0, -this._Radius));\r\n return pts;\r\n }\r\n\r\n private static _X = new Vector3;\r\n private static _Y = new Vector3;\r\n private static _Z = new Vector3;\r\n private static _Mtx = new Matrix4;\r\n get BoundingBox(): Box3\r\n {\r\n Arc._Z.setFromMatrixColumn(this._Matrix, 2);\r\n Orbit.ComputUpDirection(Arc._Z, Arc._Y, Arc._X);\r\n\r\n Arc._Mtx.makeBasis(Arc._X, Arc._Y, Arc._Z).setPosition(this._Matrix.elements[12], this._Matrix.elements[13], this._Matrix.elements[14]);\r\n\r\n let pts = [\r\n polar(new Vector3(), this._StartAngle, this._Radius),\r\n polar(new Vector3(), this._EndAngle, this._Radius),\r\n ];\r\n\r\n let ocsInv = this.OCSInv;\r\n\r\n for (let p of [new Vector3(this._Radius), new Vector3(0, this._Radius), new Vector3(-this._Radius), new Vector3(0, -this._Radius)])\r\n {\r\n p.applyMatrix4(Arc._Mtx).applyMatrix4(ocsInv);\r\n if (this.ParamOnCurve(this.GetParamAtAngle(angle(p))))\r\n pts.push(p);\r\n }\r\n\r\n for (let p of pts)\r\n p.applyMatrix4(this.OCSNoClone);\r\n\r\n return new Box3Ext().setFromPoints(pts);\r\n }\r\n\r\n /**\r\n * 返回对象在自身坐标系下的Box\r\n */\r\n get BoundingBoxInOCS(): Box3Ext\r\n {\r\n return new Box3Ext().setFromPoints(this.BoundingBoxPtsInOCS);\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 // if (equaln(v, this._StartAngle)) return;//优化导致测试用例失败\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 // if (equaln(v, this._EndAngle)) return;//优化导致测试用例失败\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.OCSNoClone);\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 private static __PointTemp__ = new Vector3;\r\n GetAngleAtPoint(pt: Vector3)\r\n {\r\n return angle(Arc.__PointTemp__.copy(pt).applyMatrix4(this.OCSInv));\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 || curve.constructor.name === \"RoomWallArc\")\r\n {\r\n return IntersectArcAndArc(this, curve as Arc, intType);\r\n }\r\n if (curve instanceof Line || curve.constructor.name === \"RoomWallLine\")\r\n {\r\n return SwapParam(IntersectLineAndArc(curve as Line, 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 * ref http://www.lee-mac.com/bulgeconversion.html\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 //a (* 2 (atan b))\r\n let a = Math.atan(bul) * 2;\r\n //r (/ (distance p1 p2) 2 (sin a))\r\n let r = p1.distanceTo(p2) / 2 / Math.sin(a);\r\n //c (polar p1 (+ (- (/ pi 2) a) (angle p1 p2)) r)\r\n let c = polar(p1.clone(), Math.PI / 2 - a + angle(p2.clone().sub(p1)), r);\r\n\r\n this._Radius = Math.abs(r);\r\n\r\n this._StartAngle = angle(p1.sub(c));\r\n this._EndAngle = angle(p2.sub(c));\r\n\r\n this._Clockwise = bul < 0;\r\n\r\n this.Center = c.applyMatrix4(this.OCSNoClone);\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 this;\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 if (!center)\r\n {\r\n this.ParseFromBul(pt1.applyMatrix4(this.OCSNoClone), pt3.applyMatrix4(this.OCSNoClone), 1e-3);//faker line\r\n return this;\r\n };\r\n\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 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 index = indexList[0];\r\n\r\n if (index > 2)\r\n this.Center = this.Center.add(vec);\r\n else\r\n {\r\n let p1 = polar(new Vector3, this._StartAngle, this._Radius);\r\n let p2 = polar(new Vector3, this.GetAngleAtParam(0.5), this._Radius);\r\n let p3 = polar(new Vector3, this._EndAngle, this._Radius);\r\n\r\n vec = TransformVector(vec.clone(), this.OCSInv).setZ(0);\r\n\r\n [p1, p2, p3][index].add(vec);\r\n\r\n let center = getCircleCenter(p1, p2, p3);\r\n if (!center)//三点共线 使用faker arc\r\n {\r\n this.ParseFromBul(p1.applyMatrix4(this.OCSNoClone), p3.applyMatrix4(this.OCSNoClone), 1e-3);\r\n this.Update();\r\n return;\r\n }\r\n\r\n //起始角度 端点角度\r\n this._StartAngle = angle(p1.clone().sub(center));\r\n this._EndAngle = angle(p3.clone().sub(center));\r\n if (equaln(this._StartAngle, this._EndAngle, 1e-5))//差不多也是三点共线,只不过逃逸了\r\n {\r\n this.ParseFromBul(p1.applyMatrix4(this.OCSNoClone), p3.applyMatrix4(this.OCSNoClone), 1e-3);\r\n this.Update();\r\n return;\r\n }\r\n\r\n //用圆心和其中一个点求距离得到半径:\r\n this._Radius = center.distanceTo(p1);\r\n\r\n this.Center = center.clone().applyMatrix4(this.OCS);\r\n\r\n //求出向量p1->p2,p1->p3\r\n let v1 = p2.clone().sub(p1);\r\n let v2 = p3.clone().sub(p1);\r\n\r\n this._Clockwise = v1.cross(v2).z < 0;\r\n\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 pt = pt.clone().applyMatrix4(this.OCSInv);\r\n if (equalv2(pt, ZeroVec, 1e-8))\r\n return this.GetPointAtParam(0);\r\n\r\n let a = angle(pt);\r\n let param = this.GetParamAtAngle(a);\r\n if (extend || this.ParamOnCurve(param))\r\n return polar(new Vector3, a, this._Radius).applyMatrix4(this._Matrix);\r\n\r\n if (param < 0) return this.GetPointAtParam(0);\r\n else return this.GetPointAtParam(1);\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\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 { 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 { Spline } from '../DatabaseServices/Spline';\r\nimport { Count } from '../Geometry/Count';\r\nimport { CurveMap, Vertice } from '../Geometry/CurveMap';\r\nimport { AsVector2, AsVector3, equaln, equalv2, equalv3, isIntersect, isParallelTo, isPerpendicularityTo, XAxis, YAxis, ZeroVec } 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, arrayRemoveDuplicateBySort, arrayRemoveIf, 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 (equaln(temp, 0, 1e-5))\r\n {\r\n return;\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 cirAng = Math.PI * 2 - cirAng;\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 else if (cu instanceof Spline)\r\n return GetPointAtCurveDir(cu.Convert2Polyline(), pt);\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.GetBulgeAt(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.OCSNoClone;\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 arrayRemoveIf(cus, c => c.Length < LINK_FUZZ);\r\n\r\n let cir: Circle;\r\n arrayRemoveDuplicateBySort(cus, (c1, c2) =>\r\n {\r\n if (cir) return true;\r\n\r\n let status = c1.Join(c2, false, LINK_FUZZ);\r\n if (status === Status.ConverToCircle)\r\n {\r\n let arc = c1 as Arc;\r\n cir = new Circle(arc.Center, arc.Radius);\r\n return true;\r\n }\r\n return status === Status.True;\r\n });\r\n\r\n if (cir)\r\n {\r\n cus.length = 0;\r\n cus.push(cir);\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 const IsNorZeroVector = (v: Vector3) => v && !equalv3(v, ZeroVec, 1e-3);\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 || c instanceof Circle)\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 if (IsNorZeroVector(v))\r\n {\r\n v.normalize().cross(firstV);\r\n if (IsNorZeroVector(v))//避免平行向量\r\n {\r\n normal = v.normalize();\r\n break;\r\n }\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 (IsNorZeroVector(fv))//先判断零向量\r\n firstV = fv.normalize();//再归一化\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(), 1e-5))\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(), 1e-2))\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))\r\n 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 let rects: Polyline[] = [];\r\n let endParam = outline.EndParam;\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 let res2 = c2.IntersectWith2(outline, IntersectOption.ExtendThis);\r\n let pars: number[] = [];\r\n for (let i of res) pars.push(i.argParam);\r\n for (let i of res2) pars.push(i.argParam);\r\n for (let i = 0; i < pars.length; i++)\r\n {\r\n let p = pars[i];\r\n if (p < 0) p = 0;//请参照测试用例\r\n else if (p > endParam) p = endParam;//请参照测试用例\r\n else p = Math.floor(p);\r\n\r\n pars[i] = p;\r\n }\r\n pars.sort((a, b) => a - b);\r\n arrayRemoveDuplicateBySort(pars);\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 { 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 { Box3, Matrix3, Matrix4, Path, Shape as TShape, Vector3 } from 'three';\r\nimport { arrayRemoveIf } from '../Common/ArrayExt';\r\nimport { ObjectSnapMode } from '../Editor/ObjectSnapMode';\r\nimport { IntersectBox2 } from '../Geometry/Box';\r\nimport { equaln } from '../Geometry/GeUtils';\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\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 // TestDraw(this._Outline.Curve.Clone()); //测试代码\r\n // TestDraw(targetShape._Outline.Curve.Clone());\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 {\r\n console.warn(\"未知情况\");//qiannianzhou_lvzhijia.test.ts触发这个 本质是轮廓+轮廓会产生新的洞!\r\n\r\n //TODO: 这是个BUG\r\n // let f = new CADFiler;\r\n // f.Write(3);\r\n // c.Curve.ColorIndex = 1;\r\n // f.WriteObject(c.Curve);\r\n // f.WriteObject(ic.Curve);\r\n // ic.Curve.ColorIndex = 2;\r\n // f.WriteObject(unions.holes[0].Curve);\r\n // unions.holes[0].Curve.ColorIndex = 3;\r\n // copyTextToClipboard(f.ToString());\r\n }\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.UpdateOCSTo(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 { Matrix4 } from 'three';\r\nimport { IntersectBox2 } from '../Geometry/Box';\r\nimport { BoolOpeartionType } from '../GraphicsSystem/BoolOperateUtils';\r\nimport { CADFiler } from './CADFiler';\r\nimport { Shape } from './Shape';\r\n\r\n\r\nexport class ShapeManager\r\n{\r\n constructor(private _ShapeList: Shape[] = [])\r\n {\r\n\r\n }\r\n\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 if (type === RenderType.Physical)\r\n {\r\n let mesh = obj as Mesh;\r\n mesh.material = this.MeshMaterial;\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 BrName = \"brName\",\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 DrawNumber = \"drawNumber\",\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 { AutoRecord } from '../AutoRecord';\r\nimport { Factory } from '../CADFactory';\r\nimport { CADFiler } from '../CADFiler';\r\nimport { Entity } from '../Entity/Entity';\r\nimport { ObjectId } from '../ObjectId';\r\n\r\n@Factory\r\nexport class Hole extends Entity\r\n{\r\n @AutoRecord FId: ObjectId;\r\n @AutoRecord MId: ObjectId;//层板钉:{mid=层板} 排钻:{mid=面}\r\n protected _Height: number;\r\n @AutoRecord OtherHalfTongKong: ObjectId;\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 Clone()\r\n {\r\n let ent = super.Clone();\r\n ent.OtherHalfTongKong = null;\r\n return ent;\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 if (ver >= 6)\r\n {\r\n this.OtherHalfTongKong = file.ReadSoftObjectId();\r\n }\r\n\r\n }\r\n WriteFile(file: CADFiler)\r\n {\r\n super.WriteFile(file);\r\n file.Write(6);//ver\r\n file.Write(this._Height);\r\n file.WriteSoftObjectId(this.FId);\r\n file.WriteSoftObjectId(this.MId);\r\n file.WriteSoftObjectId(this.OtherHalfTongKong);\r\n }\r\n}\r\n","import { BufferGeometry, CylinderBufferGeometry, Float32BufferAttribute, LineSegments, Matrix3, Matrix4, Mesh, Object3D, Shape as TShape, Vector3 } from \"three\";\r\nimport { ColorMaterial } from '../../Common/ColorPalette';\r\nimport { DisposeThreeObj, Object3DRemoveAll } from '../../Common/Dispose';\r\nimport { FixIndex } from \"../../Common/Utils\";\r\nimport { ObjectSnapMode } from \"../../Editor/ObjectSnapMode\";\r\nimport { Box3Ext } from \"../../Geometry/Box\";\r\nimport { RenderType } from \"../../GraphicsSystem/RenderType\";\r\nimport { CADFactory, Factory } from '../CADFactory';\r\nimport { CADFiler } from '../CADFiler';\r\nimport { Circle } from \"../Entity/Circle\";\r\nimport { Hole } from \"./Hole\";\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 return this.BoundingBoxInOCS.applyMatrix4(this._Matrix);\r\n }\r\n\r\n /**\r\n * 返回对象在自身坐标系下的Box\r\n */\r\n get BoundingBoxInOCS(): Box3Ext\r\n {\r\n return new Box3Ext(new Vector3(-this._Radius, -this._Radius, 0), new Vector3(this._Radius, this._Radius, this._Height));\r\n }\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 Erase(isErase: boolean = true)\r\n {\r\n if (isErase === this.IsErase) return;\r\n super.Erase(isErase);\r\n if (!isErase) return;\r\n\r\n if (this.OtherHalfTongKong && !this.OtherHalfTongKong.IsErase)\r\n {\r\n let cy = this.OtherHalfTongKong.Object as this;\r\n cy.Type = GangDrillType.Ymj;\r\n cy.OtherHalfTongKong = null;\r\n }\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 { 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 = 0, //正面\r\n Reverse = 1, //反面\r\n Arbitrary = 2 //任意\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 ISealingData extends IHighSealedItem\r\n{\r\n length: number;\r\n type?: string;\r\n shop?: string;\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\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\n\r\nexport interface LightConfigOption extends IBaseOption\r\n{\r\n Intensity: number;\r\n lightColor: string;\r\n temperature: number;\r\n IndirectLightingIntensity: number;\r\n SpecularScale: number;\r\n CaseShadow: boolean;\r\n}\r\n\r\nexport interface PointLightOption extends LightConfigOption\r\n{\r\n SourceRadius: number;\r\n SoftSourceRadius: number;\r\n SourceLength: number;\r\n}\r\n\r\nexport interface SpotLightOption extends LightConfigOption\r\n{\r\n Angle: number;\r\n InnerConeAngle: number;\r\n SourceRadius: number;\r\n SoftSourceRadius: number;\r\n SourceLength: number;\r\n AttenuationRadius: number;\r\n ShowHelper: boolean;\r\n}\r\n\r\nexport interface RectAreaLightOption extends LightConfigOption\r\n{\r\n Width: number;\r\n Height: number;\r\n BarnDoorAngle: number;\r\n BarnDoorLength: number;\r\n AttenuationRadius: number;\r\n ShowHelper: boolean;\r\n}\r\n\r\nexport interface RightPlaneLightOption\r\n{\r\n version: number;\r\n ShowHemiLight: boolean;\r\n SkyLightColor: string;\r\n SkyLightIntensity: number;\r\n SkyLightIndirectLightingIntensity: number;\r\n ShowSunLight: boolean;\r\n SunLightIntensity: number;\r\n SunLightIndirectLightingIntensity: number;\r\n SunLightColor: string;\r\n SunLightTemperature: number;\r\n SunLightElevationDeg: number;\r\n SunLightRotateDeg: number;\r\n ShowExposure: boolean;\r\n AutoExposure: boolean;\r\n ExposureCompensation: number;\r\n SunTime: string;\r\n}\r\n\r\nexport interface ModifyTextsConfigOption\r\n{\r\n changeTexts: [string, string][];\r\n}\r\n\r\nexport interface KJLImportConfigOption extends IBaseOption\r\n{\r\n materials: MaterialMapOption[];\r\n isImportVirtualModel: boolean;\r\n}\r\nexport interface MaterialMapOption\r\n{\r\n id: string; //引用材质ID\r\n kjlName: string; //酷家乐基础材质名称\r\n}\r\n\r\nexport interface ViewportConfigOption\r\n{\r\n view: number;\r\n wireFrame: string;\r\n}\r\n\r\nexport interface Viewport2ConfigOption\r\n{\r\n align: string;\r\n view1: number,\r\n view2: number,\r\n wireFrame: string[],\r\n}\r\nexport interface Viewport3ConfigOption\r\n{\r\n align: string;\r\n view: number[],\r\n wireFrame: string[],\r\n}\r\n\r\nexport interface Viewport4ConfigOption\r\n{\r\n view: number[],\r\n wireFrame: string[],\r\n}\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\n\r\nexport interface SingleBoardOption extends BoardConfigOption\r\n{\r\n rotateX: number;\r\n rotateY: number;\r\n rotateZ: number;\r\n drawNumber?: 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 name: string;\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 RadioType\r\n{\r\n lefttop = \"1\",\r\n leftbottom = \"2\",\r\n righttop = \"3\",\r\n rightbottom = \"4\",\r\n}\r\n\r\nexport interface IBatchModifyPanelOption extends IBaseOption\r\n{\r\n length: string;\r\n width: string;\r\n thick: string;\r\n position: RadioType;\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\r\nexport interface CommonPanelConfigOption\r\n{\r\n orderType: string;\r\n}\r\n","import { Box3, Matrix4, Vector3 } from \"three\";\r\nimport { HostApplicationServices } from \"../../ApplicationServices/HostApplicationServices\";\r\nimport { EBoardKeyList } from \"../../Common/BoardKeyList\";\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 { 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 { isParallelTo, rotatePoint, ZAxis } from \"../../Geometry/GeUtils\";\r\nimport { DrillType } from \"../../UI/Store/BoardInterface\";\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 (HostApplicationServices.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\r\n if (Math.abs(derv.x) > Math.abs(derv.y))\r\n {\r\n if (derv.x > 0)\r\n option.down = hightDrill[i];\r\n else\r\n option.up = hightDrill[i];\r\n }\r\n else\r\n {\r\n if (derv.y > 0)\r\n option.right = hightDrill[i];\r\n else\r\n option.left = hightDrill[i];\r\n }\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\r\n if (Math.abs(derv.x) > Math.abs(derv.y))\r\n {\r\n if (derv.x > 0)\r\n highDrill.push(option.down);\r\n else\r\n highDrill.push(option.up);\r\n }\r\n else\r\n {\r\n if (derv.y > 0)\r\n highDrill.push(option.right);\r\n else\r\n highDrill.push(option.left);\r\n }\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 { 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 { 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","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 { 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 { EBoardKeyList } from \"../../Common/BoardKeyList\";\r\nimport { ComposingType, FaceDirection, IBaseOption, LinesType } from \"./BoardInterface\";\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 Include = \"//\",\r\n}\r\n","import { IBaseOption } from \"./BoardInterface\";\r\nimport { ITemplateParam } from \"./RightPanelStore/ITemplateParam\";\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 useRule: boolean;\r\n changeTemplateBoardNameOfOpenDir: boolean;//使用模块时,修改板件名称\r\n frontAndBackDrill: boolean; //正反面排孔\r\n}\r\n\r\n/**\r\n * 铰链数据接口\r\n */\r\nexport interface IHingeConfigOption extends IBaseOption\r\n{\r\n hingeCount: number; //铰链\r\n hindeTopDist: number;\r\n hindeBottomDist: number;\r\n useRule: boolean,\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?: ITemplateParam[];\r\n title?: string;\r\n isHandle?: boolean;\r\n isHinge?: boolean;\r\n tagName?: string;\r\n isKuGan?: boolean;\r\n diy_logo?: string;\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 \"./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 { EBoardKeyList } from \"../../Common/BoardKeyList\";\r\nimport { IBaseOption } from \"./BoardInterface\";\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 isExtendsBH2: boolean;//是否继承\r\n followNarrow: boolean;//酒格补板前缩跟随\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","export enum EOrderType\r\n{\r\n ByCreate = \"create_date desc\",\r\n ByCreate2 = \"create_date\",\r\n ByUpdate = \"update_date desc\",\r\n ByUpdate2 = \"update_date\",\r\n ByName = \"name\",\r\n ByName2 = \"name desc\",\r\n}\r\n","import { Curve2RecOption } from \"../Add-on/twoD2threeD/Modals/Curve2RecOption\";\r\nimport { IParseBoardNameOption, IRec2BrOption, IRect2Br2Option } from \"../Add-on/twoD2threeD/R2bInterface\";\r\nimport { EBoardKeyList } from \"../Common/BoardKeyList\";\r\nimport { IUpdateBoardInfosOption } from \"../UI/Components/Board/UpdateBoardInfointerface\";\r\nimport { EMetalsType, ICompHardwareOption, ICylMetalsOption, IExtMetalsOption, IToplineOption } from \"../UI/Components/RightPanel/RightPanelInterface\";\r\nimport { IKuGangDrawOption } from \"../UI/Components/Template/TemplateInterface\";\r\nimport { ECompareType, IBoardFindOption } from \"../UI/Store/BoardFindInterface\";\r\nimport { BehindBoardOption, BehindHeightPositon, BoardProcessOption, BoardType, BrRelativePos, ClosingStripOption, CommonPanelConfigOption, ComposingType, CurtailType, FaceDirection, IBatchModifyPanelOption, IBoardBatchCurtailOption, KJLImportConfigOption, LayerBoardOption, LayerNailOption, LinesType, ModifyTextsConfigOption, PointLightOption, RadioType, RectAreaLightOption, RightPlaneLightOption, SideBoardOption, SingleBoardOption, SpotLightOption, StripType, TBBoardOption, VerticalBoardOption, Viewport2ConfigOption, Viewport3ConfigOption, Viewport4ConfigOption, ViewportConfigOption } from \"../UI/Store/BoardInterface\";\r\nimport { DoorPosType, HandleHorPos, HandleVePos, IDoorConfigOption, IDrawerConfigOption, IHingeConfigOption } from \"../UI/Store/DoorInterface\";\r\nimport { IHSOption } from \"../UI/Store/HSInterface\";\r\nimport { ELatticeArrayType, ILatticeOption } from \"../UI/Store/LatticeInterface\";\r\nimport { EFullDir, EFullType, EWineRackType, EWRackArrayType, IWineRackOption } from \"../UI/Store/WineRackInterface\";\r\nimport { EOrderType } from \"./OrderType\";\r\n\r\nexport const DefaultLayerBoardConfig: LayerBoardOption = {\r\n version: 3,\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: 3,\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: 3,\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 isExtendsBH2: false,\r\n followNarrow: false,\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 DefaultViewportConfigOption: ViewportConfigOption = {\r\n view: 3,\r\n wireFrame: \"打印模式\",\r\n};\r\nObject.freeze(DefaultViewportConfigOption);\r\n\r\nexport const DefaultViewport2ConfigOption: Viewport2ConfigOption = {\r\n align: \"垂直\",\r\n wireFrame: [\"打印模式\", \"打印模式\"],\r\n view1: 1,\r\n view2: 3,\r\n};\r\nObject.freeze(DefaultViewport2ConfigOption);\r\n\r\nexport const DefaultViewport3ConfigOption: Viewport3ConfigOption = {\r\n align: \"V\",\r\n wireFrame: [\"打印模式\", \"打印模式\", \"打印模式\"],\r\n view: [4, 3, 7],\r\n};\r\nObject.freeze(DefaultViewport3ConfigOption);\r\n\r\nexport const DefaultViewport4ConfigOption: Viewport4ConfigOption = {\r\n view: [4, 1, 3, 7],\r\n wireFrame: [\"打印模式\", \"打印模式\", \"打印模式\", \"打印模式\"],\r\n};\r\nObject.freeze(DefaultViewport4ConfigOption);\r\n\r\nexport const DefaultModifyTextsOption: ModifyTextsConfigOption = {\r\n changeTexts: Array.from({ length: 5 }, () => [\"\", \"\"]),\r\n};\r\nObject.freeze(DefaultModifyTextsOption);\r\n\r\nexport const DefaultKJImportOption: KJLImportConfigOption = {\r\n version: 2,\r\n materials: [],\r\n isImportVirtualModel: true\r\n};\r\nObject.freeze(DefaultKJImportOption);\r\n\r\nexport const DefaultPointLightOption: PointLightOption = {\r\n version: 1,\r\n lightColor: \"#FFFFFF\",\r\n temperature: 6500,\r\n Intensity: 100,\r\n IndirectLightingIntensity: 1,\r\n SpecularScale: 1,\r\n SourceRadius: 10,\r\n SoftSourceRadius: 0,\r\n SourceLength: 0,\r\n CaseShadow: true,\r\n};\r\nObject.freeze(DefaultPointLightOption);\r\n\r\nexport const DefaultSpotLightOption: SpotLightOption = {\r\n version: 1,\r\n lightColor: \"#FFFFFF\",\r\n temperature: 6500,\r\n Intensity: 100,\r\n IndirectLightingIntensity: 1,\r\n SpecularScale: 1,\r\n SourceRadius: 0,\r\n SoftSourceRadius: 0,\r\n SourceLength: 0,\r\n Angle: 40,\r\n InnerConeAngle: 0,\r\n AttenuationRadius: 300,\r\n CaseShadow: true,\r\n ShowHelper: true,\r\n};\r\nObject.freeze(DefaultSpotLightOption);\r\n\r\nexport const DefaultRectAreaLightOption: RectAreaLightOption = {\r\n version: 1,\r\n lightColor: \"#FFFFFF\",\r\n temperature: 6500,\r\n Intensity: 100,\r\n IndirectLightingIntensity: 1,\r\n SpecularScale: 1,\r\n AttenuationRadius: 300,\r\n Width: 150,\r\n Height: 150,\r\n BarnDoorAngle: 90,\r\n BarnDoorLength: 20,\r\n CaseShadow: true,\r\n ShowHelper: true,\r\n};\r\nObject.freeze(DefaultRectAreaLightOption);\r\n\r\nexport const DefaultRightPlaneLightOption: RightPlaneLightOption = {\r\n version: 2,\r\n ShowHemiLight: true,\r\n ShowSunLight: true,\r\n SkyLightColor: \"#FFFFFF\",\r\n SkyLightIntensity: 1,\r\n SkyLightIndirectLightingIntensity: 1,\r\n SunLightIntensity: 50,\r\n SunLightIndirectLightingIntensity: 1,\r\n SunLightColor: \"#FFFFFF\",\r\n SunLightTemperature: 6500,\r\n SunLightElevationDeg: 60,\r\n SunLightRotateDeg: 300,\r\n ShowExposure: true,\r\n AutoExposure: false,\r\n ExposureCompensation: 0,\r\n SunTime: \"默认\",\r\n};\r\nObject.freeze(DefaultRightPlaneLightOption);\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 drawNumber: 1\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: 5,\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 useRule: false,\r\n changeTemplateBoardNameOfOpenDir: true,\r\n frontAndBackDrill: false,\r\n};\r\nObject.freeze(DefaultDoorOption);\r\nexport const DefaultHingeOption: IHingeConfigOption = {\r\n hingeCount: 0,\r\n hindeTopDist: 0,\r\n hindeBottomDist: 0,\r\n useRule: false,\r\n};\r\nObject.freeze(DefaultHingeOption);\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 DefaultBatchModifyPanelOption: IBatchModifyPanelOption = {\r\n version: 1,\r\n length: \"L\",\r\n width: \"W\",\r\n thick: \"H\",\r\n position: RadioType.lefttop,\r\n};\r\nObject.freeze(DefaultBatchModifyPanelOption);\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 forceUseUCS: false,\r\n ForceUseFrontViewCS: false,\r\n};\r\nObject.freeze(DefaultCurve2RecOption);\r\n\r\nexport const DefaultUpdateInfoOption: IUpdateBoardInfosOption = {\r\n version: 2,\r\n [EBoardKeyList.BrName]: \"\",\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 isChaiDan: true,\r\n condition: {\r\n [EBoardKeyList.BrName]: false,\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 isChaiDan: true,\r\n autoCutOption: { isAutoCut: false, isRelevance: false }\r\n }\r\n};\r\n\r\nObject.freeze(DefaultUpdateInfoOption);\r\n\r\nexport const DefaultKuGanOption: IKuGangDrawOption = {\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 upDist: 0,\r\n downDist: 0,\r\n};\r\nObject.freeze(DefaultKuGanOption);\r\n\r\n\r\nexport const DefaultParseBoardNameOPtion: IParseBoardNameOption = {\r\n version: 1,\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 isBack: true,\r\n backName: \"背板\",\r\n isAloneStripName: true,//收口条名字独立\r\n};\r\nObject.freeze(DefaultParseBoardNameOPtion);\r\n\r\nexport const DefaultR2bOption: IRec2BrOption = {\r\n version: 5,\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 ...DefaultParseBoardNameOPtion,\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 backBrTemplateId: \"\",\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 closeStripThickness: 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\r\nexport const DefaultHSOption: IHSOption = {\r\n version: 1,\r\n isAll: true,\r\n isHide: true,\r\n isDelete: false,\r\n behind: false,\r\n layer: false,\r\n vertial: false,\r\n footer: false,\r\n tbBoard: false,\r\n specialShape: false,\r\n hole: false,\r\n door: false,\r\n drawer: false,\r\n closingStrip: false,\r\n winerack: false,\r\n wood: false,\r\n nails: false,\r\n topline: false,\r\n handle: false,\r\n hinge: false,\r\n hwComposity: false,\r\n lattice: false,\r\n dim: false,\r\n curve: false,\r\n line: false,\r\n polyline: false,\r\n circle: false,\r\n arc: false\r\n};\r\n\r\nexport const DefaultCommonPanelOption: CommonPanelConfigOption = {\r\n orderType: EOrderType.ByUpdate,\r\n};\r\nObject.freeze(DefaultCommonPanelOption);\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 true => t2 , false => t1\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","\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\nexport const ReportErrorWrap = {\r\n ReportError: undefined,\r\n IsProduction: false,\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(4);\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(4);\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 { 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 { Box3, 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 { UpdateDraw } from \"../../Common/Status\";\r\nimport { ObjectSnapMode } from \"../../Editor/ObjectSnapMode\";\r\nimport { equaln, 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.GetConceptualEdgeMaterial())\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.GetPhysical2EdgeMaterial())\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.GetConceptualEdgeMaterial())\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.GetPhysical2EdgeMaterial())\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\r\n get BoundingBox()\r\n {\r\n let geom = this.MeshGeometry;\r\n\r\n if (!geom)\r\n {\r\n console.error(\"SweepSolid无法建模\");\r\n return new Box3;\r\n }\r\n\r\n if (!geom.boundingBox)\r\n geom.computeBoundingBox();\r\n\r\n return geom.boundingBox.clone().applyMatrix4(this._Matrix);\r\n }\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 ApplyMatrix(m: Matrix4)\r\n {\r\n this.WriteAllObjectRecord();\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 if (!equalv3(xA.clone().cross(yA).normalize(), zA))\r\n this.ApplyMirrorMatrix(m);\r\n else\r\n {\r\n this._Matrix.multiplyMatrices(m, this._Matrix);\r\n this._SpaceOCS.multiplyMatrices(m, this._SpaceOCS);\r\n this.Update(UpdateDraw.Matrix);\r\n }\r\n }\r\n else\r\n {\r\n this.ApplyScaleMatrix(m);\r\n }\r\n return this;\r\n }\r\n protected ApplyMirrorMatrix(m: Matrix4)\r\n {\r\n if (!this.Id)\r\n {\r\n this._Matrix.multiplyMatrices(m, this._Matrix);\r\n return this;\r\n }\r\n let ocsInv = this.OCSInv;\r\n this._PathCurve.ApplyMatrix(this.OCS).ApplyMatrix(m).ApplyMatrix(ocsInv);\r\n\r\n let mtx = this._PathCurve.OCS;\r\n let mtxInv = new Matrix4().getInverse(mtx);\r\n this._PathCurve.ApplyMatrix(mtxInv);\r\n this._SpaceOCS.copy(this._Matrix);\r\n this._Matrix.multiplyMatrices(this._Matrix, mtx);\r\n\r\n this.Update(UpdateDraw.Geometry);\r\n return this;\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, AutoRecordObject } 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 @AutoRecordObject 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(): Curve[]\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(): Curve[]\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 { HostApplicationServices } from \"../../ApplicationServices/HostApplicationServices\";\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 { GetBoardSealingData, GetSealedBoardContour } from \"../../GraphicsSystem/CalcEdgeSealing\";\r\nimport { IHardwareType, Production } from \"../../Production/Product\";\r\nimport { HoleInBoard } from \"../DrawDrilling/HoleUtils\";\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: (key: string, block: Board, size: number) => void; getHoles?: (name: string, hole: CylinderHole) => void; };\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 let holes = ids.map(id => id.Object).filter(h => h) as Hole[];\r\n\r\n if (!holes[0] || !HoleInBoard(holes, b))\r\n continue;\r\n\r\n let isTk = false;\r\n let spliteName: string;\r\n let hole: Hole;\r\n let pxlCount = 0;\r\n findHole:\r\n for (let objId of ids)\r\n {\r\n let gd = objId.Object as CylinderHole | ExtrudeHole;\r\n if (!gd || gd.IsErase) break;\r\n\r\n const group = gd.GroupId?.Object as GroupRecord;\r\n\r\n if (!group)\r\n {\r\n Toaster({ message: `柜名:${b.BoardProcessOption.cabinetName} 板名:${b.Name} 的排钻的编组丢失,统计排钻个数时会丢失该个数!`, timeout: 5000, intent: Intent.DANGER });\r\n break;\r\n }\r\n\r\n if (gd instanceof CylinderHole)\r\n {\r\n switch (gd.Type)\r\n {\r\n case GangDrillType.Pxl:\r\n pxlCount++;\r\n break;\r\n case GangDrillType.Ljg:\r\n case GangDrillType.Ymj:\r\n break;\r\n case GangDrillType.TK:\r\n isTk = true;\r\n break;\r\n case GangDrillType.Wood:\r\n case GangDrillType.WoodPXL:\r\n spliteName = \"木销\";\r\n break;\r\n default:\r\n break findHole;\r\n }\r\n options?.getHoles && options?.getHoles(spliteName || group.Name || \"未命名\", gd);\r\n }\r\n else\r\n {\r\n if (gd.isThrough)\r\n isTk = true;\r\n }\r\n if (!spliteName)\r\n spliteName = group.Name || \"未命名\";\r\n if (!hole)\r\n hole = gd;\r\n }\r\n\r\n if (spliteName && hole)\r\n {\r\n if (isTk && HostApplicationServices.chaidanOption.statTk)\r\n {\r\n addDrillToMap(\"通孔\" + spliteName, hole);\r\n }\r\n else if (pxlCount === 2 && HostApplicationServices.chaidanOption.statSt)\r\n {\r\n addDrillToMap(\"双头\" + spliteName, hole);\r\n }\r\n else\r\n {\r\n addDrillToMap(spliteName, hole);\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 = GetBoardSealingData(GetSealedBoardContour(b, true, true));\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 && options.sealGruopKey)\r\n {\r\n options.sealGruopKey(k, b, data.size);\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","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","import { BufferGeometry, Float32BufferAttribute, Geometry, Line, LineBasicMaterial, LineSegments, Matrix4, Object3D, Vector3 } from \"three\";\r\nimport { ColorMaterial } from \"../Common/ColorPalette\";\r\nimport { FixIndex } from \"../Common/Utils\";\r\nimport { ExtrudeHole } from \"../DatabaseServices/3DSolid/ExtrudeHole\";\r\nimport { Contour } from \"../DatabaseServices/Contour\";\r\nimport { Board } from \"../DatabaseServices/Entity/Board\";\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 { MatrixIsIdentityCS, MoveMatrix } from \"./GeUtils\";\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\n//使用lineseg来生成拉伸的边框,避免生成过多的实体导致的drawcall次数增多\r\nexport function FastWireframe(br: ExtrudeSolid, color = 0, divCount = 6, optArc = true): Line[]\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(divCount, optArc);\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.OCSNoClone);\r\n\r\n let edge = new LineSegments(edgeGeo, material);\r\n edge.applyMatrix4(cu.OCSNoClone);\r\n\r\n let result = [line, edge];\r\n\r\n let ocsInv = br.OCSInv;\r\n\r\n if (br.Grooves.length < 100)\r\n for (let g of br.Grooves)\r\n {\r\n let m = ocsInv.clone().multiply(g.OCSNoClone);\r\n let lines = FastWireframe(g, color, 3, false);\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\n\r\nlet tempP = new Vector3;\r\nexport function FastExtrudeEdgeGeometry(ext: ExtrudeSolid, color = 0, divCount = 6, optArc = true, coords: number[] = [], inv: Matrix4 = undefined)\r\n{\r\n color = color || ext.ColorIndex;\r\n\r\n let thickness = ext.Thickness;\r\n\r\n let cu = ext.ContourCurve;\r\n let pts = cu.Shape.getPoints(divCount, optArc);\r\n\r\n let startIndex = coords.length / 3;\r\n\r\n for (let i = 0; i < pts.length; i++)\r\n {\r\n let p = pts[i];\r\n let nextp = pts[FixIndex(i + 1, pts)];\r\n //底面\r\n coords.push(p.x, p.y, 0, nextp.x, nextp.y, 0);\r\n //顶面\r\n coords.push(p.x, p.y, thickness, nextp.x, nextp.y, thickness);\r\n\r\n if (p[\"_mask_\"])//侧面\r\n coords.push(p.x, p.y, 0, p.x, p.y, thickness);\r\n }\r\n\r\n let m = inv ? (ext.Grooves.length ? inv.clone() : inv).multiply(cu.OCSNoClone) : cu.OCSNoClone;\r\n\r\n if (!MatrixIsIdentityCS(m))\r\n {\r\n let count = coords.length / 3;\r\n for (let i = startIndex; i < count; i++)\r\n {\r\n let a = i * 3;\r\n let b = a + 1;\r\n let c = a + 2;\r\n\r\n tempP.set(coords[a], coords[b], coords[c]);\r\n tempP.applyMatrix4(m);\r\n coords[a] = tempP.x;\r\n coords[b] = tempP.y;\r\n coords[c] = tempP.z;\r\n }\r\n }\r\n\r\n let ocsInv = inv ? (inv.multiply(ext.OCSInv)) : ext.OCSInv;\r\n optArc = ext.Grooves.length < 100;\r\n for (let g of ext.Grooves)\r\n {\r\n FastExtrudeEdgeGeometry(g, color, divCount, optArc, coords, ocsInv.clone().multiply(g.OCSNoClone));\r\n }\r\n\r\n return coords;\r\n}\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, Vector3 } from \"three\";\r\nimport { arrayLast, arrayPushArray } from \"../Common/ArrayExt\";\r\nimport { FixIndex } from \"../Common/Utils\";\r\nimport { equalv3 } from \"./GeUtils\";\r\n\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 arrayPushArray(pts, GenerateExtrudeEdgeGeometryPoints(cs, height));\r\n let geo = new BufferGeometry().setFromPoints(pts);\r\n return geo;\r\n}\r\n\r\n//拉伸点表成为Geom\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\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 geom3 from \"@jscad/modeling/src/geometries/geom3\";\r\nimport { Geom3 } from \"@jscad/modeling/src/geometries/types\";\r\nimport { Mat4 } from \"@jscad/modeling/src/maths/mat4\";\r\nimport { Vec3 } from \"@jscad/modeling/src/maths/vec3\";\r\nimport { intersect } from \"@jscad/modeling/src/operations/booleans\";\r\nimport { Matrix4 } from \"three\";\r\n\r\nexport interface Geom3Res\r\n{\r\n polygons: Array<{\r\n vertices: Array,\r\n plane: [number, number, number, number];\r\n }>;\r\n}\r\n\r\nexport function CSGIntersect(csg1: Geom3, csg2: Geom3, csg2tranfrom: Matrix4): Geom3Res\r\n{\r\n //因为内部使用geom3进行box cache 所以我们新建了一个geom3 避免被cache导致错误\r\n let csg1Clone = geom3.create(csg1.polygons.concat());\r\n let csg2Clone = geom3.create(csg2.polygons.concat());\r\n csg2Clone.transforms = csg2tranfrom.elements as Mat4;\r\n return intersect(csg1Clone, csg2Clone) as unknown as Geom3Res;\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","import { Matrix4 } from \"three\";\r\nimport { arrayLast, arrayRemoveDuplicateBySort } from \"../../../Common/ArrayExt\";\r\nimport { equalv3 } from \"../../../Geometry/GeUtils\";\r\nimport { EPS, _CSGDEBUG } from \"../constants\";\r\nimport { IsMirror } from \"./IsMirrot\";\r\nimport { Plane } from \"./Plane\";\r\nimport { Vector3D } from \"./Vector3\";\r\nimport { Vertex3D } from \"./Vertex3\";\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 arrayRemoveDuplicateBySort(backVertices, (v1, v2) => equalv3(v1.pos, v2.pos, EPS));\r\n if (backVertices.length > 2 && equalv3(backVertices[0].pos, arrayLast(backVertices).pos, EPS))\r\n backVertices.pop();\r\n arrayRemoveDuplicateBySort(frontVertices, (v1, v2) => equalv3(v1.pos, v2.pos, EPS));\r\n if (frontVertices.length > 2 && equalv3(frontVertices[0].pos, arrayLast(frontVertices).pos, EPS))\r\n frontVertices.pop();\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 /**\r\n * 是一个凸多边形\r\n * @param vertices 顶点列表\r\n * @param planenormal 平面法线\r\n * @returns true:是凸多边形 false:不是凸多边形\r\n */\r\n static verticesConvex(vertices: Vertex3D[], planenormal: Vector3D): boolean\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 geom3, { Geom3 } from \"@jscad/modeling/src/geometries/geom3\";\r\nimport { create, Poly3 } from \"@jscad/modeling/src/geometries/poly3\";\r\nimport { Vec3 } from \"@jscad/modeling/src/maths/vec3\";\r\nimport { BufferGeometry, Face3, Geometry, Vector2, Vector3 } from \"three\";\r\nimport { Geom3Res } from \"../../Common/CSGIntersect\";\r\nimport { AsVector2, AsVector3, 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 = AsVector3(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 = AsVector3(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(AsVector3(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 AsVector2(firstVertex.uv),\r\n AsVector2(poly.vertices[i + 1].uv),\r\n AsVector2(poly.vertices[i + 2].uv)\r\n ]);\r\n }\r\n }\r\n return geo;\r\n}\r\n\r\nexport function Geometry2CSG2(geometry: Geometry | BufferGeometry): Geom3\r\n{\r\n if (geometry instanceof BufferGeometry)\r\n geometry = new Geometry().fromBufferGeometry(geometry);\r\n\r\n let polygons: Poly3[] = [];\r\n for (let i = 0; i < geometry.faces.length; i++)\r\n {\r\n let face = geometry.faces[i];\r\n let vertices: Vec3[] = [];\r\n if (face instanceof Face3)\r\n {\r\n vertices.push(geometry.vertices[face.a].toArray() as Vec3);\r\n vertices.push(geometry.vertices[face.b].toArray() as Vec3);\r\n vertices.push(geometry.vertices[face.c].toArray() as Vec3);\r\n }\r\n polygons.push(create(vertices));\r\n }\r\n return geom3.create(polygons);\r\n}\r\n\r\nexport function CSG2Geometry2(csg: Geom3 | Geom3Res): Geometry\r\n{\r\n let geo = new Geometry;\r\n for (let poly of csg.polygons)\r\n {\r\n //@ts-ignore\r\n let normal = new Vector3().fromArray(poly.plane);\r\n\r\n let startIndex = geo.vertices.length;\r\n for (let v of poly.vertices)\r\n geo.vertices.push(new Vector3().fromArray(v));\r\n\r\n for (let i = poly.vertices.length - 3; i >= 0; i--)\r\n {\r\n let f = new Face3(\r\n startIndex,\r\n startIndex + i + 1,\r\n startIndex + i + 2,\r\n normal);\r\n\r\n geo.faces.push(f);\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","import { Poly3 } from \"@jscad/modeling/src/geometries/types\";\r\nimport { Vec3 } from \"@jscad/modeling/src/maths/vec3\";\r\nimport { Vector3 } from \"three\";\r\nimport { Geom3Res } from \"../Common/CSGIntersect\";\r\nimport { ToFixed } from \"../Common/Utils\";\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?: Geom3Res, 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: Poly3)\r\n {\r\n let strs = poly.vertices.map(p => this.GenerateP(p));\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().fromArray(v3);\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: Map = new Map();\r\n private GenerateP(v: Vec3)\r\n {\r\n let str = v.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 { Vec2, Vector2, Vector3 } from \"three\";\r\nimport { FixIndex } from \"../Common/Utils\";\r\nimport { AsVector3 } from \"./GeUtils\";\r\n\r\n/**\r\n * 快速的对点表进行偏移\r\n * @param contour\r\n * @param [offsetDist=1]\r\n * @param [ignoreSpike=true] 忽略尖角优化(如果不忽略,那么尖角将会变钝(有点奇怪))\r\n * @returns 偏移后的点表\r\n */\r\nexport function FastOffset(contour: Vector3[], offsetDist = 1, ignoreSpike = true): Vector3[]\r\n{\r\n let res: Vector3[] = [];\r\n\r\n for (let i = 0; i < contour.length; i++)\r\n {\r\n let v = AsVector3(getBevelVec(contour[i], contour[FixIndex(i - 1, contour)], contour[FixIndex(i + 1, contour)]));\r\n // TestDraw(new Line(contour[i], contour[i].clone().add(v)), 3);\r\n let p = v.multiplyScalar(offsetDist).add(contour[i]);\r\n res.push(p);\r\n }\r\n return res;\r\n}\r\n\r\n//Ref:threejs ExtrudeGeometry源码\r\nfunction getBevelVec(inPt: Vec2, inPrev: Vec2, inNext: Vec2, ignoreSpike = true): Vector2\r\n{\r\n\r\n // computes for inPt the corresponding point inPt' on a new contour\r\n // shifted by 1 unit (length of normalized vector) to the left\r\n // if we walk along contour clockwise, this new contour is outside the old one\r\n //\r\n // inPt' is the intersection of the two lines parallel to the two\r\n // adjacent edges of inPt at a distance of 1 unit on the left side.\r\n\r\n let v_trans_x: number, v_trans_y: number, shrink_by: number; // resulting translation vector for inPt\r\n\r\n // good reading for geometry algorithms (here: line-line intersection)\r\n // http://geomalgorithms.com/a05-_intersect-1.html\r\n\r\n const v_prev_x = inPt.x - inPrev.x,\r\n v_prev_y = inPt.y - inPrev.y;\r\n const v_next_x = inNext.x - inPt.x,\r\n v_next_y = inNext.y - inPt.y;\r\n\r\n const v_prev_lensq = (v_prev_x * v_prev_x + v_prev_y * v_prev_y);\r\n\r\n // check for collinear edges\r\n const collinear0 = (v_prev_x * v_next_y - v_prev_y * v_next_x);\r\n\r\n if (Math.abs(collinear0) > Number.EPSILON)\r\n {\r\n // not collinear\r\n // length of vectors for normalizing\r\n const v_prev_len = Math.sqrt(v_prev_lensq);\r\n const v_next_len = Math.sqrt(v_next_x * v_next_x + v_next_y * v_next_y);\r\n // shift adjacent points by unit vectors to the left\r\n const ptPrevShift_x = (inPrev.x - v_prev_y / v_prev_len);\r\n const ptPrevShift_y = (inPrev.y + v_prev_x / v_prev_len);\r\n\r\n const ptNextShift_x = (inNext.x - v_next_y / v_next_len);\r\n const ptNextShift_y = (inNext.y + v_next_x / v_next_len);\r\n // scaling factor for v_prev to intersection point\r\n const sf = ((ptNextShift_x - ptPrevShift_x) * v_next_y -\r\n (ptNextShift_y - ptPrevShift_y) * v_next_x) /\r\n (v_prev_x * v_next_y - v_prev_y * v_next_x);\r\n\r\n // vector from inPt to intersection point\r\n\r\n v_trans_x = (ptPrevShift_x + v_prev_x * sf - inPt.x);\r\n v_trans_y = (ptPrevShift_y + v_prev_y * sf - inPt.y);\r\n\r\n // Don't normalize!, otherwise sharp corners become ugly\r\n // but prevent crazy spikes\r\n const v_trans_lensq = (v_trans_x * v_trans_x + v_trans_y * v_trans_y);\r\n if (v_trans_lensq <= 2 || ignoreSpike)\r\n return new Vector2(v_trans_x, v_trans_y);\r\n else\r\n shrink_by = Math.sqrt(v_trans_lensq / 2);\r\n }\r\n else\r\n {\r\n // handle special case of collinear edges\r\n let direction_eq = false; // assumes: opposite\r\n\r\n if (v_prev_x > Number.EPSILON)\r\n {\r\n if (v_next_x > Number.EPSILON)\r\n direction_eq = true;\r\n }\r\n else\r\n {\r\n if (v_prev_x < - Number.EPSILON)\r\n {\r\n if (v_next_x < - Number.EPSILON)\r\n direction_eq = true;\r\n }\r\n else\r\n {\r\n if (Math.sign(v_prev_y) === Math.sign(v_next_y))\r\n direction_eq = true;\r\n }\r\n }\r\n\r\n if (direction_eq || ignoreSpike)\r\n {\r\n // console.log(\"Warning: lines are a straight sequence\");\r\n v_trans_x = - v_prev_y;\r\n v_trans_y = v_prev_x;\r\n shrink_by = Math.sqrt(v_prev_lensq);\r\n }\r\n else\r\n {\r\n // console.log(\"Warning: lines are a straight spike\");\r\n v_trans_x = v_prev_x;\r\n v_trans_y = v_prev_y;\r\n shrink_by = Math.sqrt(v_prev_lensq / 2);\r\n }\r\n }\r\n return new Vector2(v_trans_x / shrink_by, v_trans_y / shrink_by);\r\n}\r\n","import { Vector3 } from \"three\";\r\nimport { arraySortByNumber } from \"../../Common/ArrayExt\";\r\nimport { clamp } from \"../../Common/Utils\";\r\nimport { Arc } from \"../../DatabaseServices/Entity/Arc\";\r\nimport { Circle } from \"../../DatabaseServices/Entity/Circle\";\r\nimport { ExtrudeContourCurve } from \"../../DatabaseServices/Entity/Extrude\";\r\nimport { AsVector3 } from \"../GeUtils\";\r\n\r\nconst ARC_SplitLength = 4;//圆的分段长度\r\nconst Arc_MinSplitCount = 12;//圆的最小分段个数\r\nconst ARC_MaxSplitCount = 360;//圆的最大分段个数\r\n\r\n/**\r\n *\r\n * @param cu\r\n */\r\nexport function SplitCurveParams(cu: ExtrudeContourCurve): number[]\r\n{\r\n let xparams: number[] = [];\r\n if (cu instanceof Circle)\r\n {\r\n let splitCount = cu.Radius / ARC_SplitLength;\r\n splitCount = clamp(Math.floor(splitCount), Arc_MinSplitCount, ARC_MaxSplitCount);\r\n for (let i = 0; i < splitCount; i++)\r\n xparams.push(i / splitCount);\r\n }\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.GetBulgeAt(i) !== 0)\r\n {\r\n let arc = cu.GetCurveAtIndex(i) as Arc;\r\n let splitCount = arc.Radius / ARC_SplitLength;\r\n splitCount = clamp(Math.floor(splitCount), Arc_MinSplitCount, ARC_MaxSplitCount);\r\n if (splitCount === 0)\r\n 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)\r\n continue;\r\n\r\n for (let p of params)\r\n {\r\n if (p > 1e-5 && p < 0.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\nexport function SplitCurvePoints(cu: ExtrudeContourCurve): Vector3[]\r\n{\r\n let pts: Vector3[] = [];\r\n if (cu instanceof Circle)\r\n {\r\n let splitCount = cu.Radius / ARC_SplitLength;\r\n splitCount = clamp(Math.floor(splitCount), Arc_MinSplitCount, ARC_MaxSplitCount);\r\n for (let i = 0; i < splitCount; i++)\r\n pts.push(cu.GetPointAtParam(i / splitCount));\r\n }\r\n\r\n else\r\n //分段1\r\n for (let i = 0; i < cu.EndParam; i++)\r\n {\r\n pts.push(AsVector3(cu.GetPoint2dAt(i)).applyMatrix4(cu.OCSNoClone));\r\n if (cu.GetBulgeAt(i) !== 0)\r\n {\r\n let arc = cu.GetCurveAtIndex(i) as Arc;\r\n let splitCount = arc.Radius / ARC_SplitLength;\r\n splitCount = clamp(Math.floor(splitCount), Arc_MinSplitCount, ARC_MaxSplitCount);\r\n if (splitCount === 0)\r\n continue;\r\n\r\n let divParam = 1 / splitCount;\r\n for (let j = 1; j < splitCount - 1; j++)\r\n {\r\n let p = arc.GetPointAtParam(divParam * j);\r\n pts.push(p);\r\n }\r\n }\r\n }\r\n pts.push(cu.EndPoint);\r\n return pts;\r\n}\r\n\r\nexport function SplitArcParams(arc: Arc): number[]\r\n{\r\n let splitCount = arc.Radius / ARC_SplitLength;\r\n splitCount = clamp(Math.floor(splitCount), Arc_MinSplitCount, ARC_MaxSplitCount);\r\n if (splitCount === 0)\r\n return [];\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)\r\n return [];\r\n\r\n return params.filter(p => p > 1e-5 && p < 9.99999);\r\n}\r\n","import Flatbush from 'flatbush';\r\nimport { Box3, BufferGeometry, Float32BufferAttribute, MathUtils, Matrix4, Shape as TShape, ShapeUtils, Vector3 } from \"three\";\r\nimport { arrayPushArray, arrayRemoveDuplicateBySort, arraySortByNumber } from \"../../Common/ArrayExt\";\r\nimport { curveLinkGroup } from \"../../Common/CurveUtils\";\r\nimport { FixIndex } from \"../../Common/Utils\";\r\nimport { Contour, fastCurveInCurve2 } from \"../../DatabaseServices/Contour\";\r\nimport { Board } from \"../../DatabaseServices/Entity/Board\";\r\nimport { Circle } from \"../../DatabaseServices/Entity/Circle\";\r\nimport { Curve } from \"../../DatabaseServices/Entity/Curve\";\r\nimport { ExtrudeContourCurve, ExtrudeSolid, MaxDrawGrooveCount } 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\nimport { SplitCurveParams } from './SplitCurveParams';\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: ExtrudeContourCurve): 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.UpdateOCSTo(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时,表示它是一个洞(如果有多层时,使用IsHole判断)\r\n\r\n box: Box3;\r\n area: number;\r\n constructor(public contour: Contour, public children: ContourTreeNode[] = []) { }\r\n\r\n SetParent(node: ContourTreeNode)\r\n {\r\n if (this.parent)\r\n throw \"ContourTreeNode重复设置父对象\";\r\n this.parent = node;\r\n node.children.push(this);\r\n }\r\n\r\n get Depth(): number\r\n {\r\n let depth = 0;\r\n let parent = this.parent;\r\n while (parent)\r\n {\r\n depth++;\r\n parent = parent.parent;\r\n\r\n if (depth > 10)\r\n throw \"ContourTreeNode嵌套超过10层\";\r\n }\r\n return depth;\r\n }\r\n\r\n get IsHole(): boolean\r\n {\r\n return this.Depth % 2 === 1;\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.concat();\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 arrayPushArray(vertices, 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 if (contourNodes.length < 2) return;\r\n\r\n let fb = new Flatbush(contourNodes.length);\r\n for (let node of contourNodes)\r\n {\r\n node.box = node.contour.BoundingBox;\r\n node.area = node.contour.Area;\r\n fb.add(node.box.min.x, node.box.min.y, node.box.max.x, node.box.max.y);\r\n }\r\n fb.finish();\r\n\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\r\n let ids = fb.search(node1.box.min.x, node1.box.min.y, node1.box.max.x, node1.box.max.y);\r\n ids.sort((i1, i2) => contourNodes[i1].area - contourNodes[i2].area);\r\n for (let id of ids)\r\n {\r\n if (id === i) continue;\r\n\r\n let node2 = contourNodes[id];\r\n if (node2.parent === node1 || node2.area < node1.area) continue;//避免自己的儿子成为自己的父亲\r\n\r\n if (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\nexport class 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\r\n if (pre < this.end)//避免最后一个切割元素小于终点时没有补上最后一个\r\n ret.push(new Tape(pre, this.end, this.bottom, this.top));\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\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: ExtrudeContourCurve,\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 = equaln(vs[0].x, vs[1].x, 1e-2);\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(arr: number[], el: number): number\r\n{\r\n let m = 0;\r\n let n = arr.length - 1;\r\n while (m <= n)\r\n {\r\n let k = (n + m) >> 1;\r\n let cmp = (el - arr[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: ExtrudeContourCurve, cu2: ExtrudeContourCurve, reverseParse = false): [CurveParamRangeRelation, CurveParamRangeRelation]\r\n{\r\n let ins = GetIntersection(cu1, cu2);\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\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 let a1 = cu1.Area, a2 = cu2.Area;\r\n\r\n if (a2 > a1 && cu2.PtInCurve(cu1.StartPoint))//cu2包含cu1\r\n c1Res.container.push([0, cu1.EndParam]);\r\n else\r\n c1Res.outer.push([0, cu1.EndParam]);\r\n\r\n if (a1 > a2 && cu1.PtInCurve(cu2.StartPoint))//cu1包含cu2\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 if (ins.length === 1)\r\n {\r\n let a1 = cu1.Area, a2 = cu2.Area;\r\n\r\n if (a2 > a1 && fastCurveInCurve2(cu2, cu1))//cu2包含cu1\r\n c1Res.container.push([0, cu1.EndParam]);\r\n else\r\n c1Res.outer.push([0, cu1.EndParam]);\r\n\r\n if (a1 > a2 && fastCurveInCurve2(cu1, cu2))//cu1包含cu2\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 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: ExtrudeContourCurve, 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\r\n\r\n/**\r\n *\r\n * @param orgStart 被裁剪范围的起点(如果起点大于终点,那么表示 s->end + 0->e)\r\n * @param orgEnd\r\n * @param clipStart\r\n * @param clipEnd\r\n * @param end\r\n * @returns\r\n */\r\nexport function SubtractRange(orgStart: number, orgEnd: number, clipStart: number, clipEnd: number, end: number): Range[]\r\n{\r\n if (orgStart < 0\r\n || orgEnd < 0\r\n || orgEnd > end\r\n || orgStart > end\r\n || clipStart < 0\r\n || clipEnd < 0\r\n || clipStart > end\r\n || clipEnd > end) return [];\r\n\r\n if (orgStart > orgEnd)\r\n return SubtractRange(orgStart, end, clipStart, clipEnd, end).concat(SubtractRange(0, orgEnd, clipStart, clipEnd, end));\r\n if (clipStart > clipEnd)\r\n {\r\n let arr = SubtractRange(orgStart, orgEnd, clipStart, end, end);\r\n let rem: [number, number][] = [];\r\n for (let s of arr)\r\n arrayPushArray(rem, SubtractRange(s[0], s[1], 0, clipEnd, end));\r\n return rem;\r\n }\r\n\r\n if (clipStart >= orgEnd || clipEnd <= orgStart)\r\n return [[orgStart, orgEnd]];\r\n\r\n if (clipStart <= orgStart)// c1 a1 b1\r\n {\r\n if (clipEnd >= orgEnd) return [];\r\n return [[clipEnd, orgEnd]];\r\n }\r\n\r\n if (clipEnd < orgEnd)\r\n return [[orgStart, clipStart], [clipEnd, orgEnd]];\r\n return [[orgStart, clipStart]];\r\n}\r\n\r\nexport function 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 arrayPushArray(temps, SubtractRange2(r, sr, end));\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, rotateUv: boolean = false)\r\n {\r\n this.GenerateMeshData(br, rotateUv);\r\n }\r\n\r\n protected GenerateMeshData(br: ExtrudeSolid, rotateUv: boolean)\r\n {\r\n this.edgeAndLidBuilder = new EdgeGeometryBuild(this.br.Thickness);\r\n rotateUv = rotateUv || (br instanceof Board && br.BoardProcessOption.lines === LinesType.Reverse);\r\n\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 if (grooves.length < MaxDrawGrooveCount)//只能绘制1000个以下的造型\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.UpdateOCSTo(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.UpdateOCSTo(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.ExtendNone);\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 { Box3, BufferAttribute, BufferGeometry, Material, Matrix4, Mesh, Vector3 } from \"three\";\r\nimport { USE_WORLD_UV, U_WORLD_MOVE, U_WORLD_REP, V_WORLD_MOVE, V_WORLD_REP } from \"../../Add-on/testEntity/USE_WORLD_UV\";\r\nimport { XAxis, XAxisN, YAxis, YAxisN, ZAxis, ZAxisN } from \"../../Geometry/GeUtils\";\r\nimport { Orbit } from \"../../Geometry/Orbit\";\r\n\r\nconst DIRS = [XAxis, YAxis, ZAxis, XAxisN, YAxisN, ZAxisN];\r\nfunction GetFaceDir(direction: Vector3): Vector3\r\n{\r\n let absx = Math.abs(direction.x);\r\n let absy = Math.abs(direction.y);\r\n let absz = Math.abs(direction.z);\r\n\r\n let face = - 1.0;\r\n if (absx > absz)\r\n {\r\n if (absx > absy)\r\n face = direction.x > 0 ? 0 : 3;\r\n else\r\n face = direction.y > 0 ? 1 : 4;\r\n }\r\n else\r\n {\r\n if (absz > absy)\r\n face = direction.z > 0 ? 2 : 5;\r\n else\r\n face = direction.y > 0 ? 1 : 4;\r\n }\r\n return DIRS[face];\r\n}\r\n\r\nexport class GenUVForWorld\r\n{\r\n InvMtxMap = new Map();\r\n\r\n private _Z = new Vector3;\r\n private _X = new Vector3;\r\n private _Y = new Vector3;\r\n private _Box = new Box3;\r\n private _Box2 = new Box3;\r\n GetMtxInv(normalX: number, normalY: number, normalZ: number)\r\n {\r\n this._Z.set(normalX, normalY, normalZ);\r\n let n = GetFaceDir(this._Z);\r\n let mtx = this.InvMtxMap.get(n);\r\n if (mtx)\r\n return mtx;\r\n\r\n this._Z.copy(n);\r\n Orbit.ComputUpDirection(this._Z, this._Y, this._X);\r\n mtx = new Matrix4().makeBasis(this._X, this._Y, this._Z);\r\n mtx.getInverse(mtx);\r\n\r\n this.InvMtxMap.set(n, mtx);\r\n return mtx;\r\n }\r\n\r\n GenUV(mesh: Mesh)\r\n {\r\n if (Array.isArray(mesh.material))\r\n {\r\n let geo = mesh.geometry;\r\n if (!geo.boundingBox)\r\n geo.computeBoundingBox();\r\n let normals = geo.getAttribute(\"normal\") as BufferAttribute;\r\n let pos = geo.getAttribute(\"position\") as BufferAttribute;\r\n let uvs = geo.getAttribute(\"uv\") as BufferAttribute;\r\n for (let i = 0; i < mesh.material.length; i++)\r\n {\r\n let mtl = mesh.material[i];\r\n if (mtl[USE_WORLD_UV])\r\n {\r\n this._Box.makeEmpty();\r\n let g = mesh.geometry.groups[i];\r\n for (let y = 0; y < g.count; y++)\r\n {\r\n let index = (y + g.start) * 3;\r\n this._X.set(pos.array[index], pos.array[index + 1], pos.array[index + 2]);\r\n this._Box.expandByPoint(this._X);\r\n }\r\n\r\n for (let y = 0; y < g.count; y++)\r\n {\r\n let index = (y + g.start) * 3;\r\n let mtx = this.GetMtxInv(normals.array[index], normals.array[index + 1], normals.array[index + 2]);\r\n\r\n this._X.set(pos.array[index], pos.array[index + 1], pos.array[index + 2]);\r\n\r\n this._X.applyMatrix4(mtx);\r\n\r\n this._Box2.copy(this._Box).applyMatrix4(mtx);\r\n\r\n //@ts-ignore\r\n uvs.array[(y + g.start) * 2] = (((this._X.x - (this._Box2.min.x + this._Box2.max.x) * 0.5)) * 1e-2 + mtl[U_WORLD_MOVE]) * mtl[U_WORLD_REP] + 0.5;\r\n //@ts-ignore\r\n uvs.array[(y + g.start) * 2 + 1] = (((this._X.y - (this._Box2.min.y + this._Box2.max.y) * 0.5)) * 1e-2 - mtl[V_WORLD_MOVE]) * mtl[V_WORLD_REP] + 0.5;\r\n }\r\n uvs.needsUpdate = true;\r\n }\r\n }\r\n }\r\n\r\n else\r\n {\r\n let mtl = mesh.material;\r\n if (mtl[USE_WORLD_UV])\r\n this.GenGeoUV(mesh.geometry, mtl, 1e-2);\r\n }\r\n }\r\n\r\n GenGeoUV(geo: BufferGeometry, mtl: Material, scale = 1e-3)\r\n {\r\n if (!geo.boundingBox)\r\n geo.computeBoundingBox();\r\n\r\n let normals = geo.getAttribute(\"normal\") as BufferAttribute;\r\n let pos = geo.getAttribute(\"position\") as BufferAttribute;\r\n let uvs = geo.getAttribute(\"uv\") as BufferAttribute;\r\n for (let y = 0; y < pos.count; y++)\r\n {\r\n let index = y * 3;\r\n let mtx = this.GetMtxInv(normals.array[index], normals.array[index + 1], normals.array[index + 2]);\r\n\r\n this._X.set(pos.array[index], pos.array[index + 1], pos.array[index + 2]);\r\n\r\n this._X.applyMatrix4(mtx);\r\n\r\n this._Box.copy(geo.boundingBox);\r\n this._Box.applyMatrix4(mtx);\r\n\r\n //@ts-ignore\r\n uvs.array[y * 2] = (((this._X.x - (this._Box.min.x + this._Box.max.x) * 0.5)) * scale + mtl[U_WORLD_MOVE]) * mtl[U_WORLD_REP] + 0.5;\r\n //@ts-ignore\r\n uvs.array[y * 2 + 1] = (((this._X.y - (this._Box.min.y + this._Box.max.y) * 0.5)) * scale + mtl[V_WORLD_MOVE]) * mtl[V_WORLD_REP] + 0.5;\r\n }\r\n uvs.needsUpdate = true;\r\n }\r\n}\r\n","import { Geom3 } from '@jscad/modeling/src/geometries/types';\r\nimport Flatbush from 'flatbush';\r\nimport { Box3, BoxGeometry, BufferGeometry, ExtrudeGeometry, ExtrudeGeometryOptions, Float32BufferAttribute, Geometry, InstancedInterleavedBuffer, InterleavedBufferAttribute, Line as TLine, LineSegments, Matrix3, Matrix4, Mesh, Object3D, 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, arrayPushArray, arrayRemoveIf, arrayRemoveOnce, arraySortByNumber, arraySum } from \"../../Common/ArrayExt\";\r\nimport { ColorMaterial } from \"../../Common/ColorPalette\";\r\nimport { CSGIntersect } from '../../Common/CSGIntersect';\r\nimport { equalCurve, PolylineSpliteRect } from \"../../Common/CurveUtils\";\r\nimport { DisposeThreeObj, Object3DRemoveAll } from \"../../Common/Dispose\";\r\nimport { Log } from \"../../Common/Log\";\r\nimport { reviseMirrorMatrix, SetMtxVector, tempMatrix1, TransformVector, Vector2ApplyMatrix4 } from \"../../Common/Matrix4Utils\";\r\nimport { Status, UpdateDraw } from \"../../Common/Status\";\r\nimport { Geometry2CSG2 } 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 { FastExtrudeEdgeGeometry, FastWireframe } from \"../../Geometry/CreateWireframe\";\r\nimport { EdgesGeometry } from \"../../Geometry/EdgeGeometry\";\r\nimport { ExtrudeGeometryBuilder } from \"../../Geometry/ExtrudeMeshGeomBuilder/ExtrudeEdgeGeometry2\";\r\nimport { AsVector2, 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 { GenUVForWorld } from './GenUVForWorld';\r\nimport { Line } from \"./Line\";\r\nimport { Polyline } from \"./Polyline\";\r\nimport { Region } from \"./Region\";\r\n\r\nexport type ExtrudeContourCurve = Polyline | Circle;\r\nexport type ExtrudeContour = Polyline | Circle | ExtrudeSolid | Region;\r\n\r\nexport const MaxDrawGrooveCount = 1000;//最大的绘制槽个数(但是还是会绘制线)\r\n\r\n\r\n@Factory\r\nexport class ExtrudeSolid extends Entity\r\n{\r\n /*\r\n y-----------\r\n ^ |\r\n | ↑ |\r\n | | | height\r\n | ↓ |\r\n | |\r\n 0---width->x\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 * 出于优化考虑,可能未初始化,请注意调用this.ContourCurve\r\n * 形状位于WCS 0点位置,不随OCS变化而变化\r\n */\r\n protected contourCurve: ExtrudeContourCurve;\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 set Material(materialId: ObjectId)\r\n {\r\n let oldMaterial = this.Material ?? this._db?.DefaultMaterial.objectId;\r\n super.Material = materialId;\r\n\r\n let isf_old = Boolean((oldMaterial?.Object as PhysicalMaterialRecord)?.IsFull);\r\n let isf_new = Boolean((materialId?.Object as PhysicalMaterialRecord)?.IsFull);\r\n if (isf_old !== isf_new)\r\n this.Update();\r\n else if ((materialId?.Object as PhysicalMaterialRecord)?.UseWorldUV)\r\n {\r\n if (this._MeshGeometry)\r\n this.GenWorldUV(this._MeshGeometry);\r\n }\r\n }\r\n\r\n get Material() { return super.Material; }\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 if (this.width > 0 && this.height > 0 && this.thickness > 0)\r\n return new Box3Ext(new Vector3, new Vector3(this.width, this.height, this.thickness));\r\n else\r\n return new Box3Ext().setFromPoints([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\r\n for (let g of this.grooves)\r\n {\r\n g._SpaceOCS.copy(this._SpaceOCS);//因为在镜像的时候 没有设置这个会导致错误 所以拷贝一下\r\n g.objectId = new ObjectId;\r\n g.ApplyMatrix(m);\r\n g.objectId = undefined;\r\n }\r\n\r\n //由于修改矩阵会导致矩阵错误\r\n this.csg = undefined;\r\n this.AutoUpdate = updateBak;\r\n\r\n let te = m.elements;\r\n let scaleXSq = te[0] * te[0] + te[1] * te[1] + te[2] * te[2];\r\n let scaleYSq = te[4] * te[4] + te[5] * te[5] + te[6] * te[6];\r\n let scaleZSq = te[8] * te[8] + te[9] * te[9] + te[10] * te[10];\r\n\r\n if (!equaln(scaleXSq, 1, 1e-4) || !equaln(scaleYSq, 1, 1e-4) || !equaln(scaleZSq, 1, 1e-4))\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.OCSNoClone);\r\n cu.ApplyMatrix(m);\r\n cu.ApplyMatrix(this.OCSInv);\r\n this.CheckContourCurve();\r\n return this;\r\n }\r\n protected ApplyMirrorMatrix(m: Matrix4)\r\n {\r\n this.WriteAllObjectRecord();\r\n const curve = this.ContourCurve;\r\n if (curve instanceof Polyline && !equalv3(curve.Position, ZeroVec))\r\n {\r\n let pts = curve.LineData;\r\n if (equalv2(pts[0].pt, arrayLast(pts).pt))\r\n pts.pop();\r\n let ocs = curve.OCSNoClone;\r\n for (let p of pts)\r\n {\r\n Vector2ApplyMatrix4(ocs, p.pt);\r\n }\r\n curve.OCS = IdentityMtx4;\r\n }\r\n let nor = this.Normal.applyMatrix4(this.SpaceOCSInv.setPosition(ZeroVec));\r\n if (equaln(Math.abs(nor.z), 1))\r\n {\r\n reviseMirrorMatrix(this._Matrix, 1);\r\n if (curve instanceof Circle)\r\n {\r\n curve.ApplyMatrix(new Matrix4().makeRotationX(Math.PI));\r\n }\r\n else\r\n {\r\n reviseMirrorMatrix(curve.OCSNoClone, 1);\r\n }\r\n\r\n this.SetContourCurve(curve);\r\n }\r\n else if (equaln(Math.abs(nor.x), 1))\r\n {\r\n reviseMirrorMatrix(this._Matrix, 2);\r\n this._Matrix.setPosition(this.Position.add(this.Normal.multiplyScalar(-this.Thickness)));\r\n }\r\n else\r\n {\r\n reviseMirrorMatrix(this._Matrix, 0);\r\n if (curve instanceof Circle)\r\n {\r\n curve.ApplyMatrix(new Matrix4().makeRotationY(Math.PI));\r\n }\r\n else\r\n {\r\n reviseMirrorMatrix(curve.OCSNoClone, 0);\r\n }\r\n\r\n this.SetContourCurve(curve);\r\n }\r\n\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: ExtrudeContourCurve)\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坐标系0点\r\n */\r\n SetContourCurve(curve: ExtrudeContourCurve)\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\r\n let x = new Vector3().setFromMatrixColumn(ocs, 0);\r\n let y = new Vector3().setFromMatrixColumn(ocs, 1);\r\n let z = new Vector3().setFromMatrixColumn(ocs, 2);\r\n let z1 = x.cross(y);\r\n\r\n let isMirror = equaln(ocs.elements[10], -1, 1e-4) || !equalv3(z, z1);\r\n let isRotate = !equaln(ocs.elements[0], 1);\r\n\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 ocsInv = this.OCSInv;\r\n let x = TransformVector(xAxis.clone(), ocsInv).setZ(0).normalize();\r\n if (equalv3(ZeroVec, x, 1e-5)) return this;\r\n\r\n this.WriteAllObjectRecord();\r\n\r\n let a = Math.atan2(x.y, x.x);\r\n\r\n x.transformDirection(this._Matrix);\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 this.ContourCurve.ApplyMatrix(tempMatrix1.makeRotationZ(-a));//复用了这个矩阵\r\n this.CheckContourCurve();\r\n if (this.contourCurve instanceof Polyline)\r\n this.contourCurve.UpdateOCSTo(IdentityMtx4);\r\n\r\n this.Update();\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 = 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, 1e-3))\r\n holes.push(Contour.CreateContour(g.ContourCurve.Clone().ApplyMatrix(this.OCSInv.multiply(g.OCSNoClone)), 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 arrayPushArray(grooves, gs);\r\n }\r\n if (grooves.length === 0) return false;\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 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.OCSNoClone);\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.OCSNoClone);\r\n pts.push(\r\n ...l.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform)\r\n );\r\n }\r\n\r\n if (this.grooves.length < 100)\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.OCSNoClone); });\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.GetBulgeAt(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\r\n private csg: Geom3;\r\n get CSG(): Geom3\r\n {\r\n if (this.csg) return this.csg;\r\n\r\n this.csg = Geometry2CSG2(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\r\n //0不平行 1同向,2反向 () 这里保证判断平行和判断方向相反的判断方式是一样的 #I3BUSY\r\n const __eqfuzz__ = 1e-3;\r\n let parType = equalv3(n1, n2, __eqfuzz__) ? 1 : equalv3(n1, n2.clone().negate(), __eqfuzz__) ? 2 : 0;\r\n\r\n if (parType > 0)\r\n {\r\n target = target.Clone().ClearDraw();\r\n if (parType === 2)\r\n {\r\n let mtx = target._Matrix;\r\n SetMtxVector(mtx, 2, n1);\r\n let p = n1.setFromMatrixColumn(mtx, 3);\r\n p.add(n2.multiplyScalar(target.thickness));\r\n SetMtxVector(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 ibox.getSize(size);\r\n if (size.x < 1 || size.y < 1 || size.z < 0.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 //必须修正向量,否则会出错 #I3BUSY\r\n xv.normalize();\r\n yv.normalize();\r\n zv.normalize();\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 interCSG = CSGIntersect(this.CSG, target.CSG, this.OCSInv.multiply(target.OCSNoClone));\r\n\r\n //测试绘制\r\n // TestDraw(new Mesh(CSG2Geometry2(interBSP), ColorMaterial.GetConceptualMaterial(1, DoubleSide)));\r\n\r\n let topology = new BSPGroupParse(interCSG);\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: ExtrudeContourCurve[] = [];\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 if (this.grooves.length < 2) return;\r\n //生命周期:初始化->used->undefined\r\n type ExtData = {\r\n index: number;\r\n used: boolean;\r\n box: Box3;\r\n };\r\n\r\n //构建二维空间索引\r\n let ocsInv = this.OCSInv;\r\n let mtx = new Matrix4;\r\n let fb = new Flatbush(this.grooves.length);\r\n for (let i = 0; i < this.grooves.length; i++)\r\n {\r\n let g = this.grooves[i];\r\n mtx.multiplyMatrices(ocsInv, g.OCSNoClone);\r\n let cu = g.ContourCurve.Clone().ApplyMatrix(mtx);\r\n let box = cu.BoundingBox;\r\n g.TempData = { index: i, used: false, box };\r\n fb.add(box.min.x, box.min.y, box.max.x, box.max.y);\r\n }\r\n fb.finish();\r\n\r\n let retGs: ExtrudeSolid[] = [];//新的槽列表\r\n\r\n for (let i = 0; i < this.grooves.length; i++)\r\n {\r\n let startG = this.grooves[i];\r\n\r\n if (startG.TempData === undefined)//已经被使用\r\n continue;\r\n\r\n retGs.push(startG);\r\n\r\n let stack = [startG];\r\n\r\n for (let j = 0; j < stack.length; j++)\r\n {\r\n let g = stack[j];\r\n let gd = g.TempData as ExtData;//能入栈的都是未被使用的\r\n\r\n let ids = fb.search(gd.box.min.x - 1e-2, gd.box.min.y - 1e-2, gd.box.max.x + 1e-2, gd.box.max.y + 1e-2, (id =>\r\n {\r\n if (id <= i) return false;//(id比它小(如果能合并 早就合并了))\r\n let gd = this.grooves[id].TempData as ExtData;\r\n return gd && !gd.used;//判断被使用\r\n }));\r\n\r\n for (let id of ids)\r\n {\r\n let ng = this.grooves[id];\r\n if (equaln(startG.knifeRadius, ng.knifeRadius, 1e-3) && startG.Join(ng) === Status.True)\r\n {\r\n (ng.TempData as ExtData).used = true;\r\n stack.push(ng);\r\n }\r\n }\r\n\r\n g.TempData = undefined;//总是保证被使用的造型这个数据为空\r\n }\r\n }\r\n\r\n if (retGs.length !== this.grooves.length)\r\n {\r\n this.grooves = retGs;\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 (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\r\n //分裂后重新将排钻实体设置给不同的实体\r\n HandleSpliteEntitys(splitEntitys: this[]) { }\r\n\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\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.GetConceptualEdgeMaterial())\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\r\n Object.defineProperty(mesh, \"castShadow\", {\r\n get: () => this.CaseShadow\r\n });\r\n Object.defineProperty(mesh, \"receiveShadow\", {\r\n get: () => this.CaseShadow\r\n });\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\r\n Object.defineProperty(mesh, \"castShadow\", {\r\n get: () => this.CaseShadow\r\n });\r\n Object.defineProperty(mesh, \"receiveShadow\", {\r\n get: () => this.CaseShadow\r\n });\r\n\r\n return new Object3D().add(\r\n mesh,\r\n new LineSegments(this.EdgeGeometry, ColorMaterial.GetPhysical2EdgeMaterial())\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 if (this.__CacheSplitExtrudes)\r\n for (let e of this.__CacheSplitExtrudes)\r\n e._MaterialId = this._MaterialId;\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 if (grooves.length < 1000)\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 this.GenWorldUV(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 if (grooves.length < MaxDrawGrooveCount)\r\n this._EdgeGeometry = builder.EdgeGeometry;\r\n this.UpdateUV(null, null);\r\n this.GenWorldUV(this._MeshGeometry);\r\n\r\n return this._MeshGeometry;\r\n }\r\n\r\n private _EdgeGeometry: EdgesGeometry | BufferGeometry;\r\n 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\r\n if (this._EdgeGeometry)\r\n return this._EdgeGeometry;\r\n\r\n //这里我们超过100就用这个,为了性能 和MaxDrawGrooveCount不一致\r\n if (this.grooves.length > 100 || this.grooves.every(g => equaln(g.thickness, this.thickness)) || this.grooves.length === 0)\r\n {\r\n let coords = FastExtrudeEdgeGeometry(this, this.ColorIndex, 20, true);\r\n let edgeGeo = new BufferGeometry();\r\n edgeGeo.setAttribute('position', new Float32BufferAttribute(coords, 3));\r\n this._EdgeGeometry = edgeGeo;\r\n return this._EdgeGeometry;\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 mtl = (this.Material?.Object as PhysicalMaterialRecord) ?? this.Db?.DefaultMaterial;\r\n\r\n if (mtl?.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\r\n GenWorldUV(geo: BufferGeometry)\r\n {\r\n let mtl = (this.Material?.Object as PhysicalMaterialRecord) ?? this.Db?.DefaultMaterial;\r\n\r\n if (mtl?.UseWorldUV)\r\n {\r\n let gen = new GenUVForWorld;\r\n gen.GenGeoUV(geo, mtl.Material);\r\n }\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.GetConceptualEdgeMaterial())\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\r\n Object.defineProperty(mesh, \"castShadow\", {\r\n get: () => this.CaseShadow\r\n });\r\n Object.defineProperty(mesh, \"receiveShadow\", {\r\n get: () => this.CaseShadow\r\n });\r\n\r\n return obj.add(\r\n mesh,\r\n new LineSegments(this.EdgeGeometry, ColorMaterial.GetPhysical2EdgeMaterial())\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 ExtrudeContourCurve;\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 { 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 { AsVector3, equaln, equalv2, equalv3, ZeroVec } from \"../../Geometry/GeUtils\";\r\nimport { GenerateExtrudeEdgeGeometry } from \"../../Geometry/SimpleExtrudeEdgeGeometry\";\r\nimport { ScaleUV } from \"../../Geometry/UVUtils\";\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 { ExtrudeContourCurve, ExtrudeSolid } from \"../Entity/Extrude\";\r\nimport { GenUVForWorld } from \"../Entity/GenUVForWorld\";\r\nimport { Polyline } from \"../Entity/Polyline\";\r\nimport { PhysicalMaterialRecord } from \"../PhysicalMaterialRecord\";\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: ExtrudeContourCurve = 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: ExtrudeContourCurve)\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 Erase(isErase: boolean = true)\r\n {\r\n if (isErase === this.IsErase) return;\r\n super.Erase(isErase);\r\n if (!isErase) return;\r\n\r\n if (this.OtherHalfTongKong && !this.OtherHalfTongKong.IsErase)\r\n {\r\n let cy = this.OtherHalfTongKong.Object as this;\r\n cy.isThrough = false;\r\n cy.OtherHalfTongKong = null;\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.OCSNoClone);\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: 6,\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\r\n let mtl = this.Material?.Object as PhysicalMaterialRecord ?? this.Db?.DefaultMaterial;\r\n if (mtl?.UseWorldUV)\r\n {\r\n let bgeo = new BufferGeometry().fromGeometry(geo);\r\n let gen = new GenUVForWorld();\r\n gen.GenGeoUV(bgeo, mtl.Material);\r\n return bgeo;\r\n }\r\n else\r\n ScaleUV(geo);\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.GetBulgeAt(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.OCSNoClone);\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.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.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.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.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.Conceptual || 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.Physical)\r\n {\r\n let mesh = obj as Mesh;\r\n mesh.material = this.MeshMaterial;\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 ExtrudeContourCurve;\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 { 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 { Matrix3, Matrix4, Object3D, Vector3 } from \"three\";\r\nimport { AddEntityDrawObject } from \"../../Common/AddEntityDrawObject\";\r\nimport { arrayPushArray, 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 abstract 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 /**\r\n * 返回对象在自身坐标系下的Box\r\n */\r\n override get BoundingBoxInOCS(): Box3Ext\r\n {\r\n //这个代码可能是错误的. 当复合实体是子实体时,复合实体的矩阵和世界坐标垂直,但是父实体没有垂直时,此时的结果是错误的 所以注释掉这个代码\r\n // if (\r\n // (equaln(this._Matrix.elements[0], 1, 1e-5) ||\r\n // equaln(this._Matrix.elements[1], 1, 1e-5) ||\r\n // equaln(this._Matrix.elements[2], 1, 1e-5)\r\n // //3\r\n // )\r\n // &&\r\n // (equaln(this._Matrix.elements[4], 1, 1e-5) ||\r\n // equaln(this._Matrix.elements[5], 1, 1e-5) ||\r\n // equaln(this._Matrix.elements[6], 1, 1e-5)\r\n // //7\r\n // )\r\n // &&\r\n // (equaln(this._Matrix.elements[8], 1, 1e-5) ||\r\n // equaln(this._Matrix.elements[9], 1, 1e-5) ||\r\n // equaln(this._Matrix.elements[10], 1, 1e-5)\r\n // )\r\n // )\r\n // return this.GetBoundingBoxInMtx(this.OCSInv);\r\n // else\r\n {\r\n let box = new Box3Ext;\r\n for (let e of this.Entitys)\r\n box.union(e.BoundingBoxInOCS.applyMatrix4(e.OCSNoClone));\r\n return box;\r\n }\r\n }\r\n\r\n //#region 绘制\r\n // OnlyRenderType = true; //我们现在不需要这样,因为我们每个绘制类型的Object的子实体都有子实体的渲染类型(唯一的缺点可能是渲染速度变慢了?)\r\n /**\r\n * 初始化绘制的threejs实体,子类型重载该函数初始化绘制实体.\r\n */\r\n override 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.OCSNoClone);\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\r\n //实体在被内嵌时,它绘制对象的世界矩阵会被影响,所以这里我们不直接计算它的盒子,而是用绘制对象的盒子来计算包围盒,避免错误\r\n //例如 复合扫略实体 的ZoomObject在这个实现下是错误的(因为扫略实体也是直接取绘制对象的包围盒)\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.OCSNoClone);\r\n // }\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\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 rtype = renderType;\r\n if (renderType === RenderType.Print && e.IsOnlyRender)\r\n rtype += 100;\r\n\r\n let o = e.GetDrawObjectFromRenderType(rtype);\r\n if (o)\r\n {\r\n o.traverse(obj => obj.userData = {});\r\n AddEntityDrawObject(obj, e, rtype);\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 {\r\n if (!e.Db) e.SetDatabase(this.Db);\r\n e.Material = id;\r\n }\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 arrayPushArray(pts, e.Clone().ApplyMatrix(this.OCSNoClone).GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform));\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 ApplyMirrorMatrix(m: Matrix4)\r\n {\r\n if (this.Id)\r\n this.Update(UpdateDraw.Geometry);\r\n return this;\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 { DefaultCompositeMetalsOption } from \"../../Editor/DefaultConfig\";\r\nimport { ICompHardwareOption } from \"../../UI/Components/RightPanel/RightPanelInterface\";\r\nimport { AutoRecord, AutoRecordObject } from \"../AutoRecord\";\r\nimport { Factory } from \"../CADFactory\";\r\nimport { CADFiler } from \"../CADFiler\";\r\nimport { CompositeEntity } from \"../Entity/CompositeEntity\";\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 @AutoRecordObject HardwareOption: ICompHardwareOption = { ...DefaultCompositeMetalsOption };\r\n @AutoRecord DataList: [string, string][] = [];\r\n @AutoRecord RelevanceBoards: ObjectId[] = [];\r\n @AutoRecord RelevanceHardware: ObjectId[] = []; //当这个实体为复合板时,关联五金的信息\r\n /**\r\n *\r\n * @param [checkIsHole=false] true:只获取是孔的实体 false:返回所有实体\r\n * @param [checkFilter] 过滤函数\r\n * @returns\r\n */\r\n GetAllEntity(checkIsHole: boolean = false, checkFilter?: (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 (!checkIsHole || e.HardwareOption.isHole)\r\n holes.push(...e.GetAllEntity(checkIsHole, checkFilter).map(h => h.ApplyMatrix(this.OCSNoClone)));\r\n }\r\n else\r\n {\r\n if (!checkFilter || checkFilter(e))\r\n holes.push(e.Clone().ApplyMatrix(this.OCSNoClone));\r\n }\r\n }\r\n return holes;\r\n }\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 file.Read(),\r\n file.Read()\r\n ];\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 > 2)\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 this.RelevanceBoards.push(file.ReadSoftObjectId());\r\n }\r\n\r\n if (v > 3)\r\n {\r\n let count = file.Read();\r\n this.RelevanceHardware.length = 0;\r\n for (let i = 0; i < count; i++)\r\n this.RelevanceHardware.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(4);\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 file.Write(this.RelevanceHardware.length);\r\n for (let id of this.RelevanceHardware)\r\n file.WriteSoftObjectId(id);\r\n }\r\n}\r\n","import { Box3, Matrix4, Vector3 } from \"three\";\r\nimport { MatrixPlanarizere } from \"../../Common/Matrix4Utils\";\r\nimport { Contour } from \"../../DatabaseServices/Contour\";\r\nimport { Board } from \"../../DatabaseServices/Entity/Board\";\r\nimport { Polyline } from \"../../DatabaseServices/Entity/Polyline\";\r\nimport { Region } from \"../../DatabaseServices/Entity/Region\";\r\nimport { BoolOpeartionType } from \"../../GraphicsSystem/BoolOperateUtils\";\r\nimport { Box3Ext } from \"../Box\";\r\nimport { equaln, XAxis } from \"../GeUtils\";\r\nimport { BoardFaceType } from \"./BoardGetFace\";\r\n\r\nexport interface BoardFaceParams\r\n{\r\n type: BoardFaceType;\r\n length: number;\r\n width: number;\r\n localBoard: Board;\r\n matrix4: Matrix4;\r\n region?: Region;\r\n isRect?: boolean;\r\n drillType?: string;\r\n}\r\nexport class Face\r\n{\r\n type: BoardFaceType;\r\n Length: number;\r\n Width: number;\r\n private _Region: Region;\r\n LocalBoard: Board;\r\n InterBoard: Board; //提供侧面的作为相交面\r\n isEqualType: boolean = false;\r\n OCS: Matrix4 = new Matrix4();\r\n IsRect: boolean = true;\r\n DrillType: string;\r\n constructor(parameters?: BoardFaceParams)\r\n {\r\n if (parameters)\r\n {\r\n this.type = parameters.type;\r\n this._Region = parameters.region;\r\n this.LocalBoard = parameters.localBoard;\r\n this.OCS = parameters.matrix4;\r\n this.Length = parameters.length;\r\n this.Width = parameters.width;\r\n if (parameters.isRect !== undefined)\r\n this.IsRect = parameters.isRect;\r\n if (parameters.drillType)\r\n this.DrillType = parameters.drillType;\r\n else\r\n this.DrillType = this.LocalBoard.BoardProcessOption.drillType;\r\n }\r\n }\r\n get Region()\r\n {\r\n if (!this._Region)\r\n this._Region = Region.CreateFromCurves([new Polyline().Rectangle(this.Length, this.Width)]);\r\n return this._Region;\r\n }\r\n get OCSInv()\r\n {\r\n return new Matrix4().getInverse(this.OCS);\r\n }\r\n get Normal()\r\n {\r\n return new Vector3().setFromMatrixColumn(this.OCS, 2);\r\n }\r\n Intersect(f: Face): Face[]\r\n {\r\n //获得侧面和非侧面\r\n let [sideFace, noSideFace] = this.type === BoardFaceType.Side ? [this, f] : [f, this];\r\n\r\n //布尔面和被布尔面得差异矩阵\r\n let diffMtx = sideFace.OCSInv.multiply(noSideFace.OCS);\r\n MatrixPlanarizere(diffMtx);\r\n\r\n let isSuccess = false;\r\n\r\n let x = new Vector3().setFromMatrixColumn(diffMtx, 0);\r\n let ang = x.angleTo(XAxis);\r\n //盒子旋转0,90,180度不会被破坏\r\n let canUseBoxCalc = equaln(ang, 0) || equaln(ang, Math.PI / 2) || equaln(ang, Math.PI);\r\n\r\n let retBoxs: Box3Ext[] = [];\r\n let sizes: Vector3[] = [];\r\n\r\n //如果不是矩形,用布尔运算,如果\r\n if (!noSideFace.IsRect || !canUseBoxCalc)\r\n {\r\n let sideReg = sideFace.Region?.Clone();\r\n if (!sideReg || !noSideFace.Region) return [];\r\n\r\n let toReg = noSideFace.Region.Clone().ApplyMatrix(diffMtx);\r\n isSuccess = sideReg.BooleanOper(toReg, BoolOpeartionType.Intersection);\r\n for (let s of sideReg.ShapeManager.ShapeList)\r\n {\r\n let box = s.BoundingBox as Box3Ext;\r\n retBoxs.push(box);\r\n sizes.push(box.getSize(new Vector3()));\r\n }\r\n }\r\n else\r\n {\r\n let retBox = new Box3Ext(new Vector3(), new Vector3(sideFace.Length, sideFace.Width));\r\n\r\n let p1 = new Vector3().setFromMatrixPosition(diffMtx);\r\n let p2 = new Vector3(noSideFace.Length, noSideFace.Width).applyMatrix4(diffMtx);\r\n let box3 = new Box3Ext().setFromPoints([p1, p2]);\r\n\r\n if (retBox.intersectsBox(box3))\r\n {\r\n retBox.intersect(box3);\r\n let size = retBox.getSize(new Vector3());\r\n isSuccess = !equaln(size.x * size.y, 0);\r\n retBoxs = [retBox];\r\n sizes = [size];\r\n }\r\n }\r\n\r\n let newFaces: Face[] = [];\r\n\r\n if (isSuccess)\r\n {\r\n for (let i = 0; i < sizes.length; i++)\r\n {\r\n let newFace = new Face();\r\n //提供侧面的板件作为相交面\r\n newFace.LocalBoard = noSideFace.LocalBoard;\r\n newFace.InterBoard = sideFace.LocalBoard;\r\n\r\n newFace.Length = sizes[i].x;\r\n newFace.Width = sizes[i].y;\r\n\r\n let min = retBoxs[i].min;\r\n min.applyMatrix4(sideFace.OCS);\r\n\r\n //构建碰撞面坐标系\r\n newFace.OCS = sideFace.OCS.clone().setPosition(min);\r\n\r\n newFace.DrillType = sideFace.DrillType;\r\n //都是侧面\r\n if (this.type === f.type)\r\n newFace.isEqualType = true;\r\n newFaces.push(newFace);\r\n }\r\n }\r\n return newFaces;\r\n }\r\n IsIntersect(f: Face, fuzz = 1e-6, currentCoverBoxes: Box3[] = []): { isInt: boolean, coverBoxesList?: Box3[]; }\r\n {\r\n //获得侧面和非侧面\r\n let [sideFace, noSideFace] = this.type === BoardFaceType.Side ? [this, f] : [f, this];\r\n\r\n //布尔面和被布尔面得差异矩阵\r\n let diffMtx = sideFace.OCSInv.multiply(noSideFace.OCS);\r\n MatrixPlanarizere(diffMtx);\r\n\r\n let x = new Vector3().setFromMatrixColumn(diffMtx, 0);\r\n let ang = x.angleTo(XAxis);\r\n //盒子旋转0,90,180度不会被破坏\r\n let canUseBoxCalc = equaln(ang, 0) || equaln(ang, Math.PI / 2) || equaln(ang, Math.PI);\r\n\r\n //如果不是矩形,用布尔运算,如果\r\n if (!noSideFace.IsRect || !canUseBoxCalc)\r\n {\r\n let c1 = new Polyline().Rectangle(sideFace.Length, sideFace.Width);\r\n let c2 = noSideFace.LocalBoard.ContourCurve.Clone().ApplyMatrix(diffMtx);\r\n let box = c1.BoundingBox.intersect(c2.BoundingBox);\r\n\r\n let size = box.getSize(new Vector3);\r\n\r\n if (equaln(size.x * size.y, 0))\r\n return { isInt: false, coverBoxesList: currentCoverBoxes };\r\n\r\n let con1 = Contour.CreateContour(c1);\r\n let con2 = Contour.CreateContour(c2);\r\n let cs = con1.IntersectionBoolOperation(con2);\r\n let width = 0;\r\n let boxList: Box3[] = [];\r\n //当前碰撞区域如果遮光直接退出\r\n for (let c of cs)\r\n {\r\n let b = c.BoundingBox;\r\n b.getSize(size);\r\n width += size.x;\r\n if (width / sideFace.Length > fuzz)\r\n return { isInt: true };\r\n boxList.push(b);\r\n }\r\n if (currentCoverBoxes.length === 0)\r\n {\r\n return { isInt: false, coverBoxesList: boxList };\r\n }\r\n //与旧盒子合并后测试是否遮光\r\n width = 0;\r\n while (currentCoverBoxes.length > 0)\r\n {\r\n let b = currentCoverBoxes.pop();\r\n let isInt = false;\r\n for (let box of boxList)\r\n {\r\n if (box.intersectsBox(b))\r\n {\r\n isInt = true;\r\n box.union(b);\r\n break;\r\n }\r\n }\r\n if (!isInt)\r\n boxList.push(b);\r\n }\r\n\r\n for (let b of boxList)\r\n {\r\n b.getSize(size);\r\n width += size.x;\r\n if (width / sideFace.Length > fuzz)\r\n return { isInt: true };\r\n }\r\n\r\n return { isInt: false, coverBoxesList: boxList };\r\n }\r\n else\r\n {\r\n let retBox = new Box3Ext(new Vector3(), new Vector3(sideFace.Length, sideFace.Width));\r\n\r\n let p1 = new Vector3().setFromMatrixPosition(diffMtx);\r\n let p2 = new Vector3(noSideFace.Length, noSideFace.Width).applyMatrix4(diffMtx);\r\n let box3 = new Box3Ext().setFromPoints([p1, p2]);\r\n\r\n if (retBox.intersectsBox(box3))\r\n {\r\n retBox.intersect(box3);\r\n let size = retBox.getSize(new Vector3());\r\n if (equaln(size.x * size.y, 0) || size.y / sideFace.Width <= fuzz)\r\n return { isInt: false, coverBoxesList: currentCoverBoxes };\r\n\r\n if (size.x / sideFace.Length > fuzz)\r\n return { isInt: true };\r\n if (currentCoverBoxes.length === 0)\r\n {\r\n return { isInt: false, coverBoxesList: [retBox] };\r\n }\r\n for (let b of currentCoverBoxes)\r\n {\r\n if (b.intersectsBox(retBox))\r\n {\r\n b.union(retBox);\r\n retBox = null;\r\n break;\r\n }\r\n }\r\n if (retBox)\r\n currentCoverBoxes.push(retBox);\r\n let width = 0;\r\n for (let b of currentCoverBoxes)\r\n {\r\n b.getSize(size);\r\n width += size.x;\r\n if (width / sideFace.Length > fuzz)\r\n return { isInt: true };\r\n }\r\n\r\n return { isInt: false, coverBoxesList: currentCoverBoxes };\r\n }\r\n return { isInt: false, coverBoxesList: currentCoverBoxes };\r\n }\r\n }\r\n}\r\n","import { Matrix4, Vector3 } from \"three\";\r\nimport { MergeCurvelist } from \"../../Common/CurveUtils\";\r\nimport { MakeMirrorMtx } 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\n\r\n\r\nexport const CanDrawHoleFuzz = 0.1;\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 mtx = MakeMirrorMtx(ZAxis);\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, mtx),\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, zFuzz: number): 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(), 1e-4))\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, zFuzz);\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, 1e-5) && x.y > 0) || x.x < -1e-5)\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","\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 { Vector3 } from \"three\";\r\nimport { arrayRemoveIf } from \"../../Common/ArrayExt\";\r\nimport { ConverCircleToPolyline, curveLinkGroup, equalCurve, IRectInfo } 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, ComparePointFnGenerate, 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 = ComparePointFnGenerate(\"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 { HostApplicationServices } from \"../../ApplicationServices/HostApplicationServices\";\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 { ExtrudeContourCurve } 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 { 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: boolean): Curve[]\r\n {\r\n let outline = shape.Outline.Curve;\r\n if (isOut)\r\n outline = outline.Clone();\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 //理论上最大的宽度为1220,所以2000已经是种仁慈.\r\n //更好的算法应该是, 如果线不在outline里面, 那么已经算是错误的,但是理论上如果线已经往外偏太多了,就一定会使得这个判断生效\r\n if (offsetDist > 2000)\r\n throw \"无法加工的造型!已经超过了最大的走刀范围2000!\";\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 //是否和孤岛相交\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\r\n let vailHoles: Contour[] = [];\r\n\r\n //内偏(走刀方式)\r\n let outlineOffsetCusOfTool = GetOffsetCurves(outline, dir * knifRadius).filter(c => c.IsClose) as Curve[];\r\n let maxArea = Math.max(...(outlineOffsetCusOfTool.map(c => c.Area)));\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 holeOffsetCurve = holeOffsetCus[i];//网洞走刀曲线\r\n for (let j = 0; j < outlineOffsetCusOfTool.length; j++)\r\n {\r\n let outlineCurveOffsetInside = outlineOffsetCusOfTool[j];\r\n if (h.Curve.IntersectWith(outlineCurveOffsetInside, 0).length > 0)\r\n {\r\n if (!(equalCurve(holeOffsetCurve, outlineCurveOffsetInside) || isTargetCurInOrOnSourceCur(outlineCurveOffsetInside as Polyline, h.Curve)))\r\n {\r\n isVail = false;\r\n break;\r\n }\r\n else if (isTargetCurInOrOnSourceCur(h.Curve, outlineCurveOffsetInside as Polyline))\r\n {\r\n offsetCus.push(outlineCurveOffsetInside);\r\n isVail = false;\r\n break;\r\n }\r\n }\r\n else if (holeOffsetCurve.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 /**用于测试走刀路径 */\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 && HostApplicationServices.chaidanOption.useDefaultRad)\r\n modelings.forEach(m => m.knifeRadius = HostApplicationServices.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 < HostApplicationServices.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 */\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\r\n //获取造型走刀\r\n GetModelFeedPath(br: { Thickness: number, ContourCurve: ExtrudeContourCurve; }, modeling: IModeling): Curve[]\r\n {\r\n const brThickness = br.Thickness;\r\n let cus: Curve[] = [];\r\n let { shape, thickness, knifeRadius, addLen, addWidth, addDepth } = modeling;\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, modeling.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, true);\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\r\n /**\r\n * 获取所有的轮廓\r\n * @param cus\r\n * @param retCus 不能组成轮廓的线被添加到这里\r\n * @returns\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 return cons;\r\n }\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 (HostApplicationServices.chaidanOption.useDefaultRad)\r\n modelings[i].knifeRadius = HostApplicationServices.chaidanOption.radius;\r\n let m = modelings[i];\r\n let cu = m.shape.Outline.Curve;\r\n if (cu instanceof Circle && cu.Radius < HostApplicationServices.chaidanOption.modeling2HoleRad + 1e-6)\r\n continue;\r\n let cus = this.GetModelFeedPath(br, m);\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 < HostApplicationServices.chaidanOption.modeling2HoleRad + 1e-6)\r\n continue;\r\n if (HostApplicationServices.chaidanOption.useDefaultRad)\r\n m.knifeRadius = HostApplicationServices.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: ExtrudeContourCurve, 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","import { Vector2, Vector3 } from \"three\";\r\nimport { ConverCircleToPolyline } from \"../Common/CurveUtils\";\r\nimport { Vector2ApplyMatrix4 } from \"../Common/Matrix4Utils\";\r\nimport { Arc } from \"../DatabaseServices/Entity/Arc\";\r\nimport { Circle } from \"../DatabaseServices/Entity/Circle\";\r\nimport { Polyline } from \"../DatabaseServices/Entity/Polyline\";\r\nimport { equaln } from \"../Geometry/GeUtils\";\r\n\r\n\r\n/**轮廓(多段线Pts Bul)数据 */\r\nexport interface IContourData\r\n{\r\n pts: Vector2[];\r\n buls: number[];\r\n}\r\n\r\n\r\n//转换成多段线点表(pts bul)\r\nexport function ConverToPtsBul(cu: Polyline | Circle, isOutline = true): IContourData\r\n{\r\n let ptsBuls: IContourData;\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 ptsBuls = cu.PtsBuls;\r\n }\r\n let ocs = cu.OCSNoClone;\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//转换成多段线点表(pts bul)\r\nexport function ConverArcToPtsBul(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 result.pts.push(arc.StartPoint);\r\n result.buls.push(bul);\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","import { Box3, Matrix4, Vector2, Vector3 } from \"three\";\r\nimport { SCALAR } from \"../Add-on/DrawDrilling/HoleUtils\";\r\nimport { lookOverBoardInfosTool } from \"../Add-on/LookOverBoardInfos/LookOverBoardInfosTool\";\r\nimport { HostApplicationServices } from \"../ApplicationServices/HostApplicationServices\";\r\nimport { EBoardKeyList } from \"../Common/BoardKeyList\";\r\nimport { MergeCurvelist } from \"../Common/CurveUtils\";\r\nimport { IsDev } from \"../Common/Deving\";\r\nimport { ParseExpr, safeEval } from \"../Common/eval\";\r\nimport { Log } from \"../Common/Log\";\r\nimport { SendReport } from \"../Common/Report\";\r\nimport { ShowSelectObjects } from \"../Common/ShowSelectObjects\";\r\nimport { Intent, Toaster } from \"../Common/Toaster\";\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 { Contour } from \"../DatabaseServices/Contour\";\r\nimport { Arc } from \"../DatabaseServices/Entity/Arc\";\r\nimport { Board, I2DModeingItem, IKnifeInfo, IModeling } from \"../DatabaseServices/Entity/Board\";\r\nimport { Circle } from \"../DatabaseServices/Entity/Circle\";\r\nimport { ExtrudeContourCurve } 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 { Shape } from \"../DatabaseServices/Shape\";\r\nimport { CanDrawHoleFuzz } from \"../Geometry/DrillParse/BoardGetFace\";\r\nimport { angleTo, equaln, equalv3, IsBetweenA2B, isIntersect2, isParallelTo, MoveMatrix, XAxis } from \"../Geometry/GeUtils\";\r\nimport { GetBoardSealingData, 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, ISealingData } from \"../UI/Store/BoardInterface\";\r\nimport { Entity } from './../DatabaseServices/Entity/Entity';\r\nimport { ICompHardwareOption } from './../UI/Components/RightPanel/RightPanelInterface';\r\nimport { ConverArcToPtsBul, ConverToPtsBul, IContourData } from \"./Convert2PtsBul\";\r\n\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\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 interface IDrillingOption\r\n{\r\n position: Vector3;\r\n radius: number;\r\n type: GangDrillType;\r\n depth: number;\r\n face: FaceDirection;\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 brThickness: number;\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 orgContour = GetSealedBoardContour(br, true, true);\r\n if (!orgContour || equaln(orgContour.Area, 0))\r\n {\r\n Toaster({\r\n message: br.Name + \" 轮廓错误,可能存在轮廓自交,请检查后重新拆单!(错误的板已经选中,您可以按住鼠标中键查看该板!)(使用FISC命令可以修复自交轮廓!)\",\r\n timeout: 8000,\r\n intent: Intent.DANGER,\r\n });\r\n Report([br.__OriginalEnt__ ?? br], br.Name + \" 轮廓错误\");\r\n return undefined;\r\n }\r\n let sealedOutline = GetSealedBoardContour(br, false);\r\n\r\n if (!sealedOutline || equaln(sealedOutline.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.__OriginalEnt__ ?? br], br.Name + \"扣除封边轮廓有误\");\r\n return;\r\n }\r\n let offsetTanslation = sealedOutline.BoundingBox.min;\r\n sealedOutline.Position = sealedOutline.Position.sub(offsetTanslation);\r\n let sealedOutlinePtsBul = ConverToPtsBul(sealedOutline);//不分裂圆弧转点表\r\n //外轮廓去掉最后的闭合点\r\n sealedOutlinePtsBul.pts.pop();\r\n sealedOutlinePtsBul.buls.pop();\r\n let size = sealedOutline.BoundingBox.getSize(new Vector3);\r\n\r\n //不扣除封边的轮廓信息\r\n let originOutlinePtsBul = ConverToPtsBul(orgContour);\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 = ConverToPtsBul(br.ContourCurve);//不分裂圆弧转点表\r\n\r\n return {\r\n info: GetBoardInfo(br, size),\r\n originOutlin: originOutlinePtsBul,//拼错了 未扣封边的点表\r\n outline: sealedOutlinePtsBul, //扣完封边的点表\r\n sealing: GetBoardSealingData(orgContour),\r\n modeling,\r\n holes: GetBoardHolesData(br, offsetTanslation, orgContour),\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 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\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 < HostApplicationServices.chaidanOption.modeling2HoleRad + 1e-6)\r\n continue;\r\n if (HostApplicationServices.chaidanOption.useDefaultRad)\r\n m.knifeRadius = HostApplicationServices.chaidanOption.radius;\r\n\r\n data.push({\r\n outline: ConverToPtsBul(cu.Clone(), false),\r\n holes: m.shape.Holes.map(h => ConverToPtsBul(h.Curve.Clone(), 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 < HostApplicationServices.chaidanOption.modeling2HoleRad + 1e-6)\r\n continue;\r\n if (HostApplicationServices.chaidanOption.useDefaultRad)\r\n m.knifeRadius = HostApplicationServices.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: ExtrudeContourCurve) => ConverToPtsBul(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: ConverToPtsBul(cu.Clone(), false),\r\n holes: m.shape.Holes.map(h => ConverToPtsBul(h.Curve.Clone(), 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): ExtrudeContourCurve | undefined\r\n {\r\n let con: ExtrudeContourCurve = GetSpliteOutlineBySpliteSize(br);\r\n if (con)\r\n return con;\r\n\r\n con = br.ContourCurve;\r\n if (con instanceof Circle) return con.Clone();\r\n\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\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, \"L\");\r\n let spliteWidth = safeEval(br.BoardProcessOption.spliteWidth, param, \"W\");\r\n let spliteThickness = safeEval(br.BoardProcessOption.spliteThickness, param, \"H\");\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 //获得拆单轮廓(如果没有,那么将返回空,如果有,返回多段线)\r\n export function GetSpliteOutlineBySpliteSize(br: Board): Polyline | null\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: ExtrudeContourCurve): 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, CanDrawHoleFuzz)) 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, CanDrawHoleFuzz) ? FaceDirection.Front : FaceDirection.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 < HostApplicationServices.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: ExtrudeContourCurve, 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 (HostApplicationServices.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: ExtrudeContourCurve)\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: FaceDirection;\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 sp = position.clone().setZ(0).add(d.Normal.multiplyScalar(- CanDrawHoleFuzz).applyMatrix4(roMat));//加长线(以便加大容差)\r\n let ep = position.clone().setZ(0).add(d.Normal.multiplyScalar(d.Height + CanDrawHoleFuzz).applyMatrix4(roMat));//加长线\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.warn(\"侧孔与板无交点,无法加工该侧孔!\");\r\n return;\r\n }\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, CanDrawHoleFuzz) ? FaceDirection.Front : FaceDirection.Back;\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: ExtrudeContourCurve, 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 //区间没有交集\r\n if (!(Math.max(z0, 0) < (Math.min(z1, br.Thickness) - CanDrawHoleFuzz))) return;\r\n\r\n if (!(z0 < CanDrawHoleFuzz || z1 > (br.Thickness - CanDrawHoleFuzz)))//禁止在中间挖洞\r\n {\r\n Log(`警告:板:{${br.Name}}的孔嵌在板中间,无法加工,已经跳过!`);\r\n return;\r\n }\r\n\r\n if (!(outline.PtInCurve(p)))//在轮廓内\r\n {\r\n Log(`警告:板:{${br.Name}}的孔不在板轮廓内,无法加工,已经跳过!`);\r\n return;\r\n }\r\n\r\n if (groovesOutlines.some(g => g.PtInCurve(p)))//在洞内\r\n {\r\n Log(`警告:板:{${br.Name}}的孔在造型内,无法加工,已经跳过!`);\r\n return;\r\n }\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 ? FaceDirection.Back : FaceDirection.Front,\r\n angle: angle,\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 Log(`警告:板:${br.Name}的排钻嵌在板件内部,已经跳过!`);\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.model = ParseExpr(data.model, { L: size.x, W: size.y, H: size.z });\r\n data.factory = ParseExpr(data.factory, { L: size.x, W: size.y, H: size.z });\r\n data.brand = ParseExpr(data.brand, { 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\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: ConverToPtsBul(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\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 = ConverArcToPtsBul(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\r\n export function GetChaiDanFeedingPath(data: IChaiDanFeedingData)\r\n {\r\n const { thickness, boardContour, dir, addLen, addWidth, addDepth, knifeRadius, brThickness } = 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: brThickness, 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: ExtrudeContourCurve) => ConverToPtsBul(c, false));\r\n }\r\n}\r\n","import Flatbush from 'flatbush';\r\nimport { Box3, Vector3 } from \"three\";\r\nimport { Curve } from \"../DatabaseServices/Entity/Curve\";\r\nimport { XAxis, YAxis } from '../Geometry/GeUtils';\r\n\r\n/**\r\n * 分析曲线的上下左右位置的线\r\n * @param curves\r\n */\r\nexport function ParseEdgeSealDir(curves: Curve[]): [number, number, number, number]\r\n{\r\n let boxAll = new Box3;\r\n let boxs: Box3[] = [];\r\n\r\n let fb = new Flatbush(curves.length);\r\n\r\n for (let c of curves)\r\n {\r\n let box = c.BoundingBox;\r\n boxs.push(box);\r\n boxAll.union(box);\r\n\r\n fb.add(box.min.x, box.min.y, box.max.x, box.max.y);\r\n }\r\n\r\n fb.finish();\r\n\r\n let leftids = fb.search(boxAll.min.x - 1, boxAll.min.y - 1, boxAll.min.x + 1, boxAll.max.y + 1);\r\n let rightids = fb.search(boxAll.max.x - 1, boxAll.min.y - 1, boxAll.max.x + 1, boxAll.max.y + 1);\r\n let topids = fb.search(boxAll.min.x - 1, boxAll.max.y - 1, boxAll.max.x + 1, boxAll.max.y + 1);\r\n let bottomids = fb.search(boxAll.min.x - 1, boxAll.min.y - 1, boxAll.max.x + 1, boxAll.min.y + 1);\r\n\r\n const FindBestCurveIndex = (ids: number[], dirRef: Vector3) =>\r\n {\r\n if (ids.length === 1) return ids[0];\r\n\r\n let maxLength = -Infinity;\r\n let bestIndex = -1;\r\n for (let id of ids)\r\n {\r\n let c = curves[id];\r\n let dir = c.EndPoint.sub(c.StartPoint).normalize();\r\n let length = Math.abs(dir.dot(dirRef));//取模(模越长 表示和dirRef越平行(接近))\r\n if (length > maxLength)\r\n {\r\n bestIndex = id;\r\n maxLength = length;\r\n }\r\n }\r\n return bestIndex;\r\n };\r\n\r\n let left = FindBestCurveIndex(leftids, YAxis);\r\n let right = FindBestCurveIndex(rightids, YAxis);\r\n let top = FindBestCurveIndex(topids, XAxis);\r\n let bottom = FindBestCurveIndex(bottomids, XAxis);\r\n\r\n return [left, right, top, bottom];\r\n}\r\n","import { arrayPushArray } from \"../Common/ArrayExt\";\r\nimport { 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 { ExtrudeContourCurve } from \"../DatabaseServices/Entity/Extrude\";\r\nimport { Line } from \"../DatabaseServices/Entity/Line\";\r\nimport { Polyline } from \"../DatabaseServices/Entity/Polyline\";\r\nimport { CreateContour2 } from \"../Geometry/CreateContour2\";\r\nimport { equaln, equalv3, isParallelTo, SelectNearP, XAxis } from \"../Geometry/GeUtils\";\r\nimport { Production } from \"../Production/Product\";\r\nimport { IHighSealedItem, ISealingData } from \"../UI/Store/BoardInterface\";\r\nimport { IntersectOption } from \"./IntersectWith\";\r\nimport { ParseEdgeSealDir } from \"./ParseEdgeSealDir\";\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\nexport function CalcEdgeSealing(cus: Curve[], highSeals?: IHighSealedItem[])\r\n{\r\n if (cus.length <= 1) return;\r\n\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))//反向共线 later 在front内\r\n {\r\n //删除线\r\n cus.splice(laterIndex, 1);\r\n highSeals?.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))//反向共线 front 在 later内\r\n {\r\n //删除线\r\n cus.splice(i, 1);\r\n highSeals?.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 => refLine.PtOnCurve(p) && refLine2.PtOnCurve(p));\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 //删除线\r\n cus.splice(i, 1);\r\n highSeals?.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 highSeals?.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 if (cus.length < 2) return false;\r\n\r\n //后面线点无效,如果是起始线,则删除,否则缓存原始线,继续尝试连接\r\n if (par > 1 - 1e-6)\r\n {\r\n if (laterIndex === 0)\r\n {\r\n //删除线\r\n cus.shift();\r\n highSeals?.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\n//与GetBoardSealingCurves相关\r\nexport function GetBoardHighSeal(br: Board, sealcus: Curve[]): IHighSealedItem[]\r\n{\r\n if (br.BoardProcessOption[EBoardKeyList.SpliteHeight]\r\n && br.BoardProcessOption[EBoardKeyList.SpliteWidth]\r\n && br.BoardProcessOption[EBoardKeyList.SpliteThickness]\r\n )\r\n {\r\n return [\r\n { size: parseFloat(br.BoardProcessOption.sealedDown) },\r\n { size: parseFloat(br.BoardProcessOption.sealedRight) },\r\n { size: parseFloat(br.BoardProcessOption.sealedUp) },\r\n { size: parseFloat(br.BoardProcessOption.sealedLeft) },\r\n ];\r\n }\r\n\r\n let highSeals = br.BoardProcessOption.highSealed.filter(d => d.size !== null && d.size !== undefined);\r\n\r\n //若未设置高级封边,把上下左右封边存入高级封边\r\n if (sealcus.length !== highSeals.length || !br.IsSpecialShape)\r\n {\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 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\r\n if (Math.abs(derv.x) > Math.abs(derv.y))\r\n {\r\n if (derv.x > 0)\r\n highSeals.push({ size: sealDown });\r\n else\r\n highSeals.push({ size: sealUp });\r\n }\r\n else\r\n {\r\n if (derv.y > 0)\r\n highSeals.push({ size: sealRight });\r\n else\r\n highSeals.push({ size: sealLeft });\r\n }\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 //当存在拆单尺寸时\r\n if (br.BoardProcessOption[EBoardKeyList.SpliteHeight]\r\n && br.BoardProcessOption[EBoardKeyList.SpliteWidth]\r\n && br.BoardProcessOption[EBoardKeyList.SpliteThickness]\r\n )\r\n {\r\n const param = { L: br.Height, W: br.Width, H: br.Thickness };\r\n let width = safeEval(br.BoardProcessOption[EBoardKeyList.SpliteWidth], param, \"W\");\r\n let height = safeEval(br.BoardProcessOption[EBoardKeyList.SpliteHeight], param, \"L\");\r\n let cu = new Polyline().Rectangle(width, height);\r\n return cu.Explode();\r\n }\r\n\r\n let cu: ExtrudeContourCurve = 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 ExtrudeContourCurve;\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\nconst SEAL_VALUE_KEY = \"__highSeals__\";\r\n\r\n\r\n/**\r\n * 获取板件轮廓\r\n * 结果轮廓拆单用,统一逆时针数据\r\n * hasSealing 轮廓是否包含封边\r\n * 用户计算拆单侧孔面id\r\n *\r\n * //返回的曲线中 如果 hasSealing isParseSeal 那么将可以取出封边信息\r\n */\r\nexport function GetSealedBoardContour(br: Board, hasSealing: boolean, isParseSeal = false): Polyline | Circle | undefined\r\n{\r\n let area2 = br.ContourCurve.Area2;\r\n if (Math.abs(area2) < 10)\r\n return;\r\n\r\n let offsetCus: Curve[] = [];\r\n let curves = GetBoardSealingCurves(br);\r\n let dir = Math.sign(area2);\r\n\r\n let highSealsExpd: ISealingData[];//展开后的封边信息(仅在未扣除封边的分支中计算)\r\n if (hasSealing)\r\n {\r\n let highSeals: IHighSealedItem[];\r\n if (isParseSeal)\r\n {\r\n highSeals = GetBoardHighSeal(br, curves);\r\n highSealsExpd = [];\r\n }\r\n\r\n for (let i = 0; i < curves.length; i++)\r\n {\r\n let curve = curves[i];\r\n\r\n const PushCurve = (c: Curve) =>\r\n {\r\n offsetCus.push(c);\r\n highSealsExpd?.push({ size: highSeals[i].size, length: c.Length });\r\n };\r\n\r\n if (curve instanceof Polyline)\r\n for (let cu of curve.Explode())\r\n PushCurve(cu);\r\n else\r\n PushCurve(curve);\r\n }\r\n }\r\n else\r\n {\r\n let highSeals = GetBoardHighSeal(br, curves);\r\n\r\n //圆的dir始终等于1\r\n // if (cus[0] instanceof Circle)\r\n // dir = 1;\r\n\r\n //所有的封边都一样时\r\n if (highSeals.every(s => equaln(s.size, highSeals[0].size), 1e-3))\r\n {\r\n let brContour = br.ContourCurve;\r\n\r\n //当存在拆单尺寸时\r\n if (br.BoardProcessOption[EBoardKeyList.SpliteHeight]\r\n && br.BoardProcessOption[EBoardKeyList.SpliteWidth]\r\n && br.BoardProcessOption[EBoardKeyList.SpliteThickness]\r\n )\r\n {\r\n const param = { L: br.Height, W: br.Width, H: br.Thickness };\r\n let width = safeEval(br.BoardProcessOption[EBoardKeyList.SpliteWidth], param, \"W\");\r\n let height = safeEval(br.BoardProcessOption[EBoardKeyList.SpliteHeight], param, \"L\");\r\n brContour = new Polyline().Rectangle(width, height);\r\n }\r\n\r\n let retPl: ExtrudeContourCurve;\r\n\r\n if (!highSeals[0].size || equaln(highSeals[0].size, 0, 1e-3))\r\n {\r\n retPl = brContour.Clone();\r\n if (dir < 0)\r\n retPl.Reverse();\r\n }\r\n else\r\n {\r\n retPl = brContour.GetOffsetCurves(-highSeals[0].size * dir)[0] as ExtrudeContourCurve;\r\n\r\n if (retPl && !retPl.IsClose)\r\n {\r\n //某些情况下,这里会出现非闭合轮廓\r\n retPl = CreateContour2([retPl])?.Curve;\r\n }\r\n\r\n if (retPl && retPl.Area2 < 0)\r\n retPl.Reverse();\r\n }\r\n\r\n if (retPl) return retPl;\r\n }\r\n\r\n for (let i = 0; i < curves.length; i++)\r\n {\r\n let cs: Curve[];\r\n if (!highSeals[i].size)\r\n cs = [curves[i].Clone()];\r\n else\r\n cs = curves[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 arrayPushArray(offsetCus, c.Explode());\r\n else\r\n offsetCus.push(c);\r\n }\r\n }\r\n }\r\n\r\n if (offsetCus.length === 1 && offsetCus[0] instanceof Circle)\r\n {\r\n let cir = offsetCus[0];\r\n\r\n if (highSealsExpd) cir[SEAL_VALUE_KEY] = highSealsExpd;\r\n\r\n return cir;\r\n }\r\n\r\n if (!CalcEdgeSealing(offsetCus, highSealsExpd)) return;\r\n let pl = Polyline.FastCombine(offsetCus, LINK_FUZZ);\r\n if (pl && dir < 0)\r\n {\r\n pl.Reverse();\r\n highSealsExpd?.reverse();\r\n }\r\n\r\n if (highSealsExpd) pl[SEAL_VALUE_KEY] = highSealsExpd;\r\n\r\n return pl;\r\n}\r\n\r\nexport function GetBoardSealingData(curve: Polyline | Circle)\r\n{\r\n let sealData = curve[SEAL_VALUE_KEY] as ISealingData[];\r\n if (curve instanceof Circle)\r\n {\r\n sealData[0].length *= 0.5;\r\n sealData.push({ ...sealData[0] });\r\n }\r\n return sealData;\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 = GetBoardSealingCurves(br);\r\n\r\n //现在我们不管是否有拆单尺寸,我们总是关系封边值\r\n // let param = { L: br.Height, W: br.Width, H: br.Thickness };\r\n // let spliteHeight = safeEval(br.BoardProcessOption.spliteHeight, param, \"L\");\r\n // let spliteWidth = safeEval(br.BoardProcessOption.spliteWidth, param, \"W\");\r\n // let spliteThickness = safeEval(br.BoardProcessOption.spliteThickness, param, \"H\");\r\n // if ((spliteHeight && spliteWidth && spliteThickness) || !br.IsSpecialShape && cus.length === 4)\r\n\r\n if (!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).normalize();\r\n if (isParallelTo(derv, XAxis, 1e-4))\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 else\r\n {\r\n let [left, right, top, bottom] = ParseEdgeSealDir(cus);\r\n br.BoardProcessOption[EBoardKeyList.LeftSealed] = edges[left].size.toString();\r\n br.BoardProcessOption[EBoardKeyList.RightSealed] = edges[right].size.toString();\r\n br.BoardProcessOption[EBoardKeyList.UpSealed] = edges[top].size.toString();\r\n br.BoardProcessOption[EBoardKeyList.DownSealed] = edges[bottom].size.toString();\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 = Math.abs(feedingDepth * Math.tan(knifAngle));\r\n let cus = polyline.Explode();\r\n arrayRemoveIf(cus, c => c.Length < 0.01);\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.clone());\r\n }\r\n if (c2 instanceof Arc)\r\n c2 = new Line(curP.clone(), curP.clone().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 //向量与平分线,参照倒角代码\r\n let derv1 = c1.GetFistDeriv(0).normalize();\r\n let derv2 = c2.GetFistDeriv(0).normalize();\r\n let bisectorVec = derv1.clone().negate().add(derv2).multiplyScalar(0.5);\r\n\r\n let co1 = c1.GetOffsetCurves(x * Math.sign(derv1.cross(bisectorVec).z))[0];\r\n let co2 = c2.GetOffsetCurves(x * Math.sign(derv2.cross(bisectorVec).z))[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 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","import { Geometry, Line as TLine, LineSegments, Matrix3, Matrix4, Mesh, Object3D, ShapeGeometry, UVGenerator, Vector3 } from 'three';\r\nimport { Board2Regions } from '../../Add-on/BoardEditor/Board2Regions';\r\nimport { DeserializationBoard2DModeingData, DeserializationBoard3DModeingData, deserializationBoardData, SerializeBoard2DModeingData, SerializeBoard3DModeingData, serializeBoardData } from '../../Add-on/BoardEditor/SerializeBoardData';\r\nimport { CyHoleInBoard, InitRectBoardHoleOption, SetRectHighHole, TempRectHoleOption } from '../../Add-on/DrawDrilling/HoleUtils';\r\nimport { HostApplicationServices } from '../../ApplicationServices/HostApplicationServices';\r\nimport { arrayRemoveIf, arraySortByNumber, arraySum } from '../../Common/ArrayExt';\r\nimport { EBoardKeyList } from '../../Common/BoardKeyList';\r\nimport { ColorMaterial } from '../../Common/ColorPalette';\r\nimport { tempMatrix1, TransformVector, ZMirrorMatrix } from '../../Common/Matrix4Utils';\r\nimport { UpdateDraw } from '../../Common/Status';\r\nimport { ObjectSnapMode } from '../../Editor/ObjectSnapMode';\r\nimport { boardUVGenerator, boardUVGenerator2 } from '../../Geometry/BoardUVGenerator';\r\nimport { BufferGeometryUtils } from '../../Geometry/BufferGeometryUtils';\r\nimport { equaln, equalv3, IdentityMtx4, XAxis, XAxisN, YAxis, YAxisN, ZAxis, ZeroVec } from '../../Geometry/GeUtils';\r\nimport { PointShapeUtils } from '../../Geometry/PointShapeUtils';\r\nimport { GetBoardHighSeal, GetBoardSealingCurves, HandleRectBoardSealingData } from '../../GraphicsSystem/CalcEdgeSealing';\r\nimport { RenderType } from '../../GraphicsSystem/RenderType';\r\nimport { VData2Curve, VKnifToolPath } from '../../GraphicsSystem/ToolPath/VKnifToolPath';\r\nimport { BoardOpenDir, BoardProcessOption, BoardType, ComposingType, FaceDirection, IHighSealedItem, LinesType } from '../../UI/Store/BoardInterface';\r\nimport { CylinderHole } from '../3DSolid/CylinderHole';\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 { Arc } from './Arc';\r\nimport { Circle } from './Circle';\r\nimport { DragPointType } from './DragPointType';\r\nimport { Entity } from './Entity';\r\nimport { ExtrudeContourCurve, ExtrudeSolid } from './Extrude';\r\nimport { Polyline } from './Polyline';\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\n//排钻配置名是合法的\r\nfunction IsValidDriName(name: string): boolean\r\n{\r\n return name === \"不排\" || HostApplicationServices.DrillConfigs.has(name);\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 protected HasEdgeRenderType = true;\r\n protected HasPlaceFaceRenderType = true;\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\r\n //更新封边检查的显示\r\n if (!this.__ReadFileIng__ && key === EBoardKeyList.HighSealed)\r\n {\r\n let obj = this.CacheDrawObject.get(RenderType.Edge);\r\n if (obj)\r\n {\r\n this.UpdateDrawObject(RenderType.Edge, obj);\r\n obj.updateMatrixWorld(true);\r\n }\r\n }\r\n return true;\r\n }\r\n let result = Reflect.set(target, key, value, receiver);\r\n\r\n if (!this.__ReadFileIng__)//看起来使用 this.ReadFileIng 似乎也是没问题的\r\n {\r\n if (key === EBoardKeyList.Lines)\r\n this.Update(UpdateDraw.Geometry);\r\n else if (key === EBoardKeyList.ComposingFace)\r\n {\r\n let obj = this.CacheDrawObject.get(RenderType.PlaceFace);\r\n if (obj)\r\n {\r\n this.UpdateDrawObject(RenderType.PlaceFace, obj);\r\n obj.updateMatrixWorld(true);\r\n }\r\n }\r\n }\r\n\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.WriteAllObjectRecord();\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 = [...HostApplicationServices.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\r\n let dridatas: string[];\r\n let ocsInv: Matrix4;\r\n if (brs.some(br => br.__OriginalEnt__))\r\n {\r\n if (this._BoardProcessOption.highDrill\r\n && this._BoardProcessOption.highDrill.length > 1\r\n && !this._BoardProcessOption.highDrill.every(d => d === this._BoardProcessOption.drillType))\r\n dridatas = this._BoardProcessOption.highDrill;\r\n\r\n ocsInv = this.OCSInv;\r\n }\r\n\r\n //拆单或者bbs的时候会重新加入最新的原板件的排钻和层板钉数据\r\n for (let br of brs)\r\n {\r\n if (br.__OriginalEnt__)\r\n {\r\n br._Name = this._Name;\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 if (dridatas)\r\n {\r\n br.BoardProcessOption.highDrill = [];//因为上面用了拷贝,所以这里不能直接改它的数据(我们新建一个数组来改它,否则原始板件的数据就被改掉了)\r\n //矩阵对齐\r\n let m = br.OCS.premultiply(ocsInv);\r\n for (let i = 0; i < br.contourCurve.EndParam; i++)\r\n {\r\n let p = br.contourCurve.GetPointAtParam(i + 0.5);\r\n p.applyMatrix4(m);\r\n\r\n let cp = this.contourCurve.GetClosestPointTo(p, false);\r\n let cparam = this.contourCurve.GetParamAtPoint2(cp);\r\n if (cparam !== undefined)\r\n {\r\n let newDri = dridatas[Math.floor(cparam)];\r\n br._BoardProcessOption.highDrill[i] = newDri ?? br._BoardProcessOption.drillType;\r\n }\r\n else\r\n br._BoardProcessOption.highDrill[i] = br._BoardProcessOption.drillType;\r\n }\r\n }\r\n else//填充默认类型就好了\r\n br._BoardProcessOption.highDrill = Array(br.contourCurve.EndParam).fill(br._BoardProcessOption.drillType);\r\n\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.OCSNoClone));\r\n cu.Erase(false);//当内部造型超过100个时,不校验时,这个曲线就是erase的状态,所以设置这个状态,避免无法绘制出来\r\n if (cu instanceof Circle)//这里保证这个圆是正常坐标系 I3BUSY#note_4525213\r\n cu.OCS = new Matrix4().setPosition(cu.Position);\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.OCSNoClone));\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\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.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.ContourCurve = hole.Curve;\r\n subG.Thickness = model.thickness;\r\n\r\n g.AppendGroove(subG);\r\n }\r\n\r\n //不需要处理正反面的原因是因为Get时保留了曲线的高度,导致生成的槽位置已经在指定位置\r\n\r\n g.ApplyMatrix(this.OCSNoClone);\r\n\r\n this.grooves.push(g);\r\n }\r\n this.GrooveCheckAllAutoSplit();\r\n this.Update();\r\n }\r\n\r\n get Modeling2D()\r\n {\r\n return [...this._2DModelingList];\r\n }\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\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 if (this._2DModelingList.length === 0) return;\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 if (this._3DModelingList.length === 0) return;\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 if (this.grooves.length === 0) return;\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 && !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 YAxis,\r\n XAxisN,\r\n ZAxis\r\n );\r\n break;\r\n case BoardType.Vertical:\r\n roMat.makeBasis(\r\n YAxis,\r\n ZAxis,\r\n XAxis\r\n );\r\n break;\r\n case BoardType.Behind:\r\n roMat.makeBasis(\r\n XAxis,\r\n ZAxis,\r\n YAxisN\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 if (type === this._BoardType) return;\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 if (n === this._Name) return;\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: ExtrudeContourCurve)\r\n {\r\n //标识是否被初始化\r\n TempRectHoleOption.up = undefined;\r\n\r\n let needRename = !IsValidDriName(this.BoardProcessOption.drillType);\r\n if (!this.contourCurve || cu.EndParam !== this.contourCurve.EndParam || needRename)\r\n {\r\n let defaultType = this._BoardProcessOption.drillType;\r\n if (needRename)\r\n {\r\n defaultType = HostApplicationServices.DrillConfigs.size ? HostApplicationServices.DrillConfigs.entries().next().value[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 }\r\n\r\n /**\r\n * 在不改变Normal和实体显示的情况下,修改X轴的指向\r\n * @param xAxis\r\n */\r\n override SetXAxis(xAxis: Vector3, isKeepLines = false): this\r\n {\r\n let ocsInv = this.OCSInv;\r\n let x = TransformVector(xAxis.clone(), ocsInv).setZ(0).normalize();\r\n if (equalv3(ZeroVec, x, 1e-5)) return this;\r\n\r\n this.WriteAllObjectRecord();\r\n\r\n let highSeals: IHighSealedItem[];\r\n if (this.isRect)\r\n highSeals = GetBoardHighSeal(this, GetBoardSealingCurves(this));\r\n\r\n let a = Math.atan2(x.y, x.x);\r\n\r\n if (isKeepLines && this.BoardProcessOption.lines !== LinesType.CanReversal && (equaln(x.y, 1, 1e-5) || equaln(x.y, -1, 1e-5)))\r\n this.BoardProcessOption.lines = 1 - this.BoardProcessOption.lines;//翻转纹路 1=>0 0=>1\r\n\r\n x.transformDirection(this._Matrix);\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 this.ContourCurve.ApplyMatrix(tempMatrix1.makeRotationZ(-a));//复用了这个矩阵\r\n this.CheckContourCurve();\r\n if (this.contourCurve instanceof Polyline)\r\n this.contourCurve.UpdateOCSTo(IdentityMtx4);\r\n\r\n if (this.isRect)\r\n HandleRectBoardSealingData(this, highSeals);//这里不可以用缓存的曲线 否则分析错误,必须重新开始分析曲线\r\n\r\n this.Update();\r\n return this;\r\n }\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)\r\n {\r\n if (!this.Id)\r\n {\r\n // super.ApplyMirrorMatrix(m); //这个变更导致镜像错误 因为实体没有正常的被更新. 所以需要注意的是,如果需要镜像变更,需要给实体一个id!!!\r\n return this;\r\n }\r\n\r\n this.ContourCurve;//因为下面翻转孔面的代码,所以必须初始化这个\r\n\r\n let hasSplitSize = (this.BoardProcessOption[EBoardKeyList.SpliteHeight]\r\n && this.BoardProcessOption[EBoardKeyList.SpliteWidth]\r\n && this.BoardProcessOption[EBoardKeyList.SpliteThickness]\r\n );\r\n\r\n let highSeals = GetBoardHighSeal(this, GetBoardSealingCurves(this));\r\n\r\n super.ApplyMirrorMatrix(m);\r\n\r\n if (this.contourCurve.Area2 < 0)\r\n {\r\n this.contourCurve.Reverse();\r\n highSeals.reverse();\r\n this.BoardProcessOption.highSealed?.reverse();\r\n this.BoardProcessOption.highDrill?.reverse();\r\n\r\n if (hasSplitSize)\r\n {\r\n [\r\n this.BoardProcessOption.sealedUp,\r\n this.BoardProcessOption.sealedLeft,\r\n this.BoardProcessOption.sealedDown,\r\n this.BoardProcessOption.sealedRight,\r\n ]\r\n =\r\n [\r\n this.BoardProcessOption.sealedUp,\r\n this.BoardProcessOption.sealedRight,\r\n this.BoardProcessOption.sealedDown,\r\n this.BoardProcessOption.sealedLeft,\r\n ];\r\n }\r\n }\r\n else\r\n this.BoardProcessOption[EBoardKeyList.BigHole] = 1 - this.BoardProcessOption[EBoardKeyList.BigHole];//反转大孔面\r\n\r\n this.BoardProcessOption.highSealed = highSeals;\r\n\r\n if (!hasSplitSize && this.isRect)\r\n HandleRectBoardSealingData(this, highSeals);\r\n //重新构建SpaceOCS\r\n this._SpaceOCS.multiplyMatrices(this._Matrix, new Matrix4().getInverse(this.RotateMat));\r\n\r\n //\"左\",\"右\"互换\r\n if (this.Name.includes(\"左\"))\r\n this.Name = this.Name.replace(\"左\", \"右\");\r\n else if (this.Name.includes(\"右\"))\r\n this.Name = this.Name.replace(\"右\", \"左\");\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 _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\r\n //分裂后重新将排钻实体设置给不同的实体\r\n override HandleSpliteEntitys(splitEntitys: this[])\r\n {\r\n if (!splitEntitys.length) return;\r\n this.WriteAllObjectRecord();\r\n\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\r\n //如果没有开排钻反应器,那么需要重新关联排钻\r\n //排钻列表\r\n let dris: [ObjectId, ObjectId[][]][] = [];\r\n if (!HostApplicationServices.openDrillingReactor)\r\n {\r\n for (let d of this._DrillList)\r\n {\r\n dris.push(d);\r\n\r\n //离婚,分割财产\r\n let fbr = d[0]?.Object as Board;\r\n if (fbr)\r\n {\r\n fbr.WriteAllObjectRecord();\r\n fbr._DrillList.delete(this.Id);\r\n }\r\n }\r\n\r\n this._DrillList.clear();//开启反应器时,这个行为由排钻重排控制,没有开启时,我们暂时清空,下面会重新计算关联\r\n }\r\n\r\n //清除所有层板钉(因为下面会重新关联)(这个和排钻反应器没有关联,必须全部清除)\r\n this._LayerNails.length = 0;\r\n\r\n //所有的实体,包括自己\r\n let ents: this[] = [this].concat(splitEntitys);\r\n\r\n for (let en of ents)\r\n {\r\n let ocsInv = en.OCSInv;\r\n //把层板钉送给有缘人\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 if (en === this)\r\n {\r\n this._LayerNails.push(id);\r\n return false;\r\n }\r\n //异形换位,把排钻给别人\r\n if (n.MId === this.Id)\r\n n.MId = en.Id;\r\n else if (n.FId === this.Id)\r\n n.FId = en.Id;\r\n //新的板需要关联这个id\r\n en._LayerNails.push(id);\r\n return false;\r\n }\r\n return true;\r\n });\r\n\r\n //如果没有开排钻反应器,那么需要重新关联排钻\r\n if (!HostApplicationServices.openDrillingReactor)\r\n {\r\n for (let d of dris)\r\n {\r\n let [bid, drIdss] = d;\r\n let board = bid?.Object as Board;//另一个父亲\r\n\r\n drIdss = drIdss.filter(ids =>\r\n {\r\n if (!ids[0]?.Object || ids[0].IsErase) return false;\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 if (board)//重新拥有父亲的身份.\r\n board.AppendDrillList(en.Id, [ids]);\r\n\r\n en.AppendDrillList(bid, [ids]);//拥有新的母亲的身份\r\n\r\n for (let h of holes)\r\n {\r\n //成了别人的新娘\r\n if (h.FId === this.Id)\r\n h.FId = en.Id;\r\n if (h.MId === this.Id)\r\n h.MId = en.Id;\r\n }\r\n return false;\r\n }\r\n }\r\n else\r\n {\r\n //直接删除,毫不留情\r\n for (let id of ids)\r\n {\r\n let object = id?.Object;\r\n if (object && !object.IsErase)\r\n object.Erase();\r\n }\r\n return false;\r\n }\r\n return true;\r\n });\r\n\r\n d[1] = drIdss;\r\n }\r\n\r\n }\r\n\r\n }\r\n\r\n //删除无父母的排钻\r\n for (let d of dris)\r\n {\r\n for (let ids of d[1])\r\n for (let id of ids)\r\n {\r\n let object = id?.Object;\r\n if (object && !object.IsErase)\r\n object.Erase();\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 this.UpdateDrawObject(renderType, obj);\r\n }\r\n else if (renderType === RenderType.PlaceFace)\r\n {\r\n obj = new Object3D;\r\n this.UpdateDrawObject(renderType, 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\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 else if (renderType === RenderType.PlaceFace)\r\n {\r\n let isArbitrary = this._BoardProcessOption[EBoardKeyList.ComposingFace] === ComposingType.Arbitrary;\r\n\r\n obj.add(new Mesh(this.MeshGeometry, ColorMaterial.GetConceptualMaterial(8)),\r\n new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(7))\r\n );\r\n\r\n if (!isArbitrary)\r\n obj.add(this.GetPlaceFace());\r\n }\r\n this.HandleBoardMaterial(renderType, obj);\r\n\r\n return o;\r\n }\r\n\r\n private get PlaceColor() { return this._Color === 8 ? 9 : this._Color; }\r\n //获得绘制的放置网格\r\n GetPlaceFace(): Mesh\r\n {\r\n let shapeGeom = new ShapeGeometry(this.contourCurve.Shape);\r\n let isBack = this._BoardProcessOption[EBoardKeyList.ComposingFace] !== ComposingType.Positive;\r\n shapeGeom.applyMatrix4(this.contourCurve.OCSNoClone);\r\n shapeGeom.translate(0, 0, isBack ? -0.2 : this.thickness + 0.5);\r\n let mesh = new Mesh(shapeGeom, ColorMaterial.GetBasicMaterialDoubleSide(this.PlaceColor));\r\n return mesh;\r\n }\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) && HostApplicationServices.showLines && this.IsChaiDan)\r\n obj.add(...this.GetLinesDir());\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\r\n UpdateDrawObjectMaterial(renderType: RenderType, obj: Object3D)\r\n {\r\n super.UpdateDrawObjectMaterial(renderType, obj);\r\n\r\n if (renderType === RenderType.PlaceFace)\r\n {\r\n let face = obj.children[2] as Mesh;\r\n if (!face) return;\r\n face.material = ColorMaterial.GetBasicMaterialDoubleSide(this.PlaceColor);\r\n }\r\n\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\r\n CheckSealing(obj: Object3D)\r\n {\r\n let sealingInfo = new Map(HostApplicationServices.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\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 if (!polyline) continue;//多段线可能偏移失败\r\n\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 else if (snapMode === ObjectSnapMode.Mid)\r\n {\r\n for (let vm of this._2DModelingList)\r\n {\r\n let ps = vm.path.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform);\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 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 // if (this.width === 0 || this.height === 0) //板件变成0长度,无法绘制\r\n // this._isErase = true;\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\r\n file.Write(this._LayerNails.length);\r\n for (let nail of this._LayerNails)\r\n file.WriteHardObjectId(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 { arrayRemoveDuplicateBySort } from \"../../../Common/ArrayExt\";\r\n\r\ntype Range = [number, number];\r\n\r\nconst COMPARE_FUNC = (sparam: number, range: Range) => sparam - range[0];\r\n\r\n//寻找插入位置\r\nexport function InsertRangeIndex(ranges: Range[], sparam: number)\r\n{\r\n return InsertSortedIndex(ranges, sparam, COMPARE_FUNC);\r\n}\r\n\r\n//返回可以插入的位置\r\nexport function InsertSortedIndex(array: T[], element: E, comparefunc: (a: E, 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) // element > testelement\r\n leftbound = testindex + 1;\r\n else if (compareresult === 0)//因为函数 FindBestRange 会取index-1 来取范围\r\n leftbound = testindex + 1;\r\n else\r\n rightbound = testindex;\r\n }\r\n return leftbound;\r\n}\r\n\r\n/**\r\n * 插入范围,并且合并范围\r\n */\r\nexport function InsertRangeAndUnion(\r\n ranges: Range[],\r\n sparam: number,\r\n eparam: number,\r\n insertIndex = InsertRangeIndex(ranges, sparam)\r\n)\r\n{\r\n if (insertIndex !== 0 && (sparam - 1e-6) <= (ranges[insertIndex - 1][1]))//和前面一个范围合并\r\n {\r\n //传染\r\n let s = insertIndex;\r\n for (; s < ranges.length; s++)\r\n {\r\n let r = ranges[s];\r\n if ((r[0] - 1e-6) < eparam)\r\n {\r\n if (r[1] >= (eparam - 1e-6))\r\n {\r\n eparam = r[1];\r\n s++;\r\n break;\r\n }\r\n //else continue\r\n }\r\n else\r\n break;\r\n }\r\n ranges.splice(insertIndex, s - insertIndex);\r\n ranges[insertIndex - 1][1] = eparam;//合并成功\r\n }\r\n else if (insertIndex !== ranges.length && eparam + 1e-6 > ranges[insertIndex][0]) //和后面的合并\r\n {\r\n let nextRange = ranges[insertIndex];\r\n nextRange[0] = sparam;\r\n nextRange[1] = Math.max(eparam, nextRange[1]);\r\n\r\n eparam = nextRange[1];\r\n\r\n //传染\r\n insertIndex++;\r\n let s = insertIndex;\r\n for (; s < ranges.length; s++)\r\n {\r\n let r = ranges[s];\r\n if (r[0] <= (eparam + 1e-6))\r\n {\r\n if ((r[1] + 1e-6) >= eparam)\r\n {\r\n eparam = r[1];\r\n s++;\r\n break;\r\n }\r\n //else continue\r\n }\r\n else\r\n break;\r\n }\r\n ranges.splice(insertIndex, s - insertIndex);\r\n ranges[insertIndex - 1][1] = eparam;//合并成功\r\n }\r\n else\r\n {\r\n ranges.splice(insertIndex, 0, [sparam, eparam]);\r\n }\r\n\r\n return ranges;\r\n}\r\n\r\n//范围并集\r\nexport function RangeUnion(ranges: Range[])\r\n{\r\n arrayRemoveDuplicateBySort(ranges, (r1, r2) =>\r\n {\r\n if (r1[1] >= r2[1])\r\n return true;\r\n\r\n if (r1[1] >= r2[0])\r\n {\r\n r1[1] = r2[1];\r\n return true;\r\n }\r\n\r\n return false;\r\n });\r\n\r\n return ranges;\r\n}\r\n\r\n//范围交集\r\nexport function Intersection(range1: Range, range2: Range): Range | undefined\r\n{\r\n let min = Math.max(range1[0], range2[0]);\r\n let max = Math.min(range1[1], range2[1]);\r\n\r\n if (max > min) return [min, max];\r\n}\r\n","import { Box3, Vector3 } from \"three\";\r\nimport { arrayRemoveDuplicateBySort } from \"../../../Common/ArrayExt\";\r\nimport { equalv3 } from \"../../../Geometry/GeUtils\";\r\nimport { IntersectOption } from \"../../../GraphicsSystem/IntersectWith\";\r\nimport { equaln } from \"../../../Nest/Common/Util\";\r\nimport { Contour } from \"../../Contour\";\r\nimport { Arc } from \"../../Entity/Arc\";\r\nimport { Curve } from \"../../Entity/Curve\";\r\nimport { Line } from \"../../Entity/Line\";\r\nimport { Polyline } from \"../../Entity/Polyline\";\r\nimport { InsertRangeAndUnion, InsertRangeIndex } from \"./RangeUtils\";\r\n\r\n\r\nexport class CurveTrim\r\n{\r\n _TrimParams: [number, number][] = [];\r\n _IsErase = false;\r\n public _Box: Box3;\r\n constructor(public _curve: Line | Arc)\r\n {\r\n this._Box = _curve.BoundingBox.expandByVector(new Vector3(0.01, 0.01));\r\n }\r\n\r\n TrimBy(contour: Contour, box: Box3, saveSyntropy = false)\r\n {\r\n if (this._IsErase) return;\r\n\r\n //交点参数列表\r\n let iParams = this._curve.IntersectWith2(contour.Curve, IntersectOption.ExtendNone).map(p => p.thisParam).filter(p => p > 1e-6 && p < 0.999999);\r\n iParams.push(0, 1);\r\n iParams.sort((a, b) => a - b);\r\n arrayRemoveDuplicateBySort(iParams, (a1, a2) => equaln(a1, a2, 1e-6));\r\n\r\n if (iParams.length === 2)//[0,1]全包含 或者在外部\r\n {\r\n let p = this.GetPointAtParam(0.5);\r\n if (this.PointInContour(p, contour, box, saveSyntropy))\r\n this._IsErase = true;\r\n return;\r\n }\r\n\r\n for (let i = 0; i < iParams.length - 1; i++)\r\n {\r\n let sparam = iParams[i], eparam = iParams[i + 1];\r\n\r\n let insertIndex = InsertRangeIndex(this._TrimParams, iParams[i]);\r\n\r\n if (insertIndex !== 0 && this._TrimParams[insertIndex - 1][1] > eparam)//包含在已经被切割的范围内,那么直接不用重复判断 (只可能被前一段包含)\r\n continue;\r\n\r\n let midParam = (sparam + eparam) * 0.5;\r\n let p = this.GetPointAtParam(midParam);\r\n if (this.PointInContour(p, contour, box, saveSyntropy))\r\n {\r\n InsertRangeAndUnion(this._TrimParams, sparam, eparam, insertIndex);\r\n\r\n if (this._TrimParams.length === 1 && this._TrimParams[0][0] === 0 && this._TrimParams[0][1] === 1)\r\n {\r\n this._IsErase = true;\r\n return;\r\n }\r\n }\r\n }\r\n\r\n }\r\n\r\n PointInContour(p: Vector3, contour: Contour, contourBox: Box3, saveSyntropy = false)\r\n {\r\n return contourBox.containsPoint(p) && (contour.Curve.PtInCurve(p) && !contour.Curve.PtOnCurve(p));\r\n }\r\n\r\n TrimParam(sparam: number, eparam: number)\r\n {\r\n let insertIndex = InsertRangeIndex(this._TrimParams, sparam);\r\n\r\n if (insertIndex !== 0 && this._TrimParams[insertIndex - 1][1] > eparam)//包含在已经被切割的范围内,那么直接不用重复判断 (只可能被前一段包含)\r\n return;\r\n InsertRangeAndUnion(this._TrimParams, sparam, eparam, insertIndex);\r\n\r\n if (this._TrimParams.length === 1 && this._TrimParams[0][0] < 1e-6 && this._TrimParams[0][1] > (1 - 1e-6))\r\n {\r\n this._IsErase = true;\r\n }\r\n }\r\n\r\n GetPointAtParam(param: number): Vector3\r\n {\r\n return this._curve.GetPointAtParam(param);\r\n }\r\n\r\n get Curves(): Curve[]\r\n {\r\n return [];\r\n }\r\n}\r\n\r\nexport class CurveTrimLine extends CurveTrim\r\n{\r\n constructor(curve: Line,\r\n private derv: Vector3,\r\n private _Sp = curve.StartPoint,\r\n private _Fd = curve.GetFistDeriv(0))\r\n {\r\n super(curve);\r\n }\r\n\r\n override GetPointAtParam(param: number): Vector3\r\n {\r\n return this._Fd.clone().multiplyScalar(param).add(this._Sp);\r\n }\r\n\r\n override PointInContour(p: Vector3, contour: Contour, contourBox: Box3, saveSyntropy = false)\r\n {\r\n if (!contourBox.containsPoint(p)) return false;\r\n\r\n let pl = contour.Curve as Polyline;\r\n for (let i = 0; i < pl.EndParam; i++)\r\n {\r\n let cu = pl.GetCurveAtIndex(i);\r\n if (cu instanceof Line)\r\n {\r\n let d = cu.GetClosestAtPoint(p, true);\r\n if (cu.ParamOnCurve(d.param) && equalv3(d.closestPt, p, 1e-5))//点在线上\r\n {\r\n let derv = cu.GetFistDeriv(d.param).normalize();\r\n return equalv3(derv, this.derv, 1e-4) || (saveSyntropy && equalv3(derv.negate(), this.derv, 1e-4));//因为墙体为顺时针 轮廓为逆时针 所以这里相等=反向\r\n }\r\n }\r\n else\r\n {\r\n if (cu.PtOnCurve(p, 1e-5))\r\n {\r\n let derv = cu.GetFistDeriv(cu.GetParamAtPoint2(p)).normalize();\r\n return equalv3(this.derv, derv, 1e-4) || (saveSyntropy && equalv3(derv.negate(), this.derv, 1e-4));\r\n }\r\n }\r\n }\r\n\r\n return contour.Curve.PtInCurve(p);\r\n }\r\n\r\n override get Curves(): Line[]\r\n {\r\n if (this._IsErase) return [];\r\n\r\n if (this._TrimParams.length === 0) return [this._curve as Line];\r\n\r\n let lines: Line[] = [];\r\n\r\n if (this._TrimParams[0][0] !== 0)\r\n lines.push(new Line(this.GetPointAtParam(0), this.GetPointAtParam(this._TrimParams[0][0])));\r\n\r\n for (let i = 0; i < this._TrimParams.length - 1; i++)\r\n {\r\n let param1 = this._TrimParams[i][1];\r\n let param2 = this._TrimParams[i + 1][0];\r\n lines.push(new Line(this.GetPointAtParam(param1), this.GetPointAtParam(param2)));\r\n }\r\n\r\n if (this._TrimParams[this._TrimParams.length - 1][1] !== 1)\r\n lines.push(new Line(this.GetPointAtParam(this._TrimParams[this._TrimParams.length - 1][1]), this.GetPointAtParam(1)));\r\n\r\n return lines;\r\n }\r\n}\r\n\r\nexport class CurveTrimArc extends CurveTrim\r\n{\r\n constructor(\r\n public _curve: Arc,\r\n private _IsLeft = false\r\n )\r\n {\r\n super(_curve);\r\n }\r\n override PointInContour(p: Vector3, contour: Contour, contourBox: Box3, saveSyntropy = false)\r\n {\r\n if (!contourBox.containsPoint(p)) return false;\r\n\r\n let pl = contour.Curve as Polyline;\r\n let thisDerv = this._curve.GetFistDeriv(p).normalize();\r\n if (this._IsLeft) thisDerv.negate();\r\n\r\n for (let i = 0; i < pl.EndParam; i++)\r\n {\r\n let cu = pl.GetCurveAtIndex(i);\r\n if (cu instanceof Line)\r\n {\r\n let d = cu.GetClosestAtPoint(p, true);\r\n if (cu.ParamOnCurve(d.param) && equalv3(d.closestPt, p, 1e-5))//点在线上 //这个代码似乎是错误的,因为直线和圆弧不可能重合\r\n {\r\n let derv = cu.GetFistDeriv(d.param).normalize();\r\n return equalv3(derv, thisDerv, 1e-4) || (saveSyntropy && equalv3(derv.negate(), thisDerv, 1e-4));//因为墙体为顺时针 轮廓为逆时针 所以这里相等=反向\r\n }\r\n }\r\n else\r\n {\r\n if (cu.PtOnCurve(p, 1e-5))\r\n {\r\n let cuDerv = cu.GetFistDeriv(cu.GetParamAtPoint2(p)).normalize();\r\n return equalv3(thisDerv, cuDerv, 1e-4) || (saveSyntropy && equalv3(cuDerv.negate(), thisDerv, 1e-4));\r\n }\r\n }\r\n }\r\n\r\n return contour.Curve.PtInCurve(p);\r\n }\r\n\r\n override get Curves(): Arc[]\r\n {\r\n if (this._IsErase) return [];\r\n\r\n if (this._TrimParams.length === 0) return [this._curve];\r\n\r\n let arcs: Arc[] = [];\r\n let center = this._curve.Center;\r\n for (let i = 0; i < this._TrimParams.length - 1; i++)\r\n {\r\n let param1 = this._TrimParams[i][1];\r\n let param2 = this._TrimParams[i + 1][0];\r\n arcs.push(new Arc(center, this._curve.Radius, this._curve.GetAngleAtParam(param1), this._curve.GetAngleAtParam(param2), this._curve.IsClockWise));\r\n }\r\n\r\n if (this._TrimParams[0][0] !== 0)\r\n arcs.push(new Arc(center, this._curve.Radius, this._curve.StartAngle, this._curve.GetAngleAtParam(this._TrimParams[0][0]), this._curve.IsClockWise));\r\n\r\n if (this._TrimParams[this._TrimParams.length - 1][1] !== 1)\r\n arcs.push(new Arc(center, this._curve.Radius, this._curve.GetAngleAtParam(this._TrimParams[this._TrimParams.length - 1][1]), this._curve.EndAngle, this._curve.IsClockWise));\r\n\r\n return arcs;\r\n }\r\n}\r\n\r\nexport function CreateCurveTrim(cu: Line | Arc)\r\n{\r\n if (cu instanceof Line) return new CurveTrimLine(cu, undefined);\r\n else return new CurveTrimArc(cu);\r\n}\r\n","import { Matrix4, Vector2, Vector3 } 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 return this;\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 { Entity } from \"../DatabaseServices/Entity/Entity\";\r\n\r\nexport function EntityUpdateWrap(ent: Entity, exec: Function)\r\n{\r\n let bak = ent.AutoUpdate;\r\n ent.AutoUpdate = false;\r\n exec();\r\n ent.DeferUpdate();\r\n ent.AutoUpdate = bak;\r\n}\r\n\r\nexport function EntitysUpdateWrap(ens: Entity[], exec: Function)\r\n{\r\n let baks = ens.map(e => e.AutoUpdate);\r\n exec();\r\n for (let i = 0; i < ens.length; i++)\r\n {\r\n let en = ens[i];\r\n en.DeferUpdate();\r\n en.AutoUpdate = baks[i];\r\n }\r\n}\r\n","import * as clipperLib from \"js-angusj-clipper/web\"; // nodejs style require\r\n\r\nexport let clipperCpp: { lib?: clipperLib.ClipperLibWrapper; } = {};\r\nexport function InitClipperCpp(): Promise\r\n{\r\n if (clipperCpp.lib) return;\r\n if (!globalThis.document)\r\n globalThis.document = {} as any;\r\n return new Promise((res, rej) =>\r\n {\r\n clipperLib.loadNativeClipperLibInstanceAsync(\r\n // let it autodetect which one to use, but also available WasmOnly and AsmJsOnly\r\n \r\n clipperLib.NativeClipperLibRequestedFormat.AsmJsOnly\r\n\r\n ).then(c =>\r\n {\r\n clipperCpp.lib = c;\r\n res();\r\n // console.log(\"载入成功!\");//不再需要\r\n });\r\n });\r\n}\r\n","import { Factory } from \"../../CADFactory\";\r\nimport { Entity } from \"../../Entity/Entity\";\r\n\r\n\r\n/**\r\n * 户型元件的基类\r\n * 墙 平面(地板 天花)\r\n */\r\n@Factory\r\nexport class RoomBase extends Entity\r\n{\r\n}\r\n","import { equaln } from \"../../../../../Geometry/GeUtils\";\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 { RoomBase } from \"../../RoomBase\";\r\nimport { RoomWallBase } from \"../RoomWallBase\";\r\n\r\n\r\n/**\r\n * 墙上的洞\r\n *\r\n * 这个类接管了墙上的洞的绘制,以便可以直接在视图上操作这个洞(选择到洞,并且拖动) 但是同时我们也需要拿到原始墙的信息,保持材质(或者白墙? 独立材质?)\r\n */\r\n@Factory\r\nexport class RoomHoleBase extends RoomBase\r\n{\r\n @AutoRecord RelevancyWalls: ObjectId[] = [];//关联的墙体列表\r\n\r\n protected _Height = 800;\r\n\r\n constructor() { super(); }\r\n\r\n public get Height()\r\n {\r\n return this._Height;\r\n }\r\n public set Height(value)\r\n {\r\n if (equaln(value, this._Height, 1e-4)) return;\r\n this.WriteAllObjectRecord();\r\n this._Height = value;\r\n this.Update();\r\n }\r\n\r\n //#region -------------------------File-------------------------\r\n //对象从文件中读取数据,初始化自身\r\n protected override _ReadFile(file: CADFiler)\r\n {\r\n let ver = file.Read();\r\n super._ReadFile(file);\r\n this._Height = file.Read();\r\n\r\n if (ver > 1)\r\n {\r\n let count = file.Read();\r\n this.RelevancyWalls.length = 0;\r\n for (let i = 0; i < count; i++)\r\n {\r\n let id = file.ReadObjectId();\r\n if (id)\r\n this.RelevancyWalls.push(id as ObjectId);\r\n }\r\n }\r\n }\r\n //对象将自身数据写入到文件.\r\n override WriteFile(file: CADFiler)\r\n {\r\n file.Write(2);\r\n super.WriteFile(file);\r\n file.Write(this._Height);\r\n\r\n file.Write(this.RelevancyWalls.length);\r\n for (let id of this.RelevancyWalls)\r\n file.WriteObjectId(id);\r\n }\r\n //局部撤销\r\n override ApplyPartialUndo(undoData: CADObject)\r\n {\r\n super.ApplyPartialUndo(undoData);\r\n }\r\n //#endregion\r\n}\r\n","import { Face3, Geometry, LineSegments, Matrix3, Mesh, Object3D, ShapeUtils, Vector2, Vector3 } from \"three\";\r\nimport { arrayPushArray } from \"../../../../../Common/ArrayExt\";\r\nimport { ColorMaterial } from \"../../../../../Common/ColorPalette\";\r\nimport { ObjectSnapMode } from \"../../../../../Editor/ObjectSnapMode\";\r\nimport { Box3Ext } from \"../../../../../Geometry/Box\";\r\nimport { CreatePolylinePath } from \"../../../../../Geometry/CreatePolylinePath\";\r\nimport { AsVector3, equalv2, ZAxis } from \"../../../../../Geometry/GeUtils\";\r\nimport { RenderType } from \"../../../../../GraphicsSystem/RenderType\";\r\nimport { Factory } from \"../../../../CADFactory\";\r\nimport { CADFiler } from \"../../../../CADFiler\";\r\nimport { CADObject } from \"../../../../CADObject\";\r\nimport { Curve } from \"../../../../Entity/Curve\";\r\nimport { Line } from \"../../../../Entity/Line\";\r\nimport { Polyline } from \"../../../../Entity/Polyline\";\r\nimport { LEFT_ROTATE_MTX2 } from \"../../../ParseService/GetCurveParam\";\r\nimport { RoomWallBase } from \"../RoomWallBase\";\r\nimport { RoomWallLine } from \"../RoomWallLine\";\r\nimport { RoomHoleBase } from \"./RoomHoleBase\";\r\n\r\nenum HoleType\r\n{\r\n Door = 1,\r\n Window = 2,\r\n LWindow = 3,\r\n UWindow = 4,\r\n}\r\n\r\n/**\r\n * 折线洞 例如 转角窗 或者U型窗\r\n */\r\n@Factory\r\nexport class RoomHolePolyline extends RoomHoleBase\r\n{\r\n //虽然使用了三维的点,但是我们实际使用的是二维的点 z总是等于0\r\n private _Points: Vector3[] = [];\r\n private _FakerWalls: RoomWallBase[] = [];\r\n public set FakerWalls(_FakerWalls: RoomWallBase[])\r\n {\r\n this._FakerWalls = _FakerWalls;\r\n this.LidCurves = [];\r\n this.Regions = [];\r\n for (let w of this._FakerWalls)\r\n {\r\n arrayPushArray(this.LidCurves, w.LidCurves);\r\n if (w.Region)\r\n this.Regions.push(w.Region);\r\n w.OCSNoClone.elements[14] = this._Matrix.elements[14];\r\n w.Height = this.Height;\r\n\r\n if (w instanceof RoomWallLine && w.Length > 1e-6)\r\n w.UpdateOCSToMinBox();\r\n }\r\n }\r\n get FakerWalls(): RoomWallBase[] { return this._FakerWalls; }\r\n\r\n constructor() { super(); }\r\n\r\n override get BoundingBoxInOCS(): Box3Ext\r\n {\r\n let box = new Box3Ext;\r\n let inv = this.OCSInv;\r\n for (let w of this._FakerWalls)\r\n box.union(w.GetBoundingBoxInMtx(inv));\r\n return box;\r\n return new Box3Ext().copy(this.BoundingBox).applyMatrix4(this.OCSInv);\r\n }\r\n\r\n get Points() { return this._Points.map(p => p.clone().applyMatrix4(this.OCSNoClone)); }\r\n set Points(pts: Vector3[])\r\n {\r\n this.WriteAllObjectRecord();\r\n let inv = this.OCSInv;\r\n this._Points = pts.map(p => p.clone().applyMatrix4(inv).setZ(0));\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 let pts: Vector3[] = [];\r\n\r\n if (this.LidCurves)\r\n {\r\n let line = new Line;\r\n let inv = this.OCSInv;\r\n for (let lid of this.LidCurves)\r\n {\r\n let sp = lid.StartPoint.applyMatrix4(inv).setZ(0);\r\n let ep = lid.EndPoint.applyMatrix4(inv).setZ(0);\r\n\r\n line.StartPoint = sp.clone().applyMatrix4(this.OCSNoClone);\r\n line.EndPoint = sp.setZ(this._Height).applyMatrix4(this.OCSNoClone);\r\n\r\n arrayPushArray(pts, line.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform));\r\n\r\n line.StartPoint = ep.clone().applyMatrix4(this.OCSNoClone);\r\n line.EndPoint = ep.setZ(this._Height).applyMatrix4(this.OCSNoClone);\r\n\r\n arrayPushArray(pts, line.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform));\r\n }\r\n }\r\n\r\n if (this.Regions)\r\n {\r\n for (let region of this.Regions)\r\n {\r\n region.Z = this.Z;//我们拥有它\r\n\r\n arrayPushArray(pts, region.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform));\r\n\r\n region.Z += this._Height;\r\n\r\n arrayPushArray(pts, region.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform));\r\n }\r\n }\r\n return pts;\r\n }\r\n\r\n GetGripPoints(): Vector3[]\r\n {\r\n return this.Points;\r\n }\r\n\r\n MoveGripPoints(ids: number[], vec: Vector3)\r\n {\r\n\r\n }\r\n\r\n GetStretchPoints(): Array\r\n {\r\n return this.Points;\r\n }\r\n\r\n MoveStretchPoints(ids: Array, vec: Vector3)\r\n {\r\n }\r\n\r\n get FakerPoints()\r\n {\r\n let pts: Vector3[] = [];\r\n\r\n for (let w of this._FakerWalls)\r\n pts.push(w.StartPoint);\r\n if (this._FakerWalls.length)\r\n pts.push(this._FakerWalls[this._FakerWalls.length - 1].EndPoint);\r\n\r\n return pts;\r\n }\r\n //使用FakerWalls来更新这个洞的信息\r\n UpdatePoints(checkChange: boolean = false)\r\n {\r\n let pts = this.FakerPoints;\r\n\r\n this.WriteAllObjectRecord();\r\n\r\n if (pts.length === 2)\r\n {\r\n let x = pts[1].clone().sub(pts[0]).normalize();\r\n let z = ZAxis;\r\n let y = z.clone().cross(x).normalize();\r\n this._Matrix.makeBasis(x, y, z).setPosition(pts[0]);\r\n }\r\n else\r\n this._Matrix.setPosition(pts[1]);\r\n\r\n let ocsInv = this.OCSInv;\r\n for (let p of pts) p.applyMatrix4(ocsInv);\r\n\r\n this._Points = pts;\r\n this.Update();\r\n }\r\n\r\n //#region Draw\r\n LidCurves: Curve[];//窗户的开始和结束,我们接管了这个的绘制\r\n Regions: Polyline[];//窗户的区域,我们接管了这个的绘制(包括上面)\r\n\r\n override UpdateDrawGeometry()\r\n {\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 private _EdgeGeometry: Geometry;\r\n get EdgeGeometry()\r\n {\r\n if (this._EdgeGeometry) return this._EdgeGeometry;\r\n\r\n this._EdgeGeometry = new Geometry();\r\n\r\n let inv = this.OCSInv;\r\n\r\n let pts: Vector3[] = this._EdgeGeometry.vertices;\r\n\r\n if (this.LidCurves)\r\n for (let lid of this.LidCurves)\r\n {\r\n //TODO:是否真的需要切换到本地坐标系 (如果我们使用墙体上的曲线,那么需要 如果我们使用本地坐标系计算曲线 则不需要)\r\n let sp = lid.StartPoint.applyMatrix4(inv).setZ(0);\r\n let ep = lid.EndPoint.applyMatrix4(inv).setZ(0);\r\n\r\n pts.push(sp, sp.clone().setZ(this._Height),\r\n ep, ep.clone().setZ(this._Height),\r\n );\r\n }\r\n\r\n if (this.Regions)\r\n {\r\n for (let region of this.Regions)\r\n {\r\n region.Z = this.Z;//我们拥有它\r\n let lined = region.MatrixAlignTo2(this.OCSNoClone);\r\n\r\n if (region.CloseMark && !equalv2(lined.pts[0], lined.pts[lined.pts.length - 1], 1e-4))\r\n {\r\n lined.pts.push(lined.pts[0]);\r\n lined.buls.push(0);\r\n }\r\n\r\n let path = CreatePolylinePath(lined.pts, lined.buls);\r\n let rpts = path.getPoints(30);\r\n\r\n // let wallTopHeight = 0;\r\n // if (this.FakerHoles[0])\r\n // wallTopHeight = this.FakerHoles[0].Position.z + this.FakerHoles[0].Height - this.Position.z;\r\n\r\n for (let i = 1; i < rpts.length; i++)\r\n {\r\n let pre = AsVector3(rpts[i - 1]);\r\n let p = AsVector3(rpts[i]);\r\n\r\n pts.push(pre.setZ(0), p.setZ(0));\r\n pts.push(pre.clone().setZ(this._Height), p.clone().setZ(this._Height));\r\n\r\n // if (wallTopHeight)\r\n // pts.push(pre.clone().setZ(wallTopHeight), p.clone().setZ(wallTopHeight));\r\n }\r\n }\r\n }\r\n\r\n return this._EdgeGeometry;\r\n }\r\n\r\n private _MeshGeometry: Geometry;\r\n get MeshGeometry()\r\n {\r\n if (this._MeshGeometry) return this._MeshGeometry;\r\n\r\n this._MeshGeometry = new Geometry();\r\n\r\n let inv = this.OCSInv;\r\n let geo = this._MeshGeometry;\r\n\r\n if (this.LidCurves)\r\n for (let lid of this.LidCurves)\r\n {\r\n let startIndex = geo.vertices.length;\r\n\r\n //TODO:是否真的需要切换到本地坐标系 (如果我们使用墙体上的曲线,那么需要 如果我们使用本地坐标系计算曲线 则不需要)\r\n let p1 = lid.StartPoint.applyMatrix4(inv).setZ(0);\r\n let p2 = lid.EndPoint.applyMatrix4(inv).setZ(0);\r\n\r\n geo.vertices.push(p1.setZ(0), p2.setZ(0));\r\n geo.vertices.push(p1.clone().setZ(this._Height));\r\n geo.vertices.push(p2.clone().setZ(this._Height));\r\n\r\n let startX = 0;\r\n let endX = lid.Length * 1e-3;\r\n\r\n let startZ = 0;\r\n let endZ = this._Height * 1e-3;\r\n\r\n let normal = p2.clone().sub(p1).normalize();\r\n LEFT_ROTATE_MTX2.applyVector(normal);\r\n\r\n geo.faces.push(\r\n new Face3(startIndex, startIndex + 2, startIndex + 1, normal),\r\n new Face3(startIndex + 1, startIndex + 2, startIndex + 3, normal),\r\n );\r\n\r\n geo.faceVertexUvs[0].push(\r\n [new Vector2(startX, startZ), new Vector2(startX, endZ), new Vector2(endX, startZ)],\r\n [new Vector2(endX, startZ), new Vector2(startX, endZ), new Vector2(endX, endZ)],\r\n );\r\n }\r\n\r\n if (this.Regions)\r\n for (let region of this.Regions)\r\n {\r\n region.OCSNoClone.elements[14] = this._Matrix.elements[14];//我们拥有它\r\n let lined = region.MatrixAlignTo2(this.OCSNoClone);\r\n\r\n if (region.CloseMark && !equalv2(lined.pts[0], lined.pts[lined.pts.length - 1], 1e-4))\r\n {\r\n lined.pts.push(lined.pts[0]);\r\n lined.buls.push(0);\r\n }\r\n\r\n let path = CreatePolylinePath(lined.pts, lined.buls);\r\n let rpts = path.getPoints(30);\r\n\r\n let faces = ShapeUtils.triangulateShape(rpts, []);\r\n let startIndex = geo.vertices.length;\r\n for (let p of rpts) geo.vertices.push(new Vector3(p.x, p.y, 0));\r\n for (let p of rpts) geo.vertices.push(new Vector3(p.x, p.y, this._Height));\r\n\r\n let normal = this.Normal;\r\n let normaln = normal.clone().negate();\r\n for (let i = 0; i < faces.length; i++)\r\n {\r\n let [a, b, c] = faces[i];\r\n geo.faces.push(new Face3(startIndex + a, startIndex + b, startIndex + c, normal));\r\n let uvs = faces[i].map(index => rpts[index].clone().multiplyScalar(1e-3));\r\n geo.faceVertexUvs[0].push(uvs);\r\n\r\n geo.faces.push(new Face3(startIndex + rpts.length + c, startIndex + rpts.length + b, startIndex + rpts.length + a, normaln));\r\n geo.faceVertexUvs[0].push(uvs.concat().reverse().map(v => v.clone()));\r\n }\r\n }\r\n\r\n return this._MeshGeometry;\r\n }\r\n\r\n\r\n InitDrawObject(renderType: RenderType = RenderType.Wireframe): Object3D\r\n {\r\n 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\r\n let obj = new Object3D;\r\n if (renderType === RenderType.Wireframe || renderType === RenderType.Jig)\r\n {\r\n return new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(4));\r\n }\r\n else if (renderType === RenderType.Conceptual)\r\n {\r\n let mesh = new Mesh(this.MeshGeometry, ColorMaterial.GetConceptualMaterial(this.ColorIndex));\r\n let line = new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(this.ColorIndex));\r\n obj.add(mesh, line);\r\n }\r\n return obj;\r\n }\r\n\r\n /**\r\n * 重载:更新绘制的实体\r\n * @param {RenderType} renderType\r\n * @param {Object3D} obj\r\n */\r\n UpdateDrawObject(renderType: RenderType, obj: Object3D)\r\n {\r\n if (renderType === RenderType.Wireframe || renderType === RenderType.Jig)\r\n {\r\n let line = obj as LineSegments;\r\n if (line.geometry !== this.EdgeGeometry)\r\n {\r\n line.geometry.dispose();\r\n line.geometry = this.EdgeGeometry;\r\n }\r\n }\r\n else if (renderType === RenderType.Conceptual)\r\n {\r\n let mesh = obj.children[0] as Mesh;\r\n if (mesh.geometry !== this.MeshGeometry)\r\n {\r\n mesh.geometry.dispose();\r\n mesh.geometry = this.MeshGeometry;\r\n }\r\n\r\n let line = obj.children[1] as LineSegments;\r\n if (line.geometry !== this.EdgeGeometry)\r\n {\r\n line.geometry.dispose();\r\n line.geometry = this.EdgeGeometry;\r\n }\r\n }\r\n else if (renderType === RenderType.Physical)\r\n {\r\n let mesh = obj as Mesh;\r\n if (mesh.geometry !== this.MeshGeometry)\r\n {\r\n mesh.geometry.dispose();\r\n mesh.geometry = this.MeshGeometry;\r\n }\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 LineSegments;\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 //#endregion\r\n\r\n //#region -------------------------File-------------------------\r\n //对象从文件中读取数据,初始化自身\r\n protected override _ReadFile(file: CADFiler)\r\n {\r\n let ver = file.Read();\r\n super._ReadFile(file);\r\n\r\n this._Points.length = 0;\r\n let count = file.Read();\r\n for (let i = 0; i < count; i++)\r\n {\r\n let p = new Vector3(file.Read(), file.Read(), 0);\r\n this._Points.push(p);\r\n }\r\n }\r\n //对象将自身数据写入到文件.\r\n override WriteFile(file: CADFiler)\r\n {\r\n file.Write(1);\r\n super.WriteFile(file);\r\n\r\n file.Write(this._Points.length);\r\n for (let p of this._Points)\r\n {\r\n file.Write(p.x);\r\n file.Write(p.y);\r\n }\r\n }\r\n //局部撤销\r\n ApplyPartialUndo(undoData: CADObject)\r\n {\r\n super.ApplyPartialUndo(undoData);\r\n }\r\n //#endregion\r\n}\r\n","\r\nexport enum WallSnapMode\r\n{\r\n None = 0,\r\n Center = 1,\r\n Out = 2,\r\n All = 3\r\n}\r\n","import { Line as TLine, Mesh, Object3D } from \"three\";\r\nimport { ColorMaterial } from \"../../../../Common/ColorPalette\";\r\nimport { equaln } 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 { CADObject } from \"../../../CADObject\";\r\nimport { Arc } from \"../../../Entity/Arc\";\r\nimport { Curve } from \"../../../Entity/Curve\";\r\nimport { Line } from \"../../../Entity/Line\";\r\nimport { Polyline } from \"../../../Entity/Polyline\";\r\nimport { ObjectId } from \"../../../ObjectId\";\r\nimport { RoomBase } from \"../RoomBase\";\r\nimport { RoomHolePolyline } from \"./Hole/RoomHolePolyline\";\r\nimport { WallSnapMode } from \"./WallSnapMode\";\r\n\r\nexport const CURVE_FACE_TYPE_KEY = \"__CURVE_FACE_TYPE_KEY__\";//用来存储墙体类型的key\r\n\r\nexport enum WallFaceType\r\n{\r\n Inside = 0,//内部\r\n Pillar = 1,//柱子\r\n Outside = 2,//外墙\r\n}\r\n\r\ninterface HoleData\r\n{\r\n StartParam: number;\r\n EndParam: number;\r\n Bottom: number;\r\n Top: number;\r\n}\r\n\r\n@Factory\r\nexport abstract class RoomWallBase extends RoomBase\r\n{\r\n static SnapMode: WallSnapMode = WallSnapMode.All;\r\n\r\n @AutoRecord RelevancyHoles: ObjectId[] = [];\r\n Holes: HoleData[] = [];\r\n\r\n get RealHoles(): HoleData[]\r\n {\r\n return this.Holes.filter(h => h.EndParam > h.StartParam && h.Top > h.Bottom);\r\n }\r\n\r\n protected _Thickness = 120;\r\n protected _Height = 2700;\r\n\r\n get Height()\r\n {\r\n return this._Height;\r\n }\r\n set Height(_newHeight)\r\n {\r\n if (_newHeight <= 0.1 || equaln(this._Height, _newHeight)) return;\r\n this.WriteAllObjectRecord();\r\n this._Height = _newHeight;\r\n this.Update();\r\n }\r\n\r\n get Thickness() { return this._Thickness; }\r\n set Thickness(t: number)\r\n {\r\n if (t <= 0.1 || equaln(this._Thickness, t)) return;\r\n this.WriteAllObjectRecord();\r\n this._Thickness = t;\r\n this.Update();\r\n }\r\n\r\n\r\n //中心轴线\r\n get CenterAxisCurve(): Arc | Line { return; }\r\n\r\n //从曲线更新墙体\r\n UpdateCurve(cu: Curve) { }\r\n\r\n //绘制相关\r\n LeftCurves: (Arc | Line)[];\r\n RightCurves: (Arc | Line)[];\r\n LidCurves: (Arc | Line)[];\r\n Region: Polyline;\r\n\r\n UpdateDrawObjectMaterial(renderType: RenderType, obj: Object3D)\r\n {\r\n if (renderType === RenderType.Wireframe)\r\n {\r\n let l = obj.children[1] 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 //绘制相关_end\r\n\r\n //为了支持F后正确的保持洞\r\n override CopyFrom(obj: CADObject)\r\n {\r\n let bak = this.RelevancyHoles.concat();\r\n super.CopyFrom(obj);\r\n this.RelevancyHoles = bak;\r\n }\r\n\r\n //为了支持F,看起来不大行\r\n // override Clone(): this\r\n // {\r\n // let ent = super.Clone();\r\n // ent.Holes = this.Holes.concat();\r\n // return ent;\r\n // }\r\n\r\n //#region -------------------------File-------------------------\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._Thickness = file.Read();\r\n\r\n if (ver > 1)\r\n {\r\n let count = file.Read();\r\n this.RelevancyHoles.length = 0;\r\n for (let i = 0; i < count; i++)\r\n {\r\n let id = file.ReadObjectId();\r\n if (id)\r\n this.RelevancyHoles.push(id as ObjectId);\r\n }\r\n }\r\n\r\n if (ver > 2)\r\n {\r\n this._Height = file.Read();\r\n }\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(3);\r\n super.WriteFile(file);\r\n file.Write(this._Thickness);\r\n\r\n file.Write(this.RelevancyHoles.length);\r\n for (let id of this.RelevancyHoles)\r\n file.WriteObjectId(id);\r\n\r\n file.Write(this._Height);\r\n }\r\n //#endregion\r\n}\r\n\r\n// @ts-ignore\r\nexport interface RoomWallBase extends RoomBase, Curve { }\r\n\r\nexport const CURVE_MESH_NAMES = [\r\n \"Shape\",\r\n \"GetDrawCount\",\r\n\r\n \"Midpoint\",\r\n \"MidParam\",\r\n \"StartParam\",\r\n \"EndParam\",\r\n \"Area\",\r\n \"Area2\",\r\n \"Length\",\r\n \"IsClose\",\r\n \"IsClockWise\",\r\n\r\n \"GetPointAtParam\",\r\n \"GetPointAtDistance\",\r\n \"GetDistAtParam\",\r\n \"GetDistAtPoint\",\r\n \"GetParamAtPoint\",\r\n \"GetParamAtPoint2\",\r\n \"GetParamAtDist\",\r\n \"GetClosestAtPoint\",\r\n \"GetFistDeriv\",\r\n \"GetFistDerivAngle\",\r\n \"GetSplitCurves\",\r\n \"GetCurveAtParamRange\",\r\n \"GetSplitCurvesByPts\",\r\n \"Extend\",\r\n \"Join\",\r\n \"Reverse\",\r\n \"PtOnCurve\",\r\n \"PtOnCurve2\",\r\n \"PtOnCurve3\",\r\n \"ParamOnCurve\",\r\n \"GetOffsetCurves\",\r\n \"GetClosestPointTo\",\r\n \"IntersectWith\",\r\n \"IntersectWith2\",\r\n \"SplitParamSort\",\r\n\r\n \"SetStartEndPoint\",\r\n];\r\n\r\n// This can live anywhere in your codebase:\r\nexport function applyMixins(derivedCtor: any, constructor: any, methons = CURVE_MESH_NAMES)\r\n{\r\n for (let name of methons)\r\n Object.defineProperty(\r\n derivedCtor.prototype,\r\n name,\r\n Object.getOwnPropertyDescriptor(constructor.prototype, name) ?? Object.getOwnPropertyDescriptor(Curve.prototype, name) ?? Object.create(null)\r\n );\r\n}\r\n","import { BufferGeometry, Face3, Geometry, Line as TLine, LineSegments, MathUtils, Matrix3, Mesh, Object3D, ShapeUtils, Vector2, Vector3 } from \"three\";\r\nimport { HostApplicationServices } from \"../../../../ApplicationServices/HostApplicationServices\";\r\nimport { arrayPushArray } from \"../../../../Common/ArrayExt\";\r\nimport { ColorMaterial } from \"../../../../Common/ColorPalette\";\r\nimport { ObjectSnapMode } from \"../../../../Editor/ObjectSnapMode\";\r\nimport { BufferGeometryUtils } from \"../../../../Geometry/BufferGeometryUtils\";\r\nimport { SubtractRange, Tape } from \"../../../../Geometry/ExtrudeMeshGeomBuilder/ExtrudeEdgeGeometry2\";\r\nimport { SplitArcParams, SplitCurvePoints } from \"../../../../Geometry/ExtrudeMeshGeomBuilder/SplitCurveParams\";\r\nimport { AsVector2, AsVector3, clampRad, equaln, updateGeometry, ZeroVec } from \"../../../../Geometry/GeUtils\";\r\nimport { RenderType } from \"../../../../GraphicsSystem/RenderType\";\r\nimport { Factory } from \"../../../CADFactory\";\r\nimport { CADFiler } from \"../../../CADFiler\";\r\nimport { Arc } from \"../../../Entity/Arc\";\r\nimport { Curve } from \"../../../Entity/Curve\";\r\nimport { Line } from \"../../../Entity/Line\";\r\nimport { Polyline } from \"../../../Entity/Polyline\";\r\nimport { GetArcParam, GetLineParam } from \"../../ParseService/GetCurveParam\";\r\nimport { applyMixins, CURVE_FACE_TYPE_KEY, CURVE_MESH_NAMES, RoomWallBase, WallFaceType } from \"./RoomWallBase\";\r\nimport { WallSnapMode } from \"./WallSnapMode\";\r\n\r\nconst SnapTempLine = new Line;\r\n@Factory\r\nexport class RoomWallArc extends RoomWallBase\r\n{\r\n constructor(_Center: Vector3 = new Vector3(),\r\n private _Radius = 0.1,\r\n private _StartAngle = 0.1,\r\n private _EndAngle = 0.1,\r\n /**\r\n * 曲线为顺时针\r\n */\r\n private _Clockwise = true,\r\n _Thickness = 120\r\n\r\n )\r\n {\r\n super();\r\n this._Matrix.setPosition(_Center);\r\n this._StartAngle = clampRad(_StartAngle);\r\n this._EndAngle = clampRad(_EndAngle);\r\n this.Thickness = _Thickness;\r\n }\r\n\r\n //中心轴线\r\n override get CenterAxisCurve(): Arc | Line\r\n {\r\n if (this._Radius < (this.Thickness * 0.6) || Math.abs(this.Bul) < 0.0015)\r\n return new Line(this.StartPoint, this.EndPoint);\r\n let arc = new Arc(\r\n ZeroVec,\r\n this._Radius,\r\n this._StartAngle,\r\n this._EndAngle,\r\n this._Clockwise\r\n );\r\n arc.OCSNoClone.copy(this.OCSNoClone);\r\n return arc;\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 let pts = [];\r\n pts = pts.concat(Arc.prototype.GetObjectSnapPoints.call(this, snapMode, pickPoint, lastPoint, viewXform));\r\n const CurveSnap = (curve: Curve) =>\r\n {\r\n let bakZ = curve.Z;\r\n //底部线\r\n arrayPushArray(pts, curve.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform));\r\n\r\n //顶部线\r\n curve.Z += this._Height;\r\n arrayPushArray(pts, curve.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform));\r\n curve.Z = bakZ;\r\n\r\n let spep = [curve.StartPoint, curve.EndPoint];\r\n for (let p of spep)\r\n {\r\n let l = new Line(p, p.clone().setZ(p.z + this._Height));\r\n arrayPushArray(pts, l.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform));\r\n }\r\n };\r\n\r\n if (this.LeftCurves && (RoomWallBase.SnapMode & WallSnapMode.Out) > 0)\r\n {\r\n this.LeftCurves.forEach(CurveSnap);\r\n this.RightCurves.forEach(CurveSnap);\r\n this.LidCurves.forEach(CurveSnap);\r\n }\r\n\r\n return pts;\r\n }\r\n\r\n GetGripPoints(): Array\r\n {\r\n let pts = [\r\n this.StartPoint,\r\n this.GetPointAtParam(0.5),\r\n this.EndPoint,\r\n this.Center.clone(),\r\n ];\r\n let count = pts.length;\r\n\r\n for (let i = 0; i < count; i++)\r\n pts.push(pts[i].clone().setZ(pts[i].z + this._Height));\r\n return pts;\r\n }\r\n\r\n MoveGripPoints(indexList: Array, vec: Vector3)\r\n {\r\n if (indexList.length > 0)\r\n {\r\n let index = indexList[0];\r\n if (index >= 4) index -= 4;\r\n Arc.prototype.MoveGripPoints.call(this, [index], vec);\r\n }\r\n }\r\n\r\n GetStretchPoints(): Vector3[]\r\n {\r\n return Arc.prototype.GetStretchPoints.call(this);\r\n }\r\n MoveStretchPoints(indexList: number[], vec: Vector3): void\r\n {\r\n return Arc.prototype.MoveStretchPoints.call(this, indexList, vec);\r\n }\r\n\r\n //#region //绘制\r\n\r\n\r\n UpdateDrawGeometry()\r\n {\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\r\n private _EdgeGeometry: BufferGeometry;\r\n private _MeshGeometry: Geometry;\r\n get EdgeGeometry()\r\n {\r\n if (this._EdgeGeometry) return this._EdgeGeometry;\r\n\r\n for (let hole of this.Holes)\r\n if (hole.StartParam > hole.EndParam)\r\n [hole.StartParam, hole.EndParam] = [hole.EndParam, hole.StartParam];\r\n\r\n let pts: Vector3[];\r\n if (!this.LeftCurves)\r\n {\r\n let sign = this._Clockwise ? -1 : 1;\r\n\r\n if (this.Length > 0.1)\r\n {\r\n let left = new Arc(ZeroVec, this._Radius - sign * this.Thickness * 0.5, this._StartAngle, this._EndAngle, this._Clockwise);\r\n let right = new Arc(ZeroVec, this._Radius + sign * this.Thickness * 0.5, this._StartAngle, this._EndAngle, this._Clockwise);\r\n\r\n let leftPts = left.Shape.getPoints(this.GetDrawCount()).map(AsVector3);\r\n let rightPts = right.Shape.getPoints(this.GetDrawCount()).map(AsVector3);\r\n\r\n let leftPts2 = leftPts.map(p => p.clone().setZ(this._Height));\r\n let rightPts2 = rightPts.map(p => p.clone().setZ(this._Height));\r\n\r\n pts = [\r\n leftPts[0], leftPts[0].clone().setZ(this._Height),\r\n leftPts[leftPts.length - 1], leftPts[leftPts.length - 1].clone().setZ(this._Height),\r\n\r\n rightPts[0], rightPts[0].clone().setZ(this._Height),\r\n rightPts[rightPts.length - 1], rightPts[rightPts.length - 1].clone().setZ(this._Height),\r\n\r\n leftPts.shift()];\r\n\r\n for (let p of leftPts) pts.push(p, p);\r\n rightPts.reverse();\r\n for (let p of rightPts) pts.push(p, p);\r\n pts.push(pts[0]);\r\n\r\n //顶部\r\n pts.push(leftPts2.shift());\r\n for (let p of leftPts2) pts.push(p, p);\r\n rightPts2.reverse();\r\n for (let p of rightPts2) pts.push(p, p);\r\n }\r\n else\r\n pts = [];\r\n }\r\n else\r\n {\r\n pts = [];\r\n let inv = this.OCSInv;\r\n const DrawCurve = (curve: Curve, _leftRanges: [number, number][], _rightRanges: [number, number][]) =>\r\n {\r\n if (curve instanceof Line)\r\n {\r\n let p1 = curve.StartPoint.applyMatrix4(inv);\r\n let p2 = curve.EndPoint.applyMatrix4(inv);\r\n pts.push(p1, p2);\r\n\r\n for (let range of _leftRanges)\r\n pts.push(p1.clone().setZ(range[0]), p1.clone().setZ(range[1]));\r\n for (let range of _rightRanges)\r\n pts.push(p2.clone().setZ(range[0]), p2.clone().setZ(range[1]));\r\n\r\n pts.push(p1.clone().setZ(this._Height), p2.clone().setZ(this._Height));\r\n }\r\n else//arc\r\n {\r\n let cpts = curve.Shape.getPoints(this.GetDrawCount()).map(AsVector3);\r\n let topPts = cpts.map(p => p.clone().setZ(this._Height));\r\n\r\n //底部\r\n pts.push(cpts[0]);\r\n for (let i = 1; i < cpts.length - 1; i++)\r\n {\r\n let p = cpts[i];\r\n pts.push(p, p);\r\n }\r\n pts.push(cpts[cpts.length - 1]);\r\n\r\n //顶部\r\n pts.push(topPts[0]);\r\n for (let i = 1; i < topPts.length - 1; i++)\r\n {\r\n let p = topPts[i];\r\n pts.push(p, p);\r\n }\r\n pts.push(topPts[topPts.length - 1]);\r\n\r\n //竖线\r\n for (let range of _leftRanges)\r\n pts.push(cpts[0].clone().setZ(range[0]), cpts[0].clone().setZ(range[1]));\r\n for (let range of _rightRanges)\r\n pts.push(cpts[cpts.length - 1].clone().setZ(range[0]), cpts[cpts.length - 1].clone().setZ(range[1]));\r\n }\r\n };\r\n\r\n let lidRanges: [number, number][] = [[0, this._Height]];\r\n let leftRanges = lidRanges;\r\n let rightRanges = lidRanges;\r\n for (let hole of this.Holes)\r\n {\r\n if (equaln(hole.StartParam, 0))\r\n {\r\n let newLeftRanges = [];\r\n for (let range of leftRanges)\r\n arrayPushArray(newLeftRanges, SubtractRange(range[0], range[1], hole.Bottom, hole.Top, 1e5));\r\n leftRanges = newLeftRanges;\r\n }\r\n\r\n if (equaln(hole.EndParam, 1))\r\n {\r\n let newRightRanges = [];\r\n for (let range of rightRanges)\r\n arrayPushArray(newRightRanges, SubtractRange(range[0], range[1], hole.Bottom, hole.Top, 1e5));\r\n rightRanges = newRightRanges;\r\n }\r\n }\r\n\r\n for (let i = 0; i < this.LeftCurves.length; i++)\r\n {\r\n let curve = this.LeftCurves[i];\r\n DrawCurve(curve, i === 0 ? leftRanges : lidRanges, (i === this.LeftCurves.length - 1) ? rightRanges : lidRanges);\r\n }\r\n for (let i = 0; i < this.RightCurves.length; i++)\r\n {\r\n let curve = this.RightCurves[i];\r\n DrawCurve(curve, i === 0 ? leftRanges : lidRanges, (i === this.RightCurves.length - 1) ? rightRanges : lidRanges);\r\n }\r\n for (let i = 0; i < this.LidCurves.length; i++)\r\n {\r\n let curve = this.LidCurves[i];\r\n DrawCurve(curve, lidRanges, lidRanges);\r\n }\r\n }\r\n\r\n this._EdgeGeometry = BufferGeometryUtils.CreateFromPts(pts);\r\n return this._EdgeGeometry;\r\n }\r\n get MeshGeometry()\r\n {\r\n if (this._MeshGeometry) return this._MeshGeometry;\r\n\r\n this._MeshGeometry = new Geometry;\r\n\r\n let geo = this._MeshGeometry;\r\n let normal = this.Normal;\r\n let normaln = normal.clone().negate();\r\n let center = this.Center;\r\n let inv = this.OCSInv;\r\n\r\n let thisParam = new GetArcParam(this as unknown as Arc);\r\n\r\n const BuildLeftFace = (curve: Curve) =>\r\n {\r\n let materialIndex = 0;\r\n if (curve[CURVE_FACE_TYPE_KEY] === WallFaceType.Outside)\r\n {\r\n \r\n materialIndex = 1;\r\n }\r\n\r\n if (curve instanceof Line)\r\n {\r\n let tapes = [new Tape(0, 1, 0, this._Height)];\r\n let curveParam = new GetLineParam(curve);\r\n let holes = this.RealHoles;\r\n if (holes.length)\r\n {\r\n for (let hole of holes)\r\n {\r\n let start = equaln(hole.StartParam, 0) ? 0 : MathUtils.clamp(curveParam.GetParamAtPoint(thisParam.GetPointAtParam(hole.StartParam)), 0, 1);\r\n let end = equaln(hole.EndParam, 1) ? 1 : MathUtils.clamp(curveParam.GetParamAtPoint(thisParam.GetPointAtParam(hole.EndParam)), 0, 1);\r\n if (start > end) [start, end] = [end, start];\r\n let holeTape = new Tape(start, end, hole.Bottom, hole.Top);\r\n\r\n let newTapes: Tape[] = [];\r\n for (let tape of tapes)\r\n arrayPushArray(newTapes, tape.Clip(holeTape));\r\n\r\n tapes = newTapes;\r\n }\r\n }\r\n\r\n for (let tape of tapes)\r\n {\r\n let startIndex = geo.vertices.length;\r\n\r\n let p1 = curveParam.GetPointAtParam(tape.start).applyMatrix4(inv);\r\n let p2 = curveParam.GetPointAtParam(tape.end).applyMatrix4(inv);\r\n geo.vertices.push(p1.setZ(tape.bottom), p2.setZ(tape.bottom));\r\n geo.vertices.push(p1.clone().setZ(tape.top));\r\n geo.vertices.push(p2.clone().setZ(tape.top));\r\n\r\n let startX = curveParam.Length * 1e-3 * tape.start;\r\n let endX = curveParam.Length * 1e-3 * tape.end;\r\n\r\n let startZ = tape.bottom * 1e-3;\r\n let endZ = tape.top * 1e-3;\r\n\r\n geo.faces.push(\r\n new Face3(startIndex, startIndex + 2, startIndex + 1, curveParam.LeftDir, undefined, materialIndex),\r\n new Face3(startIndex + 1, startIndex + 2, startIndex + 3, curveParam.LeftDir, undefined, materialIndex),\r\n );\r\n\r\n geo.faceVertexUvs[0].push(\r\n [new Vector2(startX, startZ), new Vector2(startX, endZ), new Vector2(endX, startZ)],\r\n [new Vector2(endX, startZ), new Vector2(startX, endZ), new Vector2(endX, endZ)],\r\n );\r\n }\r\n }\r\n else\r\n {\r\n let arc = curve as Arc;\r\n\r\n let tapes = [new Tape(0, 1, 0, this._Height)];\r\n let curveParam = new GetArcParam(arc);\r\n\r\n let holes = this.RealHoles;\r\n if (holes.length)\r\n {\r\n for (let hole of holes)\r\n {\r\n let start = equaln(hole.StartParam, 0) ? 0 : MathUtils.clamp(curveParam.GetParamAtPoint(thisParam.GetPointAtParam(hole.StartParam)), 0, 1);\r\n let end = equaln(hole.EndParam, 1) ? 1 : MathUtils.clamp(curveParam.GetParamAtPoint(thisParam.GetPointAtParam(hole.EndParam)), 0, 1);\r\n if (start === end) continue;\r\n if (start > end) [start, end] = [end, start];\r\n let holeTape = new Tape(start, end, hole.Bottom, hole.Top);\r\n\r\n let newTapes: Tape[] = [];\r\n for (let tape of tapes)\r\n arrayPushArray(newTapes, tape.Clip(holeTape));\r\n\r\n tapes = newTapes;\r\n }\r\n }\r\n\r\n if (this.Holes.length)\r\n {\r\n let length = arc.Length;\r\n let params: number[] = SplitArcParams(arc);\r\n\r\n //需要合并顶点,所以建立一个map\r\n let cacheIndex: { [key: string]: number; } = {};\r\n const GetIndex = (param: number, z: number) =>\r\n {\r\n let key = `${param}_${z}`;\r\n let index = cacheIndex[key];\r\n if (index === undefined)\r\n {\r\n index = geo.vertices.length;\r\n cacheIndex[key] = index;\r\n geo.vertices.push(curveParam.GetPointAtParam(param).applyMatrix4(inv).setZ(z));\r\n }\r\n return index;\r\n };\r\n\r\n for (let tapeaaaaa of tapes)\r\n {\r\n for (let tape of tapeaaaaa.Split(params))\r\n {\r\n let p1Index = GetIndex(tape.start, tape.bottom);\r\n let p2Index = GetIndex(tape.end, tape.bottom);\r\n let p3Index = GetIndex(tape.start, tape.top);\r\n let p4Index = GetIndex(tape.end, tape.top);\r\n\r\n let startX = length * 1e-3 * tape.start;\r\n let endX = length * 1e-3 * tape.end;\r\n\r\n let startZ = tape.bottom * 1e-3;\r\n let endZ = tape.top * 1e-3;\r\n\r\n let dir = arc.GetPointAtParam((tape.start + tape.end) * 0.5).applyMatrix4(inv).divideScalar(arc.Radius);\r\n\r\n geo.faces.push(\r\n new Face3(p1Index, p3Index, p2Index, dir, undefined, materialIndex),\r\n new Face3(p2Index, p3Index, p4Index, dir, undefined, materialIndex),\r\n );\r\n\r\n geo.faceVertexUvs[0].push(\r\n [new Vector2(startX, startZ), new Vector2(startX, endZ), new Vector2(endX, startZ)],\r\n [new Vector2(endX, startZ), new Vector2(startX, endZ), new Vector2(endX, endZ)],\r\n );\r\n }\r\n }\r\n }\r\n else\r\n {\r\n let startIndex = geo.vertices.length;\r\n\r\n let pts = curve.Shape.getPoints(this.GetDrawCount()).map(AsVector3);\r\n let pts2 = pts.map(p => p.clone().setZ(this._Height));\r\n arrayPushArray(geo.vertices, pts);\r\n arrayPushArray(geo.vertices, pts2);\r\n\r\n let count = pts.length;\r\n let length = curve.Length * 1e-3;\r\n let divLength = length / pts.length;\r\n for (let i = 1; i < count; i++)\r\n {\r\n let pre = i - 1;\r\n\r\n let preX = pre * divLength;\r\n let nowX = i * divLength;\r\n\r\n let dir = pts[i].clone().add(pts[pre]).multiplyScalar(0.5).divideScalar(arc.Radius);\r\n geo.faces.push(\r\n new Face3(startIndex + i, startIndex + pre, startIndex + pre + count, dir, undefined, materialIndex),\r\n new Face3(startIndex + i + count, startIndex + i, startIndex + pre + count, dir, undefined, materialIndex),\r\n );\r\n geo.faceVertexUvs[0].push(\r\n [new Vector2(nowX, 0), new Vector2(preX, 0), new Vector2(preX, this._Height * 1e-3)],\r\n [new Vector2(nowX, this._Height * 1e-3), new Vector2(nowX, 0), new Vector2(preX, this._Height * 1e-3)],\r\n );\r\n }\r\n }\r\n }\r\n };\r\n const BuildRightFace = (curve: Curve) =>\r\n {\r\n let materialIndex = 0;\r\n if (curve[CURVE_FACE_TYPE_KEY] === WallFaceType.Outside)\r\n {\r\n \r\n materialIndex = 1;\r\n }\r\n\r\n if (curve instanceof Line)\r\n {\r\n let tapes = [new Tape(0, 1, 0, this._Height)];\r\n let curveParam = new GetLineParam(curve);\r\n\r\n let holes = this.RealHoles;\r\n if (holes.length)\r\n {\r\n for (let hole of holes)\r\n {\r\n let start = equaln(hole.StartParam, 0) ? 0 : curveParam.GetParamAtPoint(thisParam.GetPointAtParam(hole.StartParam));\r\n let end = equaln(hole.EndParam, 1) ? 1 : curveParam.GetParamAtPoint(thisParam.GetPointAtParam(hole.EndParam));\r\n if (start > end) [start, end] = [end, start];\r\n let holeTape = new Tape(start, end, hole.Bottom, hole.Top);\r\n\r\n let newTapes: Tape[] = [];\r\n for (let tape of tapes)\r\n arrayPushArray(newTapes, tape.Clip(holeTape));\r\n\r\n tapes = newTapes;\r\n }\r\n }\r\n\r\n for (let tape of tapes)\r\n {\r\n let startIndex = geo.vertices.length;\r\n\r\n let p1 = curveParam.GetPointAtParam(tape.start).applyMatrix4(inv);\r\n let p2 = curveParam.GetPointAtParam(tape.end).applyMatrix4(inv);\r\n geo.vertices.push(p1.setZ(tape.bottom), p2.setZ(tape.bottom));\r\n geo.vertices.push(p1.clone().setZ(tape.top));\r\n geo.vertices.push(p2.clone().setZ(tape.top));\r\n\r\n let startX = curveParam.Length * 1e-3 * tape.start;\r\n let endX = curveParam.Length * 1e-3 * tape.end;\r\n\r\n let startZ = tape.bottom * 1e-3;\r\n let endZ = tape.top * 1e-3;\r\n\r\n geo.faces.push(\r\n new Face3(startIndex, startIndex + 1, startIndex + 2, curveParam.RightDir, undefined, materialIndex),\r\n new Face3(startIndex + 1, startIndex + 3, startIndex + 2, curveParam.RightDir, undefined, materialIndex),\r\n );\r\n\r\n geo.faceVertexUvs[0].push(\r\n [new Vector2(startX, startZ), new Vector2(endX, startZ), new Vector2(startX, endZ)],\r\n [new Vector2(endX, startZ), new Vector2(endX, endZ), new Vector2(startX, endZ)],\r\n );\r\n }\r\n }\r\n else\r\n {\r\n let arc = curve as Arc;\r\n\r\n let tapes = [new Tape(0, 1, 0, this._Height)];\r\n let curveParam = new GetArcParam(arc);\r\n\r\n let holes = this.RealHoles;\r\n if (holes.length)\r\n {\r\n for (let hole of holes)\r\n {\r\n let start = equaln(hole.StartParam, 0) ? 0 : curveParam.GetParamAtPoint(thisParam.GetPointAtParam(hole.StartParam));\r\n let end = equaln(hole.EndParam, 1) ? 1 : curveParam.GetParamAtPoint(thisParam.GetPointAtParam(hole.EndParam));\r\n if (start > end) [start, end] = [end, start];\r\n let holeTape = new Tape(start, end, hole.Bottom, hole.Top);\r\n\r\n let newTapes: Tape[] = [];\r\n for (let tape of tapes)\r\n arrayPushArray(newTapes, tape.Clip(holeTape));\r\n\r\n tapes = newTapes;\r\n }\r\n\r\n let length = arc.Length;\r\n let params: number[] = SplitArcParams(arc);\r\n\r\n //需要合并顶点,所以建立一个map\r\n let cacheIndex: { [key: string]: number; } = {};\r\n const GetIndex = (param: number, z: number) =>\r\n {\r\n let key = `${param}_${z}`;\r\n let index = cacheIndex[key];\r\n if (index === undefined)\r\n {\r\n index = geo.vertices.length;\r\n cacheIndex[key] = index;\r\n geo.vertices.push(curveParam.GetPointAtParam(param).applyMatrix4(inv).setZ(z));\r\n }\r\n return index;\r\n };\r\n\r\n for (let tapeaaaaa of tapes)\r\n {\r\n for (let tape of tapeaaaaa.Split(params))\r\n {\r\n let p1Index = GetIndex(tape.start, tape.bottom);\r\n let p2Index = GetIndex(tape.end, tape.bottom);\r\n let p3Index = GetIndex(tape.start, tape.top);\r\n let p4Index = GetIndex(tape.end, tape.top);\r\n\r\n let startX = length * 1e-3 * tape.start;\r\n let endX = length * 1e-3 * tape.end;\r\n\r\n let startZ = tape.bottom * 1e-3;\r\n let endZ = tape.top * 1e-3;\r\n\r\n let dir = arc.GetPointAtParam((tape.start + tape.end) * 0.5).applyMatrix4(inv).divideScalar(-arc.Radius);\r\n\r\n geo.faces.push(\r\n new Face3(p1Index, p2Index, p3Index, dir, undefined, materialIndex),\r\n new Face3(p2Index, p4Index, p3Index, dir, undefined, materialIndex),\r\n );\r\n\r\n geo.faceVertexUvs[0].push(\r\n [new Vector2(startX, startZ), new Vector2(endX, startZ), new Vector2(startX, endZ)],\r\n [new Vector2(endX, startZ), new Vector2(endX, endZ), new Vector2(startX, endZ)],\r\n );\r\n }\r\n }\r\n }\r\n else\r\n {\r\n let arc = curve as Arc;\r\n let startIndex = geo.vertices.length;\r\n\r\n let pts = curve.Shape.getPoints(this.GetDrawCount()).map(AsVector3);\r\n let pts2 = pts.map(p => p.clone().setZ(this._Height));\r\n arrayPushArray(geo.vertices, pts);\r\n arrayPushArray(geo.vertices, pts2);\r\n\r\n let length = curve.Length * 1e-3;\r\n let divLength = length / pts.length;\r\n\r\n let count = pts.length;\r\n for (let i = 1; i < count; i++)\r\n {\r\n let pre = i - 1;\r\n\r\n let preX = pre * divLength;\r\n let nowX = i * divLength;\r\n\r\n let dir = pts[i].clone().add(pts[pre]).multiplyScalar(0.5).divideScalar(-arc.Radius);\r\n geo.faces.push(\r\n new Face3(startIndex + pre, startIndex + i, startIndex + pre + count, dir, undefined, materialIndex),\r\n new Face3(startIndex + i, startIndex + i + count, startIndex + pre + count, dir, undefined, materialIndex),\r\n );\r\n geo.faceVertexUvs[0].push(\r\n [new Vector2(preX, 0), new Vector2(nowX, 0), new Vector2(preX, this._Height * 1e-3)],\r\n [new Vector2(nowX, 0), new Vector2(nowX, this._Height * 1e-3), new Vector2(preX, this._Height * 1e-3)],\r\n );\r\n }\r\n }\r\n }\r\n };\r\n const BuildRegionFace = (region: Polyline) =>\r\n {\r\n let ocsInv = this.OCSInv;\r\n let pts = SplitCurvePoints(region).map(p => AsVector2(p.applyMatrix4(ocsInv)));\r\n\r\n let faces = ShapeUtils.triangulateShape(pts, []);\r\n\r\n //top\r\n let startIndex = geo.vertices.length;\r\n for (let p of pts) geo.vertices.push(new Vector3(p.x, p.y, this._Height));\r\n if (HostApplicationServices.DrawWallBottomFace) for (let p of pts) geo.vertices.push(new Vector3(p.x, p.y, 0));\r\n\r\n for (let i = 0; i < faces.length; i++)\r\n {\r\n let [a, b, c] = faces[i];\r\n geo.faces.push(new Face3(startIndex + a, startIndex + b, startIndex + c, normal));\r\n let uvs = faces[i].map(index => pts[index].clone());\r\n geo.faceVertexUvs[0].push(uvs);\r\n\r\n if (HostApplicationServices.DrawWallBottomFace)\r\n {\r\n geo.faces.push(new Face3(startIndex + pts.length + c, startIndex + pts.length + b, startIndex + pts.length + a, normaln));\r\n geo.faceVertexUvs[0].push(uvs.concat().reverse().map(v => v.clone()));\r\n }\r\n }\r\n\r\n // //todo:为了优化显示 我们可以把侧面也画出来 (应该使用和酷家乐一样的技术 在视线对准时,隐藏整个墙)\r\n // let d = this._EndPoint.clone().sub(this._StartPoint).normalize();\r\n // let pre = pts[pts.length - 1];\r\n // let tempV = new Vector3;\r\n // for (let i = 0; i < pts.length; i++)\r\n // {\r\n // let p = pts[i];\r\n // tempV.set(p.x - pre.x, p.y - pre.y, 0).normalize();\r\n // //todo:盖子会重复绘制\r\n // if (!isParallelTo(d, tempV, 1e-3) && !isPerpendicularityTo(d, tempV, 1e-3))\r\n // {\r\n // startIndex = geo.vertices.length;\r\n // geo.vertices.push(AsVector3(pre), AsVector3(p));\r\n // geo.vertices.push(AsVector3(pre).setZ(this._Height));\r\n // geo.vertices.push(AsVector3(p).setZ(this._Height));\r\n\r\n // LEFT_ROTATE_MTX2.applyVector(tempV);\r\n // tempV.negate();\r\n\r\n // let n = tempV.clone();\r\n\r\n // geo.faces.push(\r\n // new Face3(startIndex, startIndex + 1, startIndex + 2, n),\r\n // new Face3(startIndex + 1, startIndex + 3, startIndex + 2, n),\r\n // );\r\n\r\n // geo.faceVertexUvs[0].push(\r\n // [new Vector2(), new Vector2(0, 0), new Vector2(0, 0)],\r\n // [new Vector2(0, 0), new Vector2(0, 0), new Vector2(0, 0)],\r\n // );\r\n // }\r\n\r\n // pre = p;\r\n // }\r\n };\r\n\r\n if (!this.LeftCurves)\r\n {\r\n let sign = this._Clockwise ? -1 : 1;\r\n if (this.Length > 0.1)\r\n {\r\n let left = new Arc(ZeroVec, this._Radius - sign * this.Thickness * 0.5, this._StartAngle, this._EndAngle, this._Clockwise);\r\n let right = new Arc(ZeroVec, this._Radius + sign * this.Thickness * 0.5, this._StartAngle, this._EndAngle, this._Clockwise);\r\n left.OCS = this.OCSNoClone;\r\n right.OCS = this.OCSNoClone;\r\n\r\n BuildLeftFace(left);\r\n BuildRightFace(right);\r\n let lid1 = new Line(left.StartPoint, right.StartPoint);\r\n let lid2 = new Line(right.EndPoint, left.EndPoint);\r\n BuildRightFace(lid1);\r\n BuildRightFace(lid2);\r\n\r\n let region = Polyline.Combine([left, lid2, right, lid1]);\r\n if (region) BuildRegionFace(region);\r\n }\r\n }\r\n else\r\n {\r\n this.LeftCurves.forEach(BuildLeftFace);\r\n this.RightCurves.forEach(BuildRightFace);\r\n this.LidCurves.forEach(BuildRightFace);\r\n\r\n if (this.Region) BuildRegionFace(this.Region);\r\n }\r\n\r\n geo.computeVertexNormals();\r\n geo.verticesNeedUpdate = true;\r\n geo.uvsNeedUpdate = true;\r\n\r\n return this._MeshGeometry;\r\n }\r\n\r\n InitDrawObject(renderType: RenderType = RenderType.Wireframe): Object3D\r\n {\r\n if (renderType === RenderType.Physical)\r\n {\r\n let mesh = new Mesh(this.MeshGeometry, this.MeshMaterial);\r\n mesh.castShadow = true;\r\n return mesh;\r\n }\r\n\r\n let obj = new Object3D;\r\n if (renderType === RenderType.Wireframe || renderType === RenderType.Jig)\r\n {\r\n let pts = this.Shape.getPoints(this.GetDrawCount()).map(AsVector3);\r\n let geo = new BufferGeometry().setFromPoints(pts);\r\n let axisLine = new TLine(geo, ColorMaterial.GetWallLineMtl(1));\r\n axisLine.computeLineDistances();\r\n obj.add(axisLine);\r\n\r\n let outline = new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(this.ColorIndex));\r\n obj.add(outline);\r\n }\r\n else if (renderType === RenderType.Conceptual)\r\n {\r\n let mesh = new Mesh(this.MeshGeometry, ColorMaterial.GetConceptualMaterial(this.ColorIndex));\r\n obj.add(mesh);\r\n\r\n let outline = new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(this.ColorIndex));\r\n obj.add(outline);\r\n }\r\n return obj;\r\n }\r\n\r\n /**\r\n * 重载:更新绘制的实体\r\n * @param {RenderType} renderType\r\n * @param {Object3D} obj\r\n */\r\n UpdateDrawObject(renderType: RenderType, obj: Object3D)\r\n {\r\n if (renderType === RenderType.Wireframe || renderType === RenderType.Jig)\r\n {\r\n let [axisLine, outline] = obj.children as [TLine, TLine];\r\n\r\n let pts = this.Shape.getPoints(this.GetDrawCount()).map(AsVector3);\r\n if (!BufferGeometryUtils.UpdatePts(axisLine.geometry, pts))\r\n updateGeometry(axisLine, BufferGeometryUtils.CreateFromPts(pts));\r\n axisLine.computeLineDistances();\r\n\r\n // if (this._Radius <= this.Thickness * 0.5)\r\n // return; //会退化成直线 所以不return了\r\n\r\n if (outline.geometry !== this.EdgeGeometry)\r\n {\r\n outline.geometry.dispose();\r\n outline.geometry = this.EdgeGeometry;\r\n }\r\n }\r\n else if (renderType === RenderType.Conceptual)\r\n {\r\n let mesh = obj.children[0] as Mesh;\r\n if (mesh.geometry !== this.MeshGeometry)\r\n {\r\n mesh.geometry.dispose();\r\n mesh.geometry = this.MeshGeometry;\r\n }\r\n\r\n let outline = obj.children[1] as LineSegments;\r\n if (outline.geometry !== this.EdgeGeometry)\r\n {\r\n outline.geometry.dispose();\r\n outline.geometry = this.EdgeGeometry;\r\n }\r\n }\r\n else if (renderType === RenderType.Physical)\r\n {\r\n let mesh = obj as Mesh;\r\n if (mesh.geometry !== this.MeshGeometry)\r\n {\r\n mesh.geometry.dispose();\r\n mesh.geometry = this.MeshGeometry;\r\n }\r\n }\r\n }\r\n //#endregion\r\n\r\n //#region -------------------------File-------------------------\r\n //对象应该实现dataIn和DataOut的方法,为了对象的序列化和反序列化\r\n\r\n //对象从文件中读取数据,初始化自身\r\n protected override _ReadFile(file: CADFiler)\r\n {\r\n super._ReadFile(file);\r\n let ver = file.Read();\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 //对象将自身数据写入到文件.\r\n override 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\nconst ARC_MEHTON_NAMES = [\r\n \"Center\",\r\n \"Normal\",\r\n \"BoundingBoxPtsInOCS\",\r\n \"Radius\",\r\n \"IsClockWise\",\r\n \"StartAngle\",\r\n \"EndAngle\",\r\n\r\n \"StartPoint\",\r\n \"EndPoint\",\r\n\r\n \"ApplyScaleMatrix\",\r\n \"ApplyMirrorMatrix\",\r\n\r\n \"GetParamAtAngle\",\r\n \"GetParamAtAngle2\",\r\n \"GetAngleAtParam\",\r\n \"GetAngleAtPoint\",\r\n\r\n \"AllAngle\",\r\n \"Bul\",\r\n\r\n \"ComputeAnlge\",\r\n \"ParseFromBul\",\r\n \"FromThreePoint\",\r\n];\r\n\r\n//@ts-ignore\r\nexport interface RoomWallArc extends RoomWallBase, Arc { }\r\napplyMixins(RoomWallArc, Arc, ARC_MEHTON_NAMES.concat(CURVE_MESH_NAMES));\r\n","import Flatbush from 'flatbush';\r\nimport { Vector2, Vector3 } from 'three';\r\nimport { CURVE_FACE_TYPE_KEY, RoomWallBase, WallFaceType } from \"../../Entity/Wall/RoomWallBase\";\r\nimport { CreateGetCurveParam, GetCurveParam } from \"../GetCurveParam\";\r\nimport { InsertSortedIndex, Intersection } from '../RangeUtils';\r\n\r\ntype Range = [number, number];\r\n\r\nexport interface WallRange extends Range\r\n{\r\n left: WallFaceType;\r\n right: WallFaceType;\r\n}\r\n\r\nexport class RoomWallPlaceIHoleHelper\r\n{\r\n protected _ParamGets: GetCurveParam[] = [];\r\n protected _ParamRanges: ([number, number][])[] = [];\r\n protected _Fb: Flatbush;\r\n\r\n constructor(public _Walls: RoomWallBase[])\r\n {\r\n this.GenFb();\r\n this.ParseWallCanPlaceHoleRange();\r\n }\r\n\r\n FindBestPlace(p: Vector3)\r\n {\r\n let ids = this._Fb.neighbors(p.x, p.y, 50, 200);//50个 200距离\r\n\r\n let minDist = Infinity;\r\n let minId = -1;\r\n let cpParam: number;\r\n for (let id of ids)\r\n {\r\n if (this._ParamRanges[id].length === 0)\r\n continue; //没有可以放置的区域\r\n\r\n let paramGet = this._ParamGets[id];\r\n let param = paramGet.GetParamAtPoint(p);\r\n if (param < 0 || param > 1) continue;//不在墙上\r\n let cp = paramGet.GetPointAtParam(param);\r\n\r\n if (p.z < cp.z - 1 || p.z > cp.z + 2800) continue;//线在上墙就行\r\n\r\n let dist = Vector2.prototype.distanceToSquared.call(cp, p);\r\n if (dist < minDist)\r\n {\r\n minDist = dist;\r\n minId = id;\r\n cpParam = param;\r\n }\r\n }\r\n if (minId === -1 || minDist > 90000)//300*300=90000\r\n return;\r\n\r\n let range = FindBestRange(cpParam, this._ParamRanges[minId]) as unknown as WallRange;\r\n if (range)\r\n return {\r\n wall: this._Walls[minId],\r\n range,\r\n cpParam,\r\n getParam: this._ParamGets[minId]\r\n };\r\n }\r\n\r\n private GenFb()\r\n {\r\n if (!this._Walls.length) return;\r\n\r\n this._Fb = new Flatbush(this._Walls.length);\r\n for (let wall of this._Walls)\r\n {\r\n let box = wall.BoundingBox;\r\n this._Fb.add(box.min.x, box.min.y, box.max.x, box.max.y);\r\n }\r\n this._Fb.finish();\r\n }\r\n\r\n ParseWallCanPlaceHoleRange()\r\n {\r\n for (let wall of this._Walls)\r\n {\r\n let param = CreateGetCurveParam(wall);\r\n this._ParamGets.push(param);\r\n this._ParamRanges.push(ParseWallRange(wall, param));\r\n }\r\n }\r\n}\r\n\r\n\r\n//找到一个合适的位置放置直线洞\r\nexport function FindBestRange(param: number, ranges: [number, number][], fuzz = 1e-5): [number, number]\r\n{\r\n //二分搜索\r\n let index = InsertSortedIndex(ranges, param, (v, range) => v - range[0] + fuzz);\r\n\r\n let range = ranges[index - 1];\r\n\r\n //参数在范围内\r\n if (range && (range[0] - fuzz) <= param && param <= (range[1] + fuzz))\r\n return range;\r\n\r\n // //参数在范围外\r\n // if (index === 0)\r\n // {\r\n // return ranges[0];\r\n // }\r\n // else if (index === ranges.length)\r\n // {\r\n // return ranges[ranges.length - 1];\r\n // }\r\n // else\r\n // {\r\n // let nextRange = ranges[index + 1];\r\n // if (nextRange[0] - param < param - range[1])\r\n // return nextRange;\r\n // else\r\n // return range;\r\n // }\r\n}\r\n\r\nexport function ParseWallRange(wall: RoomWallBase, getParam = CreateGetCurveParam(wall))\r\n{\r\n let leftParams: [number, number][] = wall.LeftCurves.map(c =>\r\n {\r\n let range = [getParam.GetParamAtPoint(c.StartPoint), getParam.GetParamAtPoint(c.EndPoint)] as [number, number];\r\n range[CURVE_FACE_TYPE_KEY] = c[CURVE_FACE_TYPE_KEY];\r\n return range;\r\n });\r\n let rightParams: [number, number][] = wall.RightCurves.map(c =>\r\n {\r\n let range = [getParam.GetParamAtPoint(c.StartPoint), getParam.GetParamAtPoint(c.EndPoint)] as [number, number];\r\n range[CURVE_FACE_TYPE_KEY] = c[CURVE_FACE_TYPE_KEY];\r\n return range;\r\n });\r\n\r\n leftParams.sort((a, b) => a[0] - b[0]);\r\n rightParams.sort((a, b) => a[0] - b[0]);\r\n\r\n let ranges: [number, number][] = [];\r\n for (let seg1 of rightParams)\r\n {\r\n let [min, max] = seg1;\r\n for (let seg2 of leftParams)\r\n {\r\n let [min2, max2] = seg2;\r\n if (min > max2) continue;\r\n if (max < min2) break;\r\n\r\n let range = Intersection(seg1, seg2);\r\n if (range)\r\n {\r\n ranges.push(range);\r\n range[\"left\"] = seg2[CURVE_FACE_TYPE_KEY];\r\n range[\"right\"] = seg1[CURVE_FACE_TYPE_KEY];\r\n }\r\n }\r\n }\r\n\r\n return ranges as unknown as WallRange[];\r\n}\r\n","import { MathUtils } from \"three\";\r\nimport { Arc } from \"../api\";\r\nimport { arrayLast } from \"../Common/ArrayExt\";\r\nimport { CADObject } from \"../DatabaseServices/CADObject\";\r\nimport { Curve } from \"../DatabaseServices/Entity/Curve\";\r\nimport { RoomHolePolyline } from \"../DatabaseServices/Room/Entity/Wall/Hole/RoomHolePolyline\";\r\nimport { RoomWallArc } from \"../DatabaseServices/Room/Entity/Wall/RoomWallArc\";\r\nimport { RoomWallBase } from \"../DatabaseServices/Room/Entity/Wall/RoomWallBase\";\r\nimport { RoomWallLine } from \"../DatabaseServices/Room/Entity/Wall/RoomWallLine\";\r\nimport { CreateGetCurveParam } from \"../DatabaseServices/Room/ParseService/GetCurveParam\";\r\nimport { FindBestRange, ParseWallRange } from \"../DatabaseServices/Room/ParseService/Hole/RoomWallPlaceIHoleHelper\";\r\nimport { RoomWallParse } from \"../DatabaseServices/Room/ParseService/RoomWallParse\";\r\nimport { CurveMap } from \"../Geometry/CurveMap\";\r\nimport { equalv2 } from \"../Geometry/GeUtils\";\r\n\r\n\r\n/**\r\n * 更新墙与洞的关联性\r\n */\r\nexport async function UpdateRelevanceWallHole(ents: CADObject[])\r\n{\r\n let updated = new Set();\r\n\r\n //更新墙,顺便更新洞\r\n const UpdateWall = (wall: RoomWallBase) =>\r\n {\r\n if (updated.has(wall)) return;\r\n updated.add(wall);//避免重入\r\n\r\n //先更新洞,因为洞可能会修复位置\r\n for (let holeId of wall.RelevancyHoles)//更新关联的洞\r\n {\r\n if (holeId.IsErase) continue;\r\n\r\n let hole = holeId.Object;\r\n if (wall.IsErase)\r\n hole.Erase();\r\n\r\n UpdateHole(hole);//这里如果只更新洞,那么有可能关联的其他的墙会逃逸\r\n }\r\n\r\n UpdateWallHolesDataAndUpdateDraw(wall);\r\n };\r\n\r\n //更新洞,顺便更新关联的墙?\r\n const UpdateHole = (hole: RoomHolePolyline) =>\r\n {\r\n if (updated.has(hole)) return;\r\n updated.add(hole);//避免重入\r\n\r\n //先更新洞,因为洞可能会修复位置\r\n UpdateHoleFakerWallsAndUpdateDraw(hole);\r\n\r\n for (let wallId of hole.RelevancyWalls)\r\n {\r\n if (wallId.IsErase) continue;\r\n\r\n let wall = wallId.Object as RoomWallBase;\r\n if (updated.has(wall)) continue;\r\n\r\n UpdateWall(wall);\r\n }\r\n };\r\n\r\n\r\n for (let en of ents)\r\n {\r\n if (en instanceof RoomWallBase)\r\n UpdateWall(en);\r\n else if (en instanceof RoomHolePolyline)\r\n UpdateHole(en);\r\n }\r\n}\r\n\r\n\r\n/**\r\n * 更新墙的洞的数据,并且更新绘制\r\n */\r\nexport function UpdateWallHolesDataAndUpdateDraw(wall: RoomWallBase)\r\n{\r\n wall.Holes = [];\r\n\r\n let getParam = CreateGetCurveParam(wall);\r\n\r\n let z = wall.OCSNoClone.elements[14];\r\n for (let hole of wall.RelevancyHoles)\r\n {\r\n if (hole.IsErase)\r\n {\r\n wall.Holes.push({ StartParam: 0, EndParam: 0, Bottom: 0, Top: 0 });\r\n continue;\r\n }\r\n\r\n let holeObj = hole.Object as RoomHolePolyline;\r\n let index = holeObj.RelevancyWalls.indexOf(wall.Id);\r\n if (index < 0) continue;\r\n\r\n let sp = holeObj.Points[index];\r\n let ep = holeObj.Points[index + 1];\r\n\r\n let startParam = getParam.GetParamAtPoint(sp);\r\n let endParam = getParam.GetParamAtPoint(ep);\r\n if (startParam > endParam) [startParam, endParam] = [endParam, startParam];\r\n let bottom = holeObj.Position.z - z;\r\n let top = holeObj.Height + bottom;\r\n\r\n wall.Holes.push({ StartParam: startParam, EndParam: endParam, Bottom: bottom, Top: top });\r\n }\r\n\r\n wall.Update();\r\n return wall;\r\n}\r\n\r\n\r\n/**\r\n * 更新网洞的绘制\r\n * 在墙移动的时候,或者网洞变化的时候 这个网洞的绘制就需要被更新\r\n */\r\nexport function UpdateHoleFakerWallsAndUpdateDraw(hole: RoomHolePolyline)\r\n{\r\n if (hole.IsErase) return;\r\n\r\n let fakerWalls = hole.RelevancyWalls.map(w => w.Object.Clone());\r\n\r\n let pts = hole.Points;\r\n if (pts.length < 2)\r\n {\r\n hole.Erase();\r\n return;\r\n }\r\n\r\n if (pts.length === 2)\r\n {\r\n\r\n let p1 = pts[0];\r\n let p2 = pts[1];\r\n\r\n let wall = fakerWalls[0];\r\n let orgWall = hole.RelevancyWalls[0].Object;\r\n let paramGet = CreateGetCurveParam(orgWall);\r\n\r\n let ranges = ParseWallRange(orgWall, paramGet);\r\n\r\n let [p1Param, p1Closeto] = paramGet.GetParamAtPoint2(p1);\r\n let [p2Param, p2Closeto] = paramGet.GetParamAtPoint2(p2);\r\n\r\n let range1 = FindBestRange(p1Param, ranges);\r\n let range2 = FindBestRange(p2Param, ranges);\r\n\r\n if (p1Closeto && p2Closeto)\r\n {\r\n if (range1 && range1 === range2)\r\n {\r\n wall.StartPoint = p1;\r\n wall.EndPoint = p2;\r\n\r\n if (wall instanceof RoomWallArc && p1Param > p2Param)\r\n (wall as unknown as Arc).IsClockWise = !wall.IsClockWise;\r\n }\r\n else\r\n {\r\n let range = range1 ?? range2 ?? FindBestRange((p1Param + p2Param) * 0.5, ranges);\r\n if (!range)\r\n {\r\n hole.Erase();\r\n return;\r\n }\r\n\r\n p1Param = MathUtils.clamp(p1Param, range[0], range[1]);\r\n p2Param = MathUtils.clamp(p2Param, range[0], range[1]);\r\n\r\n wall.StartPoint = paramGet.GetPointAtParam(p1Param);\r\n wall.EndPoint = paramGet.GetPointAtParam(p2Param);\r\n\r\n if (wall instanceof RoomWallArc && p1Param > p2Param)\r\n (wall as unknown as Arc).IsClockWise = !wall.IsClockWise;\r\n }\r\n }\r\n else\r\n {\r\n let index = orgWall.RelevancyHoles.indexOf(hole.Id);\r\n let holeData = orgWall.Holes[index];\r\n if (!holeData)\r\n {\r\n hole.Erase();\r\n return;\r\n };\r\n\r\n if (p2Param > p1Param)\r\n {\r\n p1Param = holeData.StartParam;\r\n p2Param = holeData.EndParam;\r\n }\r\n else\r\n {\r\n p1Param = holeData.EndParam;\r\n p2Param = holeData.StartParam;\r\n }\r\n\r\n let range = FindBestRange(p1Param, ranges) ?? FindBestRange(p1Param, ranges) ?? FindBestRange((p1Param + p2Param) * 0.5, ranges);\r\n if (!range)\r\n {\r\n hole.Erase();\r\n return;\r\n }\r\n\r\n p1Param = MathUtils.clamp(p1Param, range[0], range[1]);\r\n p2Param = MathUtils.clamp(p2Param, range[0], range[1]);\r\n\r\n wall.StartPoint = paramGet.GetPointAtParam(p1Param);\r\n wall.EndPoint = paramGet.GetPointAtParam(p2Param);\r\n\r\n if (wall instanceof RoomWallArc && p1Param > p2Param)\r\n (wall as unknown as Arc).IsClockWise = !wall.IsClockWise;\r\n }\r\n\r\n new RoomWallParse(false, undefined, false).Parse(fakerWalls);\r\n hole.FakerWalls = fakerWalls;\r\n\r\n let newPts = hole.FakerPoints;\r\n if (pts.some((p, i) => !equalv2(p, newPts[i], 1e-4)))\r\n hole.UpdatePoints();\r\n hole.Update();\r\n return;\r\n }\r\n\r\n //pts.length >2\r\n let curvemap = new CurveMap();\r\n for (let w of fakerWalls)\r\n curvemap.AddCurveToMap(w as unknown as Curve, false, false, false);\r\n\r\n if (curvemap._Vertices.length !== pts.length)\r\n {\r\n hole.Erase();\r\n return;\r\n }\r\n\r\n if (pts.length === 3)\r\n {\r\n let v = curvemap._Vertices.find(v => v.routes.length === 2);\r\n if (!v)//拐角点丢失\r\n {\r\n hole.Erase();\r\n return;\r\n }\r\n\r\n let r1 = v.routes.find(r => r.curve === fakerWalls[0] as unknown as Curve);\r\n let r2 = v.routes.find(r => r.curve === fakerWalls[1] as unknown as Curve);\r\n if (!r1.isReverse) fakerWalls[0].Reverse();\r\n if (r2.isReverse) fakerWalls[1].Reverse();\r\n\r\n // if (!equalv2(v.position, pts[1], 1e-4))//拐角点不再对齐\r\n // {\r\n // let length1 = GetHoleLengthOfIndex(hole, 0);\r\n // let length2 = GetHoleLengthOfIndex(hole, 1);\r\n\r\n // fakerWalls[0].StartPoint = fakerWalls[0].GetPointAtDistance(fakerWalls[0].Length - length1);\r\n // fakerWalls[1].EndPoint = fakerWalls[1].GetPointAtDistance(length2);\r\n // }\r\n // else//拐角点仍然对齐\r\n {\r\n {\r\n let length1 = GetHoleLengthOfIndex(hole, 0);\r\n let orgWall = hole.RelevancyWalls[0].Object;\r\n let ranges = ParseWallRange(orgWall);\r\n if (!r1.isReverse)\r\n length1 = Math.min(length1, orgWall.Length * ranges[0][1]);\r\n else\r\n length1 = Math.min(length1, orgWall.Length * (1 - arrayLast(ranges)[0]));\r\n\r\n fakerWalls[0].StartPoint = fakerWalls[0].GetPointAtDistance(fakerWalls[0].Length - length1);\r\n }\r\n\r\n {\r\n let length2 = GetHoleLengthOfIndex(hole, 1);\r\n let orgWall = hole.RelevancyWalls[1].Object;\r\n let ranges = ParseWallRange(orgWall);\r\n if (r2.isReverse)\r\n length2 = Math.min(length2, orgWall.Length * (1 - arrayLast(ranges)[0]));\r\n else\r\n length2 = Math.min(length2, orgWall.Length * ranges[0][1]);\r\n\r\n fakerWalls[1].EndPoint = fakerWalls[1].GetPointAtDistance(length2);\r\n }\r\n }\r\n }\r\n else if (pts.length === 4)\r\n {\r\n let v1 = curvemap._Vertices.find(v => v.routes.length === 2 && v.routes.some(r => r.curve === fakerWalls[0] as unknown as Curve));\r\n let v2 = curvemap._Vertices.find(v => v.routes.length === 2 && v.routes.some(r => r.curve === fakerWalls[2] as unknown as Curve));\r\n\r\n if (!v1 || !v2)\r\n {\r\n hole.Erase();\r\n return;\r\n }\r\n\r\n let r1 = v1.routes.find(r => r.curve === fakerWalls[0] as unknown as Curve);\r\n let r2 = v2.routes.find(r => r.curve === fakerWalls[2] as unknown as Curve);\r\n\r\n let r3 = v1.routes.find(r => r.curve === fakerWalls[1] as unknown as Curve);\r\n if (r3.isReverse) fakerWalls[1].Reverse();\r\n\r\n if (!r1.isReverse) fakerWalls[0].Reverse();\r\n if (r2.isReverse) fakerWalls[2].Reverse();\r\n\r\n {\r\n let length1 = GetHoleLengthOfIndex(hole, 0);\r\n let length2 = GetHoleLengthOfIndex(hole, 2);\r\n\r\n {\r\n let orgWall = hole.RelevancyWalls[0].Object;\r\n let ranges = ParseWallRange(orgWall);\r\n if (!r1.isReverse)\r\n length1 = Math.min(length1, orgWall.Length * ranges[0][1]);\r\n else\r\n length1 = Math.min(length1, orgWall.Length * (1 - arrayLast(ranges)[0]));\r\n\r\n fakerWalls[0].StartPoint = fakerWalls[0].GetPointAtDistance(fakerWalls[0].Length - length1);\r\n }\r\n\r\n {\r\n let orgWall = hole.RelevancyWalls[2].Object;\r\n let ranges = ParseWallRange(orgWall);\r\n if (r3.isReverse)\r\n length2 = Math.min(length2, orgWall.Length * (1 - arrayLast(ranges)[0]));\r\n else\r\n length2 = Math.min(length2, orgWall.Length * ranges[0][1]);\r\n\r\n fakerWalls[2].EndPoint = fakerWalls[2].GetPointAtDistance(length2);\r\n }\r\n }\r\n }\r\n\r\n new RoomWallParse(false, undefined, false).Parse(fakerWalls);\r\n hole.FakerWalls = fakerWalls;\r\n\r\n let newPts = hole.FakerPoints;\r\n if (pts.some((p, i) => !equalv2(p, newPts[i], 1e-4)))\r\n hole.UpdatePoints();\r\n hole.Update();\r\n}\r\n\r\n\r\nexport function GetHoleLengthOfIndex(hole: RoomHolePolyline, index: number): number\r\n{\r\n if (hole.RelevancyWalls && hole.RelevancyWalls[index]?.Object)\r\n {\r\n let wall = hole.RelevancyWalls[index].Object;\r\n\r\n if (wall instanceof RoomWallLine)\r\n return hole.Points[index].distanceTo(hole.Points[index + 1]);\r\n else if (wall instanceof RoomWallArc)\r\n {\r\n let p1 = hole.Points[index];\r\n let p2 = hole.Points[index + 1];\r\n\r\n let param1 = wall.GetParamAtPoint(p1.clone().setZ(wall.Z));\r\n let param2 = wall.GetParamAtPoint(p2.clone().setZ(wall.Z));\r\n\r\n if (!isNaN(param1) && !isNaN(param2))\r\n return Math.abs(wall.GetDistAtParam(param1) - wall.GetDistAtParam(param2));\r\n\r\n let b = p1.distanceTo(p2);\r\n if (b < 1e-4) return 0;\r\n let r = wall.Radius;\r\n let l = 2 * Math.asin(b / (2 * r)) * r;//http://zhidao.baidu.com/question/553357442/answer/1393358387\r\n return l;\r\n }\r\n }\r\n return 0;\r\n}\r\n","import { arrayRemoveIf } from \"../Common/ArrayExt\";\r\nimport { Database } from \"../DatabaseServices/Database\";\r\nimport { Entity } from \"../DatabaseServices/Entity/Entity\";\r\nimport { TemplateRecord } from \"../DatabaseServices/Template/TemplateRecord\";\r\n\r\nexport function Purge(db: Database): void\r\n{\r\n db.hm.Clear();\r\n let bakEnable = db.hm.Enable;\r\n db.hm.Enable = false;\r\n\r\n //应该避免占位空间被PU(占位空间内没有实体,也没有子层)\r\n arrayRemoveIf(db.TemplateTable.Objects, t =>\r\n {\r\n if (!t || t.IsErase) return true;\r\n\r\n let allEnts: Entity[] = [];\r\n t.Traverse(ct =>\r\n {\r\n for (let id of ct.Objects)\r\n {\r\n if (id.Object)\r\n allEnts.push(id.Object as Entity);\r\n }\r\n });\r\n\r\n if (allEnts.length && allEnts.every(e => e.IsErase))\r\n {\r\n t.Erase();\r\n t.Traverse(ct => ct.Erase());//PU所有子层\r\n return true;\r\n }\r\n\r\n //否则PU本层\r\n t.Purge();\r\n });\r\n\r\n //再次清理,避免子模块没了之后,父模块还引用它\r\n for (let t of db.TemplateTable.Objects)\r\n t.Children = t.Children.filter(c => !c.IsErase);\r\n\r\n arrayRemoveIf(db.GroupTable.Objects, g =>\r\n {\r\n if (!g || g.IsErase) return true;\r\n g.Purge();\r\n return g.Entitys.length === 0;\r\n });\r\n\r\n //由于我们现在Goodbye会将Object清空,所以为了模块能正确的pu,我们把这个延后了\r\n arrayRemoveIf(db.ModelSpace.Entitys, e =>\r\n {\r\n let isErase = e.IsErase;\r\n if (isErase) e.GoodBye();\r\n return isErase;\r\n });\r\n\r\n arrayRemoveIf(db.Lights.Entitys, e =>\r\n {\r\n let isErase = e.IsErase;\r\n if (isErase) e.GoodBye();\r\n return isErase;\r\n });\r\n\r\n arrayRemoveIf(db.LayoutSpace.Entitys, e =>\r\n {\r\n let isErase = e.IsErase;\r\n if (isErase) e.GoodBye();\r\n return isErase;\r\n });\r\n\r\n arrayRemoveIf(db.ProcessingGroupTable.Objects, e =>\r\n {\r\n if (!e || e.IsErase) return true;\r\n e.Purge();\r\n return e.Objects.length === 0;\r\n });\r\n db.hm.Enable = bakEnable;\r\n}\r\n\r\n//裁剪树 有时候会有不好的行为,仅在copy.ts中使用\r\nexport function PurgeTemplateTreeRoot(db: Database)\r\n{\r\n for (let t of db.TemplateTable.Objects)\r\n {\r\n if (t.IsRoot && t.Objects.length === 0)\r\n {\r\n t.Erase();\r\n\r\n let children = t.Children.concat();//必须备份,否则子实体设置Parent=undefined时错误\r\n t.Children = [];\r\n for (let ctId of children)\r\n {\r\n let ct = ctId.Object as TemplateRecord;\r\n ct.Parent = undefined;\r\n }\r\n }\r\n }\r\n arrayRemoveIf(db.TemplateTable.Objects, t => t.IsErase);\r\n}\r\n","import { Factory } from './CADFactory';\r\nimport { CADFiler } from './CADFiler';\r\nimport { CADObject } from './CADObject';\r\nimport { Database } from './Database';\r\n\r\n@Factory\r\nexport class CreateObjectData extends CADObject\r\n{\r\n private CADFiler: CADFiler = new CADFiler();\r\n\r\n //用于记录创建的对象\r\n CreateObject: CADObject;\r\n\r\n /**\r\n * 如果是实体新建,那么不需要调用`Save`,历史记录会在命令结束的时候调用.\r\n * 如果是实体删除,那么请自行调用`Save`.\r\n */\r\n constructor(public Object?: CADObject)\r\n {\r\n super();\r\n }\r\n\r\n //记录数据,在命令结束的时候记录\r\n Save()\r\n {\r\n if (this.Object && this.CADFiler.Data.length === 0)\r\n {\r\n this.CADFiler.Data.length = 0;\r\n this.CADFiler.WriteObject(this.Object);\r\n }\r\n return this;\r\n }\r\n\r\n GetObject(db: Database): CADObject\r\n {\r\n this.CADFiler.Reset();\r\n this.CADFiler.database = db;\r\n this.Object = this.CADFiler.ReadObject();\r\n this.CADFiler.Reset();\r\n return this.Object;\r\n }\r\n\r\n //#region -----------------------------File-----------------------------\r\n //对象应该实现dataIn和DataOut的方法,为了对象的序列化和反序列化\r\n //对象从文件中读取数据,初始化自身\r\n ReadFile(file: CADFiler)\r\n {\r\n file.Read();//ver;\r\n let data = file.Read();\r\n this.CADFiler.Data = data;\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(1);//ver\r\n file.Write(this.CADFiler.Data);\r\n }\r\n //#endregion -----------------------------File End-----------------------------\r\n}\r\n","import { Factory } from './CADFactory';\r\nimport { CADFiler } from './CADFiler';\r\nimport { CADObject } from './CADObject';\r\n\r\n@Factory\r\nexport class RemoveObjectData extends CADObject\r\n{\r\n private index: T;\r\n\r\n RemoveObject: CADObject;//用于记录被删除的对象\r\n constructor(index?: T)\r\n {\r\n super();\r\n this.index = index;\r\n }\r\n get Index()\r\n {\r\n return this.index;\r\n }\r\n\r\n //#region -----------------------------File-----------------------------\r\n //对象应该实现dataIn和DataOut的方法,为了对象的序列化和反序列化\r\n\r\n //对象从文件中读取数据,初始化自身\r\n ReadFile(file: CADFiler)\r\n {\r\n file.Read();//ver\r\n this.index = file.Read();\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(1);\r\n file.Write(this.index);\r\n }\r\n //局部撤销\r\n ApplyPartialUndo(file: CADObject)\r\n { }\r\n //#endregion -----------------------------File End-----------------------------\r\n}\r\n","import { observable } from \"mobx\";\r\nimport { Status } from \"../Common/Status\";\r\nimport { Factory } from \"./CADFactory\";\r\nimport { CADFiler } from \"./CADFiler\";\r\nimport { CADObject } from \"./CADObject\";\r\nimport { CreateObjectData } from \"./CreateObjectData\";\r\nimport { HistorycRecord } from \"./HistorycRecord\";\r\nimport { RemoveObjectData } from \"./RemoveObjectData\";\r\nimport { SymbolTableRecord } from \"./SymbolTableRecord\";\r\n\r\n@Factory\r\nexport class SymbolTable extends CADObject\r\n{\r\n /**\r\n * 符号列表,支持迭代,请勿直接修改数据\r\n */\r\n @observable Symbols = new Map();\r\n\r\n Add(record: SymbolTableRecord, isCheckObjectCleanly = true): Status\r\n {\r\n if (this.Symbols.has(record.Name))\r\n return Status.DuplicateRecordName;\r\n\r\n if (!isCheckObjectCleanly)\r\n record.SetDefaultDb(this._db);\r\n else if (this._db)\r\n record.SetOwnerDatabase(this._db);\r\n\r\n record.Owner = this.objectId;\r\n\r\n this.Symbols.set(record.Name, record);\r\n return Status.True;\r\n }\r\n\r\n Remove(record: SymbolTableRecord)\r\n {\r\n let selfRecord = this.Symbols.get(record.Name);\r\n if (selfRecord === record)\r\n {\r\n let undoRec = this.UndoRecord();\r\n if (undoRec)\r\n {\r\n let hisRec = new HistorycRecord();\r\n hisRec.undoData = new CreateObjectData(selfRecord).Save();\r\n hisRec.redoData = new RemoveObjectData(selfRecord.Name);\r\n\r\n undoRec.WriteObjectHistoryPath(this, hisRec);\r\n }\r\n\r\n this.Symbols.delete(record.Name);\r\n }\r\n }\r\n\r\n GetAt(name: string): SymbolTableRecord | undefined\r\n {\r\n return this.Symbols.get(name);\r\n }\r\n\r\n Has(name: string)\r\n {\r\n return this.Symbols.has(name);\r\n }\r\n\r\n AllocateName(name: string): string\r\n {\r\n for (let i = 1; i < this.Symbols.size + 2; i++)\r\n {\r\n let newName = `${name}${i}`;\r\n if (!this.Has(newName))\r\n return newName;\r\n }\r\n }\r\n\r\n ChangeRecordName(record: SymbolTableRecord, newName: string): boolean\r\n {\r\n if (this.Has(newName)) return false;\r\n this.Symbols.delete(record.Name);\r\n this.Symbols.set(newName, record);\r\n return true;\r\n }\r\n\r\n //#region -------------------------File-------------------------\r\n ReadFile(file: CADFiler)\r\n {\r\n super.ReadFile(file);\r\n let ver = file.Read();\r\n let count = file.Read();\r\n this.Symbols.clear();\r\n for (let i = 0; i < count; i++)\r\n {\r\n if (ver === 1)\r\n file.Read();\r\n let record = file.ReadObject() as SymbolTableRecord;\r\n if (record)\r\n this.Symbols.set(record.Name, record);\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.Symbols.size);\r\n for (let [key, record] of this.Symbols)\r\n {\r\n file.WriteObject(record);\r\n }\r\n }\r\n\r\n //局部撤销\r\n ApplyPartialUndo(undoData: CADObject)\r\n {\r\n if (undoData instanceof CreateObjectData)\r\n {\r\n let record = undoData.GetObject(this._db) as SymbolTableRecord;\r\n this.Symbols.set(record.Name, record);\r\n undoData.CreateObject = record;\r\n }\r\n else if (undoData instanceof RemoveObjectData)\r\n {\r\n let obj = this.Symbols.get(undoData.Index as string);\r\n this.Symbols.delete(undoData.Index as string);\r\n undoData.RemoveObject = obj;\r\n }\r\n // else if (undoData instanceof RenameObjectData)\r\n // {\r\n // let record = this.GetAt(undoData._oldName);\r\n // this.Symbols.delete(undoData._oldName);\r\n // this.Symbols.set(undoData._newName, record);\r\n // }\r\n }\r\n}\r\n","import { SymbolTable } from \"./SymbolTable\";\r\nimport { Factory } from \"./CADFactory\";\r\n\r\n@Factory\r\nexport class BlockTable extends SymbolTable\r\n{\r\n\r\n}\r\n","import { Factory } from './CADFactory';\r\nimport { CADFiler } from './CADFiler';\r\nimport { CADObject } from './CADObject';\r\nimport { CreateObjectData } from './CreateObjectData';\r\nimport { HistorycRecord } from './HistorycRecord';\r\nimport { RemoveObjectData } from './RemoveObjectData';\r\n\r\n@Factory\r\nexport class ObjectCollection extends CADObject\r\n{\r\n Objects: T[] = [];\r\n\r\n Destroy()\r\n {\r\n super.Destroy();\r\n this.Objects.length = 0;\r\n }\r\n\r\n /**\r\n * @param object\r\n * @param isCheckObjectCleanly 检查对象是否清白,如果对象不清白,那么将会被拒绝加入到集合.\r\n */\r\n Append(object: T, isCheckObjectCleanly = true)\r\n {\r\n if (isCheckObjectCleanly && object.Id)\r\n {\r\n console.warn(\"尝试加入已经分配id的对象!\");\r\n return;\r\n }\r\n if (this._db && !object.Id)\r\n object.SetOwnerDatabase(this._db);\r\n else\r\n object.SetDatabase(this._db);\r\n\r\n this.Objects.push(object);\r\n this.AppendEvent(object);\r\n\r\n let undoRec = this.UndoRecord();\r\n if (undoRec)\r\n {\r\n let hisRec = new HistorycRecord();\r\n hisRec.redoData = new CreateObjectData(object);\r\n hisRec.undoData = new RemoveObjectData(this.Objects.length - 1);\r\n\r\n undoRec.WriteObjectHistoryPath(this, hisRec);\r\n }\r\n\r\n return object.Id;\r\n }\r\n AppendEvent(obj: T)\r\n {\r\n\r\n }\r\n Remove(obj: T)\r\n {\r\n let index = this.Objects.indexOf(obj);\r\n this.RemoveIndex(index);\r\n }\r\n\r\n RemoveIndex(index: number)\r\n {\r\n if (index === -1)\r\n return;\r\n let obj = this.Objects[index];\r\n this.Objects.splice(index, 1);\r\n\r\n let undoRec = this.UndoRecord();\r\n if (undoRec)\r\n {\r\n let hisRec = new HistorycRecord();\r\n hisRec.undoData = new CreateObjectData(obj).Save();\r\n hisRec.redoData = new RemoveObjectData(index);\r\n\r\n undoRec.WriteObjectHistoryPath(this, hisRec);\r\n }\r\n if (obj)\r\n obj.GoodBye();\r\n\r\n return obj;\r\n }\r\n\r\n //#region -----------------------------File-----------------------------\r\n //对象应该实现dataIn和DataOut的方法,为了对象的序列化和反序列化\r\n\r\n //对象从文件中读取数据,初始化自身\r\n ReadFile(file: CADFiler)\r\n {\r\n this.Objects.length = 0;\r\n super.ReadFile(file);\r\n let cout = file.Read();\r\n for (let i = 0; i < cout; i++)\r\n {\r\n let obj = file.ReadObject() as T;\r\n if (obj) this.Objects.push(obj);\r\n }\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n super.WriteFile(file);\r\n file.Write(this.Objects.length);\r\n for (let obj of this.Objects)\r\n file.WriteObject(obj);\r\n }\r\n //局部撤销\r\n ApplyPartialUndo(undoData: CADObject)\r\n {\r\n if (undoData instanceof CreateObjectData)\r\n {\r\n let obj = undoData.GetObject(this._db) as T;\r\n this.Objects.push(obj);\r\n this.AppendEvent(obj);\r\n undoData.CreateObject = obj;\r\n }\r\n else if (undoData instanceof RemoveObjectData)\r\n {\r\n let obj = this.RemoveIndex(undoData.Index);\r\n undoData.RemoveObject = obj;\r\n }\r\n }\r\n //#endregion -----------------------------File End-----------------------------\r\n}\r\n","import { end } from 'xaop';\r\nimport { Status } from '../Common/Status';\r\nimport { Factory } from './CADFactory';\r\nimport { CADFiler } from './CADFiler';\r\nimport { Database } from './Database';\r\nimport { Entity } from './Entity/Entity';\r\nimport { ObjectCollection } from './ObjectCollection';\r\nimport { SymbolTableRecord } from './SymbolTableRecord';\r\n\r\n@Factory\r\nexport class BlockTableRecord extends SymbolTableRecord\r\n{\r\n EntityCol = new ObjectCollection();\r\n constructor()\r\n {\r\n super();\r\n end(this.EntityCol, this.EntityCol.AppendEvent, (e: Entity) => { this.AppendEvent(e); });\r\n }\r\n\r\n SetOwnerDatabase(db: Database)\r\n {\r\n super.SetOwnerDatabase(db);\r\n this.EntityCol.SetOwnerDatabase(db);\r\n return this;\r\n }\r\n\r\n get Entitys()\r\n {\r\n return this.EntityCol.Objects;\r\n }\r\n Add(obj: Entity, isCheckObjectCleanly = true): Status\r\n {\r\n this.Append(obj, isCheckObjectCleanly);\r\n return Status.True;\r\n }\r\n\r\n Append(entity: Entity, isCheckObjectCleanly = true)\r\n {\r\n this.EntityCol.Append(entity, isCheckObjectCleanly);\r\n entity.Owner = this.objectId;\r\n }\r\n\r\n AppendEvent(entity: Entity)\r\n {\r\n }\r\n\r\n Remove(entity: Entity)\r\n {\r\n this.EntityCol.Remove(entity);\r\n }\r\n\r\n Destroy()\r\n {\r\n super.Destroy();\r\n this.EntityCol.Destroy();\r\n }\r\n\r\n //#region -------------------------File-------------------------\r\n //对象从文件中读取数据,初始化自身\r\n ReadFile(file: CADFiler)\r\n {\r\n let ver = file.Read();\r\n super.ReadFile(file);\r\n this.EntityCol.ReadFile(file);\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(1);\r\n super.WriteFile(file);\r\n this.EntityCol.WriteFile(file);\r\n }\r\n //#endregion\r\n}\r\n","import { AllObjectData } from \"./AllObjectData\";\r\nimport { Factory } from './CADFactory';\r\nimport { CADFiler } from './CADFiler';\r\nimport { HistorycRecord } from './HistorycRecord';\r\nimport { ObjectId } from './ObjectId';\r\n\r\n@Factory\r\nexport class ObjectAllDataHistoryRecord extends HistorycRecord\r\n{\r\n constructor(public RecordEntityId?: ObjectId)\r\n {\r\n super();\r\n if (RecordEntityId)\r\n this.undoData = new AllObjectData(this.RecordEntityId.Object);\r\n }\r\n\r\n WriteRedo()\r\n {\r\n this.redoData = new AllObjectData(this.RecordEntityId.Object);\r\n }\r\n\r\n //#region -------------------------File-------------------------\r\n //对象从文件中读取数据,初始化自身\r\n ReadFile(file: CADFiler)\r\n {\r\n let ver = file.Read();\r\n super.ReadFile(file);\r\n this.RecordEntityId = file.ReadObjectId();\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(1);\r\n super.WriteFile(file);\r\n file.WriteObjectId(this.RecordEntityId);\r\n }\r\n //#endregion\r\n}\r\n","import { Factory } from './CADFactory';\r\nimport { CADFiler } from './CADFiler';\r\nimport { CADObject } from './CADObject';\r\nimport { CreateObjectData } from './CreateObjectData';\r\nimport { EraseEntityData } from \"./EraseEntityData\";\r\nimport { HistorycRecord } from './HistorycRecord';\r\nimport { ObjectAllDataHistoryRecord } from './ObjectAllDataHistoryRecord';\r\nimport { ObjectId } from './ObjectId';\r\n\r\n/**\r\n * 命令的历史记录\r\n */\r\n@Factory\r\nexport class CommandHistoryRecord extends CADObject\r\n{\r\n constructor(public CommandName = \"\")\r\n {\r\n super();\r\n }\r\n //历史记录表\r\n private _HistoryList = new Map();\r\n private _CreateObjects = new Map();\r\n\r\n get HistoryList(): Map\r\n {\r\n return this._HistoryList;\r\n }\r\n\r\n private GetObjectHistoryList(id: ObjectId)\r\n {\r\n if (!this._HistoryList.has(id))\r\n this._HistoryList.set(id, []);\r\n return this._HistoryList.get(id);\r\n }\r\n\r\n EndCommand()\r\n {\r\n for (let [id, hrs] of this._HistoryList)\r\n {\r\n let hr = this.GetObjectAllDataRecord(hrs);\r\n if (hr)\r\n hr.WriteRedo();\r\n }\r\n\r\n for (let [, hr] of this._CreateObjects)\r\n {\r\n let h = hr.redoData as CreateObjectData;\r\n h.Save();\r\n }\r\n }\r\n\r\n //获取对象快照记录(如果有的话)\r\n GetObjectAllDataRecord(historyList: HistorycRecord[]): ObjectAllDataHistoryRecord | undefined\r\n {\r\n if (historyList.length > 0)\r\n {\r\n let hr = historyList[historyList.length - 1];\r\n if (hr instanceof ObjectAllDataHistoryRecord)\r\n return hr;\r\n }\r\n }\r\n\r\n //对象写入历史记录\r\n WriteObjectHistoryPath(obj: CADObject, history: HistorycRecord)\r\n {\r\n if (!obj || this._CreateObjects.has(obj))//某些时候obj可能为空\r\n return;\r\n\r\n let hrs = this.GetObjectHistoryList(obj.Id);\r\n if (this.GetObjectAllDataRecord(hrs))\r\n return;\r\n\r\n if (history.redoData instanceof CreateObjectData)\r\n this._CreateObjects.set(history.redoData.Object, history);\r\n\r\n hrs.push(history);\r\n }\r\n\r\n WriteObjectSnapshoot(obj: CADObject): void\r\n {\r\n if (!obj.Id)\r\n {\r\n console.warn(\"错误!CreateObjectHistory\");\r\n return;\r\n }\r\n\r\n if (this._CreateObjects.has(obj))\r\n return;\r\n\r\n let hrs = this.GetObjectHistoryList(obj.Id);\r\n if (this.GetObjectAllDataRecord(hrs))\r\n return;\r\n\r\n let hr = new ObjectAllDataHistoryRecord(obj.Id);\r\n hrs.push(hr);\r\n }\r\n\r\n CreateEraseHistory(obj: CADObject, isErase: boolean)\r\n {\r\n let hr = new HistorycRecord();\r\n hr.undoData = new EraseEntityData(!isErase);\r\n hr.redoData = new EraseEntityData(isErase);\r\n this.WriteObjectHistoryPath(obj, hr);\r\n }\r\n\r\n //#region -------------------------File-------------------------\r\n //对象应该实现dataIn和DataOut的方法,为了对象的序列化和反序列化\r\n\r\n\r\n //对象从文件中读取数据,初始化自身\r\n ReadFile(file: CADFiler)\r\n {\r\n let ver = file.Read();\r\n this.CommandName = file.Read();\r\n let cout = file.Read();\r\n\r\n this._HistoryList.clear();\r\n for (let i = 0; i < cout; i++)\r\n {\r\n let id = file.ReadObjectId();\r\n let length = file.Read();\r\n let hrs: HistorycRecord[] = [];\r\n this._HistoryList.set(id, hrs);\r\n for (let j = 0; j < length; j++)\r\n {\r\n let hr = file.ReadObject() as HistorycRecord;\r\n hrs.push(hr);\r\n }\r\n }\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(1);\r\n file.Write(this.CommandName);\r\n file.Write(this._HistoryList.size);\r\n for (let [id, hrs] of this._HistoryList)\r\n {\r\n file.WriteObjectId(id);\r\n file.Write(hrs.length);\r\n for (let hr of hrs)\r\n {\r\n file.WriteObject(hr);\r\n }\r\n }\r\n }\r\n //#endregion\r\n}\r\n","import { RenderType } from \"../../GraphicsSystem/RenderType\";\r\nimport { Factory } from \"../CADFactory\";\r\nimport { CADFiler } from \"../CADFiler\";\r\nimport { CADObject } from \"../CADObject\";\r\n\r\n@Factory\r\nexport class CameraSnapshootRecord extends CADObject\r\n{\r\n Name: string = \"\";\r\n _CameraData = new CADFiler;\r\n\r\n get RenderType(): RenderType\r\n {\r\n return this._CameraData.Data[7];\r\n }\r\n\r\n //#region -------------------------File-------------------------\r\n\r\n //对象从文件中读取数据,初始化自身\r\n ReadFile(file: CADFiler)\r\n {\r\n let ver = file.Read();\r\n this._CameraData.Data = file.Read();\r\n this.Name = file.Read();\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(1);\r\n file.Write(this._CameraData.Data);\r\n file.Write(this.Name);\r\n }\r\n //#endregion\r\n}\r\n","import { CADFiler } from \"./CADFiler\";\r\nimport { ObjectId, RelevancyType } from \"./ObjectId\";\r\n\r\nexport class DeepCloneFiler extends CADFiler\r\n{\r\n constructor(public idMaping = new Map())\r\n {\r\n super();\r\n }\r\n\r\n ReadObjectId()\r\n {\r\n let index = this.Read();\r\n if (index <= 0) return;\r\n\r\n let id = this.idMaping.get(index);\r\n if (id) return id;\r\n\r\n id = new ObjectId();\r\n this.idMaping.set(index, id);\r\n\r\n return id;\r\n }\r\n\r\n ReadSoftObjectId()\r\n {\r\n let id = this.ReadObjectId();\r\n if (id)\r\n id._RelevancyType = RelevancyType.Soft;\r\n return id;\r\n }\r\n\r\n ReadHardObjectId()\r\n {\r\n let id = this.ReadObjectId();\r\n if (id)\r\n id._RelevancyType = RelevancyType.Hard;\r\n return id;\r\n }\r\n\r\n hardObjectIds: Set = new Set();\r\n cloned: Set = new Set();\r\n WriteHardObjectId(id: ObjectId)\r\n {\r\n if (id && id.Index >= 100 && !this.cloned.has(id.Index)) //当存在id时,表示对象正在被拷贝,或者已经拷贝完成\r\n this.hardObjectIds.add(id.Index);\r\n\r\n return this.WriteObjectId(id);\r\n }\r\n}\r\n","import { Factory } from \"./CADFactory\";\r\nimport { GroupRecord } from \"./GroupTableRecord\";\r\nimport { ObjectCollection } from \"./ObjectCollection\";\r\nimport { CADFiler } from \"./CADFiler\";\r\nimport { Status } from \"../Common/Status\";\r\n\r\n@Factory\r\nexport class GroupTable extends ObjectCollection\r\n{\r\n\r\n Append(object: GroupRecord, isCheckObjectCleanly = true)\r\n {\r\n let id = super.Append(object, isCheckObjectCleanly);\r\n\r\n if (id)\r\n object.Owner = this.Id;\r\n\r\n return id;\r\n }\r\n\r\n Add(record: GroupRecord, isCheckObjectCleanly = true): Status\r\n {\r\n let id = this.Append(record, isCheckObjectCleanly);\r\n if (id)\r\n return Status.True;\r\n else\r\n return Status.False;\r\n }\r\n\r\n //对象从文件中读取数据,初始化自身\r\n ReadFile(file: CADFiler)\r\n {\r\n let ver = file.Read();\r\n super.ReadFile(file);\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(1);\r\n super.WriteFile(file);\r\n }\r\n //#endregion\r\n\r\n}\r\n","\r\nexport let CommandState = {\r\n CommandIng: false,\r\n};\r\n","import { LogEnable, ReportErrorWrap } from '../Common/Log';\r\nimport { Intent, Toaster } from '../Common/Toaster';\r\nimport { CommandState } from '../Editor/CommandState';\r\nimport { Factory } from './CADFactory';\r\nimport { CADFiler } from './CADFiler';\r\nimport { CADObject } from './CADObject';\r\nimport { CommandHistoryRecord } from './CommandHistoryRecord';\r\n\r\n/**\r\n * 历史记录管理\r\n *\r\n * 关于子命令标记:\r\n * 当子命令标记出现的时候,才允许出现局部撤销,否则命令执行中不允许撤销,触发命令重写了撤销和重做的事件.\r\n */\r\n@Factory\r\nexport class HistoricManage extends CADObject\r\n{\r\n curIndex: number = -1; //当前执行位置,也就是当前的状态, undo时,撤销当前状态,redo时,应用下一个状态\r\n lockIndex = -1; //锁定极限撤销索引(将无法在往前撤销)\r\n historyRecord: CommandHistoryRecord[] = []; //历史记录\r\n doing: boolean = false;//正在执行工作 例如: 文件读取中 撤销中 重做中\r\n Enable: boolean = true;\r\n\r\n _SignalCommandHistory: HistoricManage;\r\n\r\n constructor(public useSubCommand = true)\r\n {\r\n super();\r\n }\r\n\r\n Clear()\r\n {\r\n this.historyRecord.length = 0;\r\n this.curIndex = -1;\r\n }\r\n\r\n //对象从文件中读取数据,初始化自身\r\n ReadFile(file: CADFiler)\r\n {\r\n let ver = file.Read();\r\n this.curIndex = file.Read();\r\n let cout = file.Read();\r\n this.historyRecord = [];\r\n for (let i = 0; i < cout; i++)\r\n {\r\n this.historyRecord.push(file.ReadObject() as CommandHistoryRecord);\r\n }\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(1);\r\n file.Write(this.curIndex);\r\n file.Write(this.historyRecord.length);\r\n for (let rec of this.historyRecord)\r\n {\r\n file.WriteObject(rec);\r\n }\r\n }\r\n\r\n //命令正在当前状态\r\n get IsNow(): boolean\r\n {\r\n return this.historyRecord.length !== 0 && this.curIndex === this.historyRecord.length - 1;\r\n }\r\n\r\n get UndoData(): CommandHistoryRecord\r\n {\r\n if (this.doing || this.Enable === false)\r\n return undefined;\r\n if (!this.IsNow)\r\n {\r\n this.StartCmd(\"\");\r\n if (LogEnable.Display)\r\n console.warn(\"未标记命令!\");\r\n }\r\n\r\n if (!CommandState.CommandIng)\r\n {\r\n //避免用户心理负担,暂时关闭这个,使用遥测\r\n if (!ReportErrorWrap.IsProduction && ReportErrorWrap.ReportError)\r\n {\r\n ReportErrorWrap.ReportError(new Error().stack, \"命令未执行中,但是却产生了错误了记录!\");\r\n Toaster({\r\n message: \"警告:命令未执行中,但是却产生了错误了历史记录! (不会造成图纸错误,但是会影响撤销(Ctrl+Z)重做(Ctrl+Y),请与我们联系,将错误报告给我们)\",\r\n timeout: 5000,\r\n intent: Intent.WARNING,\r\n key: \"no_command_his\"\r\n });\r\n }\r\n // else jest会警告这个\r\n // console.error(\"命令未执行中,但是却产生了错误了记录!\");\r\n }\r\n\r\n if (this._SignalCommandHistory && CommandState.CommandIng)\r\n return this._SignalCommandHistory.UndoData;\r\n else\r\n return this.historyRecord[this.historyRecord.length - 1];\r\n }\r\n\r\n //开始子命令标记\r\n StartMark(subCommandName = \"\")\r\n {\r\n if (!this.useSubCommand)\r\n return;\r\n\r\n if (!this._SignalCommandHistory)\r\n this._SignalCommandHistory = new HistoricManage(false);\r\n\r\n this._SignalCommandHistory.EndCmd();\r\n this._SignalCommandHistory.StartCmd(subCommandName);\r\n }\r\n\r\n /**\r\n * 不要在命令中直接调用这个函数!\r\n * 请调用 commandMachine.CommandStart\r\n */\r\n StartCmd(cmdName: string)\r\n {\r\n if (cmdName === \"REDO\" || cmdName === \"U\") return;\r\n\r\n //删除当前状态以后的所有状态\r\n this.historyRecord.splice(this.curIndex + 1, this.historyRecord.length - (this.curIndex + 1));\r\n this.historyRecord.push(new CommandHistoryRecord(cmdName));\r\n this.curIndex = this.historyRecord.length - 1;\r\n }\r\n\r\n CurrentHasHistory(): boolean\r\n {\r\n let lastRec = this.historyRecord[this.curIndex];\r\n if (!lastRec) return false;\r\n this.MergeSubCommmand(lastRec);\r\n return lastRec.HistoryList.size > 0;\r\n }\r\n\r\n //结束当前的命令,返回是否写入历史记录\r\n EndCmd(): boolean\r\n {\r\n if (!this.IsNow)\r\n return false;\r\n let lastRec = this.historyRecord[this.curIndex];\r\n if (lastRec)\r\n {\r\n this.MergeSubCommmand(lastRec);\r\n lastRec.EndCommand();\r\n if (lastRec.HistoryList.size === 0)\r\n {\r\n this.historyRecord.pop();\r\n this.curIndex--;\r\n return false;\r\n }\r\n // else if (this.historyRecord.length > 20)//最大历史记录个数为20 (如果在这边直接删除记录,会导致临时编辑器错误)\r\n // {\r\n // this.historyRecord.shift();\r\n // this.curIndex--;\r\n // }\r\n else if (this.historyRecord.length !== 0 && this.historyRecord.length % 50 === 0)\r\n Toaster({\r\n message: `警告:已经有${this.historyRecord.length}个命令历史记录了,建议您使用PU命令进行清理,避免图纸卡顿和崩溃!`,\r\n timeout: 15000,\r\n intent: Intent.WARNING,\r\n });\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n /**\r\n * 获得这个命令修改的对象列表\r\n */\r\n get ChangeObjects(): Set\r\n {\r\n let lastRec = this.historyRecord[this.curIndex];\r\n\r\n let objects = new Set();\r\n if (lastRec)\r\n {\r\n this.MergeSubCommmand(lastRec);\r\n for (let [id] of lastRec.HistoryList)\r\n {\r\n objects.add(id.Object);\r\n }\r\n }\r\n return objects;\r\n }\r\n GetRangeChangeObject(startIndex: number, endIndex: number): Set\r\n {\r\n let objects = new Set();\r\n for (let i = startIndex; i < endIndex; i++)\r\n for (let [id] of this.historyRecord[i].HistoryList)\r\n objects.add(id.Object);\r\n return objects;\r\n }\r\n\r\n /**\r\n * 合并命令历史记录,因为命令记录器允许存在子记录,所以当命令结束时,应该把子记录合并到父记录中,子记录将被摧毁.\r\n */\r\n private MergeSubCommmand(lastRec: CommandHistoryRecord)\r\n {\r\n if (this._SignalCommandHistory)\r\n {\r\n for (let rc of this._SignalCommandHistory.historyRecord)\r\n {\r\n for (let [id, hrs] of rc.HistoryList)\r\n {\r\n if (id?.Object)//某些情况下可能为空\r\n for (let hr of hrs)\r\n lastRec.WriteObjectHistoryPath(id.Object, hr);\r\n }\r\n }\r\n this._SignalCommandHistory = undefined;\r\n }\r\n }\r\n\r\n Undo(): boolean\r\n {\r\n //如果命令执行中,那么进行局部撤销.\r\n if (CommandState.CommandIng && this.useSubCommand)\r\n {\r\n if (this._SignalCommandHistory)\r\n return this._SignalCommandHistory.Undo();\r\n return;\r\n }\r\n\r\n if (this.curIndex === this.lockIndex) return;//被锁定,无法撤销\r\n\r\n this.EndCmd();\r\n let historyRec = this.historyRecord[this.curIndex];\r\n if (!historyRec)\r\n return false;\r\n this.doing = true;\r\n for (let [id, recList] of historyRec.HistoryList)\r\n {\r\n for (let i = recList.length; i--;)\r\n {\r\n id?.Object?.ApplyPartialUndo(recList[i].undoData);\r\n }\r\n }\r\n this.UndoEvent(historyRec.CommandName, historyRec);\r\n this.curIndex--;\r\n this.doing = false;\r\n return true;\r\n }\r\n Redo()\r\n {\r\n //如果命令执行中,那么进行局部重做.\r\n if (CommandState.CommandIng && this.useSubCommand)\r\n {\r\n if (this._SignalCommandHistory)\r\n return this._SignalCommandHistory.Redo();\r\n return;\r\n }\r\n\r\n let historyRec = this.historyRecord[this.curIndex + 1];\r\n if (!historyRec)\r\n return false;\r\n this.doing = true;\r\n for (let [id, recList] of historyRec.HistoryList)\r\n {\r\n for (let rec of recList)\r\n {\r\n id.Object.ApplyPartialUndo(rec.redoData);\r\n }\r\n }\r\n this.RedoEvent(historyRec.CommandName, historyRec);\r\n this.curIndex++;\r\n this.doing = false;\r\n return true;\r\n }\r\n\r\n UndoEvent(cmdName: string, historyRec: CommandHistoryRecord)\r\n {\r\n }\r\n\r\n RedoEvent(cmdName: string, historyRec: CommandHistoryRecord)\r\n {\r\n }\r\n\r\n}\r\n","import { Box3, Color, Light as TLight, Vector3 } from 'three';\r\nimport { UpdateDraw } from '../../Common/Status';\r\nimport { ObjectSnapMode } from '../../Editor/ObjectSnapMode';\r\nimport { Box3Ext } from '../../Geometry/Box';\r\nimport { MoveMatrix } from '../../Geometry/GeUtils';\r\nimport { RenderType } from '../../GraphicsSystem/RenderType';\r\nimport { equaln } from '../../Nest/Common/Util';\r\nimport { AutoRecord } from '../AutoRecord';\r\nimport { Factory } from '../CADFactory';\r\nimport { CADFiler } from '../CADFiler';\r\nimport { CADObject } from '../CADObject';\r\nimport { Entity } from '../Entity/Entity';\r\n\r\n/**\r\n * 灯光实体基类\r\n */\r\n@Factory\r\nexport class Light extends Entity\r\n{\r\n OnlyRenderType = true;\r\n protected _Intensity: number = 2; //强度\r\n protected _LightColor: Color = new Color();//光源颜色\r\n @AutoRecord Temperature = 6500;//色温\r\n @AutoRecord IndirectLightingIntensity = 1; //0-200 间接光照强度\r\n //LightComponent extends LightComponentBase\r\n @AutoRecord SpecularScale = 1;//高光度范围 默认1 (物理)\r\n protected _ShowHelper = true;// Light.DefaultShowHelpr; 默认绘制的灯光总是有助手,避免让用户困惑\r\n protected _CaseShadow = true;//投射阴影\r\n protected _OpenLight = Light.DefaultOpenLight;//开灯\r\n static DefaultOpenLight = false;\r\n static DefaultCaseShadow = false;\r\n static DefaultShowHelpr = false;\r\n\r\n Clone()\r\n {\r\n return CADObject.prototype.Clone.call(this);\r\n }\r\n\r\n get CaseShadow() { return this._CaseShadow; }\r\n\r\n set CaseShadow(v: boolean)\r\n {\r\n if (v === this._CaseShadow) return;\r\n this.WriteAllObjectRecord();\r\n this._CaseShadow = v;\r\n this.Update();\r\n }\r\n\r\n get OpenLight() { return this._OpenLight; }\r\n\r\n set OpenLight(v: boolean)\r\n {\r\n if (v === this._OpenLight) return;\r\n this._OpenLight = v;\r\n this.Update();\r\n }\r\n\r\n //因为有set 所以必须11对应\r\n get Position()\r\n {\r\n return super.Position;\r\n }\r\n\r\n set Position(v: Vector3)\r\n {\r\n super.Position = v;\r\n this.Update(UpdateDraw.Geometry);\r\n }\r\n\r\n get Color()\r\n {\r\n return this._LightColor;\r\n }\r\n set Color(color: Color)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._LightColor = color;\r\n this.Update();\r\n }\r\n get ShowHelper()\r\n {\r\n return this._ShowHelper;\r\n }\r\n set ShowHelper(v: boolean)\r\n {\r\n if (v === this._ShowHelper) return;\r\n this.WriteAllObjectRecord();\r\n this._ShowHelper = v;\r\n this.Update();\r\n }\r\n\r\n get BoundingBoxInOCS()\r\n {\r\n return new Box3Ext(new Vector3(-0.05, -0.05, -0.05), new Vector3(0.05, 0.05, 0.05));\r\n }\r\n\r\n get BoundingBox()\r\n {\r\n return new Box3().setFromCenterAndSize(this.Position, new Vector3(0.1, 0.1, 0.1));\r\n }\r\n\r\n GetObjectSnapPoints(\r\n snapMode: ObjectSnapMode,\r\n pickPoint: Vector3,\r\n lastPoint: Vector3\r\n ): Vector3[]\r\n {\r\n switch (snapMode)\r\n {\r\n case ObjectSnapMode.End:\r\n return this.GetGripPoints();\r\n }\r\n return [];\r\n }\r\n GetGripPoints(): Array\r\n {\r\n return [this.Position];\r\n }\r\n\r\n MoveGripPoints(indexList: number[], vec: Vector3)\r\n {\r\n this.ApplyMatrix(MoveMatrix(vec));\r\n this.Update();\r\n }\r\n UpdateDrawObject(type: RenderType, en: TLight)\r\n {\r\n en.intensity = this.WebIntensity;\r\n en.color = this._LightColor;\r\n en.visible = this._OpenLight;\r\n }\r\n get Intensity()\r\n {\r\n return this._Intensity;\r\n }\r\n\r\n set Intensity(v: number)\r\n {\r\n if (equaln(v, this._Intensity, 0.01)) return;\r\n this.WriteAllObjectRecord();\r\n this._Intensity = v;\r\n this.Update();\r\n }\r\n\r\n get WebIntensity()\r\n {\r\n return this._Intensity;\r\n }\r\n protected _ReadFile(file: CADFiler)\r\n {\r\n super._ReadFile(file);\r\n let ver = file.Read();\r\n this._LightColor = new Color(file.Read());\r\n this._Intensity = file.Read();\r\n if (typeof this._Intensity === \"string\")\r\n this._Intensity = parseFloat(this._Intensity);\r\n this._ShowHelper = file.Read();\r\n\r\n if (ver > 1)\r\n {\r\n this._LightColor.r = file.Read();\r\n this._LightColor.g = file.Read();\r\n this._LightColor.b = file.Read();\r\n\r\n this.Temperature = file.Read();\r\n this.IndirectLightingIntensity = file.Read();\r\n this.SpecularScale = file.Read();\r\n this._CaseShadow = file.Read();\r\n }\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._LightColor.getStyle());\r\n file.Write(this._Intensity);\r\n file.Write(this._ShowHelper);\r\n\r\n //ver2\r\n {\r\n file.Write(this._LightColor.r);\r\n file.Write(this._LightColor.g);\r\n file.Write(this._LightColor.b);\r\n\r\n file.Write(this.Temperature);\r\n file.Write(this.IndirectLightingIntensity);\r\n file.Write(this.SpecularScale);\r\n file.Write(this._CaseShadow);\r\n }\r\n }\r\n}\r\n","import { AmbientLight as TAmbientLight, Object3D } from \"three\";\r\nimport { RenderType } from \"../../GraphicsSystem/RenderType\";\r\nimport { Factory } from \"../CADFactory\";\r\nimport { Light } from \"./Light\";\r\n\r\n@Factory\r\nexport class AmbientLight extends Light\r\n{\r\n protected _Intensity = 0.9;\r\n protected _OpenLight = true;//开灯\r\n protected _CaseShadow: boolean = false;\r\n protected InitDrawObject(renderType: RenderType = RenderType.Wireframe): Object3D\r\n {\r\n let light = new TAmbientLight(this.Color, this._Intensity);\r\n return light;\r\n }\r\n}\r\n","import { Color, DirectionalLight, DirectionalLightHelper, LineBasicMaterial, Matrix4, Mesh, SphereBufferGeometry } from \"three\";\r\n\r\nexport class SunLightHelper extends DirectionalLightHelper\r\n{\r\n light: DirectionalLight;\r\n\r\n children: [Mesh];\r\n size: number;\r\n /**\r\n * @default undefined\r\n */\r\n color: Color | string | number;\r\n matrix: Matrix4;\r\n\r\n constructor(light: DirectionalLight, size: number, color?: Color)\r\n {\r\n const geometry = new SphereBufferGeometry(1, 16, 16);\r\n const material = new LineBasicMaterial({ fog: false });\r\n material.color = light.color;\r\n super(light, size, color);\r\n\r\n this.children[0].geometry = geometry.scale(400, 400, 400);\r\n this.children[0].material = material;\r\n\r\n this.light = light;\r\n this.color = color;\r\n }\r\n\r\n /**\r\n * @default false\r\n */\r\n matrixAutoUpdate: boolean;\r\n}\r\n","import { DirectionalLight as TDirectionalLight, Group, MathUtils, Matrix3, Matrix4, Object3D, Vector2, Vector3 } from \"three\";\r\nimport { UpdateDraw } from \"../../Common/Status\";\r\nimport { equalv3 } 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 { Light } from \"./Light\";\r\nimport { SunLightHelper } from \"./SunLightHelper\";\r\n\r\n/**\r\n * 平行光源\r\n */\r\n@Factory\r\nexport class DirectionalLight extends Light\r\n{\r\n protected _Intensity: number = 50; //强度\r\n //光源源角度 0-50\r\n @AutoRecord LightSourceAngle = 0.5357;\r\n //源软角度角度\r\n @AutoRecord LightSourceSoftAngle = 0;\r\n\r\n OnlyRenderType = true;\r\n private _Target = new Vector3();\r\n protected _ShowHelper = false;\r\n protected _OpenLight = true;//开灯\r\n\r\n constructor()\r\n {\r\n super();\r\n this.SpecularScale = 0;//高光度范围 默认0 关闭太阳光反射\r\n }\r\n\r\n //避免被删除\r\n Erase(isErase: boolean = true)\r\n {\r\n this.ShowHelper = !isErase;\r\n }\r\n\r\n /**\r\n * @param theta 身体旋转 角度(deg)\r\n * @param phi 头部旋转 角度(deg)\r\n */\r\n SetRotate(thetaDeg: number, phiDeg: number)\r\n {\r\n let phi = (180 - phiDeg) * MathUtils.DEG2RAD;\r\n\r\n let v = new Vector3(Math.cos(phi), 0, Math.sin(phi));\r\n\r\n let r = new Matrix3().rotate(MathUtils.DEG2RAD * thetaDeg);\r\n\r\n v.applyMatrix3(r);\r\n\r\n this.WriteAllObjectRecord();\r\n this._Target.setFromMatrixPosition(this._Matrix).sub(v);\r\n }\r\n\r\n get Target() { return this._Target.clone(); }\r\n set Target(p: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n if (!equalv3(p, this.Position))\r\n {\r\n this._Target.copy(p);\r\n this.Update();\r\n }\r\n }\r\n get WebIntensity()\r\n {\r\n let x = this._Intensity / 150;\r\n x = Math.pow(x, 0.4);\r\n return x * 1.4; // 7/5=1.25\r\n }\r\n\r\n ApplyMatrix(m: Matrix4)\r\n {\r\n super.ApplyMatrix(m);\r\n this._Target.applyMatrix4(m);\r\n this.Update(UpdateDraw.Geometry);\r\n return this;\r\n }\r\n GetGripPoints(): Array\r\n {\r\n if (this.ShowHelper)\r\n return [this.Position, this._Target];\r\n else\r\n return [];\r\n }\r\n MoveGripPoints(indexList: number[], vec: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n if (indexList[0] === 0)\r\n this.Position = this.Position.add(vec);\r\n else\r\n this.Target = this.Target.add(vec);\r\n }\r\n protected InitDrawObject(renderType: RenderType = RenderType.Wireframe): Object3D\r\n {\r\n let lightGroup = new Group();\r\n let light = new TDirectionalLight(this._LightColor, this.WebIntensity);\r\n Object.defineProperty(light, \"castShadow\", {\r\n get: () => this.CaseShadow//HostApplicationServices.isShowLightShadow //太阳光无视这个配置!\r\n });\r\n light.shadow.camera.matrixAutoUpdate = true;\r\n light.shadow.camera.near = 1;\r\n light.shadow.camera.far = 100000;\r\n light.shadow.mapSize = new Vector2(2048, 2048);\r\n let helper = new SunLightHelper(light, 500);\r\n helper.lightPlane.matrixAutoUpdate = true;\r\n lightGroup.add(light, helper);\r\n\r\n lightGroup.matrixAutoUpdate = false;\r\n lightGroup.matrix.copy(this._Matrix);\r\n lightGroup.updateMatrixWorld(true);\r\n this.UpdateDrawObject(renderType, lightGroup);\r\n return lightGroup;\r\n }\r\n UpdateDrawObject(type: RenderType, en: Object3D)\r\n {\r\n let light = en.children[0] as TDirectionalLight;\r\n super.UpdateDrawObject(type, light);\r\n light.target.position.copy(this._Target);\r\n light.target.updateMatrix();\r\n light.target.updateMatrixWorld(true);\r\n\r\n en.updateMatrixWorld(true);\r\n\r\n let helper = en.children[1] as SunLightHelper;\r\n helper.visible = this._ShowHelper;\r\n if (this._ShowHelper)\r\n {\r\n helper.update();\r\n helper.matrix = light.matrix;\r\n helper.targetLine.updateMatrix();\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();\r\n this._Target.fromArray(file.Read());\r\n\r\n if (ver > 1)\r\n {\r\n this.LightSourceAngle = file.Read();\r\n this.LightSourceSoftAngle = file.Read();\r\n }\r\n }\r\n WriteFile(file: CADFiler)\r\n {\r\n super.WriteFile(file);\r\n file.Write(2);//ver\r\n file.Write(this._Target.toArray());\r\n\r\n //ver2\r\n file.Write(this.LightSourceAngle);\r\n file.Write(this.LightSourceSoftAngle);\r\n }\r\n}\r\n","import { Color, HemisphereLight as THemisphereLight, Light as TLight, Object3D } from \"three\";\r\nimport { RenderType } from \"../../GraphicsSystem/RenderType\";\r\nimport { AutoRecord } from \"../AutoRecord\";\r\nimport { Factory } from \"../CADFactory\";\r\nimport { CADFiler } from \"../CADFiler\";\r\nimport { Light } from \"./Light\";\r\n\r\n@Factory\r\nexport class HemisphereLight extends Light\r\n{\r\n private _GroundColor = new Color(); //UE有这个属性 但是默认是黑的\r\n protected _Intensity = 1;\r\n @AutoRecord AutoExposure = false;//自动曝光\r\n @AutoRecord ExposureCompensation = 1;//默认为1\r\n protected _OpenLight = true;//开灯\r\n\r\n get GroundColor() { return this._GroundColor; }\r\n\r\n set GroundColor(color: Color)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._GroundColor = color;\r\n this.Update();\r\n }\r\n\r\n get WebIntensity()\r\n {\r\n return Math.min(this._Intensity, 4) / 5;\r\n }\r\n\r\n protected InitDrawObject(renderType: RenderType = RenderType.Wireframe): Object3D\r\n {\r\n let light = new THemisphereLight(this.Color, this._LightColor, this.WebIntensity);\r\n return light;\r\n }\r\n\r\n UpdateDrawObject(type: RenderType, en: TLight)\r\n {\r\n super.UpdateDrawObject(type, en);\r\n let lg = en as THemisphereLight;\r\n lg.groundColor = this._GroundColor;\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._GroundColor.fromArray(file.Read());\r\n\r\n if (ver > 1)\r\n {\r\n this.AutoExposure = file.Read();\r\n this.ExposureCompensation = file.Read();\r\n }\r\n\r\n }\r\n\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n super.WriteFile(file);\r\n file.Write(2);//ver\r\n file.Write(this._GroundColor.toArray());\r\n\r\n //ver2\r\n file.Write(this.AutoExposure);\r\n file.Write(this.ExposureCompensation);\r\n }\r\n}\r\n","import { SymbolTable } from \"./SymbolTable\";\r\nimport { PhysicalMaterialRecord } from \"./PhysicalMaterialRecord\";\r\n\r\nexport class MaterialTable extends SymbolTable\r\n{\r\n\r\n get Materials()\r\n {\r\n return this.Symbols as Map;\r\n }\r\n\r\n Remove(record: PhysicalMaterialRecord)\r\n {\r\n return super.Remove(record);\r\n }\r\n\r\n GetAt(name: string): PhysicalMaterialRecord | undefined\r\n {\r\n return super.GetAt(name) as PhysicalMaterialRecord;\r\n }\r\n\r\n Has(name: string)\r\n {\r\n return super.Has(name);\r\n }\r\n\r\n AllocateName(name: string = \"材质\"): string\r\n {\r\n return super.AllocateName(name);\r\n }\r\n}\r\n","import { Status } from \"../../Common/Status\";\r\nimport { Factory } from \"../CADFactory\";\r\nimport { ObjectCollection } from \"../ObjectCollection\";\r\nimport { ProcessingGroupRecord } from \"./ProcessingGroupRecord\";\r\n\r\n@Factory\r\nexport class ProcessingGroupTable extends ObjectCollection\r\n{\r\n Append(object: ProcessingGroupRecord, isCheckObjectCleanly = true)\r\n {\r\n let id = super.Append(object, isCheckObjectCleanly);\r\n\r\n if (id)\r\n object.Owner = this.Id;\r\n\r\n return id;\r\n }\r\n\r\n Add(record: ProcessingGroupRecord, isCheckObjectCleanly = true): Status\r\n {\r\n let id = this.Append(record, isCheckObjectCleanly);\r\n if (id)\r\n return Status.True;\r\n else\r\n return Status.False;\r\n }\r\n\r\n Remove(record: ProcessingGroupRecord)\r\n {\r\n return super.Remove(record);\r\n }\r\n}\r\n","import { Factory } from \"../CADFactory\";\r\nimport { ObjectCollection } from \"../ObjectCollection\";\r\nimport { TemplateRecord } from \"./TemplateRecord\";\r\nimport { Status } from \"../../Common/Status\";\r\n\r\n@Factory\r\nexport class TemplateTable extends ObjectCollection\r\n{\r\n Append(object: TemplateRecord, isCheckObjectCleanly = true)\r\n {\r\n let id = super.Append(object, isCheckObjectCleanly);\r\n\r\n if (id)\r\n object.Owner = this.Id;\r\n\r\n return id;\r\n }\r\n\r\n Add(record: TemplateRecord, isCheckObjectCleanly = true): Status\r\n {\r\n let id = this.Append(record, isCheckObjectCleanly);\r\n if (id)\r\n return Status.True;\r\n else\r\n return Status.False;\r\n }\r\n}\r\n","import { MirroredRepeatWrapping, Texture, Wrapping } from 'three';\r\nimport { AutoRecord } from './AutoRecord';\r\nimport { Factory } from './CADFactory';\r\nimport { CADFiler } from './CADFiler';\r\nimport { SymbolTableRecord } from './SymbolTableRecord';\r\n\r\n/**\r\n * 数据化的贴图类.实现了序列化.\r\n */\r\n@Factory\r\nexport class TextureTableRecord extends SymbolTableRecord\r\n{\r\n private wrapS: Wrapping = MirroredRepeatWrapping;//横向(水平)平铺\r\n private wrapT: Wrapping = MirroredRepeatWrapping;//竖向(垂直)平铺\r\n @AutoRecord repeatX: number = 1;//这里已经变成了贴图的尺寸了\r\n @AutoRecord repeatY: number = 1;\r\n @AutoRecord rotation: number = 0;//旋转 弧度deg\r\n @AutoRecord imageUrl: string = \"\";\r\n\r\n @AutoRecord moveX = 0;//材质位移\r\n @AutoRecord moveY = 0;\r\n\r\n @AutoRecord imgUrl: string = \"\";\r\n\r\n set WrapS(wrap: Wrapping)\r\n {\r\n if (wrap !== this.wrapS)\r\n {\r\n this.WriteAllObjectRecord();\r\n this.wrapS = wrap;\r\n }\r\n }\r\n get WrapS() { return this.wrapS; };\r\n get WrapT() { return this.wrapT; };\r\n\r\n set WrapT(wrap: Wrapping)\r\n {\r\n if (wrap !== this.wrapT)\r\n {\r\n this.WriteAllObjectRecord();\r\n this.wrapT = wrap;\r\n }\r\n }\r\n\r\n\r\n private texture: Texture = new Texture();\r\n async Update()\r\n {\r\n return \"\";\r\n }\r\n\r\n private waits: Function[] = [];\r\n async WaitUpdate()\r\n {\r\n if (this.texture.image) return;\r\n let p = new Promise((res, rej) =>\r\n {\r\n this.waits.push(res);\r\n });\r\n return p;\r\n }\r\n GetThreeTexture()\r\n {\r\n return this.texture;\r\n }\r\n\r\n //#region -------------------------File-------------------------\r\n ReadFile(file: CADFiler)\r\n {\r\n super.ReadFile(file);\r\n let ver = file.Read();\r\n this.wrapS = file.Read();\r\n this.wrapT = file.Read();\r\n this.repeatX = file.Read();\r\n this.repeatY = file.Read();\r\n this.rotation = file.Read();\r\n this.imageUrl = file.Read();\r\n\r\n if (ver > 1)\r\n {\r\n this.moveX = file.Read();\r\n this.moveY = file.Read();\r\n }\r\n\r\n this.Update();\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n super.WriteFile(file);\r\n file.Write(2);\r\n\r\n file.Write(this.wrapS);\r\n file.Write(this.wrapT);\r\n file.Write(this.repeatX);\r\n file.Write(this.repeatY);\r\n file.Write(this.rotation);\r\n file.Write(this.imageUrl);\r\n\r\n file.Write(this.moveX);\r\n file.Write(this.moveY);\r\n }\r\n //#endregion\r\n}\r\n","import { MathUtils } from \"three\";\r\nimport { Factory } from \"./CADFactory\";\r\nimport { SymbolTable } from \"./SymbolTable\";\r\nimport { TextureTableRecord } from \"./Texture\";\r\n\r\n@Factory\r\nexport class TextureTable extends SymbolTable\r\n{\r\n AllocateName()\r\n {\r\n do\r\n {\r\n let name = MathUtils.generateUUID();\r\n if (!this.Has(name))\r\n return name;\r\n } while (true);\r\n }\r\n get Textures(): Map\r\n {\r\n return this.Symbols as Map;\r\n }\r\n}\r\n","import { DeepCloneFiler } from \"./DeepCloneFiler\";\r\nimport { ObjectId } from \"./ObjectId\";\r\n\r\nexport class WblockCloneFiler extends DeepCloneFiler\r\n{\r\n\r\n}\r\n\r\n/**\r\n * 用于插入图纸,对所有的软引用变成硬引用,以保证所有的关联对象都能被插入进来\r\n */\r\nexport class WblockCloneFiler2 extends DeepCloneFiler\r\n{\r\n WriteObjectId(id: ObjectId): this\r\n {\r\n if (id && id.Index >= 100 && !this.cloned.has(id.Index)) //当存在id时,表示对象正在被拷贝,或者已经拷贝完成\r\n this.hardObjectIds.add(id.Index);\r\n return super.WriteObjectId(id);\r\n }\r\n}\r\n","import { MirroredRepeatWrapping, Vector3 } from 'three';\r\nimport { HostApplicationServices } from '../ApplicationServices/HostApplicationServices';\r\nimport { DuplicateRecordCloning } from '../Common/Status';\r\nimport { BlockTableRecord } from './BlockTableRecord';\r\nimport { Factory } from './CADFactory';\r\nimport { CADFiler } from './CADFiler';\r\nimport { CADObject } from './CADObject';\r\nimport { CameraSnapshootRecord } from './CameraSnapshoot/CameraSnapshootRecord';\r\nimport { DeepCloneFiler } from './DeepCloneFiler';\r\nimport { Entity } from './Entity/Entity';\r\nimport { GroupTable } from './GroupTable';\r\nimport { HistoricManage } from './HistoricManage';\r\nimport { IdMaping } from './IdMaping';\r\nimport { AmbientLight } from './Lights/AmbientLight';\r\nimport { DirectionalLight } from './Lights/DirectionalLight';\r\nimport { HemisphereLight } from './Lights/HemisphereLight';\r\nimport { Light } from './Lights/Light';\r\nimport { MaterialTable } from './MaterialTable';\r\nimport { ObjectId, RelevancyType } from './ObjectId';\r\nimport { OwnerContainer } from './OwnerContainer';\r\nimport { PhysicalMaterialRecord } from './PhysicalMaterialRecord';\r\nimport { ProcessingGroupTable } from './ProcessingGroup/ProcessingGroupTable';\r\nimport { SymbolTable } from './SymbolTable';\r\nimport { SymbolTableRecord } from './SymbolTableRecord';\r\nimport { TemplateTable } from './Template/TemplateTable';\r\nimport { TextureTableRecord } from './Texture';\r\nimport { TextureTable } from './TextureTable';\r\nimport { WblockCloneFiler } from './WblockCloneFiler';\r\n\r\n@Factory\r\nexport class Database\r\n{\r\n //历史记录(撤销重做)\r\n hm: HistoricManage;\r\n\r\n //各种表(材质 贴图 模块 编组 加工组)\r\n MaterialTable: MaterialTable;\r\n TextureTable: TextureTable;\r\n TemplateTable: TemplateTable;\r\n GroupTable: GroupTable;\r\n ProcessingGroupTable: ProcessingGroupTable;\r\n\r\n //模型空间(里面有模型空间的实体列表)\r\n ModelSpace: BlockTableRecord;\r\n //布局空间\r\n LayoutSpace: BlockTableRecord;\r\n //模型空间的灯光\r\n Lights: BlockTableRecord;\r\n\r\n //相机快照记录\r\n CameraSnapshoots: CameraSnapshootRecord[] = [];\r\n\r\n //固定灯源(天光 太阳光 环境光)\r\n AmbientLight: AmbientLight;\r\n SunLight: DirectionalLight;\r\n HemisphereLight: HemisphereLight;\r\n\r\n //默认材质\r\n DefaultMaterial: PhysicalMaterialRecord;\r\n\r\n private idIndex = 1;\r\n private idMap = new Map();\r\n constructor(buildDefaultDrawing = false, private defaultDatabase = false, disableHistoric = false)\r\n {\r\n this.ModelSpace = new BlockTableRecord().SetOwnerDatabase(this);\r\n this.MaterialTable = new MaterialTable().SetOwnerDatabase(this);\r\n this.TextureTable = new TextureTable().SetOwnerDatabase(this);\r\n this.TemplateTable = new TemplateTable().SetOwnerDatabase(this);\r\n this.GroupTable = new GroupTable().SetOwnerDatabase(this);\r\n this.Lights = new BlockTableRecord().SetOwnerDatabase(this);\r\n this.ProcessingGroupTable = new ProcessingGroupTable().SetOwnerDatabase(this);\r\n this.hm = new HistoricManage().SetDefaultDb(this);\r\n this.hm.Enable = false;\r\n this.LayoutSpace = new BlockTableRecord().SetOwnerDatabase(this);\r\n\r\n if (buildDefaultDrawing)\r\n {\r\n this.idIndex = 70;\r\n this.DefaultMaterial = new PhysicalMaterialRecord();\r\n this.DefaultMaterial.Name = \"默认\";\r\n let texture = new TextureTableRecord();\r\n texture.WrapS = MirroredRepeatWrapping;\r\n texture.WrapT = MirroredRepeatWrapping;\r\n texture.repeatX = 1;\r\n texture.repeatY = 1;\r\n this.TextureTable.Add(texture);\r\n this.DefaultMaterial.map = texture.Id;\r\n this.DefaultMaterial.roughnessMap = texture.Id;\r\n this.DefaultMaterial.bumpMap = texture.Id;\r\n\r\n this.MaterialTable.Add(this.DefaultMaterial);\r\n\r\n texture.Update();\r\n this.SettingDefaultMaterial();\r\n\r\n //初始化灯光\r\n this.InitLight();\r\n }\r\n\r\n this.hm.Enable = !disableHistoric;\r\n\r\n //100以内的id是系统保留id,默认初始化内部对象.\r\n this.idIndex = 100;\r\n }\r\n\r\n private InitLight()\r\n {\r\n this.idIndex = 80;\r\n this.AmbientLight = new AmbientLight();\r\n this.SunLight = new DirectionalLight();\r\n this.SunLight.OCSNoClone.setPosition(4000, -4000, 4000);\r\n\r\n this.HemisphereLight = new HemisphereLight();\r\n this.SunLight.Visible = true;\r\n this.HemisphereLight.Visible = true;\r\n this.Lights.Add(this.AmbientLight);\r\n this.Lights.Add(this.SunLight);\r\n this.Lights.Add(this.HemisphereLight);\r\n }\r\n\r\n SettingDefaultMaterial()\r\n {\r\n if (!this.defaultDatabase)\r\n return;\r\n\r\n this.DefaultMaterial = this.GetObjectId(71)?.Object as PhysicalMaterialRecord ?? this.DefaultMaterial;\r\n this.DefaultMaterial.Update();\r\n HostApplicationServices.DefaultMeshMaterial = this.DefaultMaterial.Material;\r\n }\r\n\r\n Destroy()\r\n {\r\n this.idMap.clear();\r\n this.ModelSpace.Destroy();\r\n this.LayoutSpace.Destroy();\r\n this.MaterialTable.Destroy();\r\n this.TextureTable.Destroy();\r\n this.TemplateTable.Destroy();\r\n this.GroupTable.Destroy();\r\n this.Lights.Destroy();\r\n this.ProcessingGroupTable.Destroy();\r\n this.hm.Destroy();\r\n this.CameraSnapshoots.length = 0;\r\n this.hm.historyRecord.length = 0;\r\n\r\n this.idIndex = 1;\r\n this.ModelSpace.SetOwnerDatabase(this);\r\n this.MaterialTable.SetOwnerDatabase(this);\r\n this.TextureTable.SetOwnerDatabase(this);\r\n this.TemplateTable.SetOwnerDatabase(this);\r\n this.GroupTable.SetOwnerDatabase(this);\r\n this.Lights.SetOwnerDatabase(this);\r\n this.ProcessingGroupTable.SetOwnerDatabase(this);\r\n this.hm.SetDefaultDb(this);\r\n this.LayoutSpace.SetOwnerDatabase(this);\r\n this.idIndex = 100;\r\n }\r\n\r\n //#region Serialize\r\n\r\n FileWrite(file = new CADFiler): CADFiler\r\n {\r\n file.Write(8);//ver;\r\n file.Write(this.idIndex);\r\n this.ModelSpace.WriteFile(file);\r\n this.TextureTable.WriteFile(file);\r\n this.MaterialTable.WriteFile(file);\r\n this.hm.WriteFile(file);\r\n this.TemplateTable.WriteFile(file);\r\n this.GroupTable.WriteFile(file);\r\n this.Lights.WriteFile(file);\r\n this.ProcessingGroupTable.WriteFile(file);\r\n\r\n this.LayoutSpace.WriteFile(file);\r\n\r\n file.Write(this.CameraSnapshoots.length);\r\n for (let r of this.CameraSnapshoots)\r\n r.WriteFile(file);\r\n\r\n return file;\r\n }\r\n FileRead(file: CADFiler)\r\n {\r\n Entity.__ReadFileIng__ = true;\r\n this.hm.doing = true;\r\n\r\n this.Destroy();\r\n file.database = this;\r\n let ver = file.Read();\r\n this.idIndex = file.Read();\r\n this.ModelSpace.ReadFile(file);\r\n this.TextureTable.ReadFile(file);\r\n this.MaterialTable.ReadFile(file);\r\n this.hm.ReadFile(file);\r\n if (ver > 1)\r\n this.TemplateTable.ReadFile(file);\r\n if (ver > 2)\r\n this.GroupTable.ReadFile(file);\r\n if (ver > 3)\r\n {\r\n this.Lights.ReadFile(file);\r\n this.AmbientLight = this.Lights.Entitys[0] as AmbientLight ?? this.AmbientLight;\r\n this.SunLight = this.Lights.Entitys[1] as DirectionalLight ?? this.SunLight;\r\n this.HemisphereLight = this.Lights.Entitys[2] as HemisphereLight ?? this.HemisphereLight;\r\n }\r\n else\r\n {\r\n let index = this.idIndex;\r\n this.InitLight();\r\n this.idIndex = index;\r\n }\r\n\r\n if (ver > 4)\r\n this.ProcessingGroupTable.ReadFile(file);\r\n\r\n if (ver > 5)\r\n this.LayoutSpace.ReadFile(file);\r\n\r\n if (ver < 8)//旧版本数据错误 修复它\r\n {\r\n for (let e of this.LayoutSpace.Entitys)\r\n e.Owner = this.LayoutSpace.Id;\r\n }\r\n\r\n if (ver > 6)\r\n {\r\n let count = file.Read();\r\n this.CameraSnapshoots.length = 0;\r\n for (let i = 0; i < count; i++)\r\n {\r\n let r = new CameraSnapshootRecord;\r\n r.ReadFile(file);\r\n this.CameraSnapshoots.push(r);\r\n }\r\n }\r\n\r\n this.SettingDefaultMaterial();\r\n\r\n this.hm.doing = false;\r\n Entity.__ReadFileIng__ = false;\r\n return this;\r\n }\r\n\r\n //#endregion\r\n\r\n //#region Clone\r\n\r\n /**\r\n * 单个数据库内克隆对象(objects),并将他们附加到指定的容器对象(owner).\r\n * @param objects 被克隆的对象\r\n * @param owner 克隆对象的容器\r\n * @param idMap id映射\r\n * @param deferXlation 指示是否应该进行ID转换\r\n * @returns 新克隆的对象列表\r\n */\r\n DeepCloneObjects(\r\n objects: CADObject[],\r\n owner: OwnerContainer,\r\n idMap: IdMaping = new Map(),\r\n deferXlation = false\r\n ): CADObject[]\r\n {\r\n let f = new DeepCloneFiler();\r\n let newObjects: CADObject[] = [];\r\n for (let e of objects)\r\n {\r\n let newE = e instanceof Light ? this.DeepCloneObject(f, e, this.Lights, idMap) : this.DeepCloneObject(f, e, owner, idMap); //灯光拷贝到Lights\r\n if (newE)\r\n newObjects.push(newE);\r\n }\r\n\r\n //对于无法新拷贝的实体,指向原先的对象(需要是软拷贝才行)\r\n for (let [index, objectId] of f.idMaping)\r\n {\r\n if (!objectId.Object && objectId._RelevancyType === RelevancyType.Soft)\r\n {\r\n let oldId = this.GetObjectId(index);\r\n if (oldId)\r\n {\r\n objectId.Index = index;\r\n objectId.Object = oldId.Object;\r\n }\r\n }\r\n }\r\n\r\n this.ClearEmptyAssoc(f);\r\n return newObjects;\r\n }\r\n\r\n /**\r\n * 清理拷贝后的实体空引用\r\n */\r\n private ClearEmptyAssoc(f: DeepCloneFiler)\r\n {\r\n let tempF = new CADFiler();\r\n tempF.database = this;\r\n for (let [index, objectId] of f.idMaping)\r\n {\r\n if (objectId.Object && objectId.Index !== index)\r\n {\r\n tempF.Clear();\r\n objectId.Object.WriteFile(tempF);\r\n tempF.Reset();\r\n if (objectId.Object instanceof Entity)\r\n objectId.Object.AutoUpdate = false;\r\n objectId.Object.ReadFile(tempF);\r\n if (objectId.Object instanceof Entity)\r\n objectId.Object.AutoUpdate = true;\r\n }\r\n }\r\n }\r\n\r\n DeepCloneObject(\r\n filer: DeepCloneFiler,\r\n object: CADObject,\r\n owner: OwnerContainer,\r\n idMap: IdMaping = new Map(),\r\n ): CADObject | undefined\r\n {\r\n if (idMap.has(object.Id))\r\n return idMap.get(object.Id).Object;\r\n\r\n if (owner instanceof SymbolTable)//应该不能直接拷贝这类型的实体,因为会直接名称重复\r\n return;\r\n\r\n filer.Data.length = 0;\r\n filer.Reset();\r\n filer.WriteObject(object);\r\n let newObject = filer.ReadObject();\r\n if (!(newObject instanceof Light) && newObject instanceof Entity)//Light类的对象不能拷贝绘制 否则出错\r\n newObject.CloneDrawObject(object as Entity);\r\n this.AllocationObjectId(newObject);\r\n owner.Add(newObject, false);\r\n idMap.set(object.Id, newObject.Id);\r\n\r\n //拷贝硬绑定对象\r\n while (filer.hardObjectIds.size > 0)\r\n {\r\n let hardObjectIds = filer.hardObjectIds;\r\n filer.hardObjectIds = new Set();\r\n for (let idIndex of hardObjectIds)\r\n {\r\n let objectId = this.GetObjectId(idIndex, false);\r\n let object = objectId?.Object;\r\n if (object === undefined)\r\n continue;//对象已经被删除\r\n if (!object.Owner)\r\n console.error(\"无主?\");\r\n if (object.Owner.Object instanceof SymbolTable)\r\n //当我们拷贝样式(图层,材质,标注样式,文字样式(这种以Name-Value对应的记录)时,由于名称不能重复,所以拷贝会失败,这时我们把它转换为软引用,我们就可以避免拷贝,并且保持引用正常)\r\n filer.idMaping.get(idIndex)._RelevancyType = RelevancyType.Soft;\r\n else\r\n this.DeepCloneObject(filer, object, object.Owner.Object as unknown as OwnerContainer, idMap);//指向新对象\r\n }\r\n }\r\n return newObject;\r\n }\r\n\r\n /**\r\n * 将来自不同数据库的对象列表拷贝到本数据库中.\r\n * 当前支持使用HardId模式来硬关联某个对象,使该对象能够在WblockClone时一起被带过来.\r\n * 当前不支持硬关联对象的Owner不是默认的容器.\r\n * 如果需要这么做,请将该对象的Owner设置为Hard关联\r\n * @param objects 对象不能属于本数据库\r\n * @param owner 克隆对象的新容器\r\n * @param idMap id映射\r\n */\r\n WblockCloneObejcts(\r\n objects: CADObject[],\r\n owner: OwnerContainer,\r\n idMap: IdMaping,\r\n drc: DuplicateRecordCloning,\r\n filer = new WblockCloneFiler\r\n ): CADObject[]\r\n {\r\n Entity.__ReadFileIng__ = true;\r\n\r\n for (let obj of objects)\r\n if (obj instanceof Light)\r\n this.WblockCloneObject(obj, this.Lights, idMap, drc, filer);\r\n else\r\n this.WblockCloneObject(obj, owner, idMap, drc, filer);\r\n\r\n this.ClearEmptyAssoc(filer);\r\n\r\n Entity.__ReadFileIng__ = false;\r\n return objects.map(o => idMap.get(o.Id).Object);\r\n }\r\n\r\n /**\r\n * 克隆引用对象 WriteHardObjectId\r\n */\r\n private WblockCloneReferenceObject(\r\n object: CADObject,\r\n f: WblockCloneFiler,\r\n idMap: Map,\r\n drc: DuplicateRecordCloning)\r\n {\r\n let oldData = f.Data;\r\n f.Data = [];\r\n\r\n let oldDb = object.Db;\r\n let hardObjectIds = f.hardObjectIds;\r\n f.hardObjectIds = new Set();\r\n for (let idIndex of hardObjectIds)\r\n {\r\n let oldId = oldDb.GetObjectId(idIndex);\r\n if (!(oldId?.Object) || oldId.IsErase) continue;//对已经被删除的对象不进行拷贝\r\n //使用旧的OwnerId得到新的OwnerId,假设所有者都是数据库默认存在的.\r\n //TODO: 当OwnerId>100时,表示这个所有者不是数据库里面默认存在的,那么应该将Owner拷贝过来.\r\n let newOwnerId = this.GetObjectId(oldId.Object.Owner.Index); //owner.Db === this\r\n let newOwner = newOwnerId.Object as SymbolTable;\r\n this.WblockCloneObject(oldId.Object, newOwner, idMap, drc, f);\r\n }\r\n\r\n f.Data = oldData;\r\n }\r\n\r\n private WblockCloneObject(\r\n object: CADObject,\r\n owner: OwnerContainer,\r\n idMap: IdMaping,\r\n drc: DuplicateRecordCloning,\r\n filer: WblockCloneFiler\r\n )\r\n {\r\n //克隆的对象有可能被其他的对象依赖并且克隆完毕了.\r\n let cloneId = filer.idMaping.get(object.Id.Index);\r\n if (cloneId && cloneId.Object)\r\n return;\r\n\r\n filer.Data.length = 0;\r\n //表示该对象已经被拷贝了\r\n filer.cloned.add(object.Id.Index);\r\n if (owner instanceof SymbolTable)\r\n {\r\n let record = object as SymbolTableRecord;\r\n let name = record.Name;\r\n if (owner.Has(name))//名称重复\r\n {\r\n let status = drc;\r\n if (status === DuplicateRecordCloning.Rename)\r\n {\r\n //new name\r\n for (let i = 1; ; i++)\r\n {\r\n let nname = `${name}(${i})`;\r\n if (!owner.Has(nname))\r\n {\r\n name = nname;\r\n break;\r\n }\r\n }\r\n\r\n filer.WriteObject(record);\r\n this.WblockCloneReferenceObject(record, filer, idMap, drc);\r\n filer.Reset();\r\n let newRecord = filer.ReadObject() as SymbolTableRecord;\r\n newRecord.Owner = undefined;\r\n newRecord.Name = name;\r\n this.AllocationObjectId(newRecord);\r\n owner.Add(newRecord, false);\r\n idMap.set(object.Id, newRecord.Id);\r\n }\r\n else if (status === DuplicateRecordCloning.Replace)\r\n {\r\n let oldRecord = owner.GetAt(name);\r\n //将f的id映射设置为旧的id\r\n filer.idMaping.set(object.Id.Index, oldRecord.Id);\r\n\r\n record.WriteFile(filer);\r\n this.WblockCloneReferenceObject(record, filer, idMap, drc);\r\n filer.Reset();\r\n\r\n //此时重新读取的话,将会得到原先的id,实现id不变\r\n oldRecord.ReadFile(filer);\r\n oldRecord.Owner = owner.Id;\r\n idMap.set(object.Id, oldRecord.Id);\r\n }\r\n else if (status === DuplicateRecordCloning.Ignore)\r\n {\r\n let oldRecord = owner.GetAt(name);\r\n filer.idMaping.set(object.Id.Index, oldRecord.Id);\r\n idMap.set(object.Id, oldRecord.Id);\r\n }\r\n return;\r\n }\r\n }\r\n\r\n filer.WriteObject(object);\r\n this.WblockCloneReferenceObject(object, filer, idMap, drc);\r\n filer.Reset();\r\n let newObject = filer.ReadObject() as SymbolTableRecord;\r\n this.AllocationObjectId(newObject); //先给予Id,避免历史记录里面没有id\r\n if (owner === this.ModelSpace && newObject instanceof Entity)\r\n (newObject).CloneDrawObject(object as Entity);\r\n owner.Add(newObject, false);\r\n idMap.set(object.Id, newObject.Id);\r\n }\r\n\r\n /**\r\n * 为拷贝出来的对象分配id索引,并在数据库中注册\r\n */\r\n private AllocationObjectId(object: CADObject)\r\n {\r\n object.Id.Index = this.idIndex++;\r\n this.idMap.set(object.Id.Index, object.Id);\r\n }\r\n\r\n Insert()\r\n {\r\n\r\n }\r\n\r\n /**\r\n * 写块\r\n * @param outputDatabase 输出到指定的数据库\r\n * @param objects\r\n * @param basePoint\r\n * @param cloning\r\n */\r\n Wblock(\r\n outputDataBase: Database,\r\n objects: CADObject[],\r\n basePoint: Vector3,\r\n cloning: any\r\n )\r\n {\r\n\r\n }\r\n\r\n //#endregion\r\n\r\n //#region IdManager\r\n\r\n //创建一个id,自动递增它的索引号,并且会自动加入到db的id列表中.\r\n AllocateId(): ObjectId\r\n {\r\n return this.GetObjectId(this.idIndex++, true);\r\n }\r\n\r\n GetObjectId(index: number, create = false): ObjectId\r\n {\r\n //id 从1开始,0被保留作为空id\r\n if (index === 0) return undefined;\r\n\r\n let id = this.idMap.get(index);\r\n if (!create || id) return id;\r\n\r\n id = new ObjectId(index);\r\n this.idMap.set(index, id);\r\n\r\n return id;\r\n }\r\n\r\n DeleteId(idIndex: number)\r\n {\r\n this.idMap.delete(idIndex);\r\n }\r\n\r\n //#endregion\r\n}\r\n","import { Face3, Geometry, Object3D, Vector3, Line } from \"three\";\r\nimport { RenderType } from \"../GraphicsSystem/RenderType\";\r\nimport { CADFiler } from \"./CADFiler\";\r\nimport { Entity } from \"./Entity/Entity\";\r\nimport { Factory } from \"./CADFactory\";\r\n\r\n@Factory\r\nexport class FaceEntity extends Entity\r\n{\r\n constructor(private p1: Vector3 = new Vector3(), private p2: Vector3 = new Vector3(), private p3: Vector3 = new Vector3(), private normal: Vector3 = new Vector3())\r\n {\r\n super();\r\n }\r\n\r\n protected InitDrawObject(renderType: RenderType = RenderType.Wireframe): Object3D\r\n {\r\n let g = new Geometry();\r\n\r\n g.vertices.push(this.p1, this.p2, this.p3);\r\n g.faces.push(new Face3(0, 1, 2));\r\n\r\n return new Line(g);\r\n }\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\r\n this.p1.fromArray(file.Read());\r\n this.p2.fromArray(file.Read());\r\n this.p3.fromArray(file.Read());\r\n\r\n this.normal.fromArray(file.Read());\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\r\n file.Write(this.p1.toArray());\r\n file.Write(this.p2.toArray());\r\n file.Write(this.p3.toArray());\r\n\r\n file.Write(this.normal.toArray());\r\n\r\n }\r\n //#endregion\r\n}\r\n","import { arrayRemoveIf } from \"../Common/ArrayExt\";\r\nimport { AutoRecord, ISPROXYKEY } from \"./AutoRecord\";\r\nimport { Factory } from \"./CADFactory\";\r\nimport { CADFiler } from \"./CADFiler\";\r\nimport { Entity } from \"./Entity/Entity\";\r\nimport { ObjectId } from \"./ObjectId\";\r\nimport { SymbolTableRecord } from \"./SymbolTableRecord\";\r\n\r\n@Factory\r\nexport class GroupRecord extends SymbolTableRecord\r\n{\r\n @AutoRecord Entitys: ObjectId[];\r\n\r\n constructor()\r\n {\r\n super();\r\n\r\n this.Entitys = new Proxy([], {\r\n set: (target, key, value, receiver) =>\r\n {\r\n if (Reflect.get(target, key, receiver) !== value)\r\n {\r\n if (this.WriteAllObjectRecord())\r\n {\r\n if (value instanceof ObjectId && value.Object instanceof Entity)\r\n {\r\n if (!this.Id)\r\n console.warn(\"请先添加到Database后在进行操作!\");\r\n else\r\n value.Object.GroupId = this.Id;\r\n }\r\n }\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 return Reflect.get(target, key, receiver);\r\n }\r\n });\r\n }\r\n get Name()\r\n {\r\n return this.name;\r\n }\r\n set Name(name: string)\r\n {\r\n if (name !== this.name)\r\n {\r\n this.WriteAllObjectRecord();\r\n this.name = name;\r\n }\r\n }\r\n\r\n Purge()\r\n {\r\n arrayRemoveIf(this.Entitys, id => !id || id.IsErase);\r\n }\r\n\r\n //对象从文件中读取数据,初始化自身\r\n ReadFile(file: CADFiler)\r\n {\r\n let ver = file.Read();\r\n super.ReadFile(file);\r\n let count = file.Read() as number;\r\n\r\n this.Entitys.length = 0;\r\n for (let i = 0; i < count; i++)\r\n {\r\n let id = file.ReadObjectId();\r\n if (id) this.Entitys.push(id);\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 id of this.Entitys)\r\n file.WriteObjectId(id);\r\n }\r\n\r\n}\r\n","import { Vector3 } from \"three\";\r\nimport { safeEval } from \"../../Common/eval\";\r\nimport { Log } from \"../../Common/Log\";\r\nimport { Board } from \"../../DatabaseServices/Entity/Board\";\r\nimport { TemplateWineRackRecord } from \"../../DatabaseServices/Template/ProgramTempate/TemplateWineRackRecord\";\r\nimport { TemplateRecord } from \"../../DatabaseServices/Template/TemplateRecord\";\r\nimport { MoveMatrix } from \"../../Geometry/GeUtils\";\r\nimport { ISpaceParse } from \"../../Geometry/SpaceParse/ISpaceParse\";\r\nimport { BehindBoardOption, BehindHeightPositon, BoardType, BrRelativePos, IGrooveOption, LayerBoardOption, VerticalBoardOption } from \"../../UI/Store/BoardInterface\";\r\n\r\nexport function BuildLayerBoards(opt: LayerBoardOption, space: ISpaceParse, grooveOption?: IGrooveOption): Board[]\r\n{\r\n let spaceBox = space.SpaceBox;\r\n let spaceOCS = space.SpaceOCS;\r\n let size = spaceBox.getSize(new Vector3());\r\n const params = { L: size.x, W: size.y, H: size.z, BH: opt.thickness };\r\n\r\n let width: number;\r\n if (opt.isTotalLength)\r\n width = size.y;\r\n else\r\n {\r\n width = safeEval(opt.calcHeight, params);\r\n }\r\n let count = opt.count;\r\n let type = opt.boardRelative;\r\n let spaceSize = safeEval(opt.calcSpaceSize, params);\r\n let frontShrink = safeEval(opt.calcFrontShrink, params);\r\n width -= frontShrink;\r\n\r\n if (width <= 0)\r\n {\r\n Log(\"宽度无效,可能前缩过大,请修正\");\r\n return [];\r\n }\r\n\r\n let leftShrink = safeEval(opt.calcLeftShrink, params);\r\n let rightShrink = safeEval(opt.calcRightShrink, params);\r\n let thickness = opt.thickness;\r\n\r\n let len = size.x - leftShrink - rightShrink;\r\n if (len <= 0)\r\n {\r\n Log(\"长度无效,可能左缩右缩过大,请修正\");\r\n return [];\r\n }\r\n let board = Board.CreateBoard(len, width, thickness, BoardType.Layer);\r\n if (grooveOption)\r\n {\r\n board.KnifeRadius = safeEval(grooveOption.knifeRadius);\r\n board.GroovesAddDepth = safeEval(grooveOption.grooveAddDepth);\r\n board.GroovesAddWidth = safeEval(grooveOption.grooveAddWidth);\r\n board.GroovesAddLength = safeEval(grooveOption.grooveAddLength);\r\n }\r\n opt.height = len;\r\n opt.width = width;\r\n\r\n //等分单层空间大小\r\n let singleSize = (size.z - (thickness * count)) / (count + 1);\r\n\r\n\r\n let brs: Board[] = [];\r\n\r\n for (let i = 1; i <= count; i++)\r\n {\r\n let b = board.Clone() as Board;\r\n b.Name = opt.name;\r\n\r\n if (type === BrRelativePos.Top)\r\n b.ApplyMatrix(MoveMatrix(spaceBox.min.clone().add(\r\n new Vector3(size.x - rightShrink, frontShrink, size.z - (spaceSize + thickness) * i)\r\n )));\r\n else if (type === BrRelativePos.Bottom)\r\n b.ApplyMatrix(\r\n MoveMatrix(spaceBox.min.clone().add(\r\n new Vector3(size.x - rightShrink, frontShrink, spaceSize * i + (i - 1) * thickness)\r\n )));\r\n else\r\n {\r\n b.ApplyMatrix(\r\n MoveMatrix(spaceBox.min.clone().add(\r\n new Vector3(size.x - rightShrink, frontShrink, singleSize * i + (i - 1) * thickness))\r\n ));\r\n }\r\n b.ApplyMatrix(spaceOCS);\r\n brs.push(b);\r\n }\r\n return brs;\r\n}\r\n\r\nexport function BuildVerticalBoards(opt: VerticalBoardOption, space: ISpaceParse, grooveOption?: IGrooveOption): Board[]\r\n{\r\n const spaceBox = space.SpaceBox;\r\n const spaceOCS = space.SpaceOCS;\r\n let size = spaceBox.getSize(new Vector3());\r\n const params = { L: size.x, W: size.y, H: size.z, BH: opt.thickness };\r\n\r\n let frontShrink = safeEval(opt.calcFrontShrink, params);\r\n let bottomShink = safeEval(opt.calcBottomShrink, params);\r\n let width: number;\r\n if (opt.isTotalWidth)\r\n width = size.y - frontShrink;\r\n else\r\n {\r\n width = safeEval(opt.calcWidth, params);\r\n }\r\n\r\n if (width <= 0)\r\n {\r\n Log(\"宽度无效,可能前缩过大,请修正\");\r\n return [];\r\n }\r\n\r\n let length: number;\r\n if (opt.isTotalLength)\r\n length = size.z - bottomShink;\r\n else\r\n {\r\n length = safeEval(opt.calcHeight, params);\r\n }\r\n\r\n let count = opt.count;\r\n let type = opt.boardRelative;\r\n let spaceSize = safeEval(opt.calcSpaceSize, params);\r\n let thickness = opt.thickness;\r\n\r\n let board = Board.CreateBoard(length, width, thickness, BoardType.Vertical);\r\n if (grooveOption)\r\n {\r\n board.KnifeRadius = safeEval(grooveOption.knifeRadius);\r\n board.GroovesAddDepth = safeEval(grooveOption.grooveAddDepth);\r\n board.GroovesAddWidth = safeEval(grooveOption.grooveAddWidth);\r\n board.GroovesAddLength = safeEval(grooveOption.grooveAddLength);\r\n }\r\n opt.height = length;\r\n opt.width = width;\r\n\r\n //等分单层空间大小\r\n let singleSize = (size.x - (thickness * count)) / (count + 1);\r\n\r\n let brs: Board[] = [];\r\n for (let i = 1; i <= count; i++)\r\n {\r\n let b = board.Clone() as Board;\r\n b.Name = opt.name;\r\n\r\n if (type === BrRelativePos.Left)\r\n b.ApplyMatrix(MoveMatrix(spaceBox.min.clone().add(\r\n new Vector3(spaceSize * i + (i - 1) * thickness, frontShrink, bottomShink)\r\n )));\r\n else if (type === BrRelativePos.Right)\r\n b.ApplyMatrix(MoveMatrix(spaceBox.min.clone().add(\r\n new Vector3(size.x - (spaceSize + thickness) * i, frontShrink, bottomShink)\r\n )));\r\n else\r\n b.ApplyMatrix(MoveMatrix(spaceBox.min.clone().add(\r\n new Vector3(singleSize * i + (i - 1) * thickness, frontShrink, bottomShink)\r\n )));\r\n\r\n b.ApplyMatrix(spaceOCS);\r\n brs.push(b);\r\n }\r\n return brs;\r\n}\r\n\r\nexport function BuildBehindBoards(opt: BehindBoardOption, space: ISpaceParse, grooveOption?: IGrooveOption): Board[]\r\n{\r\n let newBox = space.SpaceBox.clone();\r\n let spaceOcs = space.SpaceOCS;\r\n //判断延伸\r\n let leftExt = opt.leftExt;\r\n let rightExt = opt.rightExt;\r\n let topExt = opt.topExt;\r\n let bottomExt = opt.bottomExt;\r\n newBox.max.add(new Vector3(leftExt + rightExt, 0, topExt + bottomExt));\r\n newBox.translate(new Vector3(-leftExt, 0, -bottomExt));\r\n\r\n //获取背板高度\r\n let size = newBox.getSize(new Vector3());\r\n const params = { L: size.x, W: size.y, H: size.z, BH: opt.thickness };\r\n let height: number;\r\n if (opt.boardPosition === BehindHeightPositon.AllHeight)\r\n height = size.z;\r\n else\r\n height = safeEval(opt.calcHeight, params);\r\n\r\n let moveDist = safeEval(opt.calcMoveDist, params);\r\n\r\n //判断背板位置,更新背板高度\r\n switch (opt.boardPosition)\r\n {\r\n case BehindHeightPositon.ForTop:\r\n newBox.min.add(new Vector3(0, 0, size.z - height));\r\n newBox.translate(new Vector3(0, 0, moveDist));\r\n break;\r\n case BehindHeightPositon.ForBottom:\r\n newBox.max.add(new Vector3(0, 0, height));\r\n newBox.translate(new Vector3(0, 0, -moveDist));\r\n break;\r\n }\r\n\r\n let count = opt.count;\r\n //相对位置\r\n let relPos = opt.boardRelative;\r\n //单层空间宽度\r\n let spaceSize = safeEval(opt.calcSpaceSize, params);\r\n let thickness = opt.thickness;\r\n\r\n let board = Board.CreateBoard(height, size.x, thickness, BoardType.Behind);\r\n if (grooveOption)\r\n {\r\n board.KnifeRadius = safeEval(grooveOption.knifeRadius);\r\n board.GroovesAddDepth = safeEval(grooveOption.grooveAddDepth);\r\n board.GroovesAddWidth = safeEval(grooveOption.grooveAddWidth);\r\n board.GroovesAddLength = safeEval(grooveOption.grooveAddLength);\r\n }\r\n\r\n opt.height = height;\r\n opt.width = size.x;\r\n\r\n //等分单层空间大小\r\n let singleSize = (size.y - (thickness * count)) / (count + 1);\r\n\r\n let brs: Board[] = [];\r\n //构建板件\r\n for (let i = 1; i <= count; i++)\r\n {\r\n let b = board.Clone();\r\n b.Name = opt.name;\r\n\r\n if (relPos === BrRelativePos.Front)\r\n b.ApplyMatrix(MoveMatrix(newBox.min.clone().add(new Vector3(0, spaceSize * i + thickness * i, 0))));\r\n else if (relPos === BrRelativePos.Back)\r\n b.ApplyMatrix(MoveMatrix(newBox.min.clone().add(\r\n new Vector3(0, size.y - spaceSize * i - (i - 1) * thickness, 0)\r\n )));\r\n else\r\n b.ApplyMatrix(MoveMatrix(newBox.min.clone().add(\r\n new Vector3(0, (singleSize + thickness) * i, 0)\r\n )));\r\n\r\n b.ApplyMatrix(spaceOcs);\r\n\r\n brs.push(b);\r\n }\r\n return brs;\r\n}\r\n\r\nexport function ExtendsBoardThickness(temp: TemplateRecord, thickness: number)\r\n{\r\n let bhPar = temp.GetParam(\"BH\");\r\n if (bhPar)\r\n {\r\n bhPar.expr = thickness;\r\n if (temp.Parent)\r\n {\r\n let rootBh = safeEval(temp.Root.GetParam(\"BH\")?.value as string);\r\n bhPar.expr = rootBh === thickness ? \"$BH\" : thickness;\r\n }\r\n }\r\n}\r\nexport function ExtendsbrThick2(temp: TemplateWineRackRecord)\r\n{\r\n let bh2Par = temp.GetParam(\"BH2\");\r\n if (bh2Par)\r\n {\r\n let bh2 = temp.Option.brThick2;\r\n bh2Par.value = bh2;\r\n if (temp.Option.isExtendsBH2)\r\n {\r\n if (temp.Parent)\r\n {\r\n let rootBh = safeEval(temp.Root.GetParam(\"BH\")?.value as string);\r\n bh2Par.expr = rootBh === bh2 ? \"$BH\" : bh2;\r\n }\r\n }\r\n else\r\n {\r\n bh2Par.expr = \"\";\r\n }\r\n }\r\n}\r\n","import { Vector2, Vector3 } from \"three\";\r\nimport { arrayLast } from \"../../Common/ArrayExt\";\r\nimport { EBoardKeyList } from \"../../Common/BoardKeyList\";\r\nimport { Log } from \"../../Common/Log\";\r\nimport { Singleton } from \"../../Common/Singleton\";\r\nimport { Arc } from \"../../DatabaseServices/Entity/Arc\";\r\nimport { Board } from \"../../DatabaseServices/Entity/Board\";\r\nimport { Polyline } from \"../../DatabaseServices/Entity/Polyline\";\r\nimport { AsVector2, equalv3, isParallelTo, XAxis, YAxis } from \"../../Geometry/GeUtils\";\r\nimport { ISpaceParse } from \"../../Geometry/SpaceParse/ISpaceParse\";\r\nimport { BoardType, DrillType, IHighSealedItem, LinesType } from \"../../UI/Store/BoardInterface\";\r\nimport { ELatticeArrayType, ILatticeOption } from \"../../UI/Store/LatticeInterface\";\r\n\r\nexport class DrawLatticeDrawerTool extends Singleton\r\n{\r\n private _config: ILatticeOption;\r\n private space: ISpaceParse;\r\n private leftBr: Board;\r\n private rightBr: Board;\r\n private frontBr: Board;\r\n private backBr: Board;\r\n private haveTopBr: boolean = false;\r\n get Config()\r\n {\r\n return this._config;\r\n }\r\n Draw(space: ISpaceParse, config: ILatticeOption): Board[]\r\n {\r\n this._config = config;\r\n this.space = space;\r\n\r\n this.ParseSpaceBrs();\r\n\r\n this.HandleSpace();\r\n\r\n let size = space.Size;\r\n\r\n if (config.arrayType === ELatticeArrayType.ByWidth)\r\n {\r\n config.widthCount = Math.floor((size.x + config.thickness) / (config.gripWidth + config.thickness));\r\n config.depthCount = Math.floor((size.y + config.thickness) / (config.gripDepth + config.thickness));\r\n }\r\n\r\n if (config.widthCount <= 0 || config.depthCount <= 0)\r\n {\r\n this.End();\r\n return [];\r\n }\r\n\r\n let gripWidth = (size.x - ((config.widthCount - 1) * config.thickness)) / config.widthCount;\r\n let gripDepth = (size.y - (config.depthCount - 1) * config.thickness) / config.depthCount;\r\n config.gripWidth = gripWidth;\r\n config.gripDepth = gripDepth;\r\n\r\n let position = space.SpaceBox.min.clone();\r\n\r\n let verBr = Board.CreateBoard(size.z, size.y, config.thickness, BoardType.Vertical);\r\n //分析切角圆弧的结果\r\n let res = this.ParseArcLenOrObliuqeAng(verBr);\r\n if (!res)\r\n {\r\n this.End();\r\n return [];\r\n };\r\n //左右侧板跟随\r\n this.ChangeLeftRightBr(verBr);\r\n\r\n this.ParseBrTooth(verBr);\r\n this.ParseHighSealing(verBr, config.leftSealed, config.rightSealed, config.upSealed, config.downSealed, false);\r\n this.WriteBoardProcessOption(verBr);\r\n let lattices: Board[] = [];\r\n for (let i = 1; i < config.widthCount; i++)\r\n {\r\n let br = verBr.Clone();\r\n br.Name = \"竖板\" + i;\r\n let pos = position.clone();\r\n pos.add(new Vector3(gripWidth * i + (i - 1) * config.thickness));\r\n br.Position = pos;\r\n br.ApplyMatrix(space.SpaceOCS);\r\n lattices.push(br);\r\n }\r\n\r\n let beBr = Board.CreateBoard(size.z, size.x, config.thickness, BoardType.Behind);\r\n this.ParseBrTooth(beBr);\r\n this.ParseHighSealing(beBr, config.leftSealed, config.rightSealed, config.upSealed, config.downSealed, true);\r\n this.WriteBoardProcessOption(beBr);\r\n for (let i = 1; i < config.depthCount; i++)\r\n {\r\n let br = beBr.Clone();\r\n br.Name = \"横板\" + i;\r\n let pos = position.clone();\r\n pos.add(new Vector3(0, (gripDepth + config.thickness) * i));\r\n br.Position = pos;\r\n br.ApplyMatrix(space.SpaceOCS);\r\n lattices.push(br);\r\n }\r\n\r\n this.End();\r\n return lattices;\r\n }\r\n private HandleSpace()\r\n {\r\n const config = this.Config;\r\n let box = this.space.SpaceBox;\r\n box.max.add(new Vector3(0, 0, -this.Config.downDist));\r\n //处理间隙\r\n box.min.add(new Vector3(config.space, config.space));\r\n box.max.add(new Vector3(-config.space, -config.space));\r\n\r\n if (this.frontBr && this.backBr)\r\n {\r\n let backPos = this.backBr.Position.applyMatrix4(this.frontBr.OCSInv);\r\n\r\n let addH = backPos.y + this.backBr.Height - this.frontBr.Height;\r\n if (addH > 0)\r\n {\r\n this.space.SpaceBox.max.add(new Vector3(0, 0, addH));\r\n if (config.isAuto)\r\n config.arcLen = addH;\r\n }\r\n else\r\n Log(\"挡板高度大于等于格子抽板高度,无法自动识别弧度!\");\r\n }\r\n\r\n if (this.haveTopBr)\r\n {\r\n Log(\"顶板不为空,绘制格子抽可能错误!\");\r\n }\r\n }\r\n private ChangeLeftRightBr(refBr: Board)\r\n {\r\n const config = this.Config;\r\n if (this.leftBr && this.rightBr)\r\n {\r\n if (config.isChange)\r\n {\r\n let lWidth = this.leftBr.Width;\r\n let lHeight = this.leftBr.Height;\r\n let lgrooves = this.leftBr.Grooves.slice();\r\n let rgrooves = this.rightBr.Grooves.slice();\r\n\r\n let rWidth = this.rightBr.Width;\r\n let rHeight = this.rightBr.Height;\r\n\r\n this.leftBr.ContourCurve = refBr.ContourCurve.Clone();\r\n this.rightBr.ContourCurve = refBr.ContourCurve.Clone();\r\n\r\n this.leftBr.Width = lWidth;\r\n this.leftBr.Height = lHeight;\r\n this.rightBr.Width = rWidth;\r\n this.rightBr.Height = rHeight;\r\n\r\n if (this.leftBr.Grooves.length !== lgrooves.length)\r\n this.leftBr.AppendGrooves(lgrooves);\r\n if (this.rightBr.Grooves.length !== rgrooves.length)\r\n this.rightBr.AppendGrooves(rgrooves);\r\n\r\n }\r\n else\r\n {\r\n // 左右侧板不跟随更改的时候,不要把它变成矩形\r\n // this.leftBr.InitBoard(this.leftBr.Height, this.leftBr.Width, this.leftBr.Thickness, this.leftBr.BoardType);\r\n // this.rightBr.InitBoard(this.rightBr.Height, this.rightBr.Width, this.rightBr.Thickness, this.rightBr.BoardType);\r\n }\r\n }\r\n }\r\n private ParseBrTooth(br: Board)\r\n {\r\n const config = this.Config;\r\n\r\n let grooveLenAdd = config.knifeRad;\r\n\r\n let initPts: Vector3[] = [];\r\n if (br.BoardType === BoardType.Behind)\r\n {\r\n let addWidth = (config.grooveAddWidth - 2 * config.upSealed) / 2;\r\n let p1 = new Vector3(br.Width - config.gripWidth + addWidth, br.Height);\r\n let p2 = new Vector3(br.Width - config.gripWidth + addWidth, br.Height / 2 - grooveLenAdd);\r\n let p3 = new Vector3(br.Width - config.gripWidth - br.Thickness - addWidth, br.Height / 2 - grooveLenAdd);\r\n let p4 = new Vector3(br.Width - config.gripWidth - br.Thickness - addWidth, br.Height);\r\n initPts.push(p1, p2, p3, p4);\r\n for (let i = 2; i < config.widthCount; i++)\r\n {\r\n initPts.push(\r\n ...[p1, p2, p3, p4].map(p => p.clone().add(new Vector3(-(config.gripWidth + br.Thickness) * (i - 1))))\r\n );\r\n }\r\n let cu = br.ContourCurve as Polyline;\r\n cu.AddVertexAt(cu.EndParam - 1, initPts.map(p => AsVector2(p)));\r\n br.ContourCurve = cu;\r\n }\r\n else\r\n {\r\n let addWidth = (config.grooveAddWidth - 2 * config.downSealed) / 2;\r\n let p1 = new Vector3(config.gripDepth - addWidth, 0);\r\n let p2 = new Vector3(config.gripDepth - addWidth, br.Height / 2 + grooveLenAdd);\r\n let p3 = new Vector3(config.gripDepth + br.Thickness + addWidth, br.Height / 2 + grooveLenAdd);\r\n let p4 = new Vector3(config.gripDepth + br.Thickness + addWidth, 0);\r\n initPts.push(p1, p2, p3, p4);\r\n for (let i = 2; i < config.depthCount; i++)\r\n {\r\n initPts.push(\r\n ...[p1, p2, p3, p4].map(p => p.clone().add(new Vector3((config.gripDepth + br.Thickness) * (i - 1))))\r\n );\r\n }\r\n let cu = br.ContourCurve as Polyline;\r\n cu.AddVertexAt(1, initPts.map(p => AsVector2(p)));\r\n br.ContourCurve = cu;\r\n }\r\n }\r\n private ParseSpaceBrs()\r\n {\r\n let vertBrs: Board[] = this.space.BoardMap.get(BoardType.Vertical);\r\n if (vertBrs && vertBrs.length > 1)\r\n {\r\n vertBrs.sort((br1, br2) =>\r\n {\r\n return br1.Position.applyMatrix4(this.space.SpaceOCSInv).x - br2.Position.applyMatrix4(this.space.SpaceOCSInv).x;\r\n });\r\n this.leftBr = vertBrs[0];\r\n this.rightBr = arrayLast(vertBrs);\r\n }\r\n\r\n let behindBrs = this.space.BoardMap.get(BoardType.Behind);\r\n\r\n if (behindBrs && behindBrs.length > 1)\r\n {\r\n behindBrs.sort((br1, br2) =>\r\n {\r\n return br1.Position.applyMatrix4(this.space.SpaceOCSInv).y - br2.Position.applyMatrix4(this.space.SpaceOCSInv).y;\r\n });\r\n\r\n this.backBr = arrayLast(behindBrs);\r\n this.frontBr = behindBrs[0];\r\n }\r\n\r\n let lyBrs = this.space.BoardMap.get(BoardType.Layer);\r\n this.haveTopBr = lyBrs && lyBrs.length > 1;\r\n }\r\n private ParseArcLenOrObliuqeAng(br: Board)\r\n {\r\n const config = this.Config;\r\n const size = this.space.Size;\r\n\r\n if (config.isOpenCut)\r\n {\r\n if (config.upCut > size.z || config.downCut > size.z)\r\n return true;\r\n if (config.upCut < 1 || config.downCut < 1)\r\n return true;\r\n let cu = br.ContourCurve as Polyline;\r\n cu.AddVertexAt(3, new Vector2(config.upCut, br.Height));\r\n cu.SetPointAt(4, new Vector2(0, br.Height - config.downCut));\r\n }\r\n else\r\n {\r\n if (config.arcLen > size.z || config.arcLen > size.y)\r\n {\r\n Log(\"圆弧角过大\");\r\n return false;\r\n }\r\n let cu = br.ContourCurve as Polyline;\r\n if (config.arcLen === 0)\r\n {\r\n Log(\"圆弧角为0\");\r\n return true;\r\n }\r\n cu.AddVertexAt(3, new Vector2(config.arcLen, br.Height));\r\n cu.SetBulgeAt(3, Math.tan(Math.PI / 8));\r\n cu.SetPointAt(4, new Vector2(0, br.Height - config.arcLen));\r\n }\r\n\r\n return true;\r\n }\r\n private WriteBoardProcessOption(br: Board)\r\n {\r\n const config = this.Config;\r\n br.KnifeRadius = config.knifeRad;\r\n br.BoardProcessOption.sealedUp = config.upSealed.toString();\r\n br.BoardProcessOption.sealedDown = config.downSealed.toString();\r\n br.BoardProcessOption.sealedLeft = config.leftSealed.toString();\r\n br.BoardProcessOption.sealedRight = config.rightSealed.toString();\r\n br.BoardProcessOption.drillType = DrillType.None;\r\n br.BoardProcessOption.highDrill.fill(DrillType.None);\r\n br.BoardProcessOption[EBoardKeyList.Lines] = LinesType.Reverse; //生成的板设置为反纹\r\n }\r\n protected ParseHighSealing(br: Board, leftSealed: number, rightSealed: number, topSealed: number, downSealed: number, isHor: boolean)\r\n {\r\n let cu = br.ContourCurve as Polyline;\r\n br.BoardProcessOption.sealedLeft = leftSealed.toString();\r\n br.BoardProcessOption.sealedRight = rightSealed.toString();\r\n br.BoardProcessOption.sealedUp = topSealed.toString();\r\n br.BoardProcessOption.sealedDown = downSealed.toString();\r\n\r\n let highSeals: IHighSealedItem[] = [];\r\n\r\n let sizes = [...new Set([downSealed, rightSealed, topSealed, leftSealed])];\r\n let downSeal = {\r\n size: downSealed, color: sizes.indexOf(downSealed) + 1\r\n };\r\n let rigthSeal = {\r\n size: rightSealed, color: sizes.indexOf(rightSealed) + 1\r\n };\r\n let topSeal = { size: topSealed, color: sizes.indexOf(topSealed) + 1 };\r\n let leftSeal = { size: leftSealed, color: sizes.indexOf(leftSealed) + 1 };\r\n\r\n if (isHor)\r\n {\r\n highSeals.push(downSeal, rigthSeal);\r\n\r\n for (let i = 1; i <= cu.EndParam - 3; i++)\r\n {\r\n highSeals.push(topSeal);\r\n }\r\n highSeals.push(leftSeal);\r\n }\r\n else\r\n {\r\n let count = (this._config.depthCount - 1) * 3 + this._config.depthCount;\r\n\r\n for (let i = 0; i < count; i++)\r\n {\r\n highSeals.push(downSeal);\r\n }\r\n for (let i = count; i < cu.EndParam; i++)\r\n {\r\n let c = cu.GetCurveAtIndex(i);\r\n if (c instanceof Arc)\r\n break;\r\n let derv = c.GetFistDeriv(0).normalize();\r\n if (equalv3(derv, YAxis))\r\n highSeals.push(rigthSeal);\r\n else if (isParallelTo(derv, XAxis))\r\n highSeals.push(topSeal);\r\n else if (equalv3(derv, YAxis.clone().negate()))\r\n highSeals.push(leftSeal);\r\n else\r\n highSeals.push(topSeal);\r\n }\r\n }\r\n br.BoardProcessOption.highSealed = highSeals;\r\n }\r\n private End()\r\n {\r\n this._config = null;\r\n this.leftBr = null;\r\n this.rightBr = null;\r\n this.backBr = null;\r\n this.frontBr = null;\r\n this.haveTopBr = false;\r\n }\r\n}\r\n","import { Matrix4, Vector3 } from \"three\";\r\nimport { arrayRemoveDuplicateBySort } from \"../../Common/ArrayExt\";\r\nimport { Board } from \"../../DatabaseServices/Entity/Board\";\r\nimport { BoardType } from \"../../UI/Store/BoardInterface\";\r\nimport { Box3Ext, SplitType } from \"../Box\";\r\nimport { equaln, isParallelTo, XAxis, YAxis, ZAxis } from \"../GeUtils\";\r\nimport { VisualSpaceBox } from './../../Editor/VisualSpaceBox';\r\n\r\nexport class ISpaceParse\r\n{\r\n /**\r\n * 解析空间成功\r\n */\r\n ParseOK = false;\r\n\r\n /**\r\n * 空间占地盒子\r\n */\r\n SpaceBox: Box3Ext;\r\n\r\n /**\r\n * 空间盒子所在的位置矩阵\r\n */\r\n SpaceOCS: Matrix4;\r\n SpaceOCSInv: Matrix4;\r\n\r\n /**\r\n * 板件映射表\r\n */\r\n BoardMap: Map = new Map();\r\n\r\n /**\r\n * 解析空间所用的板件列表\r\n */\r\n Boards: Board[];\r\n\r\n LeftBoard: Board;\r\n RightBoard: Board;\r\n\r\n /**\r\n * 动态中,禁止执行二次操作\r\n */\r\n IsDynamic: Boolean = false;\r\n /**选到的虚拟空间 */\r\n VisualSpaceBox: VisualSpaceBox;\r\n Rotation = { x: 0, y: 0, z: 0 };\r\n\r\n /**\r\n * # 构造后请手动调用Parse()方法.\r\n * @param boards 板件列表\r\n * @param [spaceOCS] 默认空间矩阵,如果不设置将使用第一块板作为空间矩阵\r\n */\r\n constructor(boards?: Board[], spaceOCS?: Matrix4)\r\n {\r\n this.Boards = boards;\r\n if (spaceOCS)\r\n this.SpaceOCS = spaceOCS;\r\n else if (boards && boards.length > 0)\r\n this.SpaceOCS = boards[0].SpaceOCS;\r\n else\r\n this.SpaceOCS = new Matrix4();\r\n\r\n this.SpaceOCSInv = new Matrix4().getInverse(this.SpaceOCS);\r\n\r\n this.GeneralBoardMap();\r\n }\r\n\r\n async Parse()\r\n {\r\n }\r\n\r\n get Size()\r\n {\r\n if (this.SpaceBox)\r\n return this.SpaceBox.getSize(new Vector3());\r\n return new Vector3();\r\n }\r\n\r\n get DrawCS(): Matrix4\r\n {\r\n if (!this.ParseOK) return new Matrix4();\r\n let scs = this.SpaceOCS.clone();\r\n let p = this.SpaceBox.min.clone().applyMatrix4(scs);\r\n scs.setPosition(p);\r\n return scs;\r\n }\r\n\r\n protected GetBoardInSpaceType(br: Board): BoardType\r\n {\r\n //使用板件向量判断类型,而不是板件类型\r\n let normal = br.Normal.transformDirection(this.SpaceOCSInv);\r\n let type: BoardType;\r\n if (isParallelTo(XAxis, normal, 1e-3))\r\n type = BoardType.Vertical;\r\n else if (isParallelTo(YAxis, normal, 1e-3))\r\n type = BoardType.Behind;\r\n else if (isParallelTo(ZAxis, normal, 1e-3))\r\n type = BoardType.Layer;\r\n\r\n return type;\r\n }\r\n\r\n /**\r\n * 构造板件类型Map\r\n */\r\n protected GeneralBoardMap()\r\n {\r\n if (this.Boards && this.Boards.length > 0)\r\n {\r\n this.BoardMap.clear();\r\n\r\n for (let br of this.Boards)\r\n {\r\n let type = this.GetBoardInSpaceType(br);\r\n if (type === undefined) continue;\r\n\r\n let brs = this.BoardMap.get(type);\r\n if (brs)\r\n brs.push(br);\r\n else\r\n this.BoardMap.set(type, [br]);\r\n }\r\n }\r\n }\r\n /**\r\n * 解析板件的盒子,并且(排序,归并)\r\n * @param boardCol\r\n * @param splitType\r\n */\r\n protected ParseBoardBox(boardCol: Board[], splitType: SplitType): Box3Ext[]\r\n {\r\n let boxCol = boardCol.map(b => b.GetBoundingBoxInMtx(this.SpaceOCSInv));\r\n\r\n //查找最左的板和最右的板\r\n if (splitType === SplitType.X)\r\n {\r\n let minX = Infinity;\r\n let leftIndex = 0;\r\n let maxX = -Infinity;\r\n let rightIndex = 0;\r\n\r\n for (let i = 0; i < boxCol.length; i++)\r\n {\r\n let box = boxCol[i];\r\n if (box.min.x < minX)\r\n {\r\n minX = box.min.x;\r\n leftIndex = i;\r\n }\r\n\r\n if (box.max.x > maxX)\r\n {\r\n maxX = box.max.x;\r\n rightIndex = i;\r\n }\r\n }\r\n\r\n this.LeftBoard = boardCol[leftIndex];\r\n this.RightBoard = boardCol[rightIndex];\r\n }\r\n\r\n //根据分割类型排序\r\n boxCol.sort((b1, b2) =>\r\n {\r\n return b1.min.getComponent(splitType) - b2.min.getComponent(splitType);\r\n });\r\n\r\n //归并盒子\r\n arrayRemoveDuplicateBySort(boxCol,\r\n (b1, b2) =>\r\n {\r\n if (\r\n //对齐\r\n equaln(\r\n b1.min.getComponent(splitType),\r\n b2.min.getComponent(splitType),\r\n 1e-3\r\n )\r\n &&\r\n //厚度相等\r\n equaln(\r\n b1.getSize(new Vector3()).getComponent(splitType),\r\n b2.getSize(new Vector3()).getComponent(splitType),\r\n 1e-3\r\n )\r\n )\r\n {\r\n b1.union(b2);\r\n return true;\r\n }\r\n return false;\r\n }\r\n );\r\n\r\n return boxCol;\r\n }\r\n}\r\n","import { safeEval } from \"../../../Common/eval\";\r\nimport { AutoRecord } from \"../../AutoRecord\";\r\nimport { Factory } from \"../../CADFactory\";\r\nimport { CADFiler } from \"../../CADFiler\";\r\nimport { TemplateParam } from \"../Param/TemplateParam\";\r\n\r\n/**\r\n * 模版动作\r\n */\r\n@Factory\r\nexport class TemplateAction\r\n{\r\n @AutoRecord Name: string = \"动作\";\r\n /** 表达式应该只能依赖自身 */\r\n @AutoRecord Expr: string;\r\n @AutoRecord Description: string;\r\n parent: TemplateParam;\r\n WriteAllObjectRecord()\r\n {\r\n if (this.parent)\r\n this.parent.WriteAllObjectRecord();\r\n }\r\n Update(paramDiff: number | string, newValue: number | string)\r\n {\r\n if (this.Expr)\r\n {\r\n let varDefines = {};\r\n varDefines[this.parent.name] = newValue;\r\n newValue = safeEval(this.Expr, varDefines) || newValue;\r\n\r\n varDefines[this.parent.name] = paramDiff;\r\n paramDiff = safeEval(this.Expr, varDefines) || paramDiff;\r\n }\r\n\r\n this._Update(paramDiff, newValue);\r\n }\r\n\r\n\r\n /**\r\n * @重载\r\n */\r\n protected _Update(paramDiff: number | string, newValue: number | string)\r\n {\r\n\r\n }\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 this.Name = file.Read();\r\n if (ver > 2)\r\n {\r\n this.Expr = file.Read();\r\n this.Description = file.Read();\r\n }\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(3);\r\n file.Write(this.Name);\r\n file.Write(this.Expr);\r\n file.Write(this.Description);\r\n }\r\n}\r\n","import { Intersection, Object3D, Vector3 } from 'three';\r\nimport { Entity } from '../DatabaseServices/Entity/Entity';\r\nimport { ObjectSnapMode } from './ObjectSnapMode';\r\nimport { SelectSet } from './SelectSet';\r\n\r\nexport enum PromptStatus\r\n{\r\n None = 0,\r\n Cancel = -1,\r\n OK = 1,\r\n Keyword = 2,\r\n Other = 4,\r\n String = 8,\r\n Error = -2\r\n}\r\n\r\n// export enum Errno 未来某一天我们可能需要这个东西\r\n// {\r\n// Space = 0,\r\n// Enter = 1,\r\n// Esc = 2,\r\n// Left = 3,\r\n// Right = 4,\r\n// }\r\n\r\nexport class PromptResult\r\n{\r\n Status: PromptStatus = PromptStatus.None;\r\n\r\n StringResult?: string;\r\n //是否为子级菜单\r\n isChild?: boolean = false;\r\n Parent?: string;\r\n //当用户选择失败的时候,提供当前选择失败的原因\r\n // Errno?: Errno;\r\n}\r\n\r\nexport class PromptPointResult extends PromptResult\r\n{\r\n SnaoMode: ObjectSnapMode;\r\n intersection: Intersection;\r\n private _point: Vector3;\r\n /**\r\n * 返回三维点\r\n *\r\n * @readonly\r\n * @memberof PromptPointResult\r\n */\r\n get Point()\r\n {\r\n return this._point.clone();\r\n }\r\n set Point(pt: Vector3)\r\n {\r\n this._point = pt.clone();\r\n }\r\n constructor()\r\n {\r\n super();\r\n this._point = new Vector3();\r\n }\r\n}\r\n\r\nexport class PromptDistendResult extends PromptResult\r\n{\r\n private _value: number;\r\n get Distance()\r\n {\r\n return this._value;\r\n }\r\n set Distance(v: number)\r\n {\r\n this._value = v;\r\n }\r\n}\r\n\r\nexport class PromptRectResult extends PromptResult\r\n{\r\n Point1UCS: Vector3;\r\n Point2UCS: Vector3;\r\n\r\n Point1WCS: Vector3;\r\n Point2WCS: Vector3;\r\n\r\n get Width()\r\n {\r\n return this.Point1UCS.x - this.Point2UCS.x;\r\n }\r\n\r\n get Height()\r\n {\r\n return this.Point1UCS.y - this.Point2UCS.y;\r\n }\r\n}\r\n\r\nexport class PromptEntityResult extends PromptResult\r\n{\r\n constructor(\r\n //选择到的图形\r\n public Entity?: Entity,\r\n //点取的点\r\n public Point?: Vector3,\r\n public Object?: Object3D,\r\n public IsCircle?: boolean,\r\n )\r\n {\r\n super();\r\n }\r\n}\r\n\r\nexport class PromptSsgetResult extends PromptResult\r\n{\r\n SelectSet?: SelectSet;\r\n}\r\n","import { Matrix4, Vector3 } from \"three\";\r\nimport { GetPointAtCurveDir } from \"../Common/CurveUtils\";\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 { Ellipse } from \"../DatabaseServices/Entity/Ellipse\";\r\nimport { Line } from \"../DatabaseServices/Entity/Line\";\r\nimport { Polyline } from \"../DatabaseServices/Entity/Polyline\";\r\nimport { Spline } from \"../DatabaseServices/Spline\";\r\nimport { PromptEntityResult, PromptPointResult } from \"../Editor/PromptResult\";\r\nimport { angle, AsVector2, equaln, equalv3, isIntersect2, isParallelTo, midPoint } from \"../Geometry/GeUtils\";\r\nimport { Orbit } from \"../Geometry/Orbit\";\r\nimport { IntersectOption } from \"../GraphicsSystem/IntersectWith\";\r\n\r\nfunction Encode(res: PromptEntityResult, enMap: (PromptEntityResult[])[])\r\n{\r\n if (res.Entity instanceof Line || res.Entity.constructor.name === \"RoomWallLine\")\r\n {\r\n enMap[0].push(res);\r\n return 1;\r\n }\r\n else if (res.Entity instanceof Arc || res.constructor.name === \"RoomWallArc\")\r\n {\r\n enMap[1].push(res);\r\n return 2;\r\n }\r\n else if (res.Entity instanceof Polyline)\r\n {\r\n enMap[2].push(res);\r\n return 4;\r\n }\r\n else if (res.Entity instanceof Spline)\r\n {\r\n enMap[3].push(res);\r\n return 8;\r\n }\r\n else if (res.Entity instanceof Ellipse)\r\n {\r\n enMap[4].push(res);\r\n return 16;\r\n }\r\n}\r\n\r\n//把圆转换成圆弧,避免圆参与计算.\r\nfunction CircleEnResToArc(enRes: PromptEntityResult)\r\n{\r\n if (enRes.Entity instanceof Circle)\r\n {\r\n let an = angle(enRes.Point.clone().applyMatrix4(enRes.Entity.OCSInv)) + Math.PI;\r\n let arc = new Arc(new Vector3(), enRes.Entity.Radius, an, an + 0.1);\r\n arc.ApplyMatrix(enRes.Entity.OCS);\r\n arc.Center = enRes.Entity.Center;\r\n enRes.Entity = arc;\r\n enRes.IsCircle = true;\r\n }\r\n}\r\n\r\nfunction GetFilletCurve(enRes: PromptEntityResult): [Curve, number]\r\n{\r\n if (enRes.Entity instanceof Polyline)\r\n {\r\n let pl = enRes.Entity;\r\n let param = pl.GetParamAtPoint(pl.GetClosestPointTo(enRes.Point, false));\r\n let paramF = Math.floor(param);\r\n return [pl.GetCurveAtParam(param), paramF];\r\n }\r\n else\r\n return [enRes.Entity as Curve, NaN];\r\n}\r\n\r\nenum ExtendType\r\n{\r\n Start = 1,\r\n End = 2,\r\n}\r\n\r\nexport interface FilletRes\r\n{\r\n cu1?: Curve;\r\n cu1Extend?: ExtendType;\r\n cu2?: Curve;\r\n cu2Extend?: ExtendType;\r\n arc?: Arc;\r\n}\r\n\r\ntype CurveExtend = { Curve: Curve, ExtType: ExtendType; };\r\n\r\nexport class FilletUtils\r\n{\r\n FilletRadius: number;\r\n Fillet(enRes1: PromptEntityResult, enRes2: PromptEntityResult): FilletRes\r\n {\r\n CircleEnResToArc(enRes1);\r\n CircleEnResToArc(enRes2);\r\n\r\n let { enType, enMap } = this.EnCode(enRes1, enRes2);\r\n if (enType === 4 && enRes1.Entity === enRes2.Entity)\r\n return this.FilletPolyLineSelf(enRes1, enRes2);\r\n else if (enType >= 4 && enType < 8)\r\n return this.FilletPolylineAndCurve(enRes1, enRes2);\r\n\r\n let interPts = this.GetIntersectAndSort(enRes1, enRes2, enType, enMap);\r\n if (interPts.length === 0\r\n || (interPts.length === 1 && (enType & 2)))//圆弧相切\r\n {\r\n if (enType === 1)\r\n return this.FilletParallelLine(enRes1, enRes2);\r\n else if (enType === 3)\r\n return this.FilletLineAndArc(enMap, enRes1);\r\n else if (enType === 2)\r\n return this.FilletArcAndArc(enRes1, enRes2);\r\n return;\r\n }\r\n\r\n return this.FilletLineOrArc(enRes1, enRes2, interPts);\r\n }\r\n\r\n private FilletLineOrArc(enRes1: PromptEntityResult, enRes2: PromptEntityResult, interPts: Vector3[]): FilletRes\r\n {\r\n let iPt = interPts[0];\r\n\r\n //裁剪延伸,使两条线组成一个尖角\r\n let splitedCu1 = this.SplitCurve(enRes1, iPt, interPts);\r\n let splitedCu2 = this.SplitCurve(enRes2, iPt, interPts);\r\n\r\n let fRadius = this.FilletRadius;\r\n\r\n\r\n let res: FilletRes = { cu1: splitedCu1.Curve, cu2: splitedCu2.Curve, arc: undefined };\r\n\r\n if (fRadius > 0)\r\n {\r\n //角平分线向量.\r\n let bisectorVec: Vector3 = new Vector3();\r\n let c1Derv = this.ComputerDerv(splitedCu1, bisectorVec);\r\n let c2Derv = this.ComputerDerv(splitedCu2, bisectorVec);\r\n\r\n //方向相反\r\n if (equalv3(bisectorVec, new Vector3()))\r\n return;\r\n\r\n //相切\r\n if (equalv3(c2Derv, c1Derv))\r\n {\r\n bisectorVec.set(0, 0, 0);\r\n c1Derv = this.ComputerDerv2(splitedCu1, bisectorVec);\r\n c2Derv = this.ComputerDerv2(splitedCu2, bisectorVec);\r\n }\r\n let cu1RoOcsInv = new Matrix4().extractRotation(splitedCu1.Curve.OCSInv);\r\n\r\n [c1Derv, c2Derv, bisectorVec].forEach(v => v.applyMatrix4(cu1RoOcsInv));\r\n\r\n let offCu1 = splitedCu1.Curve.GetOffsetCurves(\r\n fRadius * -Math.sign(c1Derv.cross(bisectorVec).z))[0];\r\n let offCu2 = splitedCu2.Curve.GetOffsetCurves(\r\n fRadius * -Math.sign(c2Derv.cross(bisectorVec).z))[0];\r\n\r\n if (!offCu1 || !offCu2)\r\n return;\r\n\r\n // JigUtils.Draw(new Line(iPt, iPt.clone().add(c1Derv.clone().multiplyScalar(10)))).ColorIndex = 1;\r\n // JigUtils.Draw(new Line(iPt, iPt.clone().add(c2Derv.clone().multiplyScalar(10)))).ColorIndex = 2;\r\n // JigUtils.Draw(new Line(iPt, iPt.clone().add(bisectorVec))).ColorIndex = 3;\r\n // offCu1.ColorIndex = 6;\r\n // offCu2.ColorIndex = 6;\r\n // JigUtils.Draw(offCu1.Clone());\r\n // JigUtils.Draw(offCu2.Clone());\r\n\r\n let center = offCu1.IntersectWith(offCu2, IntersectOption.ExtendNone)\r\n .sort((p1, p2) =>\r\n {\r\n return p1.distanceToSquared(iPt) - p2.distanceToSquared(iPt);\r\n })[0];\r\n\r\n if (!center)\r\n return;\r\n\r\n let arcP1 = splitedCu1.Curve.GetClosestPointTo(center, true);\r\n let arcP2 = splitedCu2.Curve.GetClosestPointTo(center, true);\r\n if (!splitedCu1.Curve.PtOnCurve(arcP1) || !splitedCu2.Curve.PtOnCurve(arcP2))\r\n return;\r\n\r\n //时针校验\r\n let v1 = arcP1.clone().sub(center).applyMatrix4(cu1RoOcsInv);\r\n let v2 = arcP2.clone().sub(center).applyMatrix4(cu1RoOcsInv);\r\n\r\n //绘制圆弧\r\n let arc = new Arc(new Vector3(), this.FilletRadius, angle(v1), angle(v2), v1.cross(v2).z < 0);\r\n arc.ApplyMatrix(splitedCu1.Curve.OCS);\r\n arc.Center = center;\r\n res.arc = arc;\r\n //延伸或者裁剪到圆弧点\r\n this.ExtendPt(splitedCu1, arcP1);\r\n this.ExtendPt(splitedCu2, arcP2);\r\n }\r\n\r\n res.cu1Extend = splitedCu1.ExtType;\r\n res.cu2Extend = splitedCu2.ExtType;\r\n\r\n return res;\r\n }\r\n FilletPolyLineSelf(enRes1: PromptEntityResult, enRes2: PromptEntityResult): FilletRes\r\n {\r\n let pl = enRes1.Entity as Polyline;\r\n\r\n let param1 = pl.GetParamAtPoint(pl.GetClosestPointTo(enRes1.Point, false));\r\n let param2 = pl.GetParamAtPoint(pl.GetClosestPointTo(enRes2.Point, false));\r\n\r\n if (param1 > param2)\r\n {\r\n [param1, param2] = [param2, param1];\r\n [enRes1, enRes2] = [enRes2, enRes1];\r\n }\r\n\r\n let parF1 = Math.floor(param1);\r\n let parF2 = Math.floor(param2);\r\n\r\n //共线\r\n if (parF1 === parF2)\r\n return;\r\n\r\n let c1 = pl.GetCurveAtParam(param1);\r\n let c2 = pl.GetCurveAtParam(param2);\r\n\r\n if (equalv3(c1.GetFistDeriv(1).normalize(), c2.GetFistDeriv(0).normalize()))\r\n return;\r\n\r\n let es1 = new PromptEntityResult();\r\n es1.Entity = c1;\r\n es1.Point = enRes1.Point;\r\n\r\n let es2 = new PromptEntityResult();\r\n es2.Entity = c2;\r\n es2.Point = enRes2.Point;\r\n let fres = this.Fillet(es1, es2);\r\n\r\n if (!fres)\r\n return;\r\n\r\n let pln = pl.Clone();\r\n\r\n if (fres.cu1 instanceof Arc)\r\n pln.SetBulgeAt(parF1, fres.cu1.Bul);\r\n\r\n if (fres.cu2 instanceof Arc)\r\n pln.SetBulgeAt(parF2, fres.cu2.Bul);\r\n\r\n let splitType1 = fres.cu1Extend;\r\n let splitType2 = fres.cu2Extend;\r\n\r\n if (splitType1 === splitType2)\r\n return;\r\n if (!fres.arc)\r\n {\r\n if (splitType1 === ExtendType.End)\r\n {\r\n let ep = AsVector2(fres.cu1.EndPoint.applyMatrix4(pln.OCSInv));\r\n pln.SetPointAt(parF1 + 1, ep);\r\n\r\n let sp = AsVector2(fres.cu2.StartPoint.applyMatrix4(pln.OCSInv));\r\n pln.SetPointAt(parF2, sp);\r\n //移除多余的点\r\n pln.LineData.splice(parF1 + 1, parF2 - parF1 - 1);\r\n pln.Update();\r\n return { cu1: pln };\r\n }\r\n else\r\n {\r\n let ep = AsVector2(fres.cu1.StartPoint.applyMatrix4(pln.OCSInv));\r\n pln.SetPointAt(parF1, ep);\r\n\r\n let sp = AsVector2(fres.cu2.EndPoint.applyMatrix4(pln.OCSInv));\r\n pln.SetPointAt(parF2 + 1, sp);\r\n\r\n pln.LineData.splice(parF2 + 2);\r\n pln.LineData.splice(0, parF1);\r\n pln.Update();\r\n return { cu1: pln };\r\n }\r\n }\r\n\r\n if (splitType1 === ExtendType.End)//没有经过起点\r\n {\r\n let sp = AsVector2(fres.cu1.EndPoint.applyMatrix4(pln.OCSInv));\r\n if (parF2 - parF1 === 1)\r\n {\r\n pln.AddVertexAt(parF1 + 1, sp);\r\n parF2++;\r\n }\r\n else\r\n pln.SetPointAt(parF1 + 1, sp);\r\n pln.SetBulgeAt(parF1 + 1, fres.arc.Bul);\r\n\r\n let ep = AsVector2(fres.cu2.StartPoint.applyMatrix4(pln.OCSInv));\r\n pln.SetPointAt(parF2, ep);\r\n\r\n //移除多余的点\r\n pln.LineData.splice(parF1 + 2, parF2 - parF1 - 2);\r\n pln.Update();\r\n return { cu1: pln };\r\n }\r\n else//经过起点\r\n {\r\n let sp = AsVector2(fres.arc.EndPoint.applyMatrix4(pln.OCSInv));\r\n\r\n let keepF1 = 0;\r\n if (parF2 + 1 <= pln.LineData.length)\r\n {\r\n if (parF1 === 0 || equaln(pln.GetBulgeAt(parF1 - 1), 0))\r\n pln.AddVertexAt(parF2 + 1, sp);\r\n else\r\n {\r\n pln.SetPointAt(parF1 - 1, sp);\r\n keepF1 = -1;//保留圆弧位\r\n }\r\n }\r\n else\r\n pln.SetPointAt(parF2 + 1, sp);\r\n\r\n if (keepF1 === 0)\r\n pln.SetBulgeAt(parF2 + 1, -fres.arc.Bul);\r\n else\r\n pln.SetBulgeAt(parF1 - 1, -fres.arc.Bul);\r\n\r\n let ep = AsVector2(fres.cu1.StartPoint.applyMatrix4(pln.OCSInv));\r\n pln.SetPointAt(parF1, ep);\r\n pln.CloseMark = true;\r\n\r\n pln.LineData.splice(parF2 + 2 + keepF1);\r\n pln.LineData.splice(0, parF1 + keepF1);\r\n pln.Update();\r\n return { cu1: pln };\r\n }\r\n }\r\n\r\n private FilletPolylineAndCurve(enRes1: PromptEntityResult, enRes2: PromptEntityResult): FilletRes\r\n {\r\n let arr1 = GetFilletCurve(enRes1);\r\n let arr2 = GetFilletCurve(enRes2);\r\n\r\n let [cu1, paramF1] = arr1;\r\n let [cu2, paramF2] = arr2;\r\n\r\n let es1 = new PromptEntityResult();\r\n es1.Entity = cu1;\r\n es1.Point = enRes1.Point;\r\n\r\n let es2 = new PromptEntityResult();\r\n es2.Entity = cu2;\r\n es2.Point = enRes2.Point;\r\n\r\n let fres = this.Fillet(es1, es2);\r\n if (fres)\r\n {\r\n let cus: Curve[] = [];\r\n\r\n let isFirst = false;\r\n\r\n if (fres.cu1)\r\n {\r\n if (enRes1.Entity instanceof Polyline)\r\n {\r\n isFirst = true;\r\n let pln = enRes1.Entity.Clone();\r\n pln.DigestionCloseMark();\r\n\r\n if (fres.cu1 instanceof Arc)\r\n pln.SetBulgeAt(paramF1, fres.cu1.Bul);\r\n\r\n if (fres.cu1Extend === ExtendType.End)\r\n {\r\n pln.LineData.splice(paramF1 + 2);\r\n\r\n let ep = AsVector2(fres.cu1.EndPoint.applyMatrix4(pln.OCSInv));\r\n pln.SetPointAt(paramF1 + 1, ep);\r\n }\r\n else\r\n {\r\n pln.LineData.splice(0, paramF1);\r\n let sp = AsVector2(fres.cu1.StartPoint.applyMatrix4(pln.OCSInv));\r\n pln.SetPointAt(0, sp);\r\n }\r\n\r\n cus.push(pln);\r\n }\r\n else if (!enRes1.IsCircle)\r\n cus.push(fres.cu1);\r\n }\r\n\r\n if (fres.arc)\r\n cus.push(fres.arc);\r\n\r\n if (fres.cu2)\r\n {\r\n if (enRes2.Entity instanceof Polyline)\r\n {\r\n let pln = enRes2.Entity.Clone();\r\n pln.DigestionCloseMark();\r\n\r\n if (fres.cu2 instanceof Arc)\r\n pln.SetBulgeAt(paramF2, fres.cu2.Bul);\r\n\r\n if (fres.cu2Extend === ExtendType.End)\r\n {\r\n pln.LineData.splice(paramF2 + 2);\r\n\r\n let ep = AsVector2(fres.cu2.EndPoint.applyMatrix4(pln.OCSInv));\r\n pln.SetPointAt(paramF2 + 1, ep);\r\n }\r\n else\r\n {\r\n pln.LineData.splice(0, paramF2);\r\n let sp = AsVector2(fres.cu2.StartPoint.applyMatrix4(pln.OCSInv));\r\n pln.SetPointAt(0, sp);\r\n }\r\n\r\n cus.push(pln);\r\n cus.reverse();\r\n }\r\n else if (!enRes2.IsCircle)\r\n cus.push(fres.cu2);\r\n }\r\n\r\n if (cus.length > 0)\r\n {\r\n let pl = cus[0] as Polyline;\r\n if (!(pl instanceof Polyline))\r\n return;\r\n\r\n for (let i = 1; i < cus.length; i++)\r\n pl.Join(cus[i]);\r\n\r\n if (isFirst)\r\n return { cu1: pl };\r\n else\r\n return { cu2: pl };\r\n }\r\n\r\n }\r\n\r\n return undefined;\r\n }\r\n\r\n FilletPolyLineAllAngular(enRes1: PromptEntityResult): FilletRes\r\n {\r\n let pl = enRes1.Entity as Polyline;\r\n\r\n let cus = pl.Explode();\r\n let count = cus.length;\r\n if (pl.IsClose)\r\n cus.push(cus[0]);\r\n\r\n let ncus = [];\r\n\r\n for (let i = 0; i < count; i++)\r\n {\r\n let c1 = cus[i];\r\n let c2 = cus[i + 1];\r\n\r\n ncus.push(c1);\r\n\r\n if (!c2)\r\n break;\r\n\r\n if (equalv3(c1.GetFistDeriv(1).normalize(), c2.GetFistDeriv(0).normalize()))\r\n continue;\r\n\r\n let es1 = new PromptEntityResult();\r\n es1.Entity = c1;\r\n es1.Point = c1.EndPoint;\r\n\r\n let es2 = new PromptEntityResult();\r\n es2.Entity = c2;\r\n es2.Point = c2.StartPoint;\r\n\r\n let fres = this.Fillet(es1, es2);\r\n if (fres)\r\n {\r\n if (fres.cu1)\r\n c1.CopyFrom(fres.cu1);\r\n if (fres.cu2)\r\n c2.CopyFrom(fres.cu2);\r\n\r\n if (fres.arc)\r\n ncus.push(fres.arc);\r\n }\r\n }\r\n\r\n let pln = pl.Clone();\r\n pln.LineData = [];\r\n pln.ApplyMatrix(pln.OCSInv);\r\n pln.CloseMark = false;\r\n for (let cu of ncus)\r\n pln.Join(cu);\r\n\r\n pln.CloseMark = pl.CloseMark;\r\n\r\n return {\r\n cu1: pln,\r\n cu2: undefined,\r\n arc: undefined\r\n };\r\n }\r\n\r\n FindNearestPt(pts: Vector3[], target: Vector3): Vector3\r\n {\r\n let res = pts[0];\r\n let dis = Infinity;\r\n for (let p of pts)\r\n {\r\n let d = p.distanceTo(target);\r\n if (d < dis)\r\n {\r\n res = p;\r\n dis = d;\r\n }\r\n }\r\n return res;\r\n }\r\n\r\n FilletBoard(brRes: PromptEntityResult, ptRes: PromptPointResult): Polyline | string\r\n {\r\n let br = brRes.Entity as Board;\r\n let brContour = br.ContourCurve.Clone() as Polyline;\r\n\r\n //------1.求交\r\n let brResPt = brRes.Point.clone().applyMatrix4(br.OCSInv).setZ(0);\r\n let ptResPt = ptRes.Point.clone().applyMatrix4(br.OCSInv).setZ(0);\r\n let l = new Line(brResPt, ptResPt);\r\n\r\n let ipts = l.IntersectWith(brContour, IntersectOption.ExtendThis);\r\n\r\n if (ipts.length > 2)//超过2个则有可能有多余交点\r\n //找最近点\r\n ipts = [this.FindNearestPt(ipts, brResPt), this.FindNearestPt(ipts, ptResPt)];\r\n\r\n if (ipts.length !== 2)\r\n return \"倒角失败!交点个数异常.\";\r\n\r\n //------2.倒角\r\n let es1 = new PromptEntityResult(brContour, ipts[0]);\r\n let es2 = new PromptEntityResult(brContour, ipts[1]);\r\n\r\n let res = this.FilletPolyLineSelf(es1, es2);\r\n if (res && res.cu1)\r\n return res.cu1 as Polyline;\r\n else\r\n return \"倒角失败\";\r\n }\r\n\r\n /**\r\n * 平行线倒角\r\n */\r\n private FilletParallelLine(enRes1: PromptEntityResult, enRes2: PromptEntityResult): FilletRes\r\n {\r\n let l1 = enRes1.Entity as Line;\r\n let l2 = enRes2.Entity as Line;\r\n\r\n let l1Derv = l1.GetFistDeriv(0);\r\n if (!isParallelTo(l1Derv, l2.GetFistDeriv(0)))\r\n return;\r\n\r\n let vec = l2.StartPoint.sub(l1.StartPoint);\r\n if (isParallelTo(vec, l1Derv))\r\n return;\r\n\r\n let par1 = l2.GetClosestAtPoint(l1.StartPoint, true).param;\r\n let par2 = l2.GetClosestAtPoint(l1.EndPoint, true).param;\r\n if (!isIntersect2(0, 1, par1, par2))\r\n return;\r\n\r\n let lineClone1 = l1.Clone();\r\n let lineClone2 = l2.Clone();\r\n\r\n let par = l1.GetClosestAtPoint(enRes1.Point, true).param;\r\n\r\n let parFix = Math.round(par);\r\n let ptFix = lineClone1.GetPointAtParam(parFix);\r\n let ptL2Fix = lineClone2.GetClosestAtPoint(ptFix, true).closestPt;\r\n\r\n let cu1Extend = parFix === 0 ? ExtendType.Start : ExtendType.End;\r\n let cu2Extend: ExtendType;\r\n if ((par1 > par2) === (parFix === 1))\r\n {\r\n lineClone2.StartPoint = ptL2Fix;\r\n cu2Extend = ExtendType.Start;\r\n }\r\n else\r\n {\r\n lineClone2.EndPoint = ptL2Fix;\r\n cu2Extend = ExtendType.End;\r\n }\r\n\r\n let radius = ptFix.distanceTo(ptL2Fix) / 2;\r\n if (radius < 1e-3)\r\n return;\r\n\r\n let arcCenter = midPoint(ptFix, ptL2Fix);\r\n\r\n let sv = ptFix.sub(arcCenter);\r\n let ev = ptL2Fix.sub(arcCenter);\r\n\r\n if (parFix === 0)\r\n l1Derv.negate();\r\n\r\n //平面矩阵\r\n let xVec = new Vector3();\r\n let yVec = new Vector3();\r\n let zVec = vec.cross(l1Derv).normalize();\r\n let l1Normal = l1.Normal;\r\n if (isParallelTo(zVec, l1Normal)) zVec = l1Normal;\r\n\r\n Orbit.ComputUpDirection(zVec, yVec, xVec);\r\n let mtx = new Matrix4().makeBasis(xVec, yVec, zVec);\r\n let mtxInv = new Matrix4().getInverse(mtx);\r\n //变换\r\n sv.applyMatrix4(mtxInv);\r\n ev.applyMatrix4(mtxInv);\r\n l1Derv.applyMatrix4(mtxInv);\r\n\r\n let sa = angle(sv);\r\n let ea = angle(ev);\r\n let clockwise = ev.cross(l1Derv).z > 0;\r\n let arc = new Arc(new Vector3(), radius, sa, ea, clockwise);\r\n arc.ApplyMatrix(mtx);\r\n arc.Center = arcCenter;\r\n\r\n return {\r\n cu1: lineClone1,\r\n cu1Extend,\r\n cu2: lineClone2,\r\n cu2Extend,\r\n arc,\r\n };\r\n }\r\n\r\n /**\r\n * 计算圆弧与圆弧没有交点的情况下倒角结果.\r\n * @param enRes1\r\n * @param enRes2\r\n * @returns arc and arc\r\n */\r\n private FilletArcAndArc(enRes1: PromptEntityResult, enRes2: PromptEntityResult): FilletRes\r\n {\r\n let a1 = enRes1.Entity as Arc;\r\n let a2 = enRes2.Entity as Arc;\r\n\r\n let arcO1 = a1.GetOffsetCurves(this.FilletRadius * (a1.IsClockWise ? -1 : 1))[0];\r\n let arcO2 = a2.GetOffsetCurves(this.FilletRadius * (a2.IsClockWise ? -1 : 1))[0];\r\n\r\n // arcO1.ColorIndex = 6;\r\n // arcO2.ColorIndex = 6;\r\n // JigUtils.Draw(arcO1);\r\n // JigUtils.Draw(arcO2);\r\n\r\n //求交\r\n let intPts = arcO1.IntersectWith(arcO2, IntersectOption.ExtendBoth);\r\n if (intPts.length === 0)\r\n return;//无交点无法倒角\r\n\r\n //两选择点的中点\r\n let clickMidp = midPoint(enRes1.Point, enRes2.Point);//用来选择合适的交点\r\n //选择合适的交点\r\n intPts.sort((p1, p2) =>\r\n {\r\n return p1.distanceToSquared(clickMidp) - p2.distanceToSquared(clickMidp);\r\n });\r\n\r\n //圆弧圆心\r\n let narcCenter = intPts[0];\r\n let narcP1 = a1.GetClosestPointTo(narcCenter, true);//两圆弧和相切弧的交点\r\n let narcP2 = a2.GetClosestPointTo(narcCenter, true);\r\n\r\n let tempCircle = new Circle(narcCenter, this.FilletRadius);\r\n tempCircle.OCSNoClone.copy(a1.OCSNoClone).setPosition(narcCenter);\r\n let closestPt = a1.GetClosestPointTo(a2.Center, true);//两曲线距离对方圆心最近的点\r\n let narcMP = tempCircle.GetClosestPointTo(closestPt, false);//相切圆距离closestPt最近的点\r\n\r\n //构造圆弧\r\n let narc = new Arc().ApplyMatrix(a1.OCS).FromThreePoint(narcP1, narcMP, narcP2);\r\n\r\n let a1Clone = a1.Clone();\r\n let a2Clone = a2.Clone();\r\n\r\n let a1Param = a1.GetParamAtPoint(narcP1);\r\n let a2Param = a2.GetParamAtPoint(narcP2);\r\n\r\n let a1Derv = a1.GetFistDeriv(a1Param).normalize();\r\n let a2Derv = a2.GetFistDeriv(a2Param).normalize();\r\n\r\n let narcDerv0 = narc.GetFistDeriv(0).normalize();\r\n let narcDerv1 = narc.GetFistDeriv(1).normalize();\r\n\r\n //裁剪圆弧\r\n if (equalv3(a1Derv, narcDerv0))\r\n a1Clone.EndPoint = narcP1;\r\n else\r\n a1Clone.StartPoint = narcP1;\r\n\r\n if (equalv3(a2Derv, narcDerv1))\r\n a2Clone.StartPoint = narcP2;\r\n else\r\n a2Clone.EndPoint = narcP2;\r\n\r\n return {\r\n cu1: a1Clone,\r\n cu2: a2Clone,\r\n arc: narc\r\n };\r\n }\r\n\r\n /**\r\n * 计算直线与圆弧没有交点(或相切)的情况下倒角结果\r\n * @param enRes1\r\n * @param enRes2\r\n * @returns line and cir\r\n */\r\n private FilletLineAndArc(enMap: (PromptEntityResult[])[], enRes1: PromptEntityResult): FilletRes | undefined\r\n {\r\n let lineRes = enMap[0][0];\r\n let arcRes = enMap[1][0];\r\n\r\n let line = lineRes.Entity as Line;\r\n let arc = arcRes.Entity as Arc;\r\n\r\n let dir = GetPointAtCurveDir(line, arc.Center);\r\n\r\n let lineO = line.GetOffsetCurves(this.FilletRadius * dir)[0];\r\n let arcO = arc.GetOffsetCurves(this.FilletRadius * (arc.IsClockWise ? -1 : 1))[0];// tip:面积逆时针为正, 顺时针为负.\r\n\r\n // lineO.ColorIndex = 6;\r\n // arcO.ColorIndex = 6;\r\n // JigUtils.Draw(lineO);\r\n // JigUtils.Draw(arcO);\r\n\r\n //求交\r\n let intPts = lineO.IntersectWith(arcO, IntersectOption.ExtendBoth);\r\n if (intPts.length === 0)\r\n return;//无交点无法倒角\r\n\r\n //两选择点的中点\r\n let clickMidp = midPoint(lineRes.Point, arcRes.Point);\r\n //选择适合的交点。\r\n intPts.sort((p1, p2) =>\r\n {\r\n return p1.distanceToSquared(clickMidp) - p2.distanceToSquared(clickMidp);\r\n });\r\n //圆弧圆心\r\n let arcCenter = intPts[0];\r\n\r\n let arcP1 = line.GetClosestPointTo(arcCenter, true);//直线与相切圆的交点\r\n let arcP2 = arc.GetClosestPointTo(arcCenter, true);//圆弧与相切圆的交点\r\n\r\n let tempCircle = new Circle(arcCenter, this.FilletRadius);\r\n tempCircle.OCSNoClone.copy(arc.OCSNoClone).setPosition(arcCenter);\r\n let { closestPt, param } = line.GetClosestAtPoint(arc.Center, true);\r\n let arcMP = tempCircle.GetClosestPointTo(closestPt, false);\r\n\r\n //构造圆弧\r\n let narc = new Arc().ApplyMatrix(arc.OCS).FromThreePoint(arcP1, arcMP, arcP2);\r\n\r\n //裁剪线\r\n let lineClone = line.Clone();\r\n let arcClone = arc.Clone();\r\n\r\n let lineExtend: ExtendType;\r\n let p1Param = line.GetParamAtPoint(arcP1);\r\n if (p1Param > param)\r\n {\r\n lineClone.StartPoint = arcP1;\r\n lineExtend = ExtendType.Start;\r\n }\r\n else\r\n {\r\n lineClone.EndPoint = arcP1;\r\n lineExtend = ExtendType.End;\r\n }\r\n\r\n //裁剪圆弧\r\n let arcParam = arc.GetParamAtPoint(arcP2);\r\n let arcDerv = arc.GetFistDeriv(arcParam).normalize();\r\n let narcDerv = narc.GetFistDeriv(1).normalize();\r\n\r\n let arcExtend: ExtendType;\r\n if (equalv3(arcDerv, narcDerv))\r\n {\r\n arcClone.StartPoint = arcP2;\r\n arcExtend = ExtendType.Start;\r\n }\r\n else\r\n {\r\n arcClone.EndPoint = arcP2;\r\n arcExtend = ExtendType.End;\r\n }\r\n\r\n //先选直线为真\r\n if (enRes1.Entity === line)\r\n return {\r\n cu1: lineClone,\r\n cu1Extend: lineExtend,\r\n cu2: arcClone,\r\n cu2Extend: arcExtend,\r\n arc: narc\r\n };\r\n else\r\n return {\r\n cu1: arcClone,\r\n cu1Extend: arcExtend,\r\n cu2: lineClone,\r\n cu2Extend: lineExtend,\r\n arc: narc.Reverse()//#I3BWIA 避免起点和终点方向相反导致的多段线连接错误\r\n };\r\n }\r\n\r\n //获得两曲线的交点,并且排序交点.\r\n private GetIntersectAndSort(enRes: PromptEntityResult, enRes2: PromptEntityResult, enType: number, enMap: PromptEntityResult[][])\r\n {\r\n let interPts = enRes.Entity.IntersectWith(enRes2.Entity, IntersectOption.ExtendBoth);\r\n if (interPts.length > 1)\r\n {\r\n let baseP: Vector3;\r\n if (enType & 1) //如果有直线,那么用直线\r\n baseP = enMap[0][0].Point;\r\n else if (enType === 2) //如果都是圆弧,那么取中点\r\n baseP = midPoint(enMap[1][0].Point, enMap[1][1].Point);\r\n interPts.sort((p1, p2) => p1.distanceToSquared(baseP) - p2.distanceToSquared(baseP));\r\n }\r\n return interPts;\r\n }\r\n\r\n /**\r\n * 对图元列表进行按位编码,类型映射如下:\r\n * # 1:line 2:arc 4:polyline\r\n * @param enRes\r\n * @param enRes2\r\n * @returns\r\n */\r\n private EnCode(enRes: PromptEntityResult, enRes2: PromptEntityResult)\r\n {\r\n let enMap: (PromptEntityResult[])[] = [[], [], [], [], []];\r\n let enType = 0;\r\n enType |= Encode(enRes, enMap);\r\n enType |= Encode(enRes2, enMap);\r\n return { enType, enMap };\r\n }\r\n\r\n //计算曲线在相交处的切线,取真实的切线\r\n private ComputerDerv(cuRes: CurveExtend, dervSum: Vector3)\r\n {\r\n let derv: Vector3;\r\n let cu = cuRes.Curve;\r\n if (cuRes.ExtType === ExtendType.Start)\r\n {\r\n derv = cu.GetFistDeriv(0).normalize();\r\n dervSum.add(derv);\r\n }\r\n else\r\n {\r\n derv = cu.GetFistDeriv(cu.EndParam).normalize();\r\n dervSum.add(derv.clone().negate());\r\n }\r\n return derv;\r\n }\r\n\r\n // 计算曲线在相交处的切线,取起点到终点的切线.(当曲线相切时调用此方法.)\r\n private ComputerDerv2(cuRes: CurveExtend, dervSum: Vector3)\r\n {\r\n let cu = cuRes.Curve;\r\n let derv = cu.EndPoint.sub(cu.StartPoint);\r\n if (cuRes.ExtType === ExtendType.Start)\r\n dervSum.add(derv);\r\n else\r\n dervSum.add(derv.clone().negate());\r\n return derv;\r\n }\r\n\r\n // 延伸或者裁剪到指定的圆弧的点.\r\n private ExtendPt(cu: CurveExtend, newP: Vector3)\r\n {\r\n if (cu.ExtType === ExtendType.Start)\r\n cu.Curve.StartPoint = newP;\r\n else\r\n cu.Curve.EndPoint = newP;\r\n }\r\n\r\n /**\r\n * 切割或者延伸曲线,尖角化\r\n *\r\n * @param cu 处理的曲线\r\n * @param interPt 原先的相交点\r\n * @param pickPoint 鼠标点击点\r\n * @returns 返回新的曲线\r\n */\r\n private SplitCurve(enRes: PromptEntityResult, interPt: Vector3, interPts: Vector3[]): CurveExtend\r\n {\r\n let cu = enRes.Entity as Curve;\r\n let pickPoint = enRes.Point;\r\n\r\n let cp = cu.GetClosestPointTo(pickPoint, false);\r\n let cus = cu.GetSplitCurvesByPts([interPt]);\r\n if (cus.length === 0)\r\n cus.push(cu.Clone() as Curve);\r\n else if (cus.length === 2)\r\n cus.sort((c1: Curve, c2: Curve) =>\r\n {\r\n return c1.GetClosestPointTo(cp, false).distanceTo(cp)\r\n < c2.GetClosestPointTo(cp, false).distanceTo(cp) ? -1 : 1;\r\n });\r\n\r\n let exType = undefined;\r\n\r\n let newCu = cus[0];\r\n if (newCu instanceof Line || newCu.constructor.name === \"RoomWallLine\")\r\n newCu.Extend(newCu.GetParamAtPoint(interPt));//延伸到需要的长度\r\n else if (newCu instanceof Arc || newCu.constructor.name === \"RoomWallArc\")\r\n {\r\n let arc = newCu as Arc;\r\n if (cus.length === 1)\r\n if (!cu.PtOnCurve(interPt))\r\n {\r\n if (cu.PtOnCurve(interPts[1]))\r\n {\r\n //交点参数\r\n let iparam = arc.GetParamAtPoint(interPts[1]);\r\n let pickParam = arc.GetParamAtAngle(arc.GetAngleAtPoint(pickPoint));\r\n\r\n if (pickParam > iparam)\r\n {\r\n arc.EndAngle = arc.GetAngleAtPoint(interPt);\r\n exType = ExtendType.End;\r\n }\r\n else\r\n {\r\n arc.StartAngle = arc.GetAngleAtPoint(interPt);\r\n exType = ExtendType.Start;\r\n }\r\n }\r\n else\r\n {\r\n //终点,起点\r\n interPts = interPts.sort((p1, p2) =>\r\n {\r\n return arc.ComputeAnlge(arc.GetAngleAtPoint(p1)) - arc.ComputeAnlge(arc.GetAngleAtPoint(p2));\r\n });\r\n if (interPt === interPts[0])\r\n {\r\n arc.EndAngle = arc.GetAngleAtPoint(interPt);\r\n exType = ExtendType.End;\r\n }\r\n else\r\n {\r\n arc.StartAngle = arc.GetAngleAtPoint(interPt);\r\n exType = ExtendType.Start;\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (exType === undefined)\r\n {\r\n //使用equalv3时由于精度误差导致的判断错误\r\n if (interPt.manhattanDistanceTo(newCu.StartPoint) < interPt.manhattanDistanceTo(newCu.EndPoint))\r\n exType = ExtendType.Start;\r\n else\r\n exType = ExtendType.End;\r\n }\r\n return { Curve: newCu, ExtType: exType };\r\n }\r\n\r\n}\r\n","import { FilletUtils } from \"../../../Add-on/FilletUtils\";\r\nimport { UpdateDraw } from \"../../../Common/Status\";\r\nimport { FixIndex } from \"../../../Common/Utils\";\r\nimport { PromptEntityResult } from \"../../../Editor/PromptResult\";\r\nimport { Factory } from \"../../CADFactory\";\r\nimport { CADFiler } from \"../../CADFiler\";\r\nimport { Board, I2DModeling } from \"../../Entity/Board\";\r\nimport { Circle } from \"../../Entity/Circle\";\r\nimport { ExtrudeContourCurve, ExtrudeSolid } from \"../../Entity/Extrude\";\r\nimport { Polyline } from \"../../Entity/Polyline\";\r\nimport { ObjectId } from \"../../ObjectId\";\r\nimport { TemplateAction } from \"./TemplateAction\";\r\n\r\nexport interface IGrooveFillet\r\n{\r\n Index: number;\r\n ArcParams: number[];\r\n}\r\n\r\ninterface IFilletcActionData\r\n{\r\n Entity: ObjectId;\r\n ArcParams: number[];\r\n Grooves?: IGrooveFillet[];\r\n Path2D?: IGrooveFillet[];\r\n}\r\n\r\n@Factory\r\nexport class TemplateFilletAction extends TemplateAction\r\n{\r\n\r\n FilletDatas: IFilletcActionData[] = [];\r\n\r\n constructor()\r\n {\r\n super();\r\n }\r\n\r\n protected _Update(paramDiff: number, newValue: number)\r\n {\r\n for (let d of this.FilletDatas)\r\n {\r\n if (d.Entity?.IsErase !== false)\r\n continue;\r\n\r\n let br = d.Entity.Object as Board;\r\n let update_bak = br.AutoUpdate;\r\n br.AutoUpdate = false;\r\n if (d.ArcParams.length > 0)\r\n this.Fillet(br, newValue, d);\r\n\r\n if (br.Grooves.length > 0 && d.Grooves?.length)\r\n {\r\n for (let data of d.Grooves)\r\n {\r\n const groove = br.Grooves[data.Index];\r\n if (groove)\r\n this.Fillet(groove, newValue, data);\r\n }\r\n }\r\n\r\n const path2d = br.Modeling2D;\r\n if (path2d.length > 0 && d.Path2D?.length)\r\n {\r\n for (let data of d.Path2D)\r\n {\r\n let vm = path2d[data.Index];\r\n if (vm)\r\n {\r\n this.Fillet(vm, newValue, data);\r\n }\r\n }\r\n br._2D3DPathObject = null;\r\n }\r\n\r\n br.AutoUpdate = update_bak;\r\n br.Update(UpdateDraw.Geometry);\r\n }\r\n }\r\n private Fillet(br: ExtrudeSolid | I2DModeling, newValue: number, d: { ArcParams: number[]; })\r\n {\r\n let cu = br instanceof ExtrudeSolid ? br.ContourCurve : br.path;\r\n if (cu instanceof Circle)\r\n return;\r\n\r\n let fillet = new FilletUtils();\r\n fillet.FilletRadius = Math.max(newValue, 0.1);\r\n\r\n let cuOld = cu as Polyline;\r\n for (let arcParam of d.ArcParams)\r\n {\r\n let param1 = FixIndex(arcParam - 1, cu.EndParam);\r\n let param2 = FixIndex(arcParam + 1, cu.EndParam);\r\n let p1 = cu.GetPointAtParam(param1);\r\n let p2 = cu.GetPointAtParam(param2);\r\n\r\n let res1 = new PromptEntityResult(cu, p1);\r\n let res2 = new PromptEntityResult(cu, p2);\r\n\r\n let fres = fillet.FilletPolyLineSelf(res1, res2);\r\n if (fres)\r\n cu = fres.cu1 as ExtrudeContourCurve;\r\n }\r\n\r\n if (br instanceof ExtrudeSolid)\r\n {\r\n if (cu !== cuOld)\r\n br.ContourCurve = cu;\r\n }\r\n else\r\n {\r\n if (cu !== cuOld)\r\n br.path = cu as Polyline;\r\n }\r\n }\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 super.ReadFile(file);\r\n this.FilletDatas.length = 0;\r\n if (ver === 1)\r\n {\r\n let id = file.ReadObjectId();\r\n let param1 = file.Read();\r\n let param2 = file.Read();\r\n let arcParam: number = param2 !== 0 ? param2 - 1 : param1 + 1;\r\n this.FilletDatas.push({ Entity: id, ArcParams: [arcParam] });\r\n }\r\n else\r\n {\r\n let count = file.Read();\r\n for (let i = 0; i < count; i++)\r\n {\r\n let id = file.ReadObjectId();\r\n let params: number[] = [];\r\n let parCount = file.Read();\r\n for (let i = 0; i < parCount; i++)\r\n params.push(file.Read());\r\n\r\n const groove = [];\r\n const path2d = [];\r\n if (ver >= 3)\r\n {\r\n const grooveCount = file.Read();\r\n for (let i = 0; i < grooveCount; i++)\r\n {\r\n let data: IGrooveFillet = {\r\n Index: undefined,\r\n ArcParams: [],\r\n };\r\n data.Index = file.Read();\r\n let parCount = file.Read();\r\n for (let j = 0; j < parCount; j++)\r\n data.ArcParams.push(file.Read());\r\n groove.push(data);\r\n }\r\n\r\n const path2DCount = file.Read();\r\n for (let i = 0; i < path2DCount; i++)\r\n {\r\n let data: IGrooveFillet = {\r\n Index: undefined,\r\n ArcParams: [],\r\n };\r\n data.Index = file.Read();\r\n let parCount = file.Read();\r\n for (let j = 0; j < parCount; j++)\r\n data.ArcParams.push(file.Read());\r\n path2d.push(data);\r\n }\r\n }\r\n\r\n if (id)\r\n this.FilletDatas.push({ Entity: id, ArcParams: params, Grooves: groove, Path2D: path2d });\r\n }\r\n }\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(3);\r\n super.WriteFile(file);\r\n file.Write(this.FilletDatas.length);\r\n for (let d of this.FilletDatas)\r\n {\r\n file.WriteObjectId(d.Entity);\r\n file.Write(d.ArcParams.length);\r\n for (let param of d.ArcParams)\r\n file.Write(param);\r\n\r\n file.Write(d.Grooves ? d.Grooves.length : 0);\r\n for (let data of (d.Grooves ?? []))\r\n {\r\n file.Write(data.Index);\r\n file.Write(data.ArcParams.length);\r\n for (let par of data.ArcParams)\r\n file.Write(par);\r\n }\r\n file.Write(d.Path2D ? d.Path2D.length : 0);\r\n for (let data of (d.Path2D ?? []))\r\n {\r\n file.Write(data.Index);\r\n file.Write(data.ArcParams.length);\r\n for (let par of data.ArcParams)\r\n file.Write(par);\r\n }\r\n }\r\n }\r\n}\r\n","import { EBoardKeyList } from '../../Common/BoardKeyList';\r\nimport { Board } from '../../DatabaseServices/Entity/Board';\r\nimport { PhysicalMaterialRecord } from '../../DatabaseServices/PhysicalMaterialRecord';\r\n\r\n\r\nexport function ApplyGoodInfo(en: Board, material: PhysicalMaterialRecord)\r\n{\r\n en.BoardProcessOption[EBoardKeyList.BrMat] = material.GoodsInfo.name;\r\n en.BoardProcessOption[EBoardKeyList.Color] = material.GoodsInfo.color;\r\n en.BoardProcessOption[EBoardKeyList.Mat] = material.GoodsInfo.material;\r\n}\r\n","import { ApplyGoodInfo } from \"../../../UI/Components/ApplyGoodInfo\";\r\nimport { Factory } from \"../../CADFactory\";\r\nimport { CADFiler } from \"../../CADFiler\";\r\nimport { Board } from \"../../Entity/Board\";\r\nimport { Entity } from \"../../Entity/Entity\";\r\nimport { HardwareCompositeEntity } from \"../../Hardware/HardwareCompositeEntity\";\r\nimport { ObjectId } from \"../../ObjectId\";\r\nimport { TemplateAction } from \"./TemplateAction\";\r\n\r\n@Factory\r\nexport class TemplateMaterialAction extends TemplateAction\r\n{\r\n\r\n constructor(\r\n public Entitys: ObjectId[] = [],\r\n public CompositeEntitys: [ObjectId, number[]][] = [],\r\n public ApplyGoodInfo = true,//应用板材信息\r\n )\r\n {\r\n super();\r\n }\r\n\r\n protected override _Update(paramDiff: number)\r\n {\r\n if (!this.parent.MaterialValue) return;\r\n\r\n for (let id of this.Entitys)\r\n {\r\n if (!(id?.Object) || id.IsErase) continue;\r\n\r\n let en = id.Object;\r\n if (this.ApplyGoodInfo && en instanceof Board)\r\n ApplyGoodInfo(en, this.parent.MaterialValue);\r\n\r\n en.Material = this.parent.MaterialValue.Id;\r\n }\r\n\r\n for (let [id, indexs] of this.CompositeEntitys)\r\n {\r\n if (!(id?.Object) || id.IsErase) continue;\r\n\r\n let en = id.Object as HardwareCompositeEntity;\r\n\r\n let allEntitys: Entity[] = [];\r\n const GetAllEntitys = (hard: HardwareCompositeEntity) =>\r\n {\r\n for (let e of hard.Entitys)\r\n {\r\n if (e instanceof HardwareCompositeEntity)\r\n GetAllEntitys(e);\r\n else\r\n allEntitys.push(e);\r\n }\r\n };\r\n\r\n GetAllEntitys(en);\r\n\r\n for (let index of indexs)\r\n {\r\n let subE = allEntitys[index];\r\n if (!subE) continue;\r\n\r\n if (this.ApplyGoodInfo && subE instanceof Board)\r\n ApplyGoodInfo(subE, this.parent.MaterialValue);\r\n\r\n subE.Material = this.parent.MaterialValue.Id;\r\n }\r\n }\r\n }\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 super.ReadFile(file);\r\n this.ApplyGoodInfo = file.Read() === 1;\r\n this.Entitys.length = 0;\r\n let count = file.Read();\r\n for (let i = 0; i < count; i++)\r\n {\r\n let id = file.ReadObjectId() as ObjectId;\r\n if (id) this.Entitys.push(id);\r\n }\r\n\r\n if (ver > 1)\r\n {\r\n count = file.Read();\r\n this.CompositeEntitys.length = 0;\r\n for (let i = 0; i < count; i++)\r\n {\r\n let id = file.ReadObjectId() as ObjectId;\r\n let indexs = file.Read();\r\n this.CompositeEntitys.push([id, indexs]);\r\n }\r\n }\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(2);\r\n super.WriteFile(file);\r\n file.Write(this.ApplyGoodInfo ? 1 : 0);\r\n file.Write(this.Entitys.length);\r\n for (let ent of this.Entitys)\r\n file.WriteObjectId(ent);\r\n\r\n file.Write(this.CompositeEntitys.length);\r\n for (let [id, indexs] of this.CompositeEntitys)\r\n {\r\n file.WriteObjectId(id);\r\n file.Write(indexs.concat());\r\n }\r\n }\r\n}\r\n","\r\n/**\r\n * 模版参数类型\r\n */\r\nexport enum TemplateParamType\r\n{\r\n String = 0,\r\n Float = 1,\r\n Int = 2,\r\n Enum = 3,\r\n Material = 4,\r\n}\r\n","import { eval2 } from \"../../../Common/eval\";\r\nimport { equaln } from \"../../../Geometry/GeUtils\";\r\nimport { AutoRecord, ISPROXYKEY } from \"../../AutoRecord\";\r\nimport { Factory } from \"../../CADFactory\";\r\nimport { CADFiler } from \"../../CADFiler\";\r\nimport { PhysicalMaterialRecord } from \"../../PhysicalMaterialRecord\";\r\nimport { TemplateAction } from \"../Action/TemplateAction\";\r\nimport { TemplateFilletAction } from \"../Action/TemplateFilletAction\";\r\nimport { TemplateMaterialAction } from \"../Action/TemplateMaterialAction\";\r\nimport { TemplateRecord } from \"../TemplateRecord\";\r\nimport { TemplateParamType } from \"./TemplateParamType\";\r\n\r\n/**\r\n * 模版参数\r\n */\r\n@Factory\r\nexport class TemplateParam\r\n{\r\n /**\r\n * 变量名称\r\n * 命名规范(同js) 并且 禁止前缀`_`,`$`.\r\n */\r\n @AutoRecord name: string;\r\n /** 表达式 使用js引起求值(暂时) */\r\n @AutoRecord expr: string | number = \"\";\r\n /**\r\n * 设置参数的值,通常在模版设计中可以这么干\r\n * 如果需要更新参数的动作,那么应该调用 UpdateParam\r\n */\r\n @AutoRecord value: string | number;\r\n @AutoRecord default: string | number;\r\n @AutoRecord description: string;\r\n @AutoRecord type: TemplateParamType = TemplateParamType.Float;\r\n @AutoRecord min: number;\r\n @AutoRecord max: number;\r\n //可选值\r\n @AutoRecord option: any[];\r\n @AutoRecord actions: TemplateAction[];\r\n @AutoRecord parent: TemplateRecord;\r\n @AutoRecord isLock = false;\r\n\r\n //当类型为Material时,从酷家乐导入后,将载入材质赋值在这里\r\n MaterialValue: PhysicalMaterialRecord;\r\n\r\n constructor()\r\n {\r\n //监听\r\n this.actions = 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 if (value instanceof TemplateAction)\r\n value.parent = this;\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 else\r\n return Reflect.get(target, key, receiver);\r\n }\r\n });\r\n }\r\n WriteAllObjectRecord()\r\n {\r\n if (this.parent)\r\n this.parent.WriteAllObjectRecord();\r\n }\r\n\r\n /**\r\n * private:仅供内部调用.\r\n * 更新参数值,并且触发动作.\r\n */\r\n UpdateParam(value: string | number)\r\n {\r\n switch (this.type)\r\n {\r\n case TemplateParamType.String:\r\n break;\r\n case TemplateParamType.Float:\r\n let oldV = this.value as number;\r\n let newV = value as number;\r\n if (!equaln(oldV, newV))\r\n {\r\n this.WriteAllObjectRecord();\r\n this.value = newV;\r\n\r\n let diff = newV - oldV;\r\n for (let a of this.actions)\r\n a.Update(diff, newV);\r\n }\r\n else\r\n {\r\n for (let a of this.actions)\r\n {\r\n if (a instanceof TemplateFilletAction)\r\n a.Update(0, newV);\r\n }\r\n }\r\n break;\r\n case TemplateParamType.Int:\r\n break;\r\n case TemplateParamType.Enum:\r\n break;\r\n case TemplateParamType.Material:\r\n {\r\n if (this.MaterialValue)\r\n {\r\n for (let a of this.actions)\r\n a.Update(0, 0);\r\n }\r\n this.MaterialValue = undefined;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * 计算表达式的值并更新\r\n * @param vardefines 变量定义列表\r\n * @param paramMap 所有的参数列表.(可能我们需要依赖更新它)\r\n */\r\n EvalUpdate(vardefines: Object, paramMap: Map, evaled: Set, update = true): number\r\n {\r\n if (this.type === TemplateParamType.Material)\r\n {\r\n if (update && this.MaterialValue)\r\n {\r\n for (let a of this.actions)\r\n {\r\n if (a instanceof TemplateMaterialAction)\r\n a.Update(0, this.value);\r\n }\r\n this.MaterialValue = undefined;\r\n }\r\n return 0;\r\n }\r\n\r\n if (this.expr === \"\")\r\n {\r\n if (update)\r\n {\r\n for (let a of this.actions)\r\n {\r\n if (a instanceof TemplateFilletAction)\r\n a.Update(0, this.value);\r\n }\r\n }\r\n return this.value as number;\r\n }\r\n if (evaled.has(this)) return this.value as number;\r\n\r\n if (update)\r\n evaled.add(this);\r\n\r\n let value = parseFloat(this.expr as string);\r\n if (isNaN(this.expr as number))\r\n {\r\n //依赖收集 提前更新\r\n let keywords = (this.expr).split(/[\\s(){}=+-/*/,%;]/).filter(s => s.length > 0);\r\n for (let key of keywords)\r\n {\r\n if (key !== this.name && paramMap.has(key))\r\n vardefines[key] = paramMap.get(key).EvalUpdate(vardefines, paramMap, evaled, update);\r\n }\r\n\r\n try\r\n {\r\n value = eval2(this.expr as string, vardefines);\r\n }\r\n catch (error)\r\n {\r\n console.log(\"更新失败:\", error);\r\n return this.value as number;\r\n }\r\n }\r\n else if (update)\r\n this.expr = \"\";\r\n\r\n vardefines[this.name] = value;\r\n\r\n if (update)\r\n this.UpdateParam(value);\r\n\r\n return value;\r\n }\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 this.name = file.Read();\r\n this.expr = file.Read();\r\n this.value = file.Read();\r\n this.default = file.Read();\r\n this.description = file.Read();\r\n this.type = file.Read();\r\n this.min = file.Read();\r\n this.max = file.Read();\r\n this.option = file.Read();\r\n let count = file.Read();\r\n this.actions.length = 0;\r\n for (let i = 0; i < count; i++)\r\n this.actions.push(file.ReadObject());\r\n\r\n if (ver > 1)\r\n this.isLock = file.Read();\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(2);\r\n file.Write(this.name);\r\n file.Write(this.expr);\r\n file.Write(this.value);\r\n file.Write(this.default);\r\n file.Write(this.description);\r\n file.Write(this.type);\r\n file.Write(this.min);\r\n file.Write(this.max);\r\n file.Write(this.option);\r\n file.Write(this.actions.length);\r\n for (let action of this.actions)\r\n file.WriteObject(action);\r\n\r\n file.Write(this.isLock);\r\n }\r\n}\r\n","import { Ray, Vector3 } from \"three\";\r\nimport { arrayLast } from \"../../Common/ArrayExt\";\r\nimport { ConverBoardTypeToSpaceType } from \"../../DatabaseServices/Entity/Board\";\r\nimport { PromptDistendResult, PromptStatus } from \"../../Editor/PromptResult\";\r\nimport { BoardType } from \"../../UI/Store/BoardInterface\";\r\nimport { Box3Ext, SplitType } from \"../Box\";\r\nimport { ISpaceParse } from \"./ISpaceParse\";\r\n\r\n/**\r\n * 夹层空间分析\r\n */\r\nexport class ClampSpaceParse extends ISpaceParse\r\n{\r\n async Parse()\r\n {\r\n if (this.Boards.length === 1)\r\n {\r\n await this.ParseSignalBoard();\r\n return;\r\n }\r\n\r\n //夹层空间\r\n let clampBoxs: Box3Ext[] = [];\r\n //单层空间(用于切割)\r\n let spliteBoxs = new Map();\r\n for (let [boardType, boards] of this.BoardMap)\r\n {\r\n let splitType: SplitType = ConverBoardTypeToSpaceType(boardType);\r\n let boardBoxCol = this.ParseBoardBox(boards, splitType);\r\n\r\n //#IWFYY\r\n if (boardType === BoardType.Behind && this.BoardMap.size > 1 && boardBoxCol.length > 1)\r\n {\r\n let clampBox = boardBoxCol[0].clampSpace(boardBoxCol[1], splitType);\r\n let size = clampBox.getSize(new Vector3());\r\n if (size.y > 2440)\r\n boardBoxCol = [arrayLast(boardBoxCol)];\r\n }\r\n\r\n if (boardBoxCol.length > 1)\r\n {\r\n let clampBox = boardBoxCol[0].clampSpace(arrayLast(boardBoxCol), splitType);\r\n if (clampBox.isSolid())\r\n clampBoxs.push(clampBox);\r\n }\r\n else if (boardBoxCol.length === 1)\r\n {\r\n spliteBoxs.set(splitType, boardBoxCol[0]);\r\n }\r\n }\r\n\r\n //归并盒子\r\n let allSpaceBox: Box3Ext;\r\n if (clampBoxs.length === 0)//如果不存在盒子,拿所有的盒子当空间\r\n {\r\n allSpaceBox = new Box3Ext();\r\n spliteBoxs.forEach((box) => { allSpaceBox.union(box); });\r\n }\r\n else//夹层空间合并\r\n {\r\n allSpaceBox = clampBoxs[0];\r\n for (let i = 1, len = clampBoxs.length; i < len; i++)\r\n allSpaceBox.intersect(clampBoxs[i]);\r\n }\r\n\r\n //切割并选择合适的空间\r\n await this.SpliteBoxsAndSelect(allSpaceBox, spliteBoxs);\r\n if (this.SpaceBox && this.SpaceBox.isSolid())\r\n {\r\n //空间延伸到背板\r\n let behindBox = spliteBoxs.get(SplitType.Y);\r\n if (behindBox && behindBox.min.y > this.SpaceBox.min.y)\r\n this.SpaceBox.max.setY(behindBox.min.y);\r\n\r\n this.ParseOK = true;\r\n }\r\n }\r\n\r\n /**\r\n * 单板延伸空间的时候的延伸距离\r\n */\r\n get SignalDist()\r\n {\r\n return this._signalDist;\r\n }\r\n protected _signalDist: number;\r\n\r\n async ParseSignalBoard()\r\n {\r\n let res = await this.GetSignalDist();\r\n if (res.Status === PromptStatus.OK && res.Distance > 0)\r\n {\r\n let dist = res.Distance;\r\n this._signalDist = dist;\r\n\r\n let br = this.Boards[0];\r\n let box = br.GetBoundingBoxInMtx(this.SpaceOCSInv);\r\n\r\n let type = this.GetBoardInSpaceType(br);\r\n if (type === undefined)//暂时不支持斜空间\r\n {\r\n //暂时不支持\r\n this.ParseOK = false;\r\n return;\r\n }\r\n\r\n let splitType: SplitType = ConverBoardTypeToSpaceType(type);\r\n\r\n let p1 = box.min.clone().setComponent(splitType, box.min.getComponent(splitType) - dist);\r\n let p2 = box.max.clone().setComponent(splitType, box.min.getComponent(splitType));\r\n\r\n let p3 = box.min.clone().setComponent(splitType, box.max.getComponent(splitType));\r\n let p4 = box.max.clone().setComponent(splitType, box.max.getComponent(splitType) + dist);\r\n\r\n let boxs = [new Box3Ext().setFromPoints([p1, p2]), new Box3Ext().setFromPoints([p3, p4])];\r\n\r\n this.SpaceBox = await this.WrapSelectBox(boxs, ConverBoardTypeToSpaceType(br.BoardType));\r\n\r\n if (this.SpaceBox)\r\n this.ParseOK = true;\r\n }\r\n else\r\n this.ParseOK = false;\r\n }\r\n\r\n //virtual (请重载) 指定用户选择单块板的延伸空间\r\n async GetSignalDist(): Promise\r\n {\r\n let res = new PromptDistendResult();\r\n res.Distance = 300;\r\n res.Status = PromptStatus.OK;\r\n return res;\r\n }\r\n\r\n SetRay(ray: Ray)\r\n {\r\n }\r\n\r\n SelectBoxRecord = new Map();\r\n async WrapSelectBox(splitBoxs: Box3Ext[], splitType: SplitType): Promise\r\n {\r\n let box = await this.SelectBox(splitBoxs, splitType);\r\n this.SelectBoxRecord.set(splitType, splitBoxs.indexOf(box));\r\n return box;\r\n }\r\n\r\n /**\r\n * virtual (请重载) 当盒子空间被切割时,选择合适的空间\r\n * @param splitBoxs 切割后的盒子(2个)\r\n * @param splitType 切割类型\r\n * @returns box 盒子\r\n */\r\n async SelectBox(splitBoxs: Box3Ext[], splitType: SplitType): Promise\r\n {\r\n return splitBoxs[0];\r\n }\r\n\r\n /**\r\n *用单块板包围盒切割空间\r\n */\r\n private async SpliteBoxsAndSelect(orgBox: Box3Ext, spliteBoxes: Map)\r\n {\r\n this.SpaceBox = undefined;\r\n if (spliteBoxes.size === 0)\r\n {\r\n this.SpaceBox = orgBox;\r\n return;\r\n }\r\n\r\n for (let [splitType, spBox] of spliteBoxes)\r\n {\r\n let remBoxs: Box3Ext[] = orgBox.substract(spBox, splitType);\r\n if (remBoxs.length === 0)\r\n return undefined;\r\n else if (remBoxs.length === 1)\r\n {\r\n //#IZE2N\r\n if (splitType === SplitType.Y && remBoxs[0].min.y === orgBox.min.y)\r\n continue;\r\n orgBox = remBoxs[0];\r\n }\r\n else\r\n orgBox = await this.WrapSelectBox(remBoxs, splitType);\r\n\r\n if (!orgBox)\r\n return;\r\n\r\n //Left Or Right Board\r\n if (splitType === SplitType.X)\r\n {\r\n if (spBox.min.x < orgBox.min.x)\r\n this.LeftBoard = this.BoardMap.get(BoardType.Vertical)[0];\r\n else\r\n this.RightBoard = this.BoardMap.get(BoardType.Vertical)[0];\r\n }\r\n }\r\n this.SpaceBox = orgBox;\r\n }\r\n}\r\n","import { ClampSpaceParse } from \"./ClampSpaceParse\";\r\nimport { PromptDistendResult, PromptStatus } from \"../../Editor/PromptResult\";\r\nimport { Box3Ext, SplitType } from \"../Box\";\r\n\r\nexport class ClampSpaceParseFix extends ClampSpaceParse\r\n{\r\n set SignalDist(v: number)\r\n {\r\n this._signalDist = v;\r\n }\r\n get SignalDist()\r\n {\r\n return this._signalDist;\r\n }\r\n\r\n //virtual (请重载) 指定用户选择单块板的延伸空间\r\n async GetSignalDist(): Promise\r\n {\r\n let res = new PromptDistendResult();\r\n res.Distance = this._signalDist;\r\n res.Status = PromptStatus.OK;\r\n return res;\r\n }\r\n\r\n async SelectBox(splitBoxs: Box3Ext[], splitType: SplitType): Promise\r\n {\r\n let index = this.SelectBoxRecord.get(splitType);\r\n return splitBoxs[index];\r\n }\r\n}\r\n","import { Matrix4, Vector3 } from \"three\";\r\nimport { Factory } from \"../../CADFactory\";\r\nimport { CADFiler } from \"../../CADFiler\";\r\nimport { ISerialize } from \"../../ISerialize\";\r\nimport { ObjectId } from \"../../ObjectId\";\r\nimport { TemplateRecord } from \"../TemplateRecord\";\r\n\r\nexport interface PositioningParam\r\n{\r\n objects?: ObjectId[];\r\n index?: number;\r\n count?: number;\r\n}\r\n\r\n\r\n/**\r\n * 模版定位信息(基类)\r\n */\r\n@Factory\r\nexport abstract class Positioning implements ISerialize\r\n{\r\n SpaceCS: Matrix4;//空间坐标系\r\n SpaceSize: Vector3;//有可能不存在\r\n\r\n /**\r\n * 定位 (更新 SpaceCS SpaceBox SpaceSize)\r\n */\r\n async Positioning(param?: PositioningParam)\r\n {\r\n }\r\n\r\n //#region file\r\n parent: TemplateRecord;\r\n WriteAllObjectRecord()\r\n {\r\n if (this.parent)\r\n this.parent.WriteAllObjectRecord();\r\n }\r\n\r\n ReadFile(file: CADFiler): void\r\n {\r\n\r\n }\r\n\r\n WriteFile(file: CADFiler): void\r\n {\r\n }\r\n //#endregion\r\n}\r\n","import { arrayClone } from \"../../../Common/ArrayExt\";\r\nimport { ClampSpaceParse } from \"../../../Geometry/SpaceParse/ClampSpaceParse\";\r\nimport { ClampSpaceParseFix } from \"../../../Geometry/SpaceParse/ClampSpaceParseFix\";\r\nimport { AutoRecord } from \"../../AutoRecord\";\r\nimport { Factory } from \"../../CADFactory\";\r\nimport { CADFiler } from \"../../CADFiler\";\r\nimport { Board } from \"../../Entity/Board\";\r\nimport { ObjectId } from \"../../ObjectId\";\r\nimport { Positioning, PositioningParam } from \"./Positioning\";\r\n\r\n@Factory\r\nexport class PositioningClampSpace extends Positioning\r\n{\r\n @AutoRecord Objects: ObjectId[] = [];\r\n\r\n //按照 SplitType进行排序 0X 1Y 2Z\r\n @AutoRecord SelectBoxIndex: number[] = [0, 0, 0];//左右下\r\n @AutoRecord SignalDist = 100;//默认为100 防止空\r\n\r\n FromSpaceParse(parse: ClampSpaceParse)\r\n {\r\n this.SignalDist = parse.SignalDist || 100;\r\n this.Objects = parse.Boards.map(br => br.Id);\r\n for (let [splitType, index] of parse.SelectBoxRecord)\r\n this.SelectBoxIndex[splitType] = index;\r\n }\r\n\r\n _SpaceParse: ClampSpaceParseFix;\r\n /**\r\n * 定位\r\n */\r\n async Positioning(param?: PositioningParam)\r\n {\r\n let brs = this.Objects.filter(id => !id.IsErase).map(id => id.Object as Board);\r\n this._SpaceParse = new ClampSpaceParseFix(brs);\r\n for (let i = 0; i < 3; i++)\r\n this._SpaceParse.SelectBoxRecord.set(i, this.SelectBoxIndex[i]);\r\n\r\n this._SpaceParse.SignalDist = this.SignalDist;\r\n\r\n await this._SpaceParse.Parse();\r\n if (this._SpaceParse.ParseOK)\r\n {\r\n this.SpaceCS = this._SpaceParse.DrawCS;\r\n this.SpaceSize = this._SpaceParse.Size;\r\n }\r\n else\r\n {\r\n this.SpaceCS = undefined;\r\n this.SpaceSize = undefined;\r\n // Log(\"模块定位错误!\");\r\n }\r\n }\r\n\r\n\r\n //#region File\r\n ReadFile(file: CADFiler): void\r\n {\r\n let ver = file.Read();\r\n let count = file.Read() as number;\r\n this.Objects.length = 0;\r\n for (let i = 0; i < count; i++)\r\n {\r\n let id = file.ReadObjectId();\r\n if (id) this.Objects.push(id);\r\n }\r\n\r\n this.SelectBoxIndex = file.Read();\r\n this.SignalDist = file.Read();\r\n }\r\n\r\n WriteFile(file: CADFiler): void\r\n {\r\n file.Write(1);\r\n file.Write(this.Objects.length);\r\n for (let id of this.Objects)\r\n file.WriteObjectId(id);\r\n\r\n file.Write(arrayClone(this.SelectBoxIndex));\r\n file.Write(this.SignalDist);\r\n }\r\n //#endregion\r\n\r\n}\r\n","import { Positioning } from \"./Positioning\";\r\nimport { Factory } from \"../../CADFactory\";\r\n\r\n/**\r\n * 临时定位\r\n * 在首次绘制时使用2点3点空间时通常不能使用定位,使用临时定位设置给模块后,模块在第一次使用后清空定位.\r\n */\r\n@Factory\r\nexport class PositioningTemporary extends Positioning\r\n{\r\n\r\n}\r\n","\r\n/**\r\n * 模版类型\r\n */\r\nexport enum TemplateType\r\n{\r\n //普通模板\r\n Usual = 0,\r\n //酒格 使用程序\r\n Grid = 1,\r\n //阵列模版\r\n Array = 2,\r\n //没有实体的\r\n Clear = 4,\r\n //展开的\r\n Expanded = 8,\r\n //隐藏的\r\n Hidden = 16,\r\n HiddenChildren = 32,\r\n //标记\r\n Sign = 64,\r\n\r\n //以下未启用\r\n Door = 128,//门板\r\n Drawer = 256,//抽屉\r\n Handle = 512,//拉手\r\n Hinge = 1024,//铰链\r\n}\r\n\r\n//以下未启用\r\nenum TemplateType2\r\n{\r\n Usual = 0,\r\n Door = 1,//门板\r\n Drawer = 2,//抽屉\r\n Handle = 3,//拉手\r\n Hinge = 4,//铰链\r\n WineRack = 5,//酒格\r\n Grid = 6,//格子抽?\r\n}\r\n\r\nexport enum TemplateSplitType\r\n{\r\n None = -1,\r\n X = 0,\r\n Y = 1,\r\n Z = 2,\r\n}\r\n","import { Box3, MathUtils, Matrix4, Vector3 } from \"three\";\r\nimport { arrayRemoveOnce } from \"../../Common/ArrayExt\";\r\nimport { Log } from \"../../Common/Log\";\r\nimport { Intent, Toaster } from \"../../Common/Toaster\";\r\nimport { Box3Ext } from \"../../Geometry/Box\";\r\nimport { ISpaceParse } from \"../../Geometry/SpaceParse/ISpaceParse\";\r\nimport { AutoRecord } from \"../AutoRecord\";\r\nimport { Factory } from \"../CADFactory\";\r\nimport { CADFiler } from \"../CADFiler\";\r\nimport { Board } from \"../Entity/Board\";\r\nimport { Entity } from \"../Entity/Entity\";\r\nimport { ObjectId } from \"../ObjectId\";\r\nimport { SymbolTableRecord } from \"../SymbolTableRecord\";\r\nimport { TemplateParam } from \"./Param/TemplateParam\";\r\nimport { TemplateParamType } from \"./Param/TemplateParamType\";\r\nimport { Positioning } from \"./Positioning/Positioning\";\r\nimport { PositioningClampSpace } from \"./Positioning/PositioningClampSpace\";\r\nimport { PositioningTemporary } from \"./Positioning/PositioningTemporary\";\r\nimport { TemplateSplitType, TemplateType } from \"./TemplateType\";\r\n\r\nconst TemplateDefaultParams = [\"L\", \"W\", \"H\", \"PX\", \"PY\", \"PZ\", \"RX\", \"RY\", \"RZ\", \"BH\"];\r\nexport const TempateDefaultParamCount = TemplateDefaultParams.length;\r\n\r\n/**\r\n * ### 模板记录\r\n * 模版与实体总是互相关联的,所以添加实体进入模版的时候,应该保证这个记录已经加入到数据库\r\n *\r\n * 保留参数名称列表: L W H RX RY RZ X Y Z\r\n * 保留参数前缀: _ $\r\n *\r\n * #### 批量修改参数值.\r\n * 程序应该只传入expr的值,(禁止直接编辑value).传入后,交由模版进行计算更新.\r\n * 模版内部消化,决定是否保留expr.(当纯数字将被直接计算成value而不保存expr).\r\n *\r\n * 由于`DIV`变量的计算机制,`LWH`变量将不能依赖同层变量,(这可能会导致一些错误)\r\n *\r\n * 当模块节点处于切割空间内时,如果想重新绑定空间,那么空间树的位置将发生变更(实际上不管是不是在切割空间内,空间位置都可能发生变更)\r\n *\r\n */\r\n@Factory\r\nexport class TemplateRecord extends SymbolTableRecord\r\n{\r\n @AutoRecord Type: TemplateType = TemplateType.Usual;\r\n @AutoRecord SplitType = TemplateSplitType.None;\r\n private _Parent: ObjectId;\r\n @AutoRecord Children: ObjectId[];\r\n @AutoRecord Params: TemplateParam[];\r\n @AutoRecord Objects: ObjectId[];\r\n private _Positioning: Positioning;\r\n\r\n //展开的 这是UI数据我们暂时不序列化它(默认不展开有比较好的显示效果)\r\n isExpanded = false;\r\n\r\n constructor()\r\n {\r\n super();\r\n //监听\r\n this.Params = this.CreateProxyArray(\r\n value =>\r\n {\r\n if (value instanceof TemplateParam)\r\n value.parent = this;\r\n }\r\n );\r\n\r\n this.Objects = this.CreateProxyArray(\r\n value =>\r\n {\r\n if (value instanceof ObjectId && value.Object instanceof Entity)\r\n {\r\n if (!this.Id)\r\n console.warn(\"请先将模版添加到Database后在进行操作!\");\r\n value.Object.Template = this.Id;\r\n }\r\n }\r\n );\r\n\r\n this.Children = this.CreateProxyArray(\r\n value =>\r\n {\r\n if (value instanceof ObjectId && value.Object instanceof TemplateRecord)\r\n {\r\n if (!this.Id)\r\n console.warn(\"请先将模版添加到Database后在进行操作!\");\r\n value.Object.Parent = this.Id;\r\n }\r\n }\r\n );\r\n }\r\n\r\n get Name()\r\n {\r\n return this.name;\r\n }\r\n set Name(name: string)\r\n {\r\n if (name !== this.name)\r\n {\r\n this.WriteAllObjectRecord();\r\n this.name = name;\r\n }\r\n }\r\n\r\n get Parent()\r\n {\r\n return this._Parent;\r\n }\r\n\r\n set Parent(id: ObjectId)\r\n {\r\n if (id !== this._Parent)\r\n {\r\n this.WriteAllObjectRecord();\r\n if (this?._Parent?.Object)\r\n arrayRemoveOnce(((this.Parent.Object)).Children, this.Id);\r\n this._Parent = id;\r\n }\r\n }\r\n\r\n get Root(): TemplateRecord\r\n {\r\n return (this.Parent?.Object)?.Root ?? this;\r\n }\r\n\r\n get IsRoot()\r\n {\r\n return this._Parent === undefined;\r\n }\r\n\r\n get Entitys()\r\n {\r\n return this.Objects.map(o => o.Object as Entity);\r\n }\r\n\r\n get AllEntitys(): Entity[]\r\n {\r\n let entitys: Entity[] = [];\r\n this.Traverse((t) =>\r\n {\r\n for (let o of t.Objects)\r\n {\r\n if (!o.IsErase)\r\n entitys.push(o.Object as Entity);\r\n }\r\n });\r\n return entitys;\r\n }\r\n\r\n GetProperty(p: TemplateType): boolean { return (this.Type & p) !== 0; }\r\n SetProperty(p: TemplateType, v: boolean)\r\n {\r\n if (this.GetProperty(p) === v) return;\r\n if (v)\r\n this.Type |= p;\r\n else\r\n this.Type &= ~p;\r\n }\r\n\r\n get IsClear() { return this.GetProperty(TemplateType.Clear); }\r\n set IsClear(isClear: boolean) { this.SetProperty(TemplateType.Clear, isClear); }\r\n get IsSign() { return this.GetProperty(TemplateType.Sign); }\r\n set IsSign(isSign: boolean) { this.SetProperty(TemplateType.Sign, isSign); }\r\n\r\n get IsHidden() { return this.GetProperty(TemplateType.Hidden); }\r\n set IsHidden(isHidden: boolean) { this.SetProperty(TemplateType.Hidden, isHidden); }\r\n\r\n get IsHiddenChildren() { return this.GetProperty(TemplateType.HiddenChildren); }\r\n set IsHiddenChildren(isHidden: boolean) { this.SetProperty(TemplateType.HiddenChildren, isHidden); }\r\n\r\n Purge()\r\n {\r\n this.Children = this.Children.filter(rc => rc && !rc.IsErase && rc.Object instanceof TemplateRecord);\r\n this.Objects = this.Objects.filter(id => id?.IsErase === false);\r\n }\r\n\r\n Traverse(callback: (arg0: this) => void)\r\n {\r\n callback(this);\r\n for (let c of this.Children)\r\n {\r\n if (c && c.Object)\r\n {\r\n if (c.Object instanceof TemplateRecord)\r\n {\r\n let template = c.Object as TemplateRecord;\r\n template.Traverse(callback);\r\n }\r\n else\r\n {\r\n Toaster({\r\n message: \"模块子实体有个错误,程序已经暂时先忽略了这个错误!\",\r\n timeout: 8000,\r\n intent: Intent.DANGER,\r\n });\r\n }\r\n }\r\n }\r\n }\r\n async TraverseAsync(callback: (arg0: this) => Promise)\r\n {\r\n await callback(this);\r\n for (let c of this.Children)\r\n {\r\n if (c && c.Object)\r\n {\r\n let template = c.Object as TemplateRecord;\r\n await template.TraverseAsync(callback);\r\n }\r\n }\r\n }\r\n\r\n private _NodeDepthCache: number;\r\n /** 节点深度,根节点=0 */\r\n get NodeDepth()\r\n {\r\n if (this._NodeDepthCache !== undefined)\r\n return this._NodeDepthCache;\r\n\r\n if (!this.Parent?.Object) return 0;\r\n\r\n let parentTemplate = this.Parent.Object as TemplateRecord;\r\n this._NodeDepthCache = parentTemplate.NodeDepth + 1;\r\n\r\n return this._NodeDepthCache;\r\n }\r\n\r\n /** 模版定位 */\r\n get Positioning(): Positioning\r\n {\r\n if (this._Positioning)\r\n return this._Positioning;\r\n\r\n let spaceCS = this.GetTemplateRealitySpaceCS();\r\n let positioning = new PositioningTemporary();\r\n positioning.SpaceCS = spaceCS;\r\n positioning.SpaceSize = new Vector3(this.LParam.value as number, this.WParam.value as number, this.HParam.value as number);\r\n return positioning;\r\n }\r\n\r\n /**\r\n * 当存在夹层空间定位时,辅助定位表达式将使用夹层空间作为相对空间.\r\n */\r\n set Positioning(p: Positioning)\r\n {\r\n this.WriteAllObjectRecord();\r\n if (p) p.parent = this;\r\n this._Positioning = p;\r\n }\r\n\r\n //#region param\r\n\r\n /** 初始化基础参数 */\r\n InitBaseParams()\r\n {\r\n for (let paramName of TemplateDefaultParams)\r\n {\r\n let value = 0;\r\n let param = new TemplateParam();\r\n param.name = paramName;\r\n param.type = TemplateParamType.Float;\r\n param.value = value;\r\n this.Params.push(param);\r\n }\r\n this.LParam.description = \"宽\";\r\n this.WParam.description = \"深\";\r\n this.HParam.description = \"高\";\r\n this.Params[9].description = \"板厚\";\r\n this.Params[9].value = 18;\r\n return this;\r\n }\r\n\r\n get LParam() { return this.Params[0]; }\r\n get WParam() { return this.Params[1]; }\r\n get HParam() { return this.Params[2]; }\r\n\r\n get PXParam() { return this.Params[3]; }\r\n get PYParam() { return this.Params[4]; }\r\n get PZParam() { return this.Params[5]; }\r\n\r\n get RXParam() { return this.Params[6]; }\r\n get RYParam() { return this.Params[7]; }\r\n get RZParam() { return this.Params[8]; }\r\n\r\n GetParam(paramName: string): TemplateParam | undefined\r\n {\r\n return this.Params.find(param => param.name === paramName);\r\n }\r\n\r\n SetParamExpr(paramName: string, expr: string | number)\r\n {\r\n let param = this.GetParam(paramName);\r\n if (param)\r\n param.expr = expr;\r\n }\r\n\r\n DeleteParam(paramName: string)\r\n {\r\n let index = this.Params.findIndex(p => p.name === paramName);\r\n if (index !== -1 && index >= TempateDefaultParamCount)//LWH P R 禁止删除\r\n this.Params.splice(index, 1);\r\n\r\n return this;\r\n }\r\n\r\n //#endregion param\r\n\r\n /**\r\n * 通常UI操作的时候,都需要更新整个树,所以隐藏这个API.\r\n * see `UpdateTemplateTree`\r\n *\r\n * 更新当前节点\r\n *\r\n * ### 定位 (大小,方位)\r\n *\r\n * - (放弃)如果当前节点是更新树的最高层(但当前节点不是根节点)\r\n * 那么当存在夹层空间定位的时候,可以不重复进行夹层空间定位,因为此时该空间不会发生变化.\r\n * 补充:如果夹层空间的板件都在上层,那么可以做这个优化,如果定位的板件没在模块中,那么不能进行这个优化.\r\n *\r\n * - [更新优先]在没有实现变量依赖收集(类似mobx)时,我们认为`positioning`的优先级最高.\r\n * 所以`positioning`会被优先更新. `LWH`,`XYZ`.\r\n *\r\n * - 在使用变量定位时,需要传入上层的坐标系,以便进行相对定位.\r\n * 使用空间分析时,已经不需要上层坐标系.\r\n *\r\n * - 辅助定位:帮助空间坐标系进行旋转\r\n * 辅助定位的参数变量将暴露出来.{RX RY RZ}\r\n * 辅助定位作为参数变量时,用户使用值时很难正确的计算值,应~加入交互选择.(辅助计算)\r\n *\r\n * ### 变量表达式计算\r\n *\r\n * - `LWH`将被`positioning`替代,但变量定义仍然正常存在.\r\n *\r\n * - 变量大部分时候都是被批量更新,(同时传入许多参数).\r\n *\r\n */\r\n protected async Update()\r\n {\r\n this._CacheParamVars = this.GetParameterDefinition(false);\r\n let ens = this.Objects.filter(id => !id.IsErase).map(id => id.Object as Entity);\r\n let evaled = new Set();\r\n\r\n this._CacheSpaceCS = this.GetTemplateSpaceCS(false);\r\n\r\n let paramMap = new Map();\r\n for (let param of this.Params)\r\n paramMap.set(param.name, param);\r\n\r\n if (this._Positioning)\r\n {\r\n await this._Positioning.Positioning();\r\n if (!this._Positioning.SpaceCS)\r\n {\r\n //退化成个体坐标系\r\n if (ens.length)\r\n {\r\n this._Positioning.SpaceCS = ens[0].SpaceOCS;\r\n this._Positioning.SpaceSize = new Vector3(this.LParam.value as number, this.WParam.value as number, this.HParam.value as number);\r\n }\r\n else\r\n {\r\n Log(`模块:(${this.name})定位错误!`);\r\n return;//出事故\r\n }\r\n }\r\n }\r\n\r\n for (let en of ens)\r\n {\r\n en.ApplyMatrix(en.SpaceOCSInv);\r\n if (en instanceof Board)\r\n en.IsLazyGrooveCheck = true;\r\n }\r\n\r\n //#region 1.定位(坐标系和大小)\r\n /**\r\n * LWH在存在定位空间和继承空间时的表达式行为不一致.\r\n * - 在存在定位空间的时候,LWH是修改定位空间旋转后的值.\r\n * - 不存在定位空间的时候,修改的是空间旋转前的值,因为此时已经没有空间尺寸可供旋转了,\r\n * 只能先提供空间尺寸,然后才进行旋转.\r\n */\r\n\r\n if (this._Positioning)\r\n {\r\n this._CacheSpaceCS = this._Positioning.SpaceCS;\r\n this._CacheSpaceSize = this._Positioning.SpaceSize;\r\n\r\n this.RotateSpaceCS(paramMap, evaled);\r\n\r\n if (this.LParam.expr)\r\n this._CacheSpaceSize.x = this.LParam.EvalUpdate(this._CacheParamVars, paramMap, evaled, false);\r\n if (this.WParam.expr)\r\n this._CacheSpaceSize.y = this.WParam.EvalUpdate(this._CacheParamVars, paramMap, evaled, false);\r\n if (this.HParam.expr)\r\n this._CacheSpaceSize.z = this.HParam.EvalUpdate(this._CacheParamVars, paramMap, evaled, false);\r\n\r\n if (this._Positioning instanceof PositioningTemporary)\r\n this._Positioning = undefined;\r\n }\r\n else\r\n {\r\n let l = this.LParam.EvalUpdate(this._CacheParamVars, paramMap, evaled, false);\r\n let w = this.WParam.EvalUpdate(this._CacheParamVars, paramMap, evaled, false);\r\n let h = this.HParam.EvalUpdate(this._CacheParamVars, paramMap, evaled, false);\r\n this._CacheSpaceSize = new Vector3(l, w, h);\r\n\r\n this.RotateSpaceCS(paramMap, evaled);\r\n\r\n if (!this.Parent)\r\n {\r\n this.PXParam.value = 0;\r\n this.PYParam.value = 0;\r\n this.PZParam.value = 0;\r\n\r\n this.PXParam.expr = \"\";\r\n this.PYParam.expr = \"\";\r\n this.PZParam.expr = \"\";\r\n\r\n this.RXParam.value = 0;\r\n this.RYParam.value = 0;\r\n this.RZParam.value = 0;\r\n\r\n this.RXParam.expr = \"\";\r\n this.RYParam.expr = \"\";\r\n this.RZParam.expr = \"\";\r\n }\r\n }\r\n\r\n //相对定位. use PX PY PZ\r\n this.UpdatePosition(paramMap, evaled);\r\n\r\n //更新LWH(通过定位空间)\r\n this.LParam.UpdateParam(this._CacheSpaceSize.x);\r\n this.WParam.UpdateParam(this._CacheSpaceSize.y);\r\n this.HParam.UpdateParam(this._CacheSpaceSize.z);\r\n\r\n evaled.add(this.LParam);\r\n evaled.add(this.WParam);\r\n evaled.add(this.HParam);\r\n\r\n //#endregion\r\n\r\n //更新其他参数变量 Eval local params\r\n for (const param of this.Params)\r\n {\r\n param.EvalUpdate(this._CacheParamVars, paramMap, evaled);\r\n }\r\n\r\n //删除材质变量(材质变量仅在KJL导入中使用,重新出现在右侧列表中是不明智的?) (但是用户可能编辑更新了它?)\r\n // arrayRemoveIf(this.Params, p => p.type === TemplateParamType.Material);\r\n\r\n //变换到新的模版空间\r\n for (let en of ens)\r\n {\r\n en.ApplyMatrix(this._CacheSpaceCS);\r\n if (en instanceof Board)\r\n en.LazyGrooveCheckAll();\r\n }\r\n\r\n //更新顶层变量值\r\n if (!this.Parent)\r\n {\r\n for (const param of this.Params)\r\n this._CacheParamVars[`$${param.name}`] = param.value;\r\n }\r\n else\r\n {\r\n for (let param of this._CatchRootParam)\r\n this._CacheParamVars[`$${param.name}`] = param.value;\r\n }\r\n\r\n //保持SpaceCS\r\n for (let ent of ens)\r\n {\r\n ent.SpaceOCS = this._CacheSpaceCS;\r\n }\r\n }\r\n\r\n /**\r\n * 使用PXPYPZ更新空间位置\r\n */\r\n private UpdatePosition(paramMap: Map, evaled: Set)\r\n {\r\n let x = this.PXParam.EvalUpdate(this._CacheParamVars, paramMap, evaled, false);\r\n let y = this.PYParam.EvalUpdate(this._CacheParamVars, paramMap, evaled, false);\r\n let z = this.PZParam.EvalUpdate(this._CacheParamVars, paramMap, evaled, false);\r\n\r\n if (x !== 0 || y !== 0 || z !== 0)\r\n {\r\n this.PXParam.value = x;\r\n this.PYParam.value = y;\r\n this.PZParam.value = z;\r\n let baseP = new Vector3(x, y, z);\r\n baseP.applyMatrix4(this._CacheSpaceCS);\r\n this._CacheSpaceCS.setPosition(baseP);\r\n }\r\n }\r\n\r\n /**\r\n * 旋转空间定位,如果旋转成功,那么SpaceSize和SpaceCS都可能被更新\r\n */\r\n private RotateSpaceCS(paramMap: Map, evaled: Set)\r\n {\r\n this.RXParam.EvalUpdate(this._CacheParamVars, paramMap, evaled);\r\n this.RYParam.EvalUpdate(this._CacheParamVars, paramMap, evaled);\r\n this.RZParam.EvalUpdate(this._CacheParamVars, paramMap, evaled);\r\n //use RX RY RZ\r\n let rx = MathUtils.degToRad(this.RXParam.value as number);\r\n let ry = MathUtils.degToRad(this.RYParam.value as number);\r\n let rz = MathUtils.degToRad(this.RZParam.value as number);\r\n if (rx !== 0 || ry !== 0 || rz !== 0)\r\n {\r\n let mrx = new Matrix4().makeRotationX(rx);\r\n let mry = new Matrix4().makeRotationY(ry);\r\n let mrz = new Matrix4().makeRotationZ(rz);\r\n let mro = mrz.multiply(mry.multiply(mrx));\r\n let roSpace = mro.multiplyMatrices(this._CacheSpaceCS, mro);\r\n let roSpaceInv = mrx.getInverse(roSpace); //变量复用\r\n let transfromToRoSpace = roSpaceInv.multiply(this._CacheSpaceCS);\r\n let box = new Box3(new Vector3(), this._CacheSpaceSize.clone());\r\n box.applyMatrix4(transfromToRoSpace);\r\n box.getSize(this._CacheSpaceSize);\r\n let baseP = box.min.clone().applyMatrix4(roSpace);\r\n roSpace.setPosition(baseP);\r\n //更新LWH(通过定位空间)\r\n this.LParam.UpdateParam(this._CacheSpaceSize.x);\r\n this.WParam.UpdateParam(this._CacheSpaceSize.y);\r\n this.HParam.UpdateParam(this._CacheSpaceSize.z);\r\n this._CacheSpaceCS = roSpace;\r\n }\r\n this._CacheParamVars[\"L\"] = this._CacheSpaceSize.x;\r\n this._CacheParamVars[\"W\"] = this._CacheSpaceSize.y;\r\n this._CacheParamVars[\"H\"] = this._CacheSpaceSize.z;\r\n }\r\n\r\n /** 以广度搜索优先更新节点树 */\r\n async UpdateTemplateTree()\r\n {\r\n if (this.Parent && !this.Parent.IsErase)\r\n {\r\n let parent = this.Parent.Object as TemplateRecord;\r\n if (parent.SplitType !== TemplateSplitType.None || this.NeedUpdateParent)\r\n return await parent.UpdateTemplateTree();\r\n }\r\n\r\n let stack: TemplateRecord[] = [this];\r\n await this.Update();\r\n while (stack.length > 0)\r\n {\r\n let template = stack.shift();\r\n\r\n //清理历史记录时,子对象会被清理,为了防止被清理掉,清除不需要的id\r\n template.Children = template.Children.filter(id => id && !id.IsErase);\r\n\r\n //计算DIV(给子空间使用)\r\n if (template.Children.length > 0 && template.SplitType !== TemplateSplitType.None)\r\n {\r\n let sum = 0;//除去div时,总共占用的空间\r\n for (let c of template.Children)\r\n {\r\n let ctemplate = c.Object as TemplateRecord;\r\n let vardefines = ctemplate.GetParameterDefinition(false);\r\n vardefines._DIV = 0;\r\n let param = ctemplate.Params[template.SplitType];\r\n sum += param.EvalUpdate(vardefines, new Map(), new Set(), false);\r\n }\r\n\r\n let sumDiv = 0;//div=1时占用的空间\r\n for (let c of template.Children)\r\n {\r\n let ctemplate = c.Object as TemplateRecord;\r\n let vardefines = ctemplate.GetParameterDefinition(false);\r\n vardefines._DIV = 1;\r\n let param = ctemplate.Params[template.SplitType];\r\n sumDiv += param.EvalUpdate(vardefines, new Map(), new Set(), false);\r\n }\r\n\r\n let divCount = sumDiv - sum;\r\n\r\n if (divCount > 0)\r\n {\r\n //div可用总空间\r\n let divSum = (template.Params[template.SplitType].value as number - sum);\r\n if (divSum > 0)\r\n template._CacheParamVars.DIV = divSum / divCount;\r\n else\r\n template._CacheParamVars.DIV = 0;\r\n }\r\n\r\n template._CacheParamVars.POS = 0;\r\n }\r\n\r\n for (let c of template.Children)\r\n {\r\n let ctemplate = c.Object as TemplateRecord;\r\n stack.push(ctemplate);\r\n await ctemplate.Update();\r\n\r\n if (template._CacheParamVars.POS !== undefined)//更新POS\r\n template._CacheParamVars.POS += ctemplate.Params[template.SplitType].value as number;\r\n }\r\n }\r\n }\r\n\r\n /** 缓存本节点的变量定义值,当子层需要本层的参数时,可以直接获取 */\r\n protected _CacheParamVars: any;\r\n protected _CacheSpaceCS: Matrix4;\r\n protected _CacheSpaceSize: Vector3;\r\n protected _CatchRootParam: Set;\r\n /**\r\n * 本节点可用的所有变量定义.(包括变量继承)\r\n * @param [useCache=true] 当更新当前节点的时候,我们不希望使用缓存,(因为父节点的参数可能已经被更新)\r\n * @returns\r\n */\r\n GetParameterDefinition(useCache = true): any\r\n {\r\n if (this._CacheParamVars && useCache)\r\n return this._CacheParamVars;\r\n\r\n let vars = this.GetParentParams();\r\n this._CatchRootParam = new Set();\r\n for (const param of this.Params)\r\n {\r\n vars[param.name] = param.value;\r\n\r\n let rootParamName = \"$\" + param.name;\r\n\r\n if (!this.Parent)\r\n vars[rootParamName] = param.value;//root\r\n else if (!(rootParamName in vars))\r\n {\r\n this._CatchRootParam.add(param);\r\n vars[rootParamName] = param.value;//顶层变量捕获 root\r\n }\r\n }\r\n\r\n this._CacheParamVars = vars;\r\n return vars;\r\n }\r\n\r\n /**\r\n * 变量继承\r\n * - 每继承一层,前缀增加一个`_`\r\n * - 顶层前缀`$`\r\n *\r\n * @returns 继承于父空间的变量定义列表\r\n */\r\n private GetParentParams(): any\r\n {\r\n if (!this.Parent?.Object) return {};\r\n\r\n let parent = this.Parent.Object as TemplateRecord;\r\n let params = parent.GetParameterDefinition();\r\n\r\n let newParams: any = {};\r\n for (let key in params)\r\n {\r\n if (key[0] !== \"$\")\r\n newParams[\"_\" + key] = params[key];\r\n else\r\n newParams[key] = params[key];\r\n }\r\n\r\n if (newParams._DIV === undefined && parent.SplitType !== TemplateSplitType.None)\r\n newParams._DIV = 1;\r\n if (newParams._POS === undefined)\r\n newParams._POS = 0;\r\n\r\n return newParams;\r\n }\r\n\r\n get SpaceParse(): ISpaceParse\r\n {\r\n let spaceParse: ISpaceParse;\r\n\r\n if (this._Positioning && this._Positioning instanceof PositioningClampSpace)\r\n spaceParse = this._Positioning._SpaceParse;\r\n else\r\n spaceParse = new ISpaceParse();\r\n\r\n spaceParse.SpaceOCS = this._CacheSpaceCS;\r\n spaceParse.ParseOK = true;\r\n spaceParse.SpaceBox = new Box3Ext(new Vector3(), this._CacheSpaceSize);\r\n return spaceParse;\r\n }\r\n\r\n /**\r\n * 获得当前的模版空间的相对坐标系\r\n * - 存在父节点的时候使用父节点的模版空间坐标系\r\n * - 不存在父节点的时候使用自身的模版空间坐标系\r\n *\r\n * - 空间坐标系将被定位更新\r\n *\r\n * @param [useCache=true] 当更新当前节点的时候,我们不希望使用缓存,(因为父节点的参数可能已经被更新)\r\n */\r\n private GetTemplateSpaceCS(useCache = true): Matrix4\r\n {\r\n if (useCache && this._CacheSpaceCS)\r\n return this._CacheSpaceCS.clone();\r\n\r\n if (this.Parent?.Object)\r\n {\r\n let template = this.Parent.Object as TemplateRecord;\r\n return template.GetTemplateSpaceCS();\r\n }\r\n\r\n for (let brId of this.Objects)\r\n {\r\n if (brId.Object && !brId.IsErase)\r\n {\r\n let br = brId.Object as Entity;\r\n return br.SpaceOCS;\r\n }\r\n }\r\n\r\n return new Matrix4();\r\n }\r\n\r\n /**\r\n * 获得当前模块的实际位置坐标系.\r\n * 使用 GetTemplateSpaceCS 可能会得到不准确的位置.(得到Parent或者已经缓存的位置)\r\n */\r\n GetTemplateRealitySpaceCS()\r\n {\r\n for (let brId of this.Objects)\r\n {\r\n if (brId.Object && !brId.IsErase)\r\n {\r\n let br = brId.Object as Entity;\r\n return br.SpaceOCS;\r\n }\r\n }\r\n return this.GetTemplateSpaceCS(true);//此时已经可能不准确\r\n }\r\n\r\n get NeedUpdateParent(): boolean\r\n {\r\n if (this._Positioning) return false; //存在自我定位时,不需要更新父层\r\n\r\n if (this.Parent)\r\n {\r\n let template = this.Parent.Object as TemplateRecord;\r\n return template._CacheSpaceCS === undefined; //父层已更新时,不需要更新父层\r\n }\r\n\r\n return false; //没有父层时,不需要更新父层\r\n }\r\n\r\n protected get PositioningSupportBoards(): Board[]\r\n {\r\n let brs: Board[] = [];\r\n if (this._Positioning && this._Positioning instanceof PositioningClampSpace)\r\n {\r\n for (let id of this._Positioning.Objects)\r\n if (!id.IsErase && id.Object instanceof Board)\r\n brs.push(id.Object);\r\n }\r\n if (brs.length === 0)\r\n {\r\n //可视化空间使用周围板件数据\r\n let parentTemplate = this.Parent?.Object as TemplateRecord;\r\n\r\n while (parentTemplate)\r\n {\r\n for (let e of parentTemplate.AllEntitys)\r\n if (e instanceof Board)\r\n {\r\n brs.push(e);\r\n break;\r\n }\r\n\r\n if (brs.length) break;\r\n\r\n parentTemplate = parentTemplate.Parent?.Object as TemplateRecord;\r\n }\r\n\r\n if (brs.length === 0)\r\n brs.push(new Board());\r\n }\r\n return brs;\r\n }\r\n\r\n protected _Version: number;\r\n //#region -------------------------File-------------------------\r\n //对象应该实现dataIn和DataOut的方法,为了对象的序列化和反序列化\r\n //对象从文件中读取数据,初始化自身\r\n ReadFile(file: CADFiler)\r\n {\r\n this._Version = file.Read();\r\n super.ReadFile(file);\r\n this.Type = file.Read();\r\n this._Parent = file.ReadHardObjectId();\r\n let count = file.Read() as number;\r\n this.Children.length = 0;\r\n for (let i = 0; i < count; i++)\r\n {\r\n let id = file.ReadHardObjectId();\r\n if (id) this.Children.push(id);\r\n }\r\n count = file.Read();\r\n this.Params.length = 0;\r\n for (let i = 0; i < count; i++)\r\n this.Params.push(file.ReadObject());\r\n count = file.Read();\r\n this.Objects.length = 0;\r\n for (let i = 0; i < count; i++)\r\n {\r\n let id = file.ReadObjectId();\r\n if (id) this.Objects.push(id);\r\n }\r\n\r\n this._Positioning = file.ReadObject();\r\n\r\n if (this._Version > 1)\r\n this.SplitType = file.Read() ?? this.SplitType;\r\n\r\n //清空缓存,因为我们回滚了模块(BUG:修改参数->撤销->替换模块(此时读取了缓存的数据)\r\n this._CacheParamVars = undefined;\r\n this._CacheSpaceCS = undefined;\r\n this._CacheSpaceSize = undefined;\r\n this._CatchRootParam = undefined;\r\n this._NodeDepthCache = undefined;\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(3);\r\n super.WriteFile(file);\r\n\r\n let type = this.Type;\r\n //我们在保存文件的时候,才会去序列化它,否则我们不会自动添加历史记录(被动式)\r\n if (this.isExpanded)\r\n type |= TemplateType.Expanded;\r\n else\r\n type &= ~TemplateType.Expanded;\r\n\r\n file.Write(type);\r\n file.WriteHardObjectId(this._Parent);\r\n file.Write(this.Children.length);\r\n for (let id of this.Children)\r\n file.WriteHardObjectId(id);\r\n file.Write(this.Params.length);\r\n for (let param of this.Params)\r\n file.WriteObject(param);\r\n file.Write(this.Objects.length);\r\n for (let id of this.Objects)\r\n file.WriteHardObjectId(id);\r\n\r\n file.WriteObject(this._Positioning);\r\n\r\n file.Write(this.SplitType);\r\n }\r\n //#endregion\r\n}\r\n","import { Vector3 } from \"three\";\r\nimport { ExtendsBoardThickness } from \"../../../Add-on/DrawBoard/BuildBoardTool\";\r\nimport { DrawLatticeDrawerTool } from \"../../../Add-on/LatticeDrawer/LatticeDrawerTool\";\r\nimport { EBoardKeyList } from \"../../../Common/BoardKeyList\";\r\nimport { DefaultLatticeConfig } from \"../../../Editor/DefaultConfig\";\r\nimport { Box3Ext } from \"../../../Geometry/Box\";\r\nimport { ISpaceParse } from \"../../../Geometry/SpaceParse/ISpaceParse\";\r\nimport { ILatticeOption } from \"../../../UI/Store/LatticeInterface\";\r\nimport { Factory } from \"../../CADFactory\";\r\nimport { CADFiler } from \"../../CADFiler\";\r\nimport { Board } from \"../../Entity/Board\";\r\nimport { TemplateRecord } from \"../TemplateRecord\";\r\n\r\n@Factory\r\nexport class TemplateLatticeRecord extends TemplateRecord\r\n{\r\n private option: ILatticeOption = { ...DefaultLatticeConfig };\r\n constructor()\r\n {\r\n super();\r\n this.name = \"格子抽(自动)\";\r\n }\r\n get Option()\r\n {\r\n return Object.assign({}, this.option);\r\n }\r\n set Option(option: ILatticeOption)\r\n {\r\n this.WriteAllObjectRecord();\r\n Object.assign(this.option, option);\r\n ExtendsBoardThickness(this, option.thickness);\r\n }\r\n\r\n // InitBaseParams()\r\n // {\r\n // super.InitBaseParams();\r\n // return this;\r\n // }\r\n\r\n protected async Update()\r\n {\r\n await super.Update();\r\n\r\n let thickness = this.GetParam(\"BH\")?.value as number;\r\n if (thickness)\r\n this.option.thickness = thickness;\r\n\r\n let tool = DrawLatticeDrawerTool.GetInstance() as DrawLatticeDrawerTool;\r\n\r\n let sbrs = this.PositioningSupportBoards;\r\n let space = new ISpaceParse(sbrs, this._CacheSpaceCS);\r\n space.ParseOK = true;\r\n space.SpaceBox = new Box3Ext(new Vector3(), this._CacheSpaceSize);\r\n\r\n let nbrs = tool.Draw(space, this.Option);\r\n\r\n if (sbrs.length > 0)\r\n {\r\n for (let br of nbrs)\r\n {\r\n br.BoardProcessOption[EBoardKeyList.CabinetName] = sbrs[0].BoardProcessOption[EBoardKeyList.CabinetName];\r\n br.BoardProcessOption[EBoardKeyList.RoomName] = sbrs[0].BoardProcessOption[EBoardKeyList.RoomName];\r\n }\r\n }\r\n\r\n\r\n for (let i = nbrs.length; i < this.Objects.length; i++)\r\n this.Objects[i].Object.Erase();\r\n\r\n for (let i = 0; i < nbrs.length; i++)\r\n {\r\n if (i < this.Objects.length)\r\n {\r\n let br = this.Objects[i].Object as Board;\r\n br.Erase(false);\r\n br.CopyFrom(nbrs[i]);\r\n br.SpaceOCS = this._CacheSpaceCS;\r\n }\r\n else\r\n {\r\n nbrs[i].SpaceOCS = this._CacheSpaceCS;\r\n this._db.ModelSpace.Append(nbrs[i]);\r\n this.Objects.push(nbrs[i].Id);\r\n }\r\n }\r\n }\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 super.ReadFile(file);\r\n\r\n this.option.arrayType = file.Read();\r\n this.option.gripWidth = file.Read();\r\n this.option.gripDepth = file.Read();\r\n this.option.widthCount = file.Read();\r\n this.option.depthCount = file.Read();\r\n this.option.knifeRad = file.Read();\r\n this.option.thickness = file.Read();\r\n this.option.arcLen = file.Read();\r\n this.option.downDist = file.Read();\r\n this.option.space = file.Read();\r\n this.option.grooveAddWidth = file.Read();\r\n this.option.upSealed = file.Read();\r\n this.option.downSealed = file.Read();\r\n this.option.leftSealed = file.Read();\r\n this.option.rightSealed = file.Read();\r\n this.option.isAuto = file.Read();\r\n this.option.isChange = file.Read();\r\n this.option.isOpenCut = file.Read();\r\n this.option.upCut = file.Read();\r\n this.option.downCut = file.Read();\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.option.arrayType);\r\n file.Write(this.option.gripWidth);\r\n file.Write(this.option.gripDepth);\r\n file.Write(this.option.widthCount);\r\n file.Write(this.option.depthCount);\r\n file.Write(this.option.knifeRad);\r\n file.Write(this.option.thickness);\r\n\r\n file.Write(this.option.arcLen);\r\n file.Write(this.option.downDist);\r\n file.Write(this.option.space);\r\n file.Write(this.option.grooveAddWidth);\r\n file.Write(this.option.upSealed);\r\n file.Write(this.option.downSealed);\r\n file.Write(this.option.leftSealed);\r\n file.Write(this.option.rightSealed);\r\n file.Write(this.option.isAuto);\r\n file.Write(this.option.isChange);\r\n\r\n file.Write(this.option.isOpenCut);\r\n file.Write(this.option.upCut);\r\n file.Write(this.option.downCut);\r\n }\r\n //#endregion\r\n}\r\n","import { Vector3 } from \"three\";\r\nimport { Board } from \"../../DatabaseServices/Entity/Board\";\r\nimport { MoveMatrix } from \"../../Geometry/GeUtils\";\r\nimport { ISpaceParse } from \"../../Geometry/SpaceParse/ISpaceParse\";\r\nimport { TBBoardOption, BoardType } from \"../../UI/Store/BoardInterface\";\r\n\r\nexport function BuildTopBottomBoards(topOpt: TBBoardOption, bottomOpt: TBBoardOption, space: ISpaceParse): Board[]\r\n{\r\n let brs: Board[] = [];\r\n if (topOpt.isDraw)\r\n {\r\n let basePt = GetTopBoardBasePt(topOpt, space);\r\n brs.push(GetTopOrDownBoard(space, topOpt, basePt, true));\r\n }\r\n if (bottomOpt.isDraw)\r\n {\r\n let basePt = GetBottomBoardBasePt(bottomOpt, space);\r\n brs.push(GetTopOrDownBoard(space, bottomOpt, basePt, false));\r\n\r\n let size = space.Size;\r\n let refSize = size.y;\r\n const thickness = bottomOpt.footThickness;\r\n\r\n if (bottomOpt.offset > 0 && !bottomOpt.isWrapSide)\r\n {\r\n //绘制前地脚\r\n if (bottomOpt.isDrawFooter)\r\n {\r\n brs.push(GetFootBoard(bottomOpt, space, false));\r\n refSize -= thickness + bottomOpt.footBehindShrink;\r\n }\r\n\r\n //绘制后地脚\r\n if (bottomOpt.isDrawBackFooter)\r\n {\r\n brs.push(GetFootBoard(bottomOpt, space, true));\r\n refSize -= thickness + bottomOpt.footerOffset;\r\n }\r\n //绘制加强条\r\n if (bottomOpt.isDrawStrengthenStrip)\r\n brs.push(...GetStrengthenStrips(bottomOpt, space, refSize - bottomOpt.frontDist - bottomOpt.behindDistance));\r\n }\r\n }\r\n return brs;\r\n}\r\nfunction GetTopOrDownBoard(spaceParse: ISpaceParse, opt: TBBoardOption, basePt: Vector3, isTop = true)\r\n{\r\n //前后距\r\n let frontDist = -opt.frontDist;\r\n let backDist = -opt.behindDistance;\r\n //左右延伸\r\n let leftExt = opt.leftExt;\r\n let rightExt = opt.rightExt;\r\n\r\n //大小\r\n let size = spaceParse.Size;\r\n let length = size.x;\r\n let width = size.y + frontDist + backDist;\r\n let thickness = opt.thickness;\r\n if (opt.isWrapSide)\r\n {\r\n let leftBoardThickness = spaceParse.LeftBoard ? spaceParse.LeftBoard.Thickness : opt.thickness;\r\n let rightBoardThickness = spaceParse.RightBoard ? spaceParse.RightBoard.Thickness : opt.thickness;\r\n length += leftBoardThickness + rightBoardThickness + leftExt + rightExt;\r\n }\r\n else\r\n {\r\n leftExt = 0;\r\n rightExt = 0;\r\n }\r\n\r\n let board = Board.CreateBoard(length, width, thickness, BoardType.Layer);\r\n board.Name = \"顶板\";\r\n\r\n if (!isTop)\r\n {\r\n board.Name = \"底板\";\r\n }\r\n //移动右缩和前距的距离\r\n basePt.add(new Vector3(rightExt, -frontDist));\r\n board.ApplyMatrix(MoveMatrix(basePt));\r\n board.ApplyMatrix(spaceParse.SpaceOCS);\r\n\r\n return board;\r\n}\r\nfunction GetTopBoardBasePt(opt: TBBoardOption, spc: ISpaceParse)\r\n{\r\n let box = spc.SpaceBox;\r\n let min = box.min;\r\n let max = box.max;\r\n let basePoint = new Vector3();\r\n if (opt.isWrapSide)\r\n {\r\n let rightBoardThickness = spc.RightBoard ? spc.RightBoard.Thickness : opt.thickness;\r\n basePoint.set(max.x + rightBoardThickness, min.y, max.z);\r\n }\r\n else\r\n {\r\n basePoint.set(max.x, min.y, max.z - (opt.thickness + parseFloat(opt.offset as unknown as string)));\r\n }\r\n return basePoint;\r\n}\r\nfunction GetBottomBoardBasePt(opt: TBBoardOption, spc: ISpaceParse)\r\n{\r\n let box = spc.SpaceBox;\r\n let min = box.min;\r\n let max = box.max;\r\n let basePoint = new Vector3();\r\n if (opt.isWrapSide)\r\n {\r\n let rightBoardThickness = spc.RightBoard ? spc.RightBoard.Thickness : opt.thickness;\r\n basePoint.set(max.x + rightBoardThickness, min.y, min.z - opt.thickness);\r\n }\r\n else\r\n {\r\n basePoint.set(max.x, min.y, min.z + opt.offset);\r\n }\r\n return basePoint;\r\n}\r\nfunction GetFootBoard(opt: TBBoardOption, spaceParse: ISpaceParse, isBack: boolean)\r\n{\r\n let offset = opt.offset;\r\n let thickness = opt.footThickness;\r\n let footBoard = Board.CreateBoard(offset, spaceParse.Size.x, opt.footThickness, BoardType.Behind);\r\n footBoard.Name = isBack ? \"后地脚\" : \"地脚线\";\r\n let moveDist = isBack ? spaceParse.Size.y - opt.footerOffset - opt.behindDistance : thickness + opt.footBehindShrink + opt.frontDist;\r\n footBoard.ApplyMatrix(MoveMatrix(spaceParse.SpaceBox.min.clone().add(new Vector3(0, moveDist))))\r\n .ApplyMatrix(spaceParse.SpaceOCS);\r\n\r\n return footBoard;\r\n}\r\n\r\nfunction GetStrengthenStrips(opt: TBBoardOption, spaceParse: ISpaceParse, width: number)\r\n{\r\n let brs: Board[] = [];\r\n const thickness = opt.footThickness;\r\n let count = opt.divCount;\r\n if (count === 0) return brs;\r\n let spaceSize = (spaceParse.Size.x - count * thickness) / (count + 1);\r\n let br = Board.CreateBoard(opt.offset, width, thickness, BoardType.Vertical);\r\n\r\n let yDist = opt.frontDist;\r\n if (opt.isDrawFooter)\r\n yDist += (opt.footBehindShrink + thickness);\r\n\r\n for (let i = 1; i <= count; i++)\r\n {\r\n let b = br.Clone();\r\n b.Name = \"加强条\" + i;\r\n b.ApplyMatrix(MoveMatrix(spaceParse.SpaceBox.min.clone().add(new Vector3(spaceSize * i + (i - 1) * thickness, yDist))))\r\n .ApplyMatrix(spaceParse.SpaceOCS);\r\n brs.push(b);\r\n }\r\n return brs;\r\n}\r\n","import { ExtendsBoardThickness } from \"../../../Add-on/DrawBoard/BuildBoardTool\";\r\nimport { BuildTopBottomBoards } from \"../../../Add-on/DrawBoard/BuildTopBottomBoardTool\";\r\nimport { EBoardKeyList } from \"../../../Common/BoardKeyList\";\r\nimport { DefaultBottomBoardOption, DefaultTopBoardOption } from \"../../../Editor/DefaultConfig\";\r\nimport { BoardProcessOption, FaceDirection, LinesType, TBBoardOption } from \"../../../UI/Store/BoardInterface\";\r\nimport { AutoRecord } from \"../../AutoRecord\";\r\nimport { Factory } from \"../../CADFactory\";\r\nimport { CADFiler } from \"../../CADFiler\";\r\nimport { Board } from \"../../Entity/Board\";\r\nimport { Entity } from \"../../Entity/Entity\";\r\nimport { TemplateRecord } from \"../TemplateRecord\";\r\n\r\n/**顶底板模板 */\r\n@Factory\r\nexport class TemplateTopBottomBoard extends TemplateRecord\r\n{\r\n private _topOption: TBBoardOption = { ...DefaultTopBoardOption };\r\n private _bottomOption: TBBoardOption = { ...DefaultBottomBoardOption };\r\n UseBoardProcessOption = false;\r\n BoardProcessOption: BoardProcessOption;\r\n @AutoRecord DrawCounts: [number, number, number] = [1, 1, 1];\r\n constructor()\r\n {\r\n super();\r\n this.name = \"顶底板\";\r\n }\r\n get TopOption()\r\n {\r\n return Object.assign({}, this._topOption);\r\n }\r\n set TopOption(option: TBBoardOption)\r\n {\r\n this.WriteAllObjectRecord();\r\n Object.assign(this._topOption, option);\r\n ExtendsBoardThickness(this, option.thickness);\r\n }\r\n get BottomOption()\r\n {\r\n return Object.assign({}, this._bottomOption);\r\n }\r\n set BottomOption(option: TBBoardOption)\r\n {\r\n this.WriteAllObjectRecord();\r\n Object.assign(this._bottomOption, option);\r\n }\r\n\r\n // InitBaseParams()\r\n // {\r\n // super.InitBaseParams();\r\n // return this;\r\n // }\r\n\r\n protected async Update()\r\n {\r\n await super.Update();\r\n\r\n let thickness = this.GetParam(\"BH\")?.value as number;\r\n if (thickness)\r\n {\r\n this._topOption.thickness = thickness;\r\n this._bottomOption.thickness = thickness;\r\n this._bottomOption.footThickness = thickness;\r\n }\r\n\r\n let spaceParse = this.SpaceParse;\r\n let nbrs = BuildTopBottomBoards(this._topOption, this._bottomOption, spaceParse);\r\n\r\n let sbrs = this.PositioningSupportBoards;\r\n\r\n if (this.BoardProcessOption)\r\n {\r\n let minSealed = GetMinSealed(this.BoardProcessOption);\r\n for (let br of nbrs)\r\n {\r\n br.BoardProcessOption = this.BoardProcessOption;\r\n this.SetBoardProcess(br, minSealed);\r\n }\r\n this.BoardProcessOption = undefined;\r\n }\r\n if (this.UseBoardProcessOption && sbrs.length > 0)\r\n {\r\n let cname = sbrs[0].BoardProcessOption[EBoardKeyList.CabinetName];\r\n let rname = sbrs[0].BoardProcessOption[EBoardKeyList.RoomName];\r\n for (let br of nbrs)\r\n {\r\n br.BoardProcessOption[EBoardKeyList.CabinetName] = cname;\r\n br.BoardProcessOption[EBoardKeyList.RoomName] = rname;\r\n }\r\n\r\n this.UseBoardProcessOption = false;\r\n }\r\n\r\n let oldBrss: [Board[], Board[], Board[]] = [[], [], []];\r\n let refBr: Board;\r\n let minSealed: string;\r\n\r\n for (let id of this.Objects)\r\n {\r\n let b = id.Object as Board;\r\n if (!refBr)\r\n refBr = b;\r\n oldBrss[b.BoardType].push(b);\r\n }\r\n\r\n if (refBr) minSealed = GetMinSealed(refBr.BoardProcessOption);\r\n\r\n let newBrss: [Board[], Board[], Board[]] = [[], [], []];\r\n\r\n for (let b of nbrs)\r\n {\r\n newBrss[b.BoardType].push(b);\r\n }\r\n for (let i = 0; i < oldBrss.length; i++)\r\n {\r\n let oldBrs = oldBrss[i];\r\n let newBrs = newBrss[i];\r\n\r\n let oldLen = oldBrs.length;\r\n for (let j = newBrs.length; j < oldLen; j++)\r\n oldBrs[j].Erase();\r\n\r\n for (let j = 0; j < newBrs.length; j++)\r\n {\r\n if (j < oldLen)\r\n {\r\n if (j >= this.DrawCounts[i])\r\n {\r\n oldBrs[j].Erase(false);\r\n }\r\n oldBrs[j].Name = newBrs[j].Name;\r\n oldBrs[j].Position = newBrs[j].Position;\r\n oldBrs[j].Width = newBrs[j].Width;\r\n oldBrs[j].Height = newBrs[j].Height;\r\n oldBrs[j].Thickness = newBrs[j].Thickness;\r\n }\r\n else\r\n {\r\n if (refBr)\r\n {\r\n newBrs[j].BoardProcessOption = refBr.BoardProcessOption;\r\n this.SetBoardProcess(newBrs[j], minSealed);\r\n }\r\n this._db.ModelSpace.Append(newBrs[j]);\r\n this.Objects.push(newBrs[j].Id);\r\n }\r\n }\r\n this.DrawCounts[i] = newBrs.length;\r\n }\r\n\r\n //保持SpaceCS\r\n for (let id of this.Objects)\r\n {\r\n if (id && !id.IsErase)\r\n (id.Object as Entity).SpaceOCS = this._CacheSpaceCS;\r\n }\r\n }\r\n private SetBoardProcess(br: Board, minSealed: string)\r\n {\r\n if (br.Name === \"底板\")\r\n {\r\n br.BoardProcessOption[EBoardKeyList.BigHole] = FaceDirection.Back;\r\n }\r\n else if (br.Name.includes(\"地脚\") || br.Name.includes(\"加强条\"))\r\n {\r\n // br.BoardProcessOption.composingFace = ComposingType.Reverse;\r\n br.BoardProcessOption.bigHoleDir = FaceDirection.Back;\r\n br.BoardProcessOption.lines = LinesType.Reverse;\r\n\r\n //用薄封边\r\n br.BoardProcessOption.sealedUp = minSealed;\r\n br.BoardProcessOption.sealedDown = minSealed;\r\n br.BoardProcessOption.sealedLeft = minSealed;\r\n br.BoardProcessOption.sealedRight = minSealed;\r\n }\r\n }\r\n ReadFile(file: CADFiler)\r\n {\r\n let ver = file.Read();\r\n super.ReadFile(file);\r\n this.DrawCounts[0] = file.Read();\r\n this.DrawCounts[1] = file.Read();\r\n this.DrawCounts[2] = file.Read();\r\n\r\n this._topOption.type = file.Read();\r\n this._topOption.name = file.Read();\r\n this._topOption.isDraw = file.Read();\r\n this._topOption.thickness = file.Read();\r\n this._topOption.frontDist = file.Read();\r\n this._topOption.behindDistance = file.Read();\r\n this._topOption.isWrapSide = file.Read();\r\n this._topOption.useLFData = file.Read();\r\n this._topOption.leftExt = file.Read();\r\n this._topOption.rightExt = file.Read();\r\n this._topOption.offset = file.Read();\r\n if (ver === 1 && typeof this._topOption.offset === \"string\")\r\n this._topOption.offset = parseFloat(this._topOption.offset) ?? 0;\r\n\r\n this._bottomOption.type = file.Read();\r\n this._bottomOption.name = file.Read();\r\n this._bottomOption.isDraw = file.Read();\r\n this._bottomOption.thickness = file.Read();\r\n this._bottomOption.frontDist = file.Read();\r\n this._bottomOption.behindDistance = file.Read();\r\n this._bottomOption.isWrapSide = file.Read();\r\n this._bottomOption.useLFData = file.Read();\r\n this._bottomOption.leftExt = file.Read();\r\n this._bottomOption.rightExt = file.Read();\r\n this._bottomOption.offset = file.Read();\r\n this._bottomOption.footThickness = file.Read();\r\n this._bottomOption.isDrawFooter = file.Read();\r\n this._bottomOption.footBehindShrink = file.Read();\r\n this._bottomOption.isDrawBackFooter = file.Read();\r\n this._bottomOption.isDrawStrengthenStrip = file.Read();\r\n this._bottomOption.footerOffset = file.Read();\r\n this._bottomOption.divCount = file.Read();\r\n\r\n }\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(2);\r\n super.WriteFile(file);\r\n file.Write(this.DrawCounts[0]);\r\n file.Write(this.DrawCounts[1]);\r\n file.Write(this.DrawCounts[2]);\r\n\r\n file.Write(this._topOption.type);\r\n file.Write(this._topOption.name);\r\n file.Write(this._topOption.isDraw);\r\n file.Write(this._topOption.thickness);\r\n file.Write(this._topOption.frontDist);\r\n file.Write(this._topOption.behindDistance);\r\n file.Write(this._topOption.isWrapSide);\r\n file.Write(this._topOption.useLFData);\r\n file.Write(this._topOption.leftExt);\r\n file.Write(this._topOption.rightExt);\r\n file.Write(this._topOption.offset);\r\n\r\n file.Write(this._bottomOption.type);\r\n file.Write(this._bottomOption.name);\r\n file.Write(this._bottomOption.isDraw);\r\n file.Write(this._bottomOption.thickness);\r\n file.Write(this._bottomOption.frontDist);\r\n file.Write(this._bottomOption.behindDistance);\r\n file.Write(this._bottomOption.isWrapSide);\r\n file.Write(this._bottomOption.useLFData);\r\n file.Write(this._bottomOption.leftExt);\r\n file.Write(this._bottomOption.rightExt);\r\n file.Write(this._bottomOption.offset);\r\n file.Write(this._bottomOption.footThickness);\r\n file.Write(this._bottomOption.isDrawFooter);\r\n file.Write(this._bottomOption.footBehindShrink);\r\n file.Write(this._bottomOption.isDrawBackFooter);\r\n file.Write(this._bottomOption.isDrawStrengthenStrip);\r\n file.Write(this._bottomOption.footerOffset);\r\n file.Write(this._bottomOption.divCount);\r\n }\r\n}\r\n\r\n//获得最薄的封边\r\nfunction GetMinSealed(opt: BoardProcessOption): string\r\n{\r\n return Math.max(0, Math.min(\r\n parseFloat(opt.sealedDown) || 0,\r\n parseFloat(opt.sealedLeft) || 0,\r\n parseFloat(opt.sealedRight) || 0,\r\n parseFloat(opt.sealedUp) || 0,\r\n )).toString();\r\n}\r\n","import { Vector3 } from \"three\";\r\nimport { EBoardKeyList } from \"../../Common/BoardKeyList\";\r\nimport { safeEval } from \"../../Common/eval\";\r\nimport { Singleton } from \"../../Common/Singleton\";\r\nimport { Board } from \"../../DatabaseServices/Entity/Board\";\r\nimport { ISpaceParse } from \"../../Geometry/SpaceParse/ISpaceParse\";\r\nimport { BoardType, DrillType, FaceDirection, IHighSealedItem } from \"../../UI/Store/BoardInterface\";\r\nimport { EFullDir, EFullType, EWRackArrayType, IWineRackOption } from \"../../UI/Store/WineRackInterface\";\r\n\r\nexport const SIN45 = Math.sin(Math.PI / 4);\r\n\r\nexport class DrawWineRackTool extends Singleton\r\n{\r\n private _config: IWineRackOption;\r\n protected space: ISpaceParse;\r\n public boardlist: Board[] = [];\r\n get Config()\r\n {\r\n return this._config;\r\n }\r\n Parse(space: ISpaceParse, config: IWineRackOption)\r\n {\r\n this._config = config;\r\n this.boardlist.length = 0;\r\n this.space = space;\r\n //处理格子深\r\n if (!config.isTotalDepth)\r\n {\r\n let depth = safeEval(config.calcDepth, { L: space.Size.x, W: space.Size.y, H: space.Size.z });;\r\n if (!isNaN(depth))\r\n {\r\n space.SpaceBox.max.setY(space.SpaceBox.min.y + depth);\r\n }\r\n }\r\n //处理前缩\r\n space.SpaceBox.min.add(new Vector3(0, config.frontCut));\r\n //左右缩\r\n space.SpaceBox.min.add(new Vector3(config.leftCut));\r\n space.SpaceBox.max.add(new Vector3(-config.rightCut));\r\n //上缩\r\n space.SpaceBox.max.add(new Vector3(0, 0, -config.topCut));\r\n }\r\n /** 拾取空间周围的板件柜名房名等信息*/\r\n protected GetBoardProcessOption(br: Board)\r\n {\r\n //获取空间周围的板件数据\r\n if (this.space.Boards.length > 0)\r\n {\r\n let refProcessData = this.space.Boards[0].BoardProcessOption;\r\n br.BoardProcessOption[EBoardKeyList.RoomName] = refProcessData[EBoardKeyList.RoomName];\r\n br.BoardProcessOption[EBoardKeyList.CabinetName] = refProcessData[EBoardKeyList.CabinetName];\r\n }\r\n }\r\n /**分析高级封边数据 */\r\n protected ParseHighSealing(br: Board, leftSealed: number, rightSealed: number, topSealed: number, downSealed: number, isLeft: boolean)\r\n {\r\n this.GetBoardProcessOption(br);\r\n let cu = br.ContourCurve;\r\n br.BoardProcessOption.sealedLeft = leftSealed.toString();\r\n br.BoardProcessOption.sealedRight = rightSealed.toString();\r\n br.BoardProcessOption.sealedUp = topSealed.toString();\r\n br.BoardProcessOption.sealedDown = downSealed.toString();\r\n\r\n let sizes = [...new Set([downSealed, rightSealed, topSealed, leftSealed])];\r\n let downSeal = {\r\n size: downSealed, color: sizes.indexOf(downSealed) + 1\r\n };\r\n let rigthSeal = {\r\n size: rightSealed, color: sizes.indexOf(rightSealed) + 1\r\n };\r\n let topSeal = { size: topSealed, color: sizes.indexOf(topSealed) + 1 };\r\n let leftSeal = { size: leftSealed, color: sizes.indexOf(leftSealed) + 1 };\r\n\r\n let highSeals: IHighSealedItem[] = [downSeal];\r\n if (isLeft)\r\n {\r\n highSeals.push(rigthSeal, topSeal);\r\n for (let i = 3; i <= cu.EndParam - 1; i++)\r\n {\r\n highSeals.push(leftSeal);\r\n }\r\n }\r\n else\r\n {\r\n for (let i = 1; i <= cu.EndParam - 3; i++)\r\n {\r\n highSeals.push(rigthSeal);\r\n }\r\n highSeals.push(topSeal, leftSeal);\r\n }\r\n br.BoardProcessOption.highSealed = highSeals;\r\n br.BoardProcessOption.drillType = DrillType.None;\r\n br.BoardProcessOption.highDrill.fill(DrillType.None);\r\n\r\n }\r\n /**补板 */\r\n protected AddLayerOrVerticalBoard(actWidth: number, actHeight: number)\r\n {\r\n const config = this.Config;\r\n const size = this.space.Size;\r\n let isDrawLy = false;\r\n //是否补层板\r\n if (config.isDrawLy && (config.arrayType === EWRackArrayType.Fixed || config.fullType === EFullType.ByWidth))\r\n {\r\n isDrawLy = true;\r\n\r\n let length = actWidth;\r\n let width = size.y + config.frontCut;\r\n let position = this.space.SpaceBox.min.clone();\r\n\r\n if (config.arrayType === EWRackArrayType.Fixed)\r\n {\r\n if (config.fullDir === EFullDir.Right)\r\n {\r\n length += config.rightCut;\r\n position.add(new Vector3(size.x + config.rightCut, -config.frontCut, actHeight + config.topCut));\r\n }\r\n else\r\n {\r\n length += config.leftCut;\r\n position.add(new Vector3(actWidth, -config.frontCut, actHeight + config.topCut));\r\n }\r\n }\r\n else\r\n {\r\n length += (config.leftCut + config.rightCut);\r\n position.add(new Vector3(actWidth + config.rightCut, -config.frontCut, actHeight + config.topCut));\r\n }\r\n //补板跟随\r\n if (config.followNarrow)\r\n {\r\n //处理前缩\r\n position.add(new Vector3(0, config.frontCut));\r\n width -= config.frontCut;\r\n }\r\n let br = Board.CreateBoard(length, width, config.brThick2);\r\n this.GetBoardProcessOption(br);\r\n br.BoardProcessOption.bigHoleDir = FaceDirection.Back;\r\n br.Position = position;\r\n br.ApplyMatrix(this.space.SpaceOCS);\r\n this.boardlist.push(br);\r\n }\r\n if (config.isDrawVer && (config.arrayType === EWRackArrayType.Fixed || config.fullType === EFullType.ByHeight))\r\n {\r\n let len = actHeight + config.topCut;\r\n if (isDrawLy)\r\n len += config.brThick2;\r\n\r\n let br = Board.CreateBoard(len, size.y + config.frontCut, config.brThick2, BoardType.Vertical);\r\n\r\n let position = this.space.SpaceBox.min.clone();\r\n\r\n if (config.fullDir === EFullDir.Right)\r\n position.x += size.x - actWidth - config.brThick2;\r\n else\r\n {\r\n br.BoardProcessOption.bigHoleDir = FaceDirection.Back;\r\n position.x += actWidth;\r\n }\r\n //补板跟随\r\n if (config.followNarrow)\r\n {\r\n br.WriteAllObjectRecord();\r\n position.y += config.frontCut;\r\n br.Width -= config.frontCut;\r\n }\r\n\r\n //这里要跟外面平\r\n position.y -= config.frontCut;\r\n\r\n this.GetBoardProcessOption(br);\r\n br.Position = position;\r\n br.ApplyMatrix(this.space.SpaceOCS);\r\n this.boardlist.push(br);\r\n }\r\n }\r\n}\r\n","import { Matrix4, Vector2, Vector3 } from \"three\";\r\nimport { arrayLast, arrayRemoveDuplicateBySort, arraySortByNumber } from \"../../Common/ArrayExt\";\r\nimport { MakeMirrorMtx } from \"../../Common/Matrix4Utils\";\r\nimport { Board } from \"../../DatabaseServices/Entity/Board\";\r\nimport { Line } from \"../../DatabaseServices/Entity/Line\";\r\nimport { Polyline } from \"../../DatabaseServices/Entity/Polyline\";\r\nimport { AsVector2, equaln, equalv3, isParallelTo, MoveMatrix, polar, XAxis, YAxis, ZAxis } from \"../../Geometry/GeUtils\";\r\nimport { ISpaceParse } from \"../../Geometry/SpaceParse/ISpaceParse\";\r\nimport { IntersectOption } from \"../../GraphicsSystem/IntersectWith\";\r\nimport { BoardType } from \"../../UI/Store/BoardInterface\";\r\nimport { EFullDir, EFullType, EWRackArrayType, IR2WROption, IWineRackOption } from \"../../UI/Store/WineRackInterface\";\r\nimport { DrawWineRackTool, SIN45 } from \"./DrawWinRackTool\";\r\n\r\nexport interface IWineRackData\r\n{\r\n basePt: Vector3;\r\n brLength: number;\r\n\r\n}\r\nexport interface IParsePlRes\r\n{\r\n isOk: boolean;\r\n isLeft?: boolean;\r\n pl?: Polyline;\r\n length?: number;\r\n matInv?: Matrix4;\r\n basePt?: Vector3;\r\n thickness?: number;\r\n isVer?: boolean;\r\n isRo?: boolean;\r\n}\r\n\r\nexport const R2WRTolerance = 1e-3;\r\n\r\n/**\r\n * 斜酒格\r\n */\r\nexport class DrawObliqueWineRackTool extends DrawWineRackTool\r\n{\r\n Parse(space: ISpaceParse, config: IWineRackOption)\r\n {\r\n super.Parse(space, config);\r\n const size = space.Size;\r\n const spaceHeight = size.z;\r\n const spaceWidth = size.x;\r\n const ptMid = new Vector3(0.5 * size.x, size.z / 2, 0);\r\n let mirrorMtx: Matrix4;\r\n if (config.fullType === EFullType.ByWidth)\r\n mirrorMtx = MakeMirrorMtx(YAxis, ptMid);\r\n else\r\n mirrorMtx = MakeMirrorMtx(XAxis, ptMid);\r\n\r\n ptMid.set(0.5 * size.x, size.z / 2, 0);\r\n polar(ptMid, Math.PI * 0.75, -config.boardThick);\r\n\r\n if (config.isFull && config.arrayType !== EWRackArrayType.Fixed)\r\n {\r\n switch (config.fullType)\r\n {\r\n case EFullType.ByHeight:\r\n this.CalGridWidth(spaceHeight);\r\n break;\r\n case EFullType.ByWidth:\r\n this.CalGridWidth(spaceWidth);\r\n break;\r\n case EFullType.Symmetry:\r\n this.CalGridWidth(spaceHeight);\r\n this.CalGridWidth(spaceWidth);\r\n default:\r\n break;\r\n }\r\n\r\n let rectPl = new Polyline().Rectangle(spaceWidth, spaceHeight);\r\n let gripWidth = config.boardThick + config.gripWidth;\r\n\r\n let retPls: Polyline[] = [];\r\n let pls1 = this.CalculationRectPolylineArr(ptMid, rectPl, gripWidth);\r\n polar(ptMid, Math.PI * 0.75, -gripWidth);\r\n let pls2 = this.CalculationRectPolylineArr(ptMid, rectPl, -gripWidth);\r\n retPls.push(...pls1, ...pls2);\r\n\r\n for (let pl of [...pls1, ...pls2])\r\n {\r\n let plClone = pl.Clone();\r\n plClone.ApplyMatrix(mirrorMtx);\r\n retPls.push(plClone);\r\n }\r\n this.DrawBoardFormPolyLine(retPls);\r\n }\r\n else\r\n {\r\n let lWRData: IWineRackData[] = [];\r\n let rWRData: IWineRackData[] = [];\r\n let res: { width: number, height: number; };\r\n switch (config.arrayType)\r\n {\r\n case EWRackArrayType.ByWidth:\r\n res = this.CalcWineRackDataByWidth(lWRData, rWRData);\r\n break;\r\n case EWRackArrayType.ByCount:\r\n res = this.CalcWineRackDataByCount(lWRData, rWRData);\r\n break;\r\n case EWRackArrayType.Fixed:\r\n res = this.CalcWineRackDataByFixed(lWRData, rWRData);\r\n }\r\n let pls: Polyline[] = [];\r\n for (let data of lWRData)\r\n {\r\n pls.push(this.CreatePolylineByWineData(data));\r\n }\r\n\r\n rWRData.sort((d1, d2) =>\r\n {\r\n if (equaln(d1.basePt.x, d2.basePt.x))\r\n {\r\n return d1.basePt.y - d2.basePt.y;\r\n }\r\n else\r\n return d2.basePt.x - d1.basePt.x;\r\n });\r\n\r\n for (let data of rWRData)\r\n {\r\n pls.push(this.CreatePolylineByWineData(data, false));\r\n }\r\n\r\n //补板\r\n this.AddLayerOrVerticalBoard(res.width, res.height);\r\n\r\n this.DrawBoardFormPolyLine(pls, res.width);\r\n }\r\n }\r\n\r\n private CalGridWidth(length: number)\r\n {\r\n const count = (length - this.Config.boardThick * 2 / SIN45) / ((this.Config.boardThick + this.Config.gripWidth) * Math.sqrt(2));\r\n this.Config.gripWidth = ((length - this.Config.boardThick / SIN45) / Math.floor(count)) / Math.sqrt(2) - this.Config.boardThick;\r\n }\r\n /**获取矩形多段线的4个对角点并判断是否有效 */\r\n private GetRect4Pts(xline: Line, rectPl: Polyline, p1: Vector3, p2: Vector3, p3: Vector3, p4: Vector3)\r\n {\r\n let res1 = this.GetRect2Pts(xline, rectPl, p1, p2);\r\n let vec = polar(new Vector3(), Math.PI * 0.75, this.Config.boardThick);\r\n xline.ApplyMatrix(MoveMatrix(vec));\r\n let res2 = this.GetRect2Pts(xline, rectPl, p3, p4);\r\n return res1 && res2 && p1.distanceTo(p2) > this.Config.gripWidth;\r\n }\r\n /**获取矩形一边的点 */\r\n private GetRect2Pts(xline: Line, rectPl: Polyline, p1: Vector3, p2: Vector3)\r\n {\r\n let intPts = xline.IntersectWith(rectPl, IntersectOption.ExtendBoth);\r\n if (intPts.length === 2)\r\n {\r\n p1.copy(intPts[0]);\r\n p2.copy(intPts[1]);\r\n if (p1.x > p2.x)\r\n {\r\n let tmpPt = p2.clone();\r\n p2.copy(p1);\r\n p1.copy(tmpPt);\r\n }\r\n return true;\r\n }\r\n return false;\r\n }\r\n /**按格子宽获取酒格数据 */\r\n private CalcWineRackDataByWidth(lWRDataList: IWineRackData[], rWRDataList: IWineRackData[])\r\n {\r\n let size = this.space.Size;\r\n let Config = this.Config;\r\n\r\n let widthCount = 0, heightCount = 0, gripWidth = 0;\r\n let width = size.x - 2 * Config.boardThick * SIN45;\r\n let height = size.z - 2 * Config.boardThick * SIN45;\r\n if (Config.fullType === EFullType.ByWidth)\r\n {\r\n widthCount = Math.floor(width / ((Config.gripWidth + Config.boardThick) * SIN45));\r\n gripWidth = width / widthCount;\r\n\r\n //处理锁定个数\r\n if (!Config.isLock)\r\n {\r\n heightCount = Math.floor(height / gripWidth);\r\n }\r\n else\r\n {\r\n heightCount = Math.floor(Config.heightCount * 2);\r\n }\r\n height = heightCount * gripWidth + 2 * Config.boardThick * SIN45;\r\n width = size.x;\r\n }\r\n else\r\n {\r\n heightCount = Math.floor(height / ((Config.gripWidth + Config.boardThick) * SIN45));\r\n gripWidth = height / heightCount;\r\n\r\n //处理锁定个数\r\n\r\n if (!Config.isLock)\r\n {\r\n widthCount = Math.floor(width / gripWidth);\r\n }\r\n else\r\n {\r\n widthCount = Math.floor(Config.widthCount * 2);\r\n }\r\n\r\n width = widthCount * gripWidth + 2 * Config.boardThick * SIN45;\r\n height = size.z;\r\n }\r\n this.GetWineRackData(width, height, gripWidth, Config.boardThick, widthCount, heightCount, lWRDataList, rWRDataList);\r\n return {\r\n width: width, height: height\r\n };\r\n }\r\n private CalcWineRackDataByCount(lWRDataList: IWineRackData[], rWRDataList: IWineRackData[])\r\n {\r\n const config = this.Config;\r\n const size = this.space.Size;\r\n let widthCount = Math.floor(config.widthCount * 2);\r\n let heightCount = Math.floor(config.heightCount * 2);\r\n let gripWidth = (size.x - 2 * config.boardThick * SIN45) / widthCount;\r\n let width = 0;\r\n let height = 0;\r\n\r\n if (config.fullType === EFullType.ByWidth)\r\n {\r\n gripWidth = (size.x - 2 * config.boardThick * SIN45) / widthCount;\r\n width = size.x;\r\n if (!config.isLock) //如果没锁定个数\r\n {\r\n heightCount = Math.floor((size.z - 2 * config.boardThick * SIN45) / gripWidth + 1e-3);\r\n }\r\n height = heightCount * gripWidth + 2 * config.boardThick * SIN45;\r\n }\r\n else\r\n {\r\n gripWidth = (size.z - 2 * config.boardThick * SIN45) / heightCount;\r\n if (!config.isLock)//如果没有锁定个数\r\n {\r\n widthCount = Math.floor((size.x - 2 * config.boardThick * SIN45) / gripWidth);\r\n }\r\n width = widthCount * gripWidth + 2 * config.boardThick * SIN45;\r\n height = size.z;\r\n }\r\n\r\n this.GetWineRackData(width, height, gripWidth, config.boardThick, widthCount, heightCount, lWRDataList, rWRDataList);\r\n return {\r\n width: width, height: height\r\n };\r\n }\r\n CalcWineRackDataByFixed(lWRDataList: IWineRackData[], rWRDataList: IWineRackData[])\r\n {\r\n const config = this.Config;\r\n let widthCount = Math.floor(config.widthCount * 2);\r\n let heightCount = Math.floor(config.heightCount * 2);\r\n let gripWidth = config.gripWidth * SIN45;\r\n let width = widthCount * gripWidth + 2 * config.boardThick * SIN45;\r\n let height = heightCount * gripWidth + 2 * config.boardThick * SIN45;\r\n\r\n this.GetWineRackData(width, height, gripWidth, config.boardThick, widthCount, heightCount, lWRDataList, rWRDataList);\r\n return {\r\n width: width, height: height\r\n };\r\n }\r\n /**构建酒格正面多段线组*/\r\n CalculationRectPolylineArr(ptMid: Vector3, rectPl: Polyline, gripWidth: number)\r\n {\r\n let pls: Polyline[] = [];\r\n let pt = ptMid.clone();\r\n while (true)\r\n {\r\n let pl = this.CalculationRectPolyline(pt, rectPl);\r\n if (!pl) break;\r\n\r\n polar(pt, Math.PI * 0.75, gripWidth);\r\n pls.push(pl);\r\n }\r\n return pls;\r\n }\r\n /**构建酒格正面多段线*/\r\n CalculationRectPolyline(pt: Vector3, rectPl: Polyline)\r\n {\r\n const xline = new Line(pt, pt.clone().add(new Vector3(1, 1)));\r\n const p1 = new Vector3();\r\n const p2 = new Vector3();\r\n const p3 = new Vector3();\r\n const p4 = new Vector3();\r\n if (!this.GetRect4Pts(xline, rectPl, p1, p2, p3, p4))\r\n {\r\n return null;\r\n }\r\n\r\n let minDis = this.Config.boardThick / Math.sqrt(2);\r\n //如果左边停靠\r\n if (p1.x < minDis)\r\n {\r\n p1.copy(polar(p3.clone(), Math.PI * -0.25, this.Config.boardThick));\r\n }\r\n else\r\n {\r\n p3.copy(polar(p1.clone(), Math.PI * 0.75, this.Config.boardThick));\r\n }\r\n //右边点 上面停靠\r\n let size = this.space.Size;\r\n if (p2.y > size.z - minDis)\r\n {\r\n p2.copy(polar(p4.clone(), -Math.PI * 0.25, this.Config.boardThick));\r\n }\r\n else\r\n {\r\n p4.copy(polar(p2.clone(), Math.PI * 0.75, this.Config.boardThick));\r\n }\r\n\r\n if (p1.distanceTo(p2) < (this.Config.gripWidth + this.Config.boardThick * 1.8) && p1.y > this.Config.boardThick * 2)\r\n return null;\r\n\r\n let lineData = [p1, p2, p4, p3].map(p =>\r\n {\r\n return {\r\n pt: AsVector2(p),\r\n bul: 0\r\n };\r\n });\r\n let pl = new Polyline(lineData);\r\n pl.CloseMark = true;\r\n return pl;\r\n }\r\n //获取酒格数据\r\n GetWineRackData(width: number,\r\n height: number,\r\n gripWidth: number,\r\n brThick: number,\r\n widthCount: number,\r\n heightCount: number,\r\n lWRDataList: IWineRackData[],\r\n rWRDataList: IWineRackData[])\r\n {\r\n let data: IWineRackData;\r\n for (let i = 0; i < Math.floor(widthCount / 2); i++)\r\n {\r\n let p1 = gripWidth + brThick * SIN45 + gripWidth * i * 2;\r\n data = {\r\n basePt: new Vector3(p1, 0, 0),\r\n brLength: 0\r\n };\r\n if (width - p1 > height - brThick * SIN45)\r\n {\r\n data.brLength = (height - brThick * SIN45) / SIN45;\r\n }\r\n else\r\n {\r\n data.brLength = (width - p1) / SIN45;\r\n }\r\n rWRDataList.push(data);\r\n }\r\n for (let i = 0; i < Math.floor(heightCount / 2); i++)\r\n {\r\n let p1 = gripWidth + brThick * SIN45 + i * gripWidth * 2;\r\n data = {\r\n basePt: new Vector3(brThick * SIN45, p1 - brThick * SIN45, 0),\r\n brLength: 0\r\n };\r\n if (height - p1 > width - brThick * SIN45)\r\n {\r\n data.brLength = (width - brThick * SIN45) / SIN45;\r\n }\r\n else\r\n {\r\n data.brLength = (height - p1) / SIN45;\r\n }\r\n rWRDataList.push(data);\r\n }\r\n for (let i = 0; i < Math.floor(widthCount / 2); i++)\r\n {\r\n let p1 = gripWidth + i * gripWidth * 2;\r\n data = {\r\n basePt: new Vector3(p1 + brThick * SIN45, 2 * brThick * SIN45, 0),\r\n brLength: 0\r\n };\r\n if (equaln(p1, height - brThick * SIN45 * 2))\r\n {\r\n data.brLength = (height - brThick * SIN45 * 2) / SIN45;\r\n }\r\n else if (p1 > height - brThick * SIN45 * 3)\r\n {\r\n data.brLength = (height - brThick * SIN45 * 3) / SIN45;\r\n }\r\n else\r\n {\r\n data.brLength = (p1 - brThick * SIN45) / SIN45;\r\n }\r\n lWRDataList.push(data);\r\n }\r\n\r\n if (widthCount % 2 === 0)\r\n {\r\n for (let i = 0; i < Math.floor(heightCount / 2); i++)\r\n {\r\n let p1 = gripWidth + 2 * brThick * SIN45 + i * gripWidth * 2;\r\n data = {\r\n basePt: new Vector3(width - brThick * SIN45, p1, 0),\r\n brLength: 0\r\n };\r\n if (equaln(height - p1, width - 2 * brThick * SIN45))\r\n {\r\n data.brLength = (height - p1) / SIN45;\r\n }\r\n else if (height - p1 - brThick * SIN45 > width - 2 * brThick * SIN45)\r\n {\r\n data.brLength = (width - brThick * SIN45 * 3) / SIN45;\r\n }\r\n else\r\n {\r\n data.brLength = (height - p1 - brThick * SIN45) / SIN45;\r\n }\r\n lWRDataList.push(data);\r\n }\r\n }\r\n else\r\n {\r\n for (let i = 0; i < Math.floor(heightCount / 2) + 1; i++)\r\n {\r\n let p1 = 0;\r\n if (i == 0)\r\n {\r\n p1 = brThick * SIN45;\r\n data = {\r\n basePt: new Vector3(width, p1, 0),\r\n brLength: 0\r\n };\r\n if (equaln(height, width, 1e-3))\r\n {\r\n data.brLength = (width - brThick * SIN45) / SIN45;\r\n }\r\n else if (height - p1 > width - 2 * brThick * SIN45)\r\n {\r\n data.brLength = (width - brThick * SIN45 * 2) / SIN45;\r\n }\r\n else\r\n {\r\n data.brLength = (height - p1 - brThick * SIN45) / SIN45;\r\n }\r\n }\r\n else\r\n {\r\n p1 = 2 * brThick * SIN45 + i * gripWidth * 2;\r\n data = {\r\n basePt: new Vector3(width - brThick * SIN45, p1, 0),\r\n brLength: 0\r\n };\r\n if (height - p1 > brThick)\r\n {\r\n if (equaln(height - p1, width - 2 * brThick * SIN45, 1e-3))\r\n {\r\n data.brLength = (height - p1) / SIN45;\r\n }\r\n else if (height - p1 > width - brThick * SIN45)\r\n {\r\n data.brLength = (width - brThick * SIN45 * 3) / SIN45;\r\n }\r\n else\r\n {\r\n data.brLength = (height - p1 - brThick * SIN45) / SIN45;\r\n }\r\n }\r\n else\r\n {\r\n continue;//这里需要跳出.\r\n }\r\n }\r\n lWRDataList.push(data);\r\n }\r\n }\r\n }\r\n /**根据酒格数据获取多段线 */\r\n private CreatePolylineByWineData(data: IWineRackData, isLeft = true)\r\n {\r\n let thick = this.Config.boardThick;\r\n let lineData = [\r\n {\r\n pt: new Vector2(),\r\n bul: 0\r\n },\r\n {\r\n pt: new Vector2(thick, 0),\r\n bul: 0\r\n },\r\n {\r\n pt: new Vector2(thick, data.brLength),\r\n bul: 0\r\n },\r\n {\r\n pt: new Vector2(0, data.brLength),\r\n bul: 0\r\n },\r\n ];\r\n let pl = new Polyline(lineData);\r\n pl.CloseMark = true;\r\n let mat = MoveMatrix(new Vector3(thick))\r\n .multiply(new Matrix4().makeRotationZ(0.25 * Math.PI * (isLeft ? 1 : -1)))\r\n .multiply(MoveMatrix(new Vector3(-thick)));\r\n pl.ApplyMatrix(mat)\r\n .ApplyMatrix(MoveMatrix(data.basePt.add(new Vector3(-thick))));\r\n return pl;\r\n }\r\n /**根据多段线组构建酒格 */\r\n protected DrawBoardFormPolyLine(pls: Polyline[], actualWidth?: number, config?: IR2WROption)\r\n {\r\n const leftData: IParsePlRes[] = [];\r\n const rightData: IParsePlRes[] = [];\r\n for (let pl of pls)\r\n {\r\n let data = this.ParsePolyLine(pl);\r\n if (!data.isOk)\r\n continue;\r\n if (data.isLeft)\r\n leftData.push(data);\r\n else\r\n rightData.push(data);\r\n }\r\n\r\n this.CreateBoard(leftData, rightData, actualWidth, config);\r\n this.CreateBoard(rightData, leftData, actualWidth, config);\r\n }\r\n private ParsePolyLine(pl: Polyline): IParsePlRes\r\n {\r\n if (pl.IsClose)\r\n {\r\n if (pl.EndParam !== 4)\r\n {\r\n return {\r\n isOk: false\r\n };\r\n }\r\n\r\n let pts = pl.GetStretchPoints();\r\n\r\n if (equalv3(pts[0], arrayLast(pts)))\r\n pts.pop();\r\n\r\n /*****统一初始形状\r\n * **** h\r\n * * *\r\n * 0 **** t\r\n */\r\n pts.sort((a, b) =>\r\n {\r\n if (equaln(a.y, b.y))\r\n return a.x - b.x;\r\n else\r\n return a.y - b.y;\r\n });\r\n let pts1 = pts.splice(0, 2);\r\n pts1.sort((a, b) => a.x - b.x);\r\n pts.sort((a, b) => a.distanceTo(pts1[1]) - b.distanceTo(pts1[1]));\r\n pts.unshift(...pts1);\r\n const area = pl.Area;\r\n\r\n let v1 = pts[1].clone().clone().sub(pts[0]);\r\n let v2 = arrayLast(pts).clone().sub(pts[0]);\r\n\r\n let [vecY, vecX] = v1.length() > v2.length() ? [v1, v2] : [v2, v1];\r\n\r\n let length = vecY.length();\r\n let thick = vecX.length();\r\n let mat = new Matrix4().makeBasis(vecX.normalize(), vecY.normalize(), ZAxis).setPosition(pts[0]);\r\n let matInv = new Matrix4().getInverse(mat);\r\n\r\n let bp = pts[0].clone().negate();\r\n\r\n if (equaln(length * thick, area, 5))\r\n {\r\n let an = vecY.angleTo(XAxis);\r\n\r\n if (equaln(an, Math.PI / 4, R2WRTolerance))\r\n {\r\n pts.sort((p1, p2) => p2.x - p1.x);\r\n return {\r\n isOk: true,\r\n isLeft: true,\r\n pl,\r\n length,\r\n matInv,\r\n basePt: new Vector3(pts[0].x, 0, pts[0].y),\r\n thickness: thick,\r\n isRo: true,\r\n };\r\n }\r\n else if (equaln(an, 3 * Math.PI / 4, R2WRTolerance))\r\n {\r\n pts.sort((p1, p2) => p1.y - p2.y);\r\n return {\r\n isOk: true,\r\n isLeft: false,\r\n pl,\r\n length,\r\n matInv,\r\n basePt: new Vector3(pts[0].x, 0, pts[0].y),\r\n thickness: thick,\r\n isRo: true,\r\n };\r\n }\r\n else if (isParallelTo(vecX, XAxis, R2WRTolerance))\r\n {\r\n return {\r\n isOk: true,\r\n isLeft: false,\r\n pl,\r\n length,\r\n matInv: new Matrix4().setPosition(bp),\r\n basePt: new Vector3(pts[0].x, 0, pts[0].y),\r\n thickness: thick,\r\n isVer: true,\r\n isRo: false,\r\n };\r\n }\r\n else if (isParallelTo(vecX, YAxis, R2WRTolerance))\r\n {\r\n return {\r\n isOk: true,\r\n isLeft: true,\r\n pl,\r\n length,\r\n matInv: new Matrix4().setPosition(bp),\r\n basePt: new Vector3(pts[1].x, 0, pts[1].y),\r\n thickness: thick,\r\n isRo: false,\r\n };\r\n }\r\n else\r\n {\r\n return {\r\n isOk: false\r\n };\r\n }\r\n }\r\n\r\n }\r\n return {\r\n isOk: false\r\n };\r\n }\r\n /**绘制酒格 */\r\n private CreateBoard(lData: IParsePlRes[], rData: IParsePlRes[], actualWidth?: number, cof?: IR2WROption)\r\n {\r\n if (!lData.length)\r\n return;\r\n\r\n let leftSeal: number, rightSeal: number, upSeal: number, downSeal: number, knifeRad: number;\r\n let config: IWineRackOption;\r\n if (cof)\r\n {\r\n leftSeal = cof.sealedLeft;\r\n rightSeal = cof.sealedRight;\r\n upSeal = cof.sealedUp;\r\n downSeal = cof.sealedDown;\r\n knifeRad = cof.knifeRadius;\r\n }\r\n else\r\n {\r\n config = this.Config;\r\n leftSeal = config.leftEdge;\r\n rightSeal = config.leftEdge;\r\n upSeal = config.leftEdge;\r\n downSeal = config.leftEdge;\r\n knifeRad = config.grooveLengthAdd;\r\n }\r\n\r\n for (let i = 0; i < lData.length; i++)\r\n {\r\n let d = lData[i];\r\n let dists: number[] = [];\r\n for (let d2 of rData)\r\n {\r\n let intPts = d.pl.IntersectWith(d2.pl, IntersectOption.ExtendNone);\r\n if (intPts.length === 4)\r\n {\r\n dists.push(...intPts.map(p =>\r\n {\r\n let p1 = p.applyMatrix4(d.matInv);\r\n\r\n if (!d.isRo && !d.isVer)\r\n return Math.abs(p1.x);\r\n return Math.abs(p1.y);\r\n }));\r\n }\r\n }\r\n arraySortByNumber(dists);\r\n arrayRemoveDuplicateBySort(dists, (n1, n2) => equaln(n1, n2, R2WRTolerance));\r\n\r\n let pl = this.GetPolyline(d, dists, cof);\r\n if (pl)\r\n {\r\n let br = Board.CreateBoard(1, 1, d.thickness ?? config.boardThick, d.isVer ? BoardType.Vertical : BoardType.Layer);\r\n if (d.isLeft)\r\n br.Name = \"右板\" + (lData.length - i);\r\n else\r\n br.Name = \"左板\" + (i + 1);\r\n br.ContourCurve = pl;\r\n this.ParseHighSealing(br, leftSeal, rightSeal, upSeal, downSeal, d.isLeft);\r\n br.KnifeRadius = knifeRad;\r\n if (d.isRo)\r\n br.RotateBoard(0, Math.PI / 4 * (d.isLeft ? -1 : 1), 0);\r\n br.ApplyMatrix(MoveMatrix(this.space.SpaceBox.min));\r\n br.ApplyMatrix(MoveMatrix(d.basePt));\r\n\r\n if (config && (config.fullType === EFullType.ByHeight || config.arrayType === EWRackArrayType.Fixed)\r\n && config.fullDir === EFullDir.Right)\r\n {\r\n br.ApplyMatrix(MoveMatrix(new Vector3(this.space.Size.x - (actualWidth ?? 0))));\r\n }\r\n br.ApplyMatrix(this.space.SpaceOCS);\r\n this.boardlist.push(br);\r\n }\r\n }\r\n }\r\n /**构建酒格形状,加入齿 */\r\n private GetPolyline(data: IParsePlRes, dists: number[], cof?: IR2WROption)\r\n {\r\n let len = data.length;\r\n let isLeft = data.isLeft;\r\n\r\n const size = this.space.Size;\r\n let pl = new Polyline();\r\n pl.Rectangle(size.y, len);\r\n\r\n let addWidth: number;\r\n let leftEdge: number;\r\n let rightEdge: number;\r\n let knifeRad: number;\r\n if (cof)\r\n {\r\n addWidth = cof.addLen;\r\n leftEdge = cof.sealedLeft;\r\n rightEdge = cof.sealedRight;\r\n knifeRad = cof.knifeRadius;\r\n }\r\n else\r\n {\r\n const config = this.Config;\r\n addWidth = config.grooveWidthAdd;\r\n leftEdge = config.leftEdge;\r\n rightEdge = config.rightEdge;\r\n knifeRad = config.grooveLengthAdd;\r\n }\r\n\r\n if (isLeft)\r\n {\r\n if (!data.isVer)\r\n {\r\n let newDist = dists.map(d => len - d);\r\n dists.length = 0;\r\n dists.push(...newDist);\r\n }\r\n addWidth = (addWidth - 2 * leftEdge) / 2;\r\n }\r\n else\r\n addWidth = (addWidth - 2 * rightEdge) / 2;\r\n\r\n if (dists.length % 2 === 0 && dists.length > 1)\r\n {\r\n let pts: Vector2[] = [];\r\n for (let i = 0; i < dists.length; i++)\r\n {\r\n if (i % 2 === 0)\r\n {\r\n if (isLeft)\r\n {\r\n pts.push(new Vector2(0, dists[i] + addWidth));\r\n pts.push(new Vector2(size.y / 2 + knifeRad, dists[i] + addWidth));\r\n }\r\n else\r\n {\r\n pts.push(new Vector2(size.y, dists[i] - addWidth));\r\n pts.push(new Vector2(size.y / 2 - knifeRad, dists[i] - addWidth));\r\n }\r\n }\r\n else\r\n {\r\n if (isLeft)\r\n {\r\n pts.push(new Vector2(size.y / 2 + knifeRad, dists[i] - addWidth));\r\n pts.push(new Vector2(0, dists[i] - addWidth));\r\n }\r\n else\r\n {\r\n pts.push(new Vector2(size.y / 2 - knifeRad, dists[i] + addWidth));\r\n pts.push(new Vector2(size.y, dists[i] + addWidth));\r\n }\r\n }\r\n }\r\n pl.AddVertexAt(isLeft ? pl.NumberOfVertices : 2, pts);\r\n }\r\n return pl;\r\n }\r\n}\r\n","import { Vector3 } from \"three\";\r\nimport { Board } from \"../../DatabaseServices/Entity/Board\";\r\nimport { Polyline } from \"../../DatabaseServices/Entity/Polyline\";\r\nimport { AsVector2, MoveMatrix } from \"../../Geometry/GeUtils\";\r\nimport { ISpaceParse } from \"../../Geometry/SpaceParse/ISpaceParse\";\r\nimport { BoardType } from \"../../UI/Store/BoardInterface\";\r\nimport { EWRackArrayType, IWineRackOption } from \"../../UI/Store/WineRackInterface\";\r\nimport { DrawWineRackTool } from \"./DrawWinRackTool\";\r\n\r\n/**\r\n * 正酒格\r\n */\r\nexport class DrawUprightWineRackTool extends DrawWineRackTool\r\n{\r\n Parse(space: ISpaceParse, config: IWineRackOption)\r\n {\r\n super.Parse(space, config);\r\n let size = space.Size;\r\n let gripWidth = config.gripWidth;\r\n let brThick = config.boardThick;\r\n let spaceHeight = size.z;\r\n let spaceWidth = size.x;\r\n let gripHeight = gripWidth;\r\n let actualHeight = spaceHeight;\r\n let actualWidth = spaceWidth;\r\n\r\n switch (config.arrayType)\r\n {\r\n case EWRackArrayType.ByWidth:\r\n // let tempWidthCount = 0;\r\n // let tempHeightCount = 0;\r\n // if (widCount > 0 || heightCount > 0)\r\n // {\r\n // tempWidthCount = Math.floor(spaceWidth / (gripWidth + brThick));\r\n // tempHeightCount = Math.floor(spaceHeight / (gripWidth + brThick));\r\n // gripWidth = (spaceWidth - (tempWidthCount - 1) * brThick) / tempWidthCount;\r\n // gripHeight = (spaceHeight - (tempHeightCount - 1) * brThick) / tempHeightCount;\r\n // if (widCount > 0)\r\n // {\r\n // heightCount = tempHeightCount;\r\n // actualWidth = gripWidth * widCount + brThick * (widCount - 1);\r\n // }\r\n // else if (heightCount > 0)\r\n // {\r\n // widCount = tempWidthCount;\r\n // actualWidth = gripWidth * widCount + brThick * (widCount - 1);\r\n // }\r\n // }\r\n config.widthCount = Math.floor(spaceWidth / (gripWidth + brThick));\r\n config.heightCount = Math.floor(spaceHeight / (gripWidth + brThick));\r\n config.gripWidth = (spaceWidth - (config.widthCount - 1) * brThick) / config.widthCount;\r\n gripHeight = (spaceHeight - (config.heightCount - 1) * brThick) / config.heightCount;\r\n break;\r\n case EWRackArrayType.ByCount:\r\n if (config.widthCount > 0)\r\n {\r\n config.widthCount = Math.floor(config.widthCount);\r\n }\r\n else\r\n {\r\n let gk = (spaceHeight - 2 * brThick) / config.heightCount;\r\n config.widthCount = Math.floor((spaceWidth - 2 * brThick) / gk + 1e-6);\r\n }\r\n if (config.heightCount > 0)\r\n {\r\n config.heightCount = Math.floor(config.heightCount);\r\n }\r\n else\r\n {\r\n let gk = (spaceWidth - 2 * config.heightCount) / config.heightCount;\r\n config.heightCount = Math.floor((spaceHeight - 2 * brThick) / gk + 1e-6);\r\n }\r\n config.gripWidth = (spaceWidth - (config.widthCount - 1) * brThick) / config.widthCount;\r\n gripHeight = (spaceHeight - (config.heightCount - 1) * brThick) / config.heightCount;\r\n break;\r\n case EWRackArrayType.Fixed:\r\n config.widthCount = Math.floor(config.widthCount);\r\n config.heightCount = Math.floor(config.heightCount);\r\n actualWidth = gripWidth * config.widthCount + brThick * (config.widthCount - 1);\r\n actualHeight = gripWidth * config.heightCount + brThick * (config.heightCount - 1);\r\n default:\r\n break;\r\n }\r\n\r\n if (config.widthCount <= 0 || config.heightCount <= 0)\r\n throw `绘制酒格失败,酒格个数异常! 宽个数:${config.widthCount} 高个数:${config.heightCount}`;\r\n\r\n config.widthCount--;\r\n config.heightCount--;\r\n this.BuildBoard(gripHeight, actualWidth, actualHeight, space);\r\n // this.AddLayerOrVerticalBoard(actualWidth, actualHeight);\r\n }\r\n BuildBoard(gripHeight: number, spaceWidth: number, spaceHeight: number, space: ISpaceParse)\r\n {\r\n const config = this.Config;\r\n let min = space.SpaceBox.min;\r\n let size = space.Size;\r\n let brThick = config.boardThick;\r\n\r\n let verBr = Board.CreateBoard(spaceHeight, size.y, brThick, BoardType.Vertical);\r\n this.ParseBrTooth(verBr, gripHeight);\r\n for (let i = 1; i <= config.widthCount; i++)\r\n {\r\n let br = verBr.Clone();\r\n br.Name = \"右板\" + i;\r\n br.ApplyMatrix(MoveMatrix(min.clone().add(new Vector3(config.gripWidth * i + (i - 1) * brThick)))).ApplyMatrix(space.SpaceOCS);\r\n this.boardlist.push(br);\r\n }\r\n\r\n let lyBr = Board.CreateBoard(spaceWidth, size.y, brThick);\r\n this.ParseBrTooth(lyBr);\r\n for (let i = 1; i <= config.heightCount; i++)\r\n {\r\n let br = lyBr.Clone();\r\n br.Name = \"左板\" + i;\r\n br.ApplyMatrix(MoveMatrix(\r\n min.clone().add(new Vector3(spaceWidth, 0, gripHeight * i + (i - 1) * brThick))))\r\n .ApplyMatrix(space.SpaceOCS);\r\n this.boardlist.push(br);\r\n }\r\n }\r\n ParseBrTooth(br: Board, gripHeight?: number)\r\n {\r\n const config = this.Config;\r\n let initPts: Vector3[] = [];\r\n\r\n let addWidth = config.grooveWidthAdd;\r\n let topEdge = config.topEdge;\r\n let bottomEdge = config.bottomEdge;\r\n let leftEdge = config.leftEdge;\r\n let rightEdge = config.rightEdge;\r\n let grooveLenAdd = config.grooveLengthAdd;\r\n\r\n br.BoardProcessOption.sealedUp = topEdge.toString();\r\n br.BoardProcessOption.sealedDown = bottomEdge.toString();\r\n br.BoardProcessOption.sealedLeft = leftEdge.toString();\r\n br.BoardProcessOption.sealedRight = rightEdge.toString();\r\n\r\n if (br.BoardType === BoardType.Layer)\r\n {\r\n addWidth = (addWidth - 2 * leftEdge) / 2;\r\n let p1 = new Vector3(0, config.gripWidth - addWidth);\r\n let p2 = new Vector3(br.Width / 2 + grooveLenAdd, config.gripWidth - addWidth);\r\n let p3 = new Vector3(br.Width / 2 + grooveLenAdd, config.gripWidth + br.Thickness + addWidth);\r\n let p4 = new Vector3(0, config.gripWidth + br.Thickness + addWidth);\r\n initPts.push(p1, p2, p3, p4);\r\n for (let i = 2; i <= config.widthCount; i++)\r\n {\r\n initPts.push(\r\n ...[p1, p2, p3, p4].map(p => p.clone().add(new Vector3(0, (config.gripWidth + br.Thickness) * (i - 1))))\r\n );\r\n }\r\n initPts.reverse();\r\n let cu = br.ContourCurve as Polyline;\r\n cu.AddVertexAt(cu.EndParam, initPts.map(p => AsVector2(p)));\r\n br.ContourCurve = cu;\r\n }\r\n else\r\n {\r\n addWidth = (addWidth - 2 * rightEdge) / 2;\r\n let p1 = new Vector3(br.Width, gripHeight - addWidth);\r\n let p2 = new Vector3(br.Width / 2 - grooveLenAdd, gripHeight - addWidth);\r\n let p3 = new Vector3(br.Width / 2 - grooveLenAdd, gripHeight + br.Thickness + addWidth);\r\n let p4 = new Vector3(br.Width, gripHeight + br.Thickness + addWidth);\r\n initPts.push(p1, p2, p3, p4);\r\n for (let i = 2; i <= config.heightCount; i++)\r\n {\r\n initPts.push(\r\n ...[p1, p2, p3, p4].map(p => p.clone().add(new Vector3(0, (gripHeight + br.Thickness) * (i - 1))))\r\n );\r\n }\r\n let cu = br.ContourCurve as Polyline;\r\n cu.AddVertexAt(2, initPts.map(p => AsVector2(p)));\r\n br.ContourCurve = cu;\r\n }\r\n this.ParseHighSealing(br, config.leftEdge, config.rightEdge, config.topEdge, config.bottomEdge, br.BoardType === BoardType.Layer);\r\n }\r\n}\r\n","import { Vector3 } from \"three\";\r\nimport { ExtendsBoardThickness } from \"../../../Add-on/DrawBoard/BuildBoardTool\";\r\nimport { DrawObliqueWineRackTool } from \"../../../Add-on/DrawWineRack/DrawObliqueWineRackTool\";\r\nimport { DrawUprightWineRackTool } from \"../../../Add-on/DrawWineRack/DrawUprightWineRackTool\";\r\nimport { DrawWineRackTool } from \"../../../Add-on/DrawWineRack/DrawWinRackTool\";\r\nimport { DefaultWineRackConfig } from \"../../../Editor/DefaultConfig\";\r\nimport { Box3Ext } from \"../../../Geometry/Box\";\r\nimport { ISpaceParse } from \"../../../Geometry/SpaceParse/ISpaceParse\";\r\nimport { EWineRackType, IWineRackOption } from \"../../../UI/Store/WineRackInterface\";\r\nimport { Factory } from \"../../CADFactory\";\r\nimport { CADFiler } from \"../../CADFiler\";\r\nimport { Board } from \"../../Entity/Board\";\r\nimport { TemplateRecord } from \"../TemplateRecord\";\r\n\r\n@Factory\r\nexport class TemplateWineRackRecord extends TemplateRecord\r\n{\r\n private option: IWineRackOption = { ...DefaultWineRackConfig };\r\n constructor()\r\n {\r\n super();\r\n this.name = \"酒格(自动)\";\r\n }\r\n get Option()\r\n {\r\n return Object.assign({}, this.option);\r\n }\r\n set Option(option: IWineRackOption)\r\n {\r\n this.WriteAllObjectRecord();\r\n Object.assign(this.option, option);\r\n ExtendsBoardThickness(this, option.boardThick);\r\n }\r\n protected async Update()\r\n {\r\n await super.Update();\r\n\r\n let bh = this.GetParam(\"BH\")?.value as number;\r\n if (bh)\r\n this.option.boardThick = bh;\r\n\r\n let bh2 = this.GetParam(\"BH2\")?.value as number;\r\n if (bh2)\r\n this.option.brThick2 = bh2;\r\n\r\n let wineRack: DrawWineRackTool;\r\n if (this.option.type === EWineRackType.Oblique)\r\n wineRack = DrawObliqueWineRackTool.GetInstance() as DrawObliqueWineRackTool;\r\n else\r\n wineRack = DrawUprightWineRackTool.GetInstance() as DrawUprightWineRackTool;\r\n\r\n let sbrs = this.PositioningSupportBoards;\r\n let space = new ISpaceParse(sbrs, this._CacheSpaceCS);\r\n space.ParseOK = true;\r\n space.SpaceBox = new Box3Ext(new Vector3(), this._CacheSpaceSize);\r\n\r\n wineRack.Parse(space, this.Option);\r\n\r\n let nbrs = wineRack.boardlist;\r\n\r\n for (let i = nbrs.length; i < this.Objects.length; i++)\r\n this.Objects[i].Object.Erase();\r\n\r\n for (let i = 0; i < nbrs.length; i++)\r\n {\r\n if (i < this.Objects.length)\r\n {\r\n let br = this.Objects[i].Object as Board;\r\n br.Erase(false);\r\n br.CopyFrom(nbrs[i]);\r\n br.SpaceOCS = this._CacheSpaceCS;\r\n }\r\n else\r\n {\r\n this._db.ModelSpace.Append(nbrs[i]);\r\n this.Objects.push(nbrs[i].Id);\r\n nbrs[i].SpaceOCS = this._CacheSpaceCS;\r\n }\r\n }\r\n }\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 super.ReadFile(file);\r\n\r\n this.option.type = file.Read();\r\n this.option.arrayType = file.Read();\r\n this.option.fullType = file.Read();\r\n this.option.isFull = file.Read();\r\n this.option.fullDir = file.Read();\r\n this.option.isLock = file.Read();\r\n this.option.heightCount = file.Read();\r\n this.option.widthCount = file.Read();\r\n\r\n this.option.isTotalDepth = file.Read();\r\n this.option.depth = file.Read();\r\n this.option.calcDepth = file.Read();\r\n this.option.gripWidth = file.Read();\r\n this.option.boardThick = file.Read();\r\n this.option.grooveWidthAdd = file.Read();\r\n\r\n this.option.leftEdge = file.Read();\r\n this.option.rightEdge = file.Read();\r\n this.option.topEdge = file.Read();\r\n this.option.bottomEdge = file.Read();\r\n\r\n this.option.frontCut = file.Read();\r\n this.option.leftCut = file.Read();\r\n this.option.rightCut = file.Read();\r\n this.option.topCut = file.Read();\r\n\r\n this.option.grooveLengthAdd = file.Read();\r\n this.option.isDrawLy = file.Read();\r\n this.option.isDrawVer = file.Read();\r\n this.option.brThick2 = file.Read();\r\n\r\n if (ver > 1)\r\n this.option.followNarrow = file.Read();\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(2);\r\n super.WriteFile(file);\r\n file.Write(this.option.type);\r\n file.Write(this.option.arrayType);\r\n file.Write(this.option.fullType);\r\n file.Write(this.option.isFull);\r\n file.Write(this.option.fullDir);\r\n file.Write(this.option.isLock);\r\n file.Write(this.option.heightCount);\r\n file.Write(this.option.widthCount);\r\n\r\n file.Write(this.option.isTotalDepth);\r\n file.Write(this.option.depth);\r\n file.Write(this.option.calcDepth);\r\n file.Write(this.option.gripWidth);\r\n file.Write(this.option.boardThick);\r\n file.Write(this.option.grooveWidthAdd);\r\n file.Write(this.option.leftEdge);\r\n file.Write(this.option.rightEdge);\r\n file.Write(this.option.topEdge);\r\n file.Write(this.option.bottomEdge);\r\n\r\n file.Write(this.option.frontCut);\r\n file.Write(this.option.leftCut);\r\n file.Write(this.option.rightCut);\r\n file.Write(this.option.topCut);\r\n\r\n file.Write(this.option.grooveLengthAdd);\r\n file.Write(this.option.isDrawLy);\r\n file.Write(this.option.isDrawVer);\r\n file.Write(this.option.brThick2);\r\n file.Write(this.option.followNarrow);\r\n }\r\n //#endregion\r\n}\r\n","import { Board } from \"../../DatabaseServices/Entity/Board\";\r\nimport { Entity } from \"../../DatabaseServices/Entity/Entity\";\r\nimport { HardwareCompositeEntity } from \"../../DatabaseServices/Hardware/HardwareCompositeEntity\";\r\nimport { ProcessingGroupRecord } from \"../../DatabaseServices/ProcessingGroup/ProcessingGroupRecord\";\r\nimport { TemplateLatticeRecord } from \"../../DatabaseServices/Template/ProgramTempate/TemplateLatticeRecord\";\r\nimport { TemplateTopBottomBoard } from \"../../DatabaseServices/Template/ProgramTempate/TemplateTopBottomBoard\";\r\nimport { TemplateWineRackRecord } from \"../../DatabaseServices/Template/ProgramTempate/TemplateWineRackRecord\";\r\nimport { TemplateRecord } from \"../../DatabaseServices/Template/TemplateRecord\";\r\nimport { BoardOpenDir, BoardType } from \"../../UI/Store/BoardInterface\";\r\n\r\nexport function IsDoor(en: Entity)\r\n{\r\n if (en.Template)\r\n {\r\n let temp = en.Template.Object as TemplateRecord;\r\n if (((temp?.Parent?.Object as TemplateRecord)?.Name === \"门板空间\"))\r\n return true;\r\n }\r\n // else //有时候 模块会被破坏,所以模块检测不是唯一标准\r\n if (en instanceof Board)\r\n {\r\n return en.OpenDir !== BoardOpenDir.None;\r\n }\r\n else if (en instanceof HardwareCompositeEntity)\r\n {\r\n return en.HardwareOption.model.includes(\"开门\");\r\n }\r\n return false;\r\n}\r\n\r\nexport function IsDrawer(en: Entity)\r\n{\r\n if (en.Template)\r\n {\r\n let temp = en.Template.Object as TemplateRecord;\r\n if (((temp?.Parent?.Object as TemplateRecord)?.Name === \"抽屉空间\"))\r\n return true;\r\n }\r\n\r\n return en.ProcessingGroupList.some(id => id && ((id.Object as ProcessingGroupRecord)?.Name === \"抽屉\"));;\r\n}\r\n\r\nexport function IsWinerack(en: Entity)\r\n{\r\n if (en.Template && en.Template.Object instanceof TemplateWineRackRecord)\r\n return true;\r\n\r\n return en.ProcessingGroupList.some(id => id && ((id.Object as ProcessingGroupRecord)?.Name === \"酒格\"));\r\n}\r\nexport function IsLattice(en: Entity)\r\n{\r\n if (en.Template && en.Template.Object instanceof TemplateLatticeRecord)\r\n return true;\r\n\r\n return en.ProcessingGroupList.some(id => id && ((id.Object as ProcessingGroupRecord)?.Name === \"格子抽\"));\r\n}\r\n\r\nexport function IsHandle(en: Entity)\r\n{\r\n if (en instanceof HardwareCompositeEntity)\r\n {\r\n if (en.Template)\r\n {\r\n let temp = en.Template.Object as TemplateRecord;\r\n if ((temp?.Parent?.Object as TemplateRecord)?.Name === \"拉手空间\")\r\n return true;\r\n }\r\n // else //有时候 模块会被破坏,所以模块检测不是唯一标准\r\n {\r\n return en.HardwareOption.name.includes(\"拉手\");\r\n }\r\n }\r\n}\r\nexport function IsHinge(en: Entity)\r\n{\r\n if (en instanceof HardwareCompositeEntity)\r\n {\r\n if (en.Template)\r\n {\r\n let temp = en.Template.Object as TemplateRecord;\r\n if ((temp?.Parent?.Object as TemplateRecord)?.Name === \"铰链空间\")\r\n return true;\r\n }\r\n // else //有时候 模块会被破坏,所以模块检测不是唯一标准\r\n {\r\n return en.HardwareOption.name.includes(\"铰链\");\r\n }\r\n }\r\n}\r\n\r\nexport function isDingDiBan(b: Board)\r\n{\r\n if (b.BoardType === BoardType.Layer)\r\n {\r\n if (b.Template && b.Template.Object instanceof TemplateTopBottomBoard)\r\n return true;\r\n return b.Name.includes(\"顶板\") || b.Name.includes(\"底板\");\r\n }\r\n return false;\r\n}\r\n","import { Geometry, MathUtils, Matrix4, Mesh, Object3D, ShapeGeometry, Vector3 } from 'three';\r\nimport { ColorMaterial } from '../../Common/ColorPalette';\r\nimport { setRotationOnAxis } from '../../Common/Matrix4Utils';\r\nimport { UpdateDraw } from '../../Common/Status';\r\nimport { Box3Ext } from '../../Geometry/Box';\r\nimport { GetBox, MoveMatrix } from '../../Geometry/GeUtils';\r\nimport { RenderType } from '../../GraphicsSystem/RenderType';\r\nimport { equaln } from '../../Nest/Common/Util';\r\nimport { Factory } from '../CADFactory';\r\nimport { CADFiler } from '../CADFiler';\r\nimport { Entity } from '../Entity/Entity';\r\n\r\nexport enum TextAligen\r\n{\r\n LeftTop = 3, Top = 1, RightTop = 5,\r\n LeftMid = 2, Mid = 0, RightMid = 4,\r\n LeftDown = 10, Down = 8, RightDown = 12,\r\n}\r\n\r\nconst ShapeCache = new Map();\r\nexport function DisposeTextShapeCache()\r\n{\r\n for (let [key, geo] of ShapeCache)\r\n geo.dispose();\r\n ShapeCache.clear();\r\n};\r\n\r\n/**\r\n * 单行文字实体\r\n */\r\n@Factory\r\nexport class Text extends Entity\r\n{\r\n protected OnlyRenderType = true;\r\n\r\n private _Align: TextAligen = TextAligen.LeftDown;\r\n constructor(pos?: Vector3,\r\n private _TextString: string = \"\",\r\n public _FontName: string = \"songti\",\r\n private _Height: number = 60,\r\n private _TextRotation: number = 0,\r\n )\r\n {\r\n super();\r\n pos && this._Matrix.setPosition(pos);\r\n this._TextRotation && setRotationOnAxis(this._Matrix, this.Normal, MathUtils.degToRad(this._TextRotation));\r\n }\r\n get TextRotation()\r\n {\r\n return this._TextRotation;\r\n }\r\n set TextRotation(v: number)\r\n {\r\n if (this._TextRotation === v) return;\r\n\r\n this.WriteAllObjectRecord();\r\n this._TextRotation = v;\r\n this.UpdateTranslate();\r\n }\r\n get TextString()\r\n {\r\n return this._TextString;\r\n }\r\n set TextString(str: string)\r\n {\r\n if (str !== this._TextString)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._TextString = str;\r\n this.Update();\r\n }\r\n }\r\n\r\n set TextAligen(al: TextAligen)\r\n {\r\n if (al === this._Align) return;\r\n this.WriteAllObjectRecord();\r\n this._Align = al;\r\n this.UpdateTranslate();\r\n }\r\n get TextAligen()\r\n {\r\n return this._Align;\r\n }\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 (equaln(v, this._Height)) return;\r\n\r\n this.WriteAllObjectRecord();\r\n this._Height = v;\r\n this.Update(UpdateDraw.Geometry);\r\n }\r\n //创建字体对象\r\n async AsyncUpdateDrawObject(obj: Object3D, renderType: RenderType)\r\n {\r\n \r\n }\r\n /**大概宽度 */\r\n get Width()\r\n {\r\n let count = 0;\r\n for (let i = 0; i < this._TextString.length; i++)\r\n {\r\n let code = this._TextString.charCodeAt(i);\r\n if (code > 255)\r\n count++;\r\n else\r\n count += 0.5;\r\n }\r\n return count * this._Height * 1.35;\r\n }\r\n\r\n get HasBoundingBox() { return this._CacheDrawObject.has(RenderType.Wireframe); }\r\n\r\n get BoundingBox()\r\n {\r\n let obj = this._CacheDrawObject.get(RenderType.Wireframe);\r\n if (obj && obj.children.length === 1)\r\n return GetBox(obj);\r\n\r\n return this.BoundingBoxInOCS.applyMatrix4((this.OCSNoClone));\r\n }\r\n\r\n get BoundingBoxInOCS(): Box3Ext\r\n {\r\n let w = Math.max(Math.abs(this.Width / 2), 1);\r\n let h = Math.max(Math.abs(this.Height / 2), 1);\r\n let box = new Box3Ext(\r\n new Vector3(-w, -h, 0),\r\n new Vector3(w, h, 0)\r\n );\r\n\r\n let offset = new Vector3;\r\n if (this.TextAligen & TextAligen.LeftMid)\r\n offset.x = w;\r\n if (this.TextAligen & TextAligen.RightMid)\r\n offset.x = -w;\r\n if (this.TextAligen & TextAligen.Top)\r\n offset.y = -h;\r\n if (this.TextAligen & TextAligen.Down)\r\n offset.y = h;\r\n\r\n box.translate(offset);\r\n return box;\r\n }\r\n\r\n UpdateTranslate()\r\n {\r\n for (let [type, obj] of this._CacheDrawObject)\r\n {\r\n this.UpdateObjectTranslate(obj);\r\n }\r\n }\r\n\r\n private UpdateObjectTranslate(obj: Object3D)\r\n {\r\n if (obj.children.length === 1)\r\n {\r\n let mesh = obj.children[0] as Mesh;\r\n\r\n let box = mesh.geometry.boundingBox;\r\n\r\n let p = new Vector3();\r\n if (this._Align & TextAligen.LeftMid)\r\n p.x = box.min.x;\r\n else if (this._Align & TextAligen.RightMid)\r\n p.x = box.max.x;\r\n\r\n else\r\n p.x = (box.min.x + box.max.x) / 2;\r\n\r\n if (this._Align & TextAligen.Top)\r\n p.y = box.max.y;\r\n else if (this._Align & TextAligen.Down)\r\n p.y = box.min.y;\r\n\r\n else\r\n p.y = (box.min.y + box.max.y) / 2;\r\n\r\n mesh.matrix = new Matrix4().makeRotationZ(this.TextRotation).multiply(\r\n new Matrix4().setPosition(p.negate())\r\n );\r\n\r\n obj.updateMatrixWorld(true);\r\n }\r\n }\r\n\r\n ApplyMatrix(m: Matrix4): this\r\n {\r\n super.ApplyMatrix(m);\r\n return this;\r\n }\r\n\r\n protected ApplyScaleMatrix(m: Matrix4): this\r\n {\r\n this.WriteAllObjectRecord();\r\n let p1 = this.Position;\r\n let p2 = new Vector3(0, this._Height).applyMatrix4(this.OCS);\r\n [p1, p2].forEach(p => p.applyMatrix4(m));\r\n this.Position = p1;\r\n this.Height = p1.distanceTo(p2);\r\n return this;\r\n }\r\n\r\n InitDrawObject(renderType: RenderType = RenderType.Wireframe): Object3D\r\n {\r\n let g = new Object3D();\r\n\r\n if (renderType !== RenderType.Wireframe)\r\n {\r\n let obj = this.CacheDrawObject.get(RenderType.Wireframe);\r\n if (obj && obj.children.length === 1 && (obj.children[0] as Mesh).geometry)\r\n {\r\n let color = (renderType > 100 || renderType === RenderType.Print) ? 0 : this.ColorIndex;\r\n let mesh = new Mesh((obj.children[0] as Mesh).geometry, ColorMaterial.GetBasicMaterial(color));\r\n g.add((mesh));\r\n g.updateMatrixWorld(true);\r\n this.UpdateObjectTranslate(g);\r\n return g;\r\n }\r\n }\r\n\r\n this.AsyncUpdateDrawObject(g, renderType);\r\n return g;\r\n }\r\n UpdateDrawObject(type: RenderType, obj: Object3D)\r\n {\r\n this.AsyncUpdateDrawObject(obj, type);\r\n }\r\n UpdateDrawObjectMaterial(renderType: RenderType, en: Object3D)\r\n {\r\n if (en && en.children.length === 1)\r\n {\r\n let mesh = en.children[0] as Mesh;\r\n //因为我们是OnlyRnderType 所以Print会变成WireframePrint,所以要用下面的写法\r\n let color = (renderType > 100 || renderType === RenderType.Print) ? 0 : this.ColorIndex;\r\n mesh.material = ColorMaterial.GetBasicMaterialDoubleSide(color);\r\n }\r\n }\r\n GetGripPoints(): Array\r\n {\r\n return [this.Position, new Vector3(0, this.Height).applyMatrix4(this.OCS)];\r\n }\r\n MoveGripPoints(indexList: number[], vec: Vector3)\r\n {\r\n\r\n if (indexList[0] === 0)\r\n this.Position = this.Position.add(vec);\r\n else\r\n {\r\n let v = vec.clone().applyMatrix4(this.OCSInv.setPosition(new Vector3));\r\n this.Height = this.Height + v.y;\r\n }\r\n }\r\n\r\n GetStretchPoints(): Array\r\n {\r\n return [this.Position];\r\n }\r\n MoveStretchPoints(indexList: Array, vec: Vector3)\r\n {\r\n this.ApplyMatrix(MoveMatrix(vec));\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._TextString = file.Read();\r\n this._Height = file.Read();\r\n this.TextRotation = file.Read();\r\n this._FontName = file.Read();\r\n this._Align = 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._TextString);\r\n file.Write(this._Height);\r\n file.Write(this.TextRotation);\r\n file.Write(this._FontName);\r\n file.Write(this._Align);\r\n }\r\n //#endregion-----------------------------File End-----------------------------\r\n}\r\n","import { BufferGeometry, Float32BufferAttribute, LineSegments, Material, Matrix3, Matrix4, Mesh, Object3D, Vector3 } from \"three\";\r\nimport { ColorMaterial } from \"../Common/ColorPalette\";\r\nimport { FixedNotZero } from \"../Common/Utils\";\r\nimport { AutoRecord } from \"../DatabaseServices/AutoRecord\";\r\nimport { Factory } from \"../DatabaseServices/CADFactory\";\r\nimport { CADFiler } from \"../DatabaseServices/CADFiler\";\r\nimport { Entity } from \"../DatabaseServices/Entity/Entity\";\r\nimport { TemplateRecord } from \"../DatabaseServices/Template/TemplateRecord\";\r\nimport { Text, TextAligen } from \"../DatabaseServices/Text/Text\";\r\nimport { Box3Ext } from \"../Geometry/Box\";\r\nimport { XAxis, XAxisN, YAxis, YAxisN, ZAxis, ZeroVec } from \"../Geometry/GeUtils\";\r\nimport { GenerateBoxEdgeGeometry } from \"../Geometry/SimpleExtrudeEdgeGeometry\";\r\nimport { RenderType } from \"../GraphicsSystem/RenderType\";\r\nimport { ObjectSnapMode } from \"./ObjectSnapMode\";\r\n\r\nconst EmptyArray = [];\r\n\r\n@Factory\r\nexport class VisualSpaceBox extends Entity\r\n{\r\n OnlyRenderType = true;\r\n\r\n private _LText = new Text;\r\n private _WText = new Text;\r\n private _HText = new Text;\r\n\r\n @AutoRecord private _IsRoot = false;\r\n\r\n @AutoRecord private _DisplayLength = true;\r\n @AutoRecord private _DisplayWidth = true;\r\n @AutoRecord private _DisplayHeight = true;\r\n\r\n\r\n constructor(\r\n protected _Length: number = 1,\r\n protected _Width: number = 1,\r\n protected _Height: number = 1,\r\n )\r\n {\r\n super();\r\n this._LText.IsEmbedEntity = true;\r\n this._WText.IsEmbedEntity = true;\r\n this._HText.IsEmbedEntity = true;\r\n\r\n this._LText.TextAligen = TextAligen.Down;\r\n this._WText.TextAligen = TextAligen.Top;\r\n this._HText.TextAligen = TextAligen.Top;\r\n (this._LText)._Matrix.makeBasis(XAxis, ZAxis, YAxis);\r\n (this._WText)._Matrix.makeBasis(YAxis, XAxisN, ZAxis);\r\n (this._HText)._Matrix.makeBasis(ZAxis, XAxisN, YAxisN);\r\n }\r\n\r\n get Length() { return this._Length; }\r\n get Width() { return this._Width; }\r\n get Height() { return this._Height; }\r\n\r\n\r\n set IsRoot(b: boolean)\r\n {\r\n if (this._IsRoot !== b)\r\n {\r\n this._IsRoot = b;\r\n for (let [, obj] of this._CacheDrawObject)\r\n {\r\n let [box, edge, lobj, wobj, hobj] = obj.children;\r\n if (this._IsRoot)\r\n box.visible = false;\r\n else\r\n box.visible = true;\r\n\r\n if (this._IsRoot)\r\n {\r\n this._LText.TextAligen = TextAligen.Top;\r\n this._WText.TextAligen = TextAligen.Down;\r\n this._HText.TextAligen = TextAligen.Down;\r\n }\r\n else\r\n {\r\n this._LText.TextAligen = TextAligen.Down;\r\n this._WText.TextAligen = TextAligen.Top;\r\n this._HText.TextAligen = TextAligen.Top;\r\n }\r\n }\r\n }\r\n }\r\n\r\n set DisplayWidth(b: boolean)\r\n {\r\n for (let [, obj] of this._CacheDrawObject)\r\n {\r\n let [box, edge, lobj, wobj, hobj] = obj.children;\r\n wobj.visible = b;\r\n }\r\n this._DisplayWidth = b;\r\n }\r\n set DisplayLength(b: boolean)\r\n {\r\n for (let [, obj] of this._CacheDrawObject)\r\n {\r\n let [box, edge, lobj, wobj, hobj] = obj.children;\r\n lobj.visible = b;\r\n }\r\n this._DisplayLength = b;\r\n }\r\n set DisplayHeight(b: boolean)\r\n {\r\n for (let [, obj] of this._CacheDrawObject)\r\n {\r\n let [box, edge, lobj, wobj, hobj] = obj.children;\r\n hobj.visible = b;\r\n }\r\n this._DisplayHeight = b;\r\n }\r\n\r\n SetSize(l: number, w: number, h: number)\r\n {\r\n if (l !== this._Length || w !== this._Width || h !== this._Height)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._Length = l;\r\n this._Width = w;\r\n this._Height = h;\r\n this.Update();\r\n }\r\n }\r\n get BoundingBoxInOCS()\r\n {\r\n return new Box3Ext(new Vector3, new Vector3(this._Length, this._Width, this._Height));\r\n }\r\n\r\n get BoundingBox()\r\n {\r\n return this.BoundingBoxInOCS.applyMatrix4(this.OCSNoClone);\r\n }\r\n\r\n //#region 捕捉\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 switch (snapMode)\r\n {\r\n case ObjectSnapMode.End:\r\n {\r\n let pts: Vector3[] = [\r\n new Vector3(),\r\n new Vector3(this._Length),\r\n new Vector3(this._Length, this._Width),\r\n new Vector3(0, this._Width),\r\n\r\n new Vector3(0, 0, this._Height),\r\n new Vector3(this._Length, 0, this._Height),\r\n new Vector3(this._Length, this._Width, this._Height),\r\n new Vector3(0, this._Width, this._Height),\r\n ];\r\n\r\n for (let p of pts)\r\n p.applyMatrix4(this._Matrix);\r\n return pts;\r\n }\r\n }\r\n return EmptyArray;\r\n }\r\n //#endregion\r\n\r\n //#region Draw\r\n InitDrawObject(renderType: RenderType = RenderType.Wireframe)\r\n {\r\n let obj = new Object3D();\r\n\r\n //box\r\n obj.add(new Mesh(backGeo, ColorMaterial.GetBasicMaterialTransparent2(this.ColorIndex, 0.5)));\r\n //edge\r\n obj.add(new LineSegments(edgeGeo, ColorMaterial.GetLineMaterial(this.ColorIndex)));\r\n\r\n obj.add(this._LText.DrawObject);\r\n obj.add(this._WText.DrawObject);\r\n obj.add(this._HText.DrawObject);\r\n\r\n this.UpdateDrawObject(renderType, obj);\r\n return obj;\r\n }\r\n\r\n UpdateDrawObject(type: RenderType, obj: Object3D)\r\n {\r\n let [box, edge, lobj, wobj, hobj] = obj.children;\r\n box.scale.set(this._Length, this._Width, this._Height);\r\n box.updateMatrix();\r\n\r\n edge.scale.set(this._Length, this._Width, this._Height);\r\n edge.updateMatrix();\r\n\r\n box.visible = !this._IsRoot;\r\n\r\n if (this._IsRoot)\r\n {\r\n this._LText.TextAligen = TextAligen.Top;\r\n this._WText.TextAligen = TextAligen.Down;\r\n this._HText.TextAligen = TextAligen.Down;\r\n }\r\n else\r\n {\r\n this._LText.TextAligen = TextAligen.Down;\r\n this._WText.TextAligen = TextAligen.Top;\r\n this._HText.TextAligen = TextAligen.Top;\r\n }\r\n\r\n this._LText.TextString = FixedNotZero(this._Length, 2);\r\n this._WText.TextString = FixedNotZero(this._Width, 2);\r\n this._HText.TextString = FixedNotZero(this._Height, 2);\r\n\r\n //实体被错误的Dispose,导致需要这样的更新\r\n this._LText.Update();\r\n this._WText.Update();\r\n this._HText.Update();\r\n\r\n lobj.visible = this._DisplayLength;\r\n wobj.visible = this._DisplayWidth;\r\n hobj.visible = this._DisplayHeight;\r\n\r\n lobj.position.set(this._Length / 2, 0, 0);\r\n lobj.updateMatrix();\r\n\r\n wobj.position.set(0, this._Width / 2, 0);\r\n wobj.updateMatrix();\r\n\r\n hobj.position.set(0, 0, this._Height / 2);\r\n hobj.updateMatrix();\r\n }\r\n\r\n UpdateDrawObjectMaterial(type: RenderType, obj: Object3D, material?: Material)\r\n {\r\n let [mesh, line] = obj.children as [Mesh, LineSegments];\r\n\r\n mesh.material = ColorMaterial.GetBasicMaterialTransparent2(this.ColorIndex, 0.2);\r\n line.material = ColorMaterial.GetLineMaterial(this.ColorIndex);\r\n }\r\n\r\n //#endregion\r\n\r\n //#region -------------------------File-------------------------\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._Length = file.Read();\r\n this._Width = file.Read();\r\n this._Height = file.Read();\r\n\r\n this._IsRoot = file.Read();\r\n this._DisplayLength = file.Read();\r\n this._DisplayWidth = file.Read();\r\n this._DisplayHeight = file.Read();\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._Length);\r\n file.Write(this._Width);\r\n file.Write(this._Height);\r\n\r\n file.Write(this._IsRoot);\r\n file.Write(this._DisplayLength);\r\n file.Write(this._DisplayWidth);\r\n file.Write(this._DisplayHeight);\r\n }\r\n\r\n // //局部撤销\r\n // ApplyPartialUndo(undoData: CADObject)\r\n // {\r\n // super.ApplyPartialUndo(undoData);\r\n // }\r\n //#endregion\r\n\r\n\r\n //#region\r\n GetGripPoints(): Array\r\n {\r\n // return EmptyArray;//因为更新模块树是异步的,没办法在拽拖夹点时顺带更新,所以移除这个特性.\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 x.multiplyScalar(this._Length);\r\n y.multiplyScalar(this._Width);\r\n z.multiplyScalar(this._Height);\r\n\r\n let p = this.Position;\r\n return [p, x.add(p), y.add(p), z.add(p)];\r\n }\r\n\r\n MoveGripPoints(indexList: number[], vec: Vector3)\r\n {\r\n let template = this.Template?.Object as TemplateRecord;\r\n if (template && template !== template.Root)\r\n return;\r\n\r\n for (let i of indexList)\r\n {\r\n if (i === 0)\r\n {\r\n this.WriteAllObjectRecord();\r\n this.Position = this.Position.add(vec);\r\n return;\r\n }\r\n else\r\n {\r\n continue;\r\n let ocs = this._Matrix.clone().setPosition(ZeroVec);\r\n let ocsinv = new Matrix4().getInverse(ocs);\r\n vec.applyMatrix4(ocsinv);\r\n if (i === 1)\r\n {\r\n this._Length += vec.x;\r\n template.LParam.expr = this._Length;\r\n }\r\n else if (i === 2)\r\n {\r\n this._Width += vec.y;\r\n template.WParam.expr = this._Width;\r\n }\r\n else\r\n {\r\n this._Height += vec.z;\r\n template.HParam.expr = this._Height;\r\n }\r\n\r\n template.UpdateTemplateTree(); //TODO:可以弹出个对话框让用户更新. 或者使用反应器?\r\n\r\n this.Update();\r\n }\r\n return;\r\n }\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 //#endregion\r\n\r\n}\r\n\r\nclass BackFaceBoxBufferGeometry extends BufferGeometry\r\n{\r\n constructor(length: number = 1, width: number = 1, height: number = 1)\r\n {\r\n super();\r\n\r\n let pts: number[] = [\r\n 0, width, 0,\r\n length, width, 0,\r\n length, width, height,\r\n 0, width, height,\r\n ];\r\n let uvs: number[] = [\r\n 0, 0,\r\n 1, 0,\r\n 1, 1,\r\n\r\n 0, 0,\r\n 1, 1,\r\n 0, 1,\r\n ];\r\n\r\n let indices: number[] = [0, 1, 2, 0, 2, 3];\r\n\r\n this.setIndex(indices);\r\n this.setAttribute('position', new Float32BufferAttribute(pts, 3));\r\n // this.setAttribute('normal', new Float32BufferAttribute(normals, 3));\r\n this.setAttribute('uv', new Float32BufferAttribute(uvs, 2));\r\n\r\n }\r\n}\r\n\r\nconst backGeo = new BackFaceBoxBufferGeometry();\r\nconst edgeGeo = GenerateBoxEdgeGeometry(1, 1, 1);\r\n","import { Box3, MathUtils, OrthographicCamera, PerspectiveCamera, Vector3 } from 'three';\r\nimport { HostApplicationServices } from '../ApplicationServices/HostApplicationServices';\r\nimport { CADFiler } from '../DatabaseServices/CADFiler';\r\nimport { Orbit } from '../Geometry/Orbit';\r\n\r\nconst ViewScopeSize = 4e6;\r\n//相机活动范围\r\nconst ViewScopeMin = new Vector3(-ViewScopeSize, -ViewScopeSize * 0.7, -ViewScopeSize);\r\nconst ViewScopeMax = ViewScopeMin.clone().negate();\r\n\r\nconst ViewBoxMin = new Vector3(1, 1, 1);\r\nconst viewBoxMax = new Vector3(1e7, 1e7, 1e7);\r\n\r\nexport enum CameraType\r\n{\r\n OrthographicCamera = 1,\r\n PerspectiveCamera = 2,\r\n}\r\n\r\ntype Camera = OrthographicCamera | PerspectiveCamera;\r\n\r\n/**\r\n *\r\n * 相机的控制.\r\n * ->切换相机\r\n * ->设置视口大小\r\n * ->旋转和移动相机.\r\n */\r\nexport class CameraUpdate\r\n{\r\n private _CurCamera: Camera;\r\n private _CameraArray: Map = new Map();\r\n\r\n //视口的画布大小\r\n private _Width: number;\r\n private _Height: number;\r\n //视口显示的高度\r\n private _ViewHeight: number = 1000;\r\n\r\n //观察的位置\r\n private _Target: Vector3 = new Vector3();\r\n //观察向量\r\n private _Direction: Vector3 = new Vector3(0, 0, -1);\r\n //观察的轨道.\r\n private _Orbit: Orbit = new Orbit();\r\n\r\n DisableRotate = false;\r\n\r\n constructor()\r\n {\r\n this._CameraArray.set(OrthographicCamera, new OrthographicCamera(-2, 2, 2, -2,\r\n -ViewScopeSize, ViewScopeSize));\r\n\r\n this._CameraArray.set(PerspectiveCamera, new PerspectiveCamera(60, 1, 0.01, ViewScopeSize));\r\n\r\n this._CurCamera = this._CameraArray.get(OrthographicCamera);\r\n\r\n this._Orbit.SetFromDirection(this._Direction);\r\n\r\n this.UpdateUp();\r\n\r\n this.Update();\r\n }\r\n\r\n get Orbit() { return this._Orbit; }\r\n\r\n get Aspect(): number\r\n {\r\n return this._Width / this._Height;\r\n }\r\n\r\n get Target() { return this._Target; }\r\n\r\n get Camera(): Camera\r\n {\r\n return this._CurCamera;\r\n }\r\n get ViewHeight()\r\n {\r\n return this._ViewHeight;\r\n }\r\n set ViewHeight(height)\r\n {\r\n this._ViewHeight = MathUtils.clamp(height, HostApplicationServices.viewSize.minViewHeight, HostApplicationServices.viewSize.maxViewHeight);\r\n this.ZoomEvent();\r\n }\r\n\r\n get Direction()\r\n {\r\n return this._Direction.clone();\r\n }\r\n\r\n SetSize(width: number, height: number)\r\n {\r\n this._Width = width;\r\n this._Height = height;\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 Fov()\r\n {\r\n return (this._CameraArray.get(PerspectiveCamera) as PerspectiveCamera).fov;\r\n }\r\n\r\n set Fov(fov: number)\r\n {\r\n let camera = this._CameraArray.get(PerspectiveCamera) as PerspectiveCamera;\r\n camera.fov = fov;\r\n this.UpdateCameraMatrix();\r\n }\r\n\r\n /**\r\n * 平移相机.\r\n * @param {Vector3} mouseMove\r\n */\r\n Pan(mouseMove: Vector3)\r\n {\r\n mouseMove.y *= -1;\r\n mouseMove.multiplyScalar(-this._ViewHeight / (this._Height * window.devicePixelRatio));\r\n mouseMove.applyQuaternion(this.Camera.quaternion);\r\n this._Target.add(mouseMove);\r\n this._Target.clamp(ViewScopeMin, ViewScopeMax);\r\n this.Update();\r\n }\r\n Rotate(mouseMove: Vector3, target: Vector3)\r\n {\r\n let scale = this.CameraType === CameraType.PerspectiveCamera ? 0.002 : 0.003;\r\n this._Orbit.RoX -= mouseMove.y * scale;\r\n this._Orbit.theta -= mouseMove.x * scale;\r\n if (this.CameraType === CameraType.PerspectiveCamera && !target)//转头\r\n {\r\n if (this.DisableRotate) return;\r\n\r\n this._Orbit.UpdateDirection(this._Direction);\r\n this.UpdateUp();\r\n\r\n let camera = this.Camera as PerspectiveCamera;\r\n camera.aspect = this.Aspect;\r\n let distens = (this._ViewHeight / 2) / (Math.tan(MathUtils.degToRad(camera.fov) / 2));\r\n\r\n this._Target.copy(this._Direction).multiplyScalar(distens).add(this.Camera.position);//重新计算观察点位置\r\n\r\n this.UpdateCameraMatrix();\r\n return;\r\n }\r\n\r\n //缓存观察点\r\n let oldTargetFormCameraSpace = target.clone().applyMatrix4(this.Camera.matrixWorldInverse);\r\n\r\n this._Orbit.UpdateDirection(this._Direction);\r\n this.UpdateUp();\r\n this.Update();\r\n\r\n //-----还原观察点\r\n //得到新的观察点相对于相机的位置\r\n let newTargetFormCameraSpace = target.clone().applyMatrix4(this.Camera.matrixWorldInverse);\r\n //减去原先的位置. 得到观测点在相机内移动的向量\r\n newTargetFormCameraSpace.sub(oldTargetFormCameraSpace);\r\n //乘以相机的矩阵. 得到向量在世界坐标系的位置\r\n newTargetFormCameraSpace.applyMatrix4(this.Camera.matrix);\r\n //因为使用的是点变换,所以减去基点,得到向量\r\n newTargetFormCameraSpace.sub(this.Camera.position);\r\n //加上移动的向量. 使得观察点时钟在相机的某个位置\r\n this._Target.add(newTargetFormCameraSpace);\r\n\r\n this.Update();\r\n }\r\n\r\n UpdateCameraMatrix()\r\n {\r\n this.Camera.matrixAutoUpdate = true;\r\n // this.Camera.updateMatrix(); //如果不使用autoUpdate,那么应该还原这句\r\n this.Camera.lookAt(this._Target);\r\n this.Camera.updateProjectionMatrix();\r\n // this.Camera.updateMatrix(); //如果不使用autoUpdate,那么应该还原这句\r\n this.Camera.updateMatrixWorld(false);\r\n this.Camera.matrixAutoUpdate = false;\r\n }\r\n\r\n Zoom(scale: number, scaleCenter?: Vector3)\r\n {\r\n if (this.Camera instanceof OrthographicCamera)\r\n {\r\n this.ViewHeight *= scale;\r\n if (scaleCenter && this._ViewHeight < HostApplicationServices.viewSize.maxViewHeight)\r\n {\r\n this._Target.sub(scaleCenter);\r\n this._Target.multiplyScalar(scale);\r\n this._Target.add(scaleCenter);\r\n }\r\n }\r\n else if (this.Camera instanceof PerspectiveCamera)\r\n {\r\n let add = scale > 1 ? 1 : -1;\r\n add *= this.Camera.position.distanceTo(this._Target) / 10;\r\n this._Target.add(this._Direction.clone().multiplyScalar(-add));\r\n }\r\n this.Update();\r\n }\r\n ZoomExtentsBox3(box3: Box3)\r\n {\r\n if (!box3 || box3.isEmpty()) return;\r\n this.Camera.updateMatrixWorld(false);\r\n\r\n box3.getCenter(this._Target);\r\n\r\n //变换到相机坐标系\r\n box3.applyMatrix4(this.Camera.matrixWorldInverse);\r\n\r\n let size = box3.getSize(new Vector3());\r\n size.clamp(ViewBoxMin, viewBoxMax);\r\n\r\n // this._Target.z = box3.max.z; //使用这个代码 在变换矩阵可以使得观察点在前面,但是会导致观察距离过长\r\n\r\n //宽高比\r\n let aspectRatio = size.x / size.y;\r\n\r\n let viewAspectRatio = this.Aspect;\r\n if (aspectRatio > viewAspectRatio)\r\n this.ViewHeight = size.x / viewAspectRatio;\r\n else\r\n this.ViewHeight = size.y;\r\n this.Update();\r\n }\r\n\r\n /**\r\n * 设置相机的观察向量.\r\n * @param {Vector3} dir 方向向量,这个向量传入后会被更改为单位向量\r\n */\r\n LookAt(dir: Vector3)\r\n {\r\n this.LookAtEvent(dir);\r\n this._Orbit.SetFromDirection(dir);\r\n this._Direction.copy(dir);\r\n this.UpdateUp();\r\n this.Update();\r\n }\r\n LookAtEvent(dir: Vector3) { }\r\n\r\n UpdateUp()\r\n {\r\n Orbit.ComputUpDirection(this._Direction, this.Camera.up);\r\n }\r\n /**\r\n * 根据视口大小,设置相机视口范围.\r\n */\r\n Update()\r\n {\r\n this.Camera.position.copy(this._Target);\r\n\r\n if (this.Camera instanceof OrthographicCamera)\r\n {\r\n this.Camera.left = this.Aspect * this._ViewHeight / -2;\r\n this.Camera.right = this.Aspect * this._ViewHeight / 2;\r\n this.Camera.bottom = this._ViewHeight / -2;\r\n this.Camera.top = this._ViewHeight / 2;\r\n\r\n this.Camera.position.sub(this._Direction);\r\n }\r\n else if (this.Camera instanceof PerspectiveCamera)\r\n {\r\n this.Camera.aspect = this.Aspect;\r\n let distens = (this._ViewHeight / 2) / (Math.tan(MathUtils.degToRad(this.Camera.fov) / 2));\r\n\r\n this.Camera.position.sub(this._Direction.clone().multiplyScalar(distens));\r\n }\r\n else return;\r\n\r\n this.UpdateCameraMatrix();\r\n }\r\n\r\n ZoomEvent()\r\n {\r\n }\r\n\r\n set CameraType(type: CameraType)\r\n {\r\n if (type !== this.CameraType)\r\n this.SwitchCamera();\r\n }\r\n get CameraType()\r\n {\r\n if (this.Camera instanceof OrthographicCamera)\r\n return CameraType.OrthographicCamera;\r\n else\r\n return CameraType.PerspectiveCamera;\r\n }\r\n\r\n SwitchCamera()\r\n {\r\n if (this.Camera instanceof OrthographicCamera)\r\n this._CurCamera = this._CameraArray.get(PerspectiveCamera);\r\n else\r\n this._CurCamera = this._CameraArray.get(OrthographicCamera);\r\n this.UpdateUp();\r\n this.Update();\r\n }\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 this._ViewHeight = file.Read();\r\n this._Target.fromArray(file.Read());\r\n this._Direction.fromArray(file.Read());\r\n\r\n this._Orbit.SetFromDirection(this._Direction);\r\n this.UpdateUp();\r\n this.Update();\r\n\r\n if (ver > 1)\r\n this.CameraType = file.Read();\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(2);\r\n file.Write(this._ViewHeight);\r\n file.Write(this._Target.toArray());\r\n file.Write(this._Direction.toArray());\r\n file.Write(this.CameraType);\r\n }\r\n}\r\n","import { Box3, BufferGeometry, Color, Float32BufferAttribute, Frustum, Group, Line, Matrix3, Matrix4, Mesh, MeshBasicMaterial, Object3D, Scene, Vector3, WebGLRenderTarget } from \"three\";\r\nimport { IsHinge } from \"../Add-on/HideSelect/HideSelectUtils\";\r\nimport { DisposeThreeObj, Object3DRemoveAll } from \"../Common/Dispose\";\r\nimport { UpdateDraw } from \"../Common/Status\";\r\nimport { GetEntity } from \"../Common/Utils\";\r\nimport { ObjectSnapMode } from \"../Editor/ObjectSnapMode\";\r\nimport { VisualSpaceBox } from \"../Editor/VisualSpaceBox\";\r\nimport { GetBox } from \"../Geometry/GeUtils\";\r\nimport { CameraUpdate } from \"../GraphicsSystem/CameraUpdate\";\r\nimport { RenderType } from \"../GraphicsSystem/RenderType\";\r\nimport { FixIndex } from \"../Nest/Common/Util\";\r\nimport { Hole } from \"./3DSolid/Hole\";\r\nimport { Factory } from \"./CADFactory\";\r\nimport { CADFiler } from \"./CADFiler\";\r\nimport { Board } from \"./Entity/Board\";\r\nimport { Entity } from \"./Entity/Entity\";\r\nimport { ObjectId } from \"./ObjectId\";\r\nimport { Text } from \"./Text/Text\";\r\n\r\nconst MaxSize = 2048;\r\nconst MIN_UPDATE_SIZE = 50;\r\nconst ProjScreenMatrix = new Matrix4();\r\n\r\n@Factory\r\nexport class ViewportEntity extends Entity\r\n{\r\n scene: Scene = new Scene();\r\n readonly camera: CameraUpdate = new CameraUpdate();\r\n private _renderType: RenderType = RenderType.Print;\r\n private _HideObjectIds = new Set();\r\n private _ShowObjectIds = new Set();\r\n private _RenderTarget: WebGLRenderTarget = new WebGLRenderTarget(0, 0);\r\n private _EntitysBoundingBox: Box3;\r\n ViewData = {\r\n left: 0,\r\n bottom: 0,\r\n };\r\n _Color = 0;\r\n ViewportMaterial: MeshBasicMaterial;\r\n private _Frustum: Frustum = new Frustum();\r\n constructor(\r\n private _width: number = 1,\r\n private _height: number = 1,\r\n )\r\n {\r\n super();\r\n this.scene.background = new Color(0xffffff);\r\n this.ViewportMaterial = new MeshBasicMaterial({ map: this._RenderTarget.texture, transparent: true, opacity: 1 });\r\n }\r\n get Left()\r\n {\r\n return this.Position.x;\r\n }\r\n get Bottom()\r\n {\r\n return this.Position.y;\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 (v === this._height || v < 0)\r\n return;\r\n this.WriteAllObjectRecord();\r\n this._width = v;\r\n this.Update(UpdateDraw.Geometry);\r\n }\r\n get ViewWidth()\r\n {\r\n return this.camera.Width ?? 1;\r\n }\r\n get ViewHeight()\r\n {\r\n return this.camera.Height ?? 1;\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 (v === this._height || v < 0)\r\n return;\r\n this.WriteAllObjectRecord();\r\n this._height = v;\r\n this.Update(UpdateDraw.Geometry);\r\n }\r\n IsHide(id: ObjectId)\r\n {\r\n return this._HideObjectIds.has(id);\r\n }\r\n IsShow(id: ObjectId)\r\n {\r\n return this._ShowObjectIds.has(id);\r\n }\r\n get HideObjects()\r\n {\r\n return [...this._HideObjectIds];\r\n }\r\n get ShowObjects()\r\n {\r\n return [...this._ShowObjectIds];\r\n }\r\n\r\n AppendShowObjects(ids: ObjectId[] | ObjectId)\r\n {\r\n this.WriteAllObjectRecord();\r\n if (!Array.isArray(ids))\r\n ids = [ids];\r\n for (let id of ids)\r\n {\r\n if (id?.Object)\r\n this._ShowObjectIds.add(id);\r\n }\r\n }\r\n RemoveShowObjects(ids: ObjectId[] | ObjectId)\r\n {\r\n this.WriteAllObjectRecord();\r\n if (!Array.isArray(ids))\r\n ids = [ids];\r\n ids.forEach(id => this._ShowObjectIds.delete(id));\r\n }\r\n AppendHideObjects(ids: ObjectId[] | ObjectId)\r\n {\r\n this.WriteAllObjectRecord();\r\n if (!Array.isArray(ids))\r\n ids = [ids];\r\n ids.forEach(id => this._HideObjectIds.add(id));\r\n }\r\n\r\n RemoveHideObjects(ids: ObjectId[] | ObjectId)\r\n {\r\n this.WriteAllObjectRecord();\r\n if (!Array.isArray(ids))\r\n ids = [ids];\r\n ids.forEach(id => this._HideObjectIds.delete(id));\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.GetGripPoints();\r\n case ObjectSnapMode.Mid:\r\n case ObjectSnapMode.Nea:\r\n case ObjectSnapMode.Ext:\r\n case ObjectSnapMode.Per:\r\n default:\r\n break;\r\n }\r\n return [];\r\n }\r\n SetUVs(geo: BufferGeometry)\r\n {\r\n let uvArray: number[] = [\r\n 0, 0, 1, 0, 1, 1, 1, 1, 0, 1, 0, 0\r\n ];\r\n geo.setAttribute(\"uv\", new Float32BufferAttribute(uvArray, 2));\r\n }\r\n protected OnlyRenderType = true;\r\n get Entitys()\r\n {\r\n let ens: Entity[] = [];\r\n for (let id of this._ShowObjectIds)\r\n if (id?.Object) ens.push(id.Object as Entity);\r\n\r\n for (let id of this._HideObjectIds)\r\n if (id?.Object) ens.push(id.Object as Entity);\r\n\r\n return ens;\r\n }\r\n get Points()\r\n {\r\n let z = -1;\r\n return [\r\n new Vector3(0, 0, z),\r\n new Vector3(this._width, 0, z),\r\n new Vector3(this._width, this._height, z),\r\n new Vector3(0, this._height, z),\r\n ];\r\n }\r\n\r\n NeedUpdateTexture = true;\r\n \r\n\r\n UpdateByPts(p1: Vector3, p2: Vector3)\r\n {\r\n let left = Math.min(p1.x, p2.x);\r\n let bottom = Math.min(p1.y, p2.y);\r\n this._width = Math.abs(p1.x - p2.x);\r\n this._height = Math.abs(p1.y - p2.y);\r\n this.Position = new Vector3(left, bottom);\r\n }\r\n GetGripPoints()\r\n {\r\n return this.Points.map(p => p.applyMatrix4(this.OCS).setZ(0));\r\n }\r\n MoveGripPoints(indexList: number[], moveVec: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n\r\n let pts = this.GetGripPoints();\r\n\r\n for (let index of indexList)\r\n {\r\n pts[index].add(moveVec);\r\n this.UpdateByPts(pts[index], pts[FixIndex(index + 2, 4)]);\r\n }\r\n this.Update();\r\n }\r\n ZoomAll()\r\n {\r\n let box = new Box3;\r\n for (let obj of this.scene.children)\r\n {\r\n let ent = GetEntity(obj);\r\n if (ent) box.union(ent.BoundingBox);\r\n else box.union(GetBox(obj));\r\n }\r\n\r\n if (box.isEmpty())\r\n box.set(new Vector3(), new Vector3(1000 * (this.Width / this.Height), 1000, 1000));\r\n this.camera.ZoomExtentsBox3(box);\r\n this.camera.Zoom(1.2);\r\n }\r\n\r\n ZoomtoEntitys(ens: Entity[])\r\n {\r\n let box = new Box3();\r\n ens.reduce((b, e) => b.union(e.BoundingBox), box);\r\n if (box.isEmpty())\r\n return;\r\n this.camera.ZoomExtentsBox3(box);\r\n this.camera.Zoom(1.2);\r\n }\r\n\r\n get RenderType()\r\n {\r\n return this._renderType;\r\n }\r\n set RenderType(v: RenderType)\r\n {\r\n if (v === this._renderType) return;\r\n this.WriteAllObjectRecord();\r\n this._renderType = v;\r\n for (let o of this.scene.children)\r\n {\r\n if (o instanceof Group)\r\n {\r\n DisposeThreeObj(o);\r\n Object3DRemoveAll(o);\r\n\r\n let e = o.userData.Entity as Entity;\r\n let obj = e.GetDrawObjectFromRenderType(e.IsOnlyRender ? this._renderType + 100 : this._renderType);\r\n if (obj)\r\n o.children.push(obj);\r\n }\r\n }\r\n }\r\n get BoundingBox()\r\n {\r\n return new Box3().setFromPoints(this.GetGripPoints());\r\n }\r\n CanRennder(en: Entity)\r\n {\r\n if (en?.Id\r\n && !en.IsErase && (en instanceof Entity) && !(en instanceof Hole)\r\n && !(en instanceof ViewportEntity)\r\n && !(en instanceof VisualSpaceBox))\r\n {\r\n //首个版本布局由隐藏列表控制\r\n if (this.IsFirstVersion)\r\n {\r\n if (this._HideObjectIds.has(en.Id))\r\n return false;\r\n }\r\n else\r\n {\r\n if (!this._ShowObjectIds.has(en.Id) || this._HideObjectIds.has(en.Id))\r\n return false;\r\n }\r\n // if (en instanceof HardwareCompositeEntity && en.HardwareOption.name.includes(\"铰链\"))\r\n if (IsHinge(en))\r\n return false;\r\n return true;\r\n }\r\n return false;\r\n }\r\n AppendEntity(en: Entity)\r\n {\r\n if (!this.CanRennder(en)) return;\r\n\r\n let cloneObject = new Group();\r\n let renderType = en.IsOnlyRender ? this._renderType + 100 : this._renderType;\r\n let o = en.GetDrawObjectFromRenderType(renderType);\r\n if (!o)\r\n {\r\n console.warn(`该实体${renderType}类型不存在`);\r\n return;\r\n }\r\n cloneObject.children.push(o);\r\n cloneObject.name = en.Id.Index.toString();\r\n cloneObject.userData = { Entity: en };\r\n cloneObject.updateMatrixWorld();\r\n this.scene.add(cloneObject);\r\n this.NeedUpdateTexture = true;\r\n }\r\n GoodBye()\r\n {\r\n super.GoodBye();\r\n DisposeThreeObj(this.scene);\r\n Object3DRemoveAll(this.scene);\r\n this.ViewportMaterial?.dispose();\r\n this.ViewportMaterial = undefined;\r\n this._RenderTarget.dispose();\r\n }\r\n UpdateScene()\r\n {\r\n let hideIndexs = new Set(this.HideObjects.map(i => i.Index.toString()));\r\n let showIndexs = new Set(this.ShowObjects.map(i => i.Index.toString()));\r\n for (let o of this.scene.children)\r\n {\r\n if (!showIndexs.has(o.name) || hideIndexs.has(o.name))\r\n {\r\n if (o.type !== \"AmbientLight\")\r\n o.visible = false;\r\n }\r\n else\r\n {\r\n o.visible = true;\r\n showIndexs.delete(o.name);\r\n }\r\n }\r\n this._ShowObjectIds.forEach(i => showIndexs.has(i.Index.toString()) && this.AppendEntity(i.Object as Entity));\r\n this.NeedUpdateTexture = true;\r\n }\r\n CloneDrawObject(from: this)\r\n {\r\n super.CloneDrawObject(from);\r\n for (let [type, obj] of this._CacheDrawObject)\r\n {\r\n (obj.children[1] as Mesh).material = this.ViewportMaterial;\r\n }\r\n }\r\n IsInFrustum(obj: Object3D)\r\n {\r\n let camera = this.camera.Camera;\r\n ProjScreenMatrix.multiplyMatrices(camera.projectionMatrix, camera.matrixWorldInverse);\r\n this._Frustum.setFromProjectionMatrix(ProjScreenMatrix);\r\n let isInt = false;\r\n obj.traverse((o: Mesh | Line) =>\r\n {\r\n if (!isInt && o.geometry)\r\n isInt = this._Frustum.intersectsObject(o);\r\n });\r\n return isInt;\r\n }\r\n IsContainText(text: Entity)\r\n {\r\n if (!(text instanceof Text)) return false;\r\n if (!this._EntitysBoundingBox)\r\n {\r\n this._EntitysBoundingBox = new Box3();\r\n for (let en of this.Entitys)\r\n {\r\n if (!en.IsErase && en instanceof Board)\r\n this._EntitysBoundingBox.union(en.BoundingBox);\r\n }\r\n }\r\n if (this._EntitysBoundingBox.containsBox(text.BoundingBox))\r\n return true;\r\n else\r\n return false;\r\n }\r\n IsFirstVersion = false;\r\n protected _ReadFile(file: CADFiler)\r\n {\r\n super._ReadFile(file);\r\n let ver = file.Read();\r\n\r\n this.IsFirstVersion = ver === 1;\r\n\r\n this.camera.ReadFile(file);\r\n this._width = file.Read();\r\n this._height = file.Read();\r\n this._renderType = file.Read();\r\n let count = file.Read();\r\n this._HideObjectIds.clear();\r\n for (let i = 0; i < count; i++)\r\n {\r\n let id = file.ReadSoftObjectId();\r\n if (id)\r\n this._HideObjectIds.add(id);\r\n }\r\n\r\n if (ver > 1)\r\n {\r\n let count = file.Read();\r\n this._ShowObjectIds.clear();\r\n for (let i = 0; i < count; i++)\r\n {\r\n let id = file.ReadSoftObjectId();\r\n if (id)\r\n this._ShowObjectIds.add(id);\r\n }\r\n }\r\n if (!this._isErase)\r\n this.UpdateScene();\r\n }\r\n WriteFile(file: CADFiler)\r\n {\r\n super.WriteFile(file);\r\n file.Write(2);\r\n this.camera.WriteFile(file);\r\n file.Write(this._width);\r\n file.Write(this._height);\r\n file.Write(this._renderType);\r\n file.Write(this._HideObjectIds.size);\r\n this._HideObjectIds.forEach(id => file.WriteSoftObjectId(id));\r\n\r\n file.Write(this._ShowObjectIds.size);\r\n this._ShowObjectIds.forEach(id => file.WriteSoftObjectId(id));\r\n }\r\n}\r\n","import { ExtrudeGeometry, Geometry, Mesh, MeshNormalMaterial, Object3D, Vector3 } from \"three\";\r\nimport { RenderType } from \"../../GraphicsSystem/RenderType\";\r\nimport { Factory } from '../CADFactory';\r\nimport { CADFiler } from '../CADFiler';\r\nimport { Contour } from '../Contour';\r\nimport { Circle } from '../Entity/Circle';\r\nimport { Entity } from '../Entity/Entity';\r\n\r\n@Factory\r\nexport class Cylineder extends Entity\r\n{\r\n private m_Radius: number;\r\n private m_Height: number;\r\n private m_Center: Vector3 = new Vector3();\r\n constructor(rad?: number, height?: number)\r\n {\r\n super();\r\n this.m_Radius = rad || 1;\r\n this.m_Height = height || 1;\r\n }\r\n get Radius()\r\n {\r\n return this.m_Radius;\r\n }\r\n set Radius(v: number)\r\n {\r\n this.WriteAllObjectRecord();\r\n this.m_Radius = v;\r\n this.Update();\r\n }\r\n get Height()\r\n {\r\n return this.m_Height;\r\n }\r\n set Height(v: number)\r\n {\r\n this.WriteAllObjectRecord();\r\n this.m_Height = v;\r\n this.Update();\r\n }\r\n get Center()\r\n {\r\n return new Vector3().setFromMatrixPosition(this.OCS);\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 CreateGeometry()\r\n {\r\n let cir = Contour.CreateContour([new Circle(this.m_Center, this.m_Radius)]).Shape;\r\n let extrudeSettings = {\r\n bevelEnabled: false,\r\n depth: this.m_Height\r\n };\r\n return new ExtrudeGeometry(cir, extrudeSettings);\r\n }\r\n InitDrawObject(renderType: RenderType): Object3D\r\n {\r\n return new Mesh(this.CreateGeometry(), new MeshNormalMaterial());\r\n }\r\n UpdateDrawObject(type: RenderType, en: Object3D)\r\n {\r\n let obj = en as Mesh;\r\n obj.geometry = this.CreateGeometry();\r\n (obj.geometry as Geometry).verticesNeedUpdate = true;\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.m_Radius = file.Read();\r\n this.m_Height = file.Read();\r\n this.m_Center.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.m_Radius);\r\n file.Write(this.m_Height);\r\n file.Write(this.m_Center.toArray());\r\n }\r\n}\r\n","import { Box3, Face3, Geometry, Matrix4, Mesh, MeshNormalMaterial, Object3D, ShapeUtils, Vector2, Vector3 } from \"three\";\r\nimport { ColorMaterial } from \"../../Common/ColorPalette\";\r\nimport { Object3DRemoveAll } from \"../../Common/Dispose\";\r\nimport { clamp, FixIndex } from \"../../Common/Utils\";\r\nimport { ObjectSnapMode } from \"../../Editor/ObjectSnapMode\";\r\nimport { angle, AsVector2, equaln, equalv3, isParallelTo, YAxis, ZeroVec } from \"../../Geometry/GeUtils\";\r\nimport { Matrix2 } from \"../../Geometry/Matrix2\";\r\nimport { Orbit } from \"../../Geometry/Orbit\";\r\nimport { RenderType } from \"../../GraphicsSystem/RenderType\";\r\nimport { Factory } from \"../CADFactory\";\r\nimport { CADFiler } from \"../CADFiler\";\r\nimport { CADObject } from \"../CADObject\";\r\nimport { Arc } from \"../Entity/Arc\";\r\nimport { Entity } from \"../Entity/Entity\";\r\nimport { Polyline } from \"../Entity/Polyline\";\r\n\r\nlet r = new Matrix2;\r\nlet v = new Vector3;\r\n\r\nexport function AxisCS(n: Vector3): Matrix4\r\n{\r\n let x = new Vector3;\r\n let y = new Vector3;\r\n Orbit.ComputUpDirection(n, y, x);\r\n return new Matrix4().makeBasis(x.normalize(), y.normalize(), n);\r\n}\r\n\r\nlet _Arc = new Arc(new Vector3, 1, 0, Math.PI / 2, false);\r\n@Factory\r\nexport class RevolveSolid extends Entity\r\n{\r\n private _Contour: Polyline;\r\n constructor(\r\n axisDirection?: Vector3,\r\n axisPos?: Vector3,\r\n contour?: Polyline,\r\n private _StartAngle = 0,\r\n private _EndAngle = Math.PI / 2,\r\n )\r\n {\r\n super();\r\n if (axisDirection)\r\n {\r\n axisDirection.normalize();\r\n let x = new Vector3;\r\n let y = new Vector3;\r\n Orbit.ComputUpDirection(axisDirection, y, x);\r\n this._Matrix.makeBasis(x.normalize(), y.normalize(), axisDirection);\r\n }\r\n else\r\n axisDirection = new Vector3(0, 0, 1);\r\n\r\n if (axisPos)\r\n this._Matrix.setPosition(axisPos);\r\n else\r\n axisPos = new Vector3;\r\n\r\n if (contour)\r\n {\r\n if (contour.Id) this._Contour = contour.Clone();\r\n else this._Contour = contour;\r\n\r\n this._Contour.IsEmbedEntity = true;\r\n\r\n if (this._Contour.IsClockWise) this._Contour.Reverse();\r\n\r\n let ocs = this.OCS.setPosition(0, 0, 0);\r\n let ocsInv = this.OCSInv;\r\n let endParam = this._Contour.EndParam;\r\n\r\n let p = this._Contour.StartPoint.applyMatrix4(ocsInv);\r\n axisPos.add(axisDirection.clone().multiplyScalar(p.z));\r\n\r\n //对齐X轴\r\n for (let i = 0; i < endParam; i += 0.5)\r\n {\r\n let p = this._Contour.GetPointAtParam(i);\r\n p.applyMatrix4(ocsInv).setZ(0);\r\n\r\n if (!equalv3(p, ZeroVec))\r\n {\r\n p.applyMatrix4(ocs);\r\n p.normalize();//X轴\r\n let y = axisDirection.clone().cross(p).normalize();\r\n this._Matrix.makeBasis(p, y, axisDirection).setPosition(axisPos);\r\n break;\r\n }\r\n }\r\n this._Contour.ApplyMatrix(this.OCSInv);\r\n }\r\n }\r\n\r\n get Contour() { return this._Contour; }\r\n\r\n GetGripPoints()\r\n {\r\n let box = this._Contour.BoundingBox;\r\n let size = box.getSize(new Vector3);\r\n let p1 = new Vector3(size.x);\r\n let p2 = p1.clone();\r\n r.setRotate(this._StartAngle);\r\n r.applyVector(p1);\r\n r.setRotate(this._EndAngle);\r\n r.applyVector(p2);\r\n p1.applyMatrix4(this._Matrix);\r\n p2.applyMatrix4(this._Matrix);\r\n return [p1, p2];\r\n }\r\n\r\n GetObjectSnapPoints(snapMode: ObjectSnapMode, pickPoint: Vector3, lastPoint: Vector3)\r\n {\r\n switch (snapMode)\r\n {\r\n case ObjectSnapMode.Nea:\r\n break;\r\n case ObjectSnapMode.Cen:\r\n break;\r\n case ObjectSnapMode.Per:\r\n break;\r\n case ObjectSnapMode.Tan:\r\n break;\r\n case ObjectSnapMode.End:\r\n return this.GetGripPoints();\r\n default:\r\n break;\r\n }\r\n return [];\r\n }\r\n\r\n MoveGripPoints(indexs: number[], vec: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n for (let i of indexs)\r\n {\r\n let p = this.GetGripPoints()[i];\r\n let np = p.add(vec).applyMatrix4(this.OCSInv);\r\n let a = angle(np);\r\n if (i === 0)\r\n this._StartAngle = a;\r\n else\r\n this._EndAngle = a;\r\n\r\n this.Update();\r\n return;\r\n }\r\n }\r\n\r\n private _MeshGeometry: Geometry;\r\n\r\n get BoundingBox()\r\n {\r\n let geom = this.MeshGeometry;\r\n\r\n if (!geom)\r\n {\r\n console.error(\"RevolveSolid无法建模\");\r\n return new Box3;\r\n }\r\n\r\n if (!geom.boundingBox)\r\n geom.computeBoundingBox();\r\n\r\n return geom.boundingBox.clone().applyMatrix4(this._Matrix);\r\n }\r\n\r\n private _CacheContourPoints: Vector2[];//轮廓2D点\r\n private _CacheContourPoints3D: Vector3[];//轮廓3D点\r\n\r\n private _CacheContourPoints3DQ: Vector3[];//放样点(展开)\r\n private _CacheContourPoints3DQ2: Vector3[][] = [];//放样点集合缓存(只是避免了重复构造)\r\n\r\n private _CacheContourFaces: [number, number, number][];//Face缓存\r\n private _CacheIsRev: boolean;//方向缓存\r\n\r\n get MeshGeometry()\r\n {\r\n if (this._MeshGeometry) return this._MeshGeometry;\r\n\r\n _Arc.StartAngle = this._StartAngle;\r\n _Arc.EndAngle = this._EndAngle;\r\n\r\n if (this._CacheIsRev === undefined)\r\n {\r\n let n = this._Contour.Normal;\r\n this._CacheIsRev = n.y > 0;\r\n }\r\n\r\n if (this._CacheContourPoints === undefined)\r\n {\r\n this._CacheContourPoints3D = [];\r\n let ocsInv = this._Contour.OCSInv;\r\n for (let i = 0; i < this._Contour.EndParam; i++)\r\n {\r\n let c = this._Contour.GetCurveAtIndex(i);\r\n this._CacheContourPoints3D.push(c.StartPoint);\r\n if (c instanceof Arc)\r\n {\r\n let minCount = Math.max(2, Math.ceil((c.AllAngle) / Math.PI) * 3);\r\n let count = clamp(c.Length / 20, minCount, 30);\r\n for (let j = 0; j < count; j++)\r\n this._CacheContourPoints3D.push(c.GetPointAtParam((j + 1) / (count + 1)));\r\n }\r\n this._CacheContourPoints3D.push(c.EndPoint);\r\n }\r\n this._CacheContourPoints = this._CacheContourPoints3D.map(p => AsVector2(p.clone().applyMatrix4(ocsInv)));\r\n\r\n this._CacheContourFaces = ShapeUtils.triangulateShape(this._CacheContourPoints, []) as [number, number, number][];\r\n\r\n this._CacheContourPoints3DQ = [];\r\n if (isParallelTo(this._Contour.Normal, YAxis))\r\n this._CacheContourPoints3DQ.push(...this._CacheContourPoints3D);\r\n else\r\n for (let i = 0; i < this._CacheContourPoints3D.length; i++)\r\n {\r\n let p1 = this._CacheContourPoints3D[i];\r\n let p2 = this._CacheContourPoints3D[FixIndex(i + 1, this._CacheContourPoints3D)];\r\n let length = p1.distanceTo(p2);\r\n v.subVectors(p2, p1);\r\n let count = clamp(Math.floor(length / 50), 2, 16);//合理的控制采样精度是性能的关键\r\n v.divideScalar(count);\r\n\r\n this._CacheContourPoints3DQ.push(p1);\r\n if (equaln(p1.x, 0) && equaln(p1.y, 0)\r\n && equaln(p2.x, 0) && equaln(p2.y, 0))\r\n continue;\r\n for (let j = 1; j < count; j++)\r\n {\r\n this._CacheContourPoints3DQ.push(v.clone().multiplyScalar(j).add(p1));\r\n }\r\n }\r\n\r\n if (!this._CacheIsRev)\r\n this._CacheContourPoints3DQ.reverse();\r\n }\r\n\r\n //性能:此处用BufferGeometry可以提高性能\r\n let geo = new Geometry;\r\n\r\n\r\n if (this._StartAngle !== this._EndAngle)\r\n {\r\n //起点盖子\r\n r.setRotate(this._StartAngle);\r\n let contoursStart = this._CacheContourPoints3D.map(p =>\r\n {\r\n p = p.clone();\r\n r.applyVector(p);\r\n return p;\r\n });\r\n geo.vertices.push(...contoursStart);\r\n for (let face of this._CacheContourFaces)\r\n {\r\n if (this._CacheIsRev)\r\n geo.faces.push(new Face3(face[2], face[1], face[0]));\r\n else\r\n geo.faces.push(new Face3(face[0], face[1], face[2]));\r\n }\r\n\r\n //终点盖子\r\n r.setRotate(this._EndAngle);\r\n let contoursEnd = this._CacheContourPoints3D.map(p =>\r\n {\r\n p = p.clone();\r\n r.applyVector(p);\r\n return p;\r\n });\r\n let count = geo.vertices.length;\r\n geo.vertices.push(...contoursEnd);\r\n for (let face of this._CacheContourFaces)\r\n {\r\n if (!this._CacheIsRev)\r\n geo.faces.push(new Face3(count + face[2], count + face[1], count + face[0]));\r\n else\r\n geo.faces.push(new Face3(count + face[0], count + face[1], count + face[2]));\r\n }\r\n }\r\n\r\n let allAngle = this._StartAngle === this._EndAngle ? Math.PI * 2 : _Arc.AllAngle;\r\n\r\n RevolveLine(geo, this._CacheContourPoints3DQ, this._CacheContourPoints3DQ2, this._StartAngle, allAngle);\r\n geo.computeVertexNormals();\r\n geo.computeFaceNormals();\r\n this._MeshGeometry = geo;\r\n return geo;\r\n }\r\n\r\n //#region Draw\r\n InitDrawObject(renderType: RenderType = RenderType.Wireframe)\r\n {\r\n let obj = new Object3D();\r\n this.UpdateDrawObject(renderType, obj);\r\n return obj;\r\n }\r\n\r\n UpdateDrawGeometry()\r\n {\r\n this._MeshGeometry = undefined;\r\n }\r\n\r\n private static MeshNromal = new MeshNormalMaterial({ wireframe: true });\r\n\r\n UpdateDrawObject(type: RenderType, obj: Object3D)\r\n {\r\n Object3DRemoveAll(obj);\r\n\r\n if (type === RenderType.Wireframe)\r\n {\r\n let g = this.MeshGeometry;\r\n g.computeFaceNormals();\r\n g.computeVertexNormals();\r\n obj.add(new Mesh(g, RevolveSolid.MeshNromal));\r\n }\r\n else// if (type === RenderType.Conceptual || type===RenderType.Physical || type === RenderType.Jig)\r\n {\r\n let g = this.MeshGeometry;\r\n g.computeFaceNormals();\r\n g.computeVertexNormals();\r\n obj.add(new Mesh(g, ColorMaterial.GetConceptualMaterial(this.ColorIndex)));\r\n }\r\n return obj;\r\n }\r\n\r\n /**\r\n * 更新实体Jig状态时的材质\r\n */\r\n UpdateJigMaterial(color = 8)\r\n {\r\n for (let [type, obj] of this._CacheDrawObject)\r\n {\r\n if (obj.children.length)\r\n {\r\n let mesh = obj.children[0] as Mesh;\r\n mesh.material = ColorMaterial.GetBasicMaterialTransparent(8, 0.1);\r\n }\r\n }\r\n }\r\n RestoreJigMaterial()\r\n {\r\n for (let [type, obj] of this._CacheDrawObject)\r\n {\r\n if (obj.children.length)\r\n {\r\n let mesh = obj.children[0] as Mesh;\r\n if (type === RenderType.Wireframe)\r\n mesh.material = RevolveSolid.MeshNromal;\r\n else\r\n mesh.material = ColorMaterial.GetConceptualMaterial(this.ColorIndex);\r\n }\r\n }\r\n }\r\n\r\n //#endregion\r\n\r\n //#region -------------------------File-------------------------\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._Contour = file.ReadObject();\r\n if (ver > 1)\r\n {\r\n this._StartAngle = file.Read();\r\n this._EndAngle = file.Read();\r\n }\r\n return this;\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(2);\r\n super.WriteFile(file);\r\n file.WriteObject(this._Contour);\r\n file.Write(this._StartAngle);\r\n file.Write(this._EndAngle);\r\n return this;\r\n }\r\n //局部撤销\r\n ApplyPartialUndo(undoData: CADObject)\r\n {\r\n super.ApplyPartialUndo(undoData);\r\n }\r\n //#endregion\r\n}\r\n\r\nfunction RevolveLine(geo: Geometry, contourPoints: Vector3[], cachePoints: Vector3[][], startAngle: number, allAngle: number)\r\n{\r\n //计算圆的半径\r\n let rotateCircleRadius = 0;\r\n for (let p of contourPoints)\r\n {\r\n let r = p.x * p.x + p.y * p.y;\r\n if (r > rotateCircleRadius)\r\n rotateCircleRadius = r;\r\n }\r\n rotateCircleRadius = Math.sqrt(rotateCircleRadius);\r\n\r\n let minCount = Math.max(2, Math.ceil((allAngle) / Math.PI) * 4);\r\n let angleCount = clamp(Math.floor(rotateCircleRadius / 3.2), minCount, 30);\r\n\r\n // let angleCount = Math.max(Math.floor(allAngle / 0.2), 3);//合理的控制采样精度是性能的关键\r\n let anDiv = allAngle / angleCount;\r\n\r\n let startVerticesCount = geo.vertices.length;\r\n let contourVerticesCount = contourPoints.length;\r\n\r\n let count2 = (equaln(allAngle, Math.PI * 2) ? angleCount : angleCount + 1);\r\n //TODO:如果有必要的话,此处可以缓存0-360度的轮廓点,用空间换时间\r\n for (let i = 0; i < count2; i++)\r\n {\r\n r.setRotate(startAngle + anDiv * i);\r\n let curPoints: Vector3[];\r\n if (i < cachePoints.length)//使用已经生成的点,避免重复的生成新的Vector3造成的过多GC\r\n {\r\n curPoints = cachePoints[i];\r\n for (let j = 0; j < curPoints.length; j++)\r\n {\r\n let p = curPoints[j];\r\n p.copy(contourPoints[j]);\r\n r.applyVector(p);\r\n }\r\n }\r\n else\r\n {\r\n curPoints = contourPoints.map(p =>\r\n {\r\n p = p.clone();\r\n r.applyVector(p);\r\n return p;\r\n });\r\n cachePoints.push(curPoints);\r\n }\r\n geo.vertices.push(...curPoints);\r\n }\r\n\r\n for (let i = 0; i < angleCount; i++)\r\n {\r\n let nextI = FixIndex(i + 1, count2);\r\n\r\n let s1 = startVerticesCount + i * contourVerticesCount;\r\n let s2 = startVerticesCount + nextI * contourVerticesCount;\r\n\r\n for (let j = 0; j < contourVerticesCount; j++)\r\n {\r\n let jn = FixIndex(j + 1, contourVerticesCount);\r\n if (!IsAxis(contourPoints[j], contourPoints[jn]))\r\n {\r\n geo.faces.push(new Face3(j + s1, jn + s1, s2 + j));\r\n geo.faces.push(new Face3(j + s2, jn + s1, s2 + jn));\r\n }\r\n }\r\n }\r\n}\r\n\r\nfunction IsAxis(p1: Vector3, p2: Vector3)\r\n{\r\n return equaln(p1.x, 0) && equaln(p1.y, 0) && equaln(p2.x, 0) && equaln(p2.y, 0);\r\n}\r\n","import { HostApplicationServices } from \"../../ApplicationServices/HostApplicationServices\";\r\nimport { Factory } from \"../CADFactory\";\r\nimport { Entity } from \"../Entity/Entity\";\r\nimport { Text } from \"../Text/Text\";\r\n\r\n@Factory\r\nexport abstract class Dimension extends Entity\r\n{\r\n OnlyRenderType = true;\r\n protected _TextString: string;\r\n protected _TextSize: number = HostApplicationServices.dimTextHeight;\r\n protected _Text = new Text(undefined, undefined, \"yahei\");\r\n protected _FractionDigits: number = HostApplicationServices.fractionDigitsType;\r\n set TextString(txt: string)\r\n {\r\n let str = this.GetString();\r\n let tstr = this._TextString ? this._TextString.replace(\"<>\", str) : str;\r\n if (txt !== tstr)\r\n {\r\n this.WriteAllObjectRecord();\r\n if (txt.trim() === \"\")\r\n this._TextString = null;\r\n else\r\n this._TextString = txt.replace(str, \"<>\");\r\n this.Update();\r\n }\r\n }\r\n\r\n get TextString()\r\n {\r\n return this._TextString ? this._TextString.replace(\"<>\", this.GetString()) : this.GetString();\r\n }\r\n\r\n set TextSize(size: number)\r\n {\r\n if (this._Text.Height !== size)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._TextSize = size;\r\n this.Update();\r\n }\r\n }\r\n\r\n get TextSize()\r\n {\r\n return this._TextSize;\r\n }\r\n\r\n set FractionDigits(length: number)\r\n {\r\n if (this._FractionDigits !== length)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._FractionDigits = length;\r\n this.Update();\r\n }\r\n }\r\n\r\n get FractionDigits()\r\n {\r\n return this._FractionDigits;\r\n }\r\n\r\n protected abstract GetString(): string;\r\n}\r\n","import { LineBasicMaterial } from \"three\";\r\nimport { ColorMaterial } from \"../../Common/ColorPalette\";\r\nimport { RenderType } from \"../../GraphicsSystem/RenderType\";\r\nimport { Entity } from \"../Entity/Entity\";\r\n\r\nexport function GetDimLineMaterial(dim: Entity, renderType: RenderType): LineBasicMaterial\r\n{\r\n if (renderType === RenderType.Wireframe)\r\n return ColorMaterial.GetLineMaterial(dim.ColorIndex);\r\n else if (renderType > 100)\r\n return ColorMaterial.GetLineMaterial(0);\r\n else\r\n return ColorMaterial.GetLineMaterial(6);\r\n}\r\n","import { BufferGeometry, Line as TLine, Material, MathUtils, Matrix3, Matrix4, Mesh, Object3D, Vector3 } from \"three\";\r\nimport { Line2 } from \"three/examples/jsm/lines/Line2\";\r\nimport { HostApplicationServices } from \"../../ApplicationServices/HostApplicationServices\";\r\nimport { AddEntityDrawObject } from \"../../Common/AddEntityDrawObject\";\r\nimport { arrayRemoveDuplicateBySort, arraySortByNumber } from \"../../Common/ArrayExt\";\r\nimport { ColorMaterial } from \"../../Common/ColorPalette\";\r\nimport { reviseMirrorMatrix } from \"../../Common/Matrix4Utils\";\r\nimport { FixedNotZero, FixIndex } from \"../../Common/Utils\";\r\nimport { ObjectSnapMode } from \"../../Editor/ObjectSnapMode\";\r\nimport { BufferGeometryUtils } from \"../../Geometry/BufferGeometryUtils\";\r\nimport { angle, equaln, equalv3 } from \"../../Geometry/GeUtils\";\r\nimport { IntersectOption } from \"../../GraphicsSystem/IntersectWith\";\r\nimport { RenderType } from \"../../GraphicsSystem/RenderType\";\r\nimport { Factory } from \"../CADFactory\";\r\nimport { CADFiler } from \"../CADFiler\";\r\nimport { Arc } from \"../Entity/Arc\";\r\nimport { Line } from \"../Entity/Line\";\r\nimport { TextAligen } from \"../Text/Text\";\r\nimport { Dimension } from \"./Dimension\";\r\nimport { GetDimLineMaterial } from \"./GetDimLineMaterial\";\r\n\r\n/**\r\n * 两条直线的角度标注\r\n */\r\n@Factory\r\nexport class LineAngularDimension extends Dimension\r\n{\r\n private _Arc = new Arc();\r\n constructor(\r\n protected _L1StartPoint = new Vector3(), //第一条直线的起点\r\n protected _L1EndPoint = new Vector3(), //第一条直线的终点\r\n protected _L2StartPoint = new Vector3(), //第二条直线的起点\r\n protected _L2EndPoint = new Vector3(),\r\n protected _DimPoint = new Vector3(), //标注位置\r\n )\r\n {\r\n super();\r\n // this._Arc.ColorIndex = 3;\r\n this._Text.TextAligen = TextAligen.Down;\r\n this._Text.Height = HostApplicationServices.dimTextHeight;\r\n }\r\n\r\n protected GetString()\r\n {\r\n return FixedNotZero(MathUtils.radToDeg(this._Arc.AllAngle), this._FractionDigits) + \"°\";\r\n }\r\n\r\n UpdateDimData(l1sp: Vector3, l1ep: Vector3, l2sp: Vector3, l2ep: Vector3, dimp: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n let inv = this.OCSInv;\r\n for (let [p, pn] of [\r\n [this._L1StartPoint, l1sp],\r\n [this._L1EndPoint, l1ep],\r\n [this._L2StartPoint, l2sp],\r\n [this._L2EndPoint, l2ep],\r\n [this._DimPoint, dimp],\r\n ])\r\n {\r\n if (pn)\r\n p.copy(pn).applyMatrix4(inv);\r\n }\r\n this.Update();\r\n }\r\n\r\n get Text()\r\n {\r\n return this._Text;\r\n }\r\n get L1StartPoint()\r\n {\r\n return this._L1StartPoint.clone().applyMatrix4(this._Matrix);\r\n }\r\n get L2StartPoint()\r\n {\r\n return this._L2StartPoint.clone().applyMatrix4(this._Matrix);\r\n }\r\n get L1EndPoint()\r\n {\r\n return this._L1EndPoint.clone().applyMatrix4(this._Matrix);\r\n }\r\n get L2EndPoint()\r\n {\r\n return this._L2EndPoint.clone().applyMatrix4(this._Matrix);\r\n }\r\n get DimPoint()\r\n {\r\n return this._DimPoint.clone().applyMatrix4(this._Matrix);\r\n }\r\n get Arc()\r\n {\r\n return this._Arc.Clone().ApplyMatrix(this._Matrix);\r\n }\r\n //#region 动态拽拖\r\n GetGripPoints(): Array\r\n {\r\n return [\r\n this._L1StartPoint,\r\n this._L1EndPoint,\r\n this._L2StartPoint,\r\n this._L2EndPoint,\r\n this._DimPoint,\r\n ].map(p =>\r\n {\r\n return p.clone().applyMatrix4(this._Matrix);\r\n });\r\n }\r\n MoveGripPoints(indexList: number[], vec: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n let arr = [\r\n this._L1StartPoint,\r\n this._L1EndPoint,\r\n this._L2StartPoint,\r\n this._L2EndPoint,\r\n this._DimPoint,\r\n ];\r\n vec = vec.clone().applyMatrix4(this.OCSInv.setPosition(0, 0, 0));\r\n\r\n for (let i of indexList)\r\n arr[i].add(vec);\r\n this.Update();\r\n }\r\n GetStretchPoints(): Array\r\n {\r\n return this.GetGripPoints();\r\n }\r\n MoveStretchPoints(indexList: Array, vec: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n this.MoveGripPoints(indexList, vec);\r\n }\r\n //#endregion\r\n\r\n //#region 绘制\r\n\r\n Clone(): this\r\n {\r\n let ent = super.Clone();\r\n ent._Text.CopyFrom(this._Text);\r\n ent._Arc.CopyFrom(this._Arc);\r\n for (let [type, obj] of ent._CacheDrawObject)\r\n {\r\n for (let o of obj.children)\r\n if (o instanceof TLine)\r\n o.geometry = o.geometry.clone();\r\n }\r\n return ent;\r\n }\r\n\r\n Explode()\r\n {\r\n //为了避免Text对象没有被更新.\r\n this.GetDrawObjectFromRenderType();\r\n return [\r\n this._Arc.Clone().ApplyMatrix(this._Matrix),\r\n this._Text.Clone().ApplyMatrix(this._Matrix)\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 let arc = this._Arc.Clone().ApplyMatrix(this._Matrix);\r\n switch (snapMode)\r\n {\r\n case ObjectSnapMode.End:\r\n return this.GetStretchPoints().concat([arc.StartPoint, arc.EndPoint]);\r\n default:\r\n return arc.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform);\r\n }\r\n }\r\n InitDrawObject(renderType: RenderType = RenderType.Wireframe): Object3D\r\n {\r\n this._Text.ColorIndex = this.ColorIndex;\r\n\r\n let colorMaterial = GetDimLineMaterial(this, renderType);\r\n\r\n let arrow1 = new Mesh(BufferGeometryUtils.ArrowGeometry(), colorMaterial);\r\n let arrow2 = new Mesh(BufferGeometryUtils.ArrowGeometry(), colorMaterial);\r\n let arrowSize = 10;\r\n\r\n let l: TLine | Line2, l2: TLine | Line2;\r\n\r\n if (renderType === RenderType.WireframePrint)\r\n {\r\n l = new Line2(undefined, ColorMaterial.PrintLineMatrial);\r\n l2 = new Line2(undefined, ColorMaterial.PrintLineMatrial);\r\n arrowSize *= HostApplicationServices.lineWidth * 0.5;\r\n }\r\n else\r\n {\r\n l = new TLine(BufferGeometryUtils.CreateFromPts([new Vector3(), new Vector3()]), colorMaterial);\r\n l2 = new TLine(BufferGeometryUtils.CreateFromPts([new Vector3(), new Vector3()]), colorMaterial);\r\n }\r\n\r\n arrow1.scale.set(arrowSize, arrowSize, arrowSize);\r\n arrow2.scale.set(arrowSize, arrowSize, arrowSize);\r\n\r\n let obj = new Object3D();\r\n obj.add(arrow1, arrow2, l, l2);\r\n this.UpdateDrawObject(renderType, obj);\r\n return obj;\r\n }\r\n Update2Line(l1: Line, l2: Line, intPt: Vector3, li1: TLine, li2: TLine)\r\n {\r\n let intPar1 = l1.GetParamAtPoint(intPt);\r\n if (intPar1 >= 1)\r\n l1.Reverse();\r\n\r\n let intPar2 = l2.GetParamAtPoint(intPt);\r\n if (intPar2 >= 1)\r\n l2.Reverse();\r\n\r\n const updateLine = (l: Line, li: TLine | Line2, refPt: Vector3, refPt2?: Vector3) =>\r\n {\r\n let par = l.GetParamAtPoint(refPt);\r\n let refPar = l.GetParamAtPoint(intPt);\r\n if (par > 1)\r\n {\r\n li.visible = true;\r\n if (li instanceof TLine)\r\n {\r\n let geo = li.geometry as BufferGeometry;\r\n geo.copy(BufferGeometryUtils.CreateFromPts([l.EndPoint, refPt]));\r\n }\r\n else\r\n {\r\n let geo = li.geometry;\r\n geo.setPositions([...l.EndPoint.toArray(), ...refPt.toArray()]);\r\n }\r\n }\r\n else if (par < 0)\r\n {\r\n li.visible = true;\r\n if (li instanceof TLine)\r\n {\r\n let geo = li.geometry as BufferGeometry;\r\n\r\n geo.copy(\r\n BufferGeometryUtils.CreateFromPts([par < refPar ? intPt : l.StartPoint, refPt])\r\n );\r\n }\r\n else\r\n {\r\n let geo = li.geometry;\r\n let p = par < refPar ? intPt : l.StartPoint;\r\n geo.setPositions([...p.toArray(), ...refPt.toArray()]);\r\n }\r\n\r\n }\r\n else if (isNaN(par) && refPt2)\r\n {\r\n updateLine(l, li, refPt2);\r\n }\r\n else\r\n {\r\n li.visible = false;\r\n }\r\n };\r\n\r\n updateLine(l1, li1, this._Arc.StartPoint, this._Arc.EndPoint);\r\n updateLine(l2, li2, this._Arc.EndPoint, this._Arc.StartPoint);\r\n }\r\n\r\n UpdateDrawObject(renderType: RenderType, obj: Object3D)\r\n {\r\n let [arrow1, arrow2, li1, li2] = obj.children;\r\n obj.remove(...obj.children.slice(4));\r\n\r\n let l1 = new Line(this._L1StartPoint, this._L1EndPoint);\r\n let l2 = new Line(this._L2StartPoint, this._L2EndPoint);\r\n\r\n let insP = l1.IntersectWith(l2, IntersectOption.ExtendBoth)[0];\r\n if (insP)\r\n {\r\n this._Arc.AutoUpdate = false;//如果没有在这边关闭这个,那么Arc的盒子将错误\r\n this._Arc.Center = insP;\r\n this._Arc.Radius = insP.distanceTo(this._DimPoint);\r\n\r\n let ans = [this._L1StartPoint, this._L1EndPoint, this._L2StartPoint, this._L2EndPoint]\r\n .map(p =>\r\n {\r\n if (equalv3(p, insP))\r\n return NaN;\r\n return angle(p.clone().sub(insP));\r\n }).filter(a => !isNaN(a));\r\n ans = ans.concat(ans.map(a => (a + Math.PI) % (Math.PI * 2)));\r\n arraySortByNumber(ans);\r\n arrayRemoveDuplicateBySort(ans, (a1, a2) => equaln(a1, a2));\r\n\r\n let dimAn = angle(this._DimPoint.clone().sub(insP));\r\n\r\n for (let i = 0; i < ans.length; i++)\r\n {\r\n let ni = FixIndex(i + 1, ans.length);\r\n\r\n this._Arc.StartAngle = ans[ni];\r\n this._Arc.EndAngle = ans[i];\r\n this._Arc.ColorIndex = this._Color;\r\n\r\n if (this._Arc.ParamOnCurve(this._Arc.GetParamAtAngle(dimAn)))\r\n {\r\n this._Arc.AutoUpdate = true;\r\n this._Arc.DeferUpdate();\r\n\r\n AddEntityDrawObject(obj, this._Arc, renderType);\r\n arrow1.position.copy(this._Arc.StartPoint);\r\n arrow1.rotation.z = this._Arc.GetFistDerivAngle(0) + Math.PI / 2;\r\n arrow1.updateMatrix();\r\n\r\n arrow2.position.copy(this._Arc.EndPoint);\r\n arrow2.rotation.z = this._Arc.GetFistDerivAngle(1) - Math.PI / 2;\r\n arrow2.updateMatrix();\r\n\r\n this._Text.AutoUpdate = false;//更新标记\r\n\r\n this._Text.Height = this._TextSize;\r\n this._Text.TextString = this.TextString;\r\n this._Text.Position = this._Arc.GetPointAtParam(0.5);\r\n this._Text.TextRotation = this._Arc.GetAngleAtParam(0.5) % (Math.PI) - Math.PI / 2;\r\n\r\n this._Text.AutoUpdate = true;//更新标记\r\n this._Text.DeferUpdate();\r\n AddEntityDrawObject(obj, this._Text, renderType);\r\n break;\r\n }\r\n }\r\n\r\n this.Update2Line(l1, l2, insP, li1 as TLine, li2 as TLine);\r\n }\r\n }\r\n\r\n UpdateDrawObjectMaterial(type: RenderType, obj: Object3D, material?: Material)\r\n {\r\n let colorMaterial = GetDimLineMaterial(this, type);\r\n let count = Math.min(4, obj.children.length);\r\n for (let i = 0; i < count; i++)\r\n {\r\n let l = obj.children[i] as TLine;\r\n l.material = colorMaterial;\r\n }\r\n this._Arc.ColorIndex = this._Color;\r\n this._Text.ColorIndex = this._Color;\r\n }\r\n\r\n protected ApplyMirrorMatrix(m: Matrix4)\r\n {\r\n this.WriteAllObjectRecord();\r\n let p1 = this.L1StartPoint;\r\n let p2 = this.L1EndPoint;\r\n let p3 = this.L2StartPoint;\r\n let p4 = this.L2EndPoint;\r\n let p5 = this.DimPoint;\r\n\r\n reviseMirrorMatrix(this._Matrix, 1);\r\n\r\n this.UpdateDimData(p2, p1, p4, p3, p5);\r\n\r\n return this;\r\n }\r\n //#endregion\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._L1StartPoint.fromArray(file.Read());\r\n this._L1EndPoint.fromArray(file.Read());\r\n this._L2StartPoint.fromArray(file.Read());\r\n this._L2EndPoint.fromArray(file.Read());\r\n this._DimPoint.fromArray(file.Read());\r\n if (ver > 1) this._TextString = file.Read();\r\n if (ver > 2) this._TextSize = file.Read();\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n super.WriteFile(file);\r\n file.Write(3);\r\n file.Write(this._L1StartPoint.toArray());\r\n file.Write(this._L1EndPoint.toArray());\r\n file.Write(this._L2StartPoint.toArray());\r\n file.Write(this._L2EndPoint.toArray());\r\n file.Write(this._DimPoint.toArray());\r\n file.Write(this._TextString);\r\n file.Write(this._TextSize);\r\n }\r\n //#endregion\r\n\r\n}\r\n","import { BufferGeometry, Line as TLine, Material, Matrix3, Matrix4, Mesh, 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 { HostApplicationServices } from \"../../ApplicationServices/HostApplicationServices\";\r\nimport { AddEntityDrawObject } from \"../../Common/AddEntityDrawObject\";\r\nimport { ColorMaterial } from \"../../Common/ColorPalette\";\r\nimport { safeEval } from \"../../Common/eval\";\r\nimport { reviseMirrorMatrix } from \"../../Common/Matrix4Utils\";\r\nimport { UpdateDraw } from \"../../Common/Status\";\r\nimport { FixedNotZero } from \"../../Common/Utils\";\r\nimport { ObjectSnapMode } from \"../../Editor/ObjectSnapMode\";\r\nimport { BufferGeometryUtils } from \"../../Geometry/BufferGeometryUtils\";\r\nimport { angle, angleAndX, AsVector2, equaln, equalv3, isParallelTo, midPoint, ZAxis } from \"../../Geometry/GeUtils\";\r\nimport { RenderType } from \"../../GraphicsSystem/RenderType\";\r\nimport { Factory } from \"../CADFactory\";\r\nimport { CADFiler } from \"../CADFiler\";\r\nimport { Line } from \"../Entity/Line\";\r\nimport { Polyline } from \"../Entity/Polyline\";\r\nimport { ObjectId } from \"../ObjectId\";\r\nimport { TextAligen } from \"../Text/Text\";\r\nimport { Dimension } from \"./Dimension\";\r\nimport { GetDimLineMaterial } from \"./GetDimLineMaterial\";\r\n\r\nlet snapPolyline = new Polyline([{ pt: new Vector2, bul: 0 }, { pt: new Vector2, bul: 0 }, { pt: new Vector2, bul: 0 }, { pt: new Vector2, bul: 0 }]);\r\ninterface LeadOutLinePts\r\n{\r\n dragPt: Vector3;\r\n endPt: Vector3;\r\n}\r\ninterface DefaultValue\r\n{\r\n offset: Vector2;\r\n isFlipped: boolean;\r\n}\r\n/**\r\n * 对齐标注\r\n * 存在子类重载(线性标注 LinearDimension)\r\n * @class AlignedDimension\r\n */\r\n@Factory\r\nexport class AlignedDimension extends Dimension\r\n{\r\n //引线\r\n private _LeadOutLine = new Polyline();\r\n private _LeadOutOffsetY = 72;\r\n private _LeadOutOffsetX = 30;\r\n private _DefaultVal: DefaultValue = { offset: new Vector2(30, 72), isFlipped: false };\r\n //引线的拖拽点和终点\r\n private _LeadOutPts: LeadOutLinePts = { dragPt: midPoint(this._ArmP1, this._ArmP2), endPt: new Vector3() };\r\n //引线是否反向(往左伸/往右伸)\r\n private _LeadOutIsFlipped: boolean = false;\r\n //是否由拖拽更新_LeadOutPts.dragPt. 关系到引线的update\r\n private isDragLeadOutPt: boolean = false;\r\n constructor(\r\n //针脚\r\n protected _FootP1: Vector3 = new Vector3(),\r\n protected _FootP2: Vector3 = new Vector3(),\r\n //肩膀\r\n protected _ArmP1: Vector3 = new Vector3(),\r\n protected _ArmP2: Vector3 = new Vector3(),\r\n protected _TextRotation: number = undefined,\r\n //是否显示引线\r\n protected _LeadOutVisible: boolean = true,\r\n )\r\n {\r\n super();\r\n this._Text.TextAligen = TextAligen.Down;\r\n this._Text.Height = HostApplicationServices.dimTextHeight;\r\n }\r\n\r\n set Material(materialId: ObjectId) { }\r\n\r\n set FootP1(v: Vector3)\r\n {\r\n this._FootP1.copy(v).applyMatrix4(this.OCSInv);\r\n this.Update();\r\n }\r\n get FootP1()\r\n {\r\n return this._FootP1.clone().applyMatrix4(this._Matrix);\r\n }\r\n set FootP2(v: Vector3)\r\n {\r\n this._FootP2.copy(v).applyMatrix4(this.OCSInv);\r\n this.Update();\r\n }\r\n get FootP2()\r\n {\r\n return this._FootP2.clone().applyMatrix4(this._Matrix);\r\n }\r\n set ArmP1(v: Vector3)\r\n {\r\n this._ArmP1.copy(v).applyMatrix4(this.OCSInv);\r\n this.Update();\r\n }\r\n get ArmP1()\r\n {\r\n return this._ArmP1.clone().applyMatrix4(this._Matrix);\r\n }\r\n set ArmP2(v: Vector3)\r\n {\r\n this._ArmP2.copy(v).applyMatrix4(this.OCSInv);\r\n this.Update();\r\n }\r\n get ArmP2()\r\n {\r\n return this._ArmP2.clone().applyMatrix4(this._Matrix);\r\n }\r\n\r\n get TextPosition()\r\n {\r\n return midPoint(this._ArmP1, this._ArmP2).applyMatrix4(this._Matrix);\r\n }\r\n set TextPosition(p: Vector3)\r\n {\r\n p = p.clone().applyMatrix4(this.OCSInv);\r\n let l = new Line(this._ArmP1.clone(), this._ArmP2.clone());\r\n p.setZ(this._ArmP1.z);\r\n let cp = l.GetClosestPointTo(p, true);\r\n let v = p.clone().sub(cp);\r\n\r\n this._ArmP1.add(v);\r\n this._ArmP2.add(v);\r\n\r\n this.Update();\r\n }\r\n\r\n //创建以arm1,arm2为x轴 position在foot1的坐标系 用于定位引线\r\n get DalUcs()\r\n {\r\n let dalUcs = new Matrix4();\r\n if (!equaln(this._ArmP1.distanceTo(this._ArmP2), 0))\r\n {\r\n let vx = this._ArmP2.clone().sub(this._ArmP1);\r\n if (equaln(this._ArmP1.x, this._ArmP2.x))\r\n {\r\n if (this._ArmP1.y < this._ArmP2.y)\r\n vx.negate();\r\n }\r\n else if (this._ArmP1.x < this._ArmP2.x)\r\n vx.negate();\r\n\r\n if (isParallelTo(vx, ZAxis))\r\n return new Matrix4().setPosition(this._FootP1);\r\n\r\n let vy = vx.clone().cross(ZAxis);\r\n dalUcs = new Matrix4().makeBasis(vx.normalize(), vy.normalize(), ZAxis);\r\n dalUcs.setPosition(this._FootP1);\r\n }\r\n return dalUcs;\r\n }\r\n\r\n RaiseFooters(num: number)\r\n {\r\n let dalucs = this.DalUcs;\r\n let dalUcsInv = new Matrix4().getInverse(dalucs);\r\n\r\n let p = new Vector3(0, num, 0);\r\n let f1 = this._FootP1.clone().applyMatrix4(dalucs);\r\n let f2 = this._FootP2.clone().applyMatrix4(dalucs);\r\n let a1 = this._ArmP1.clone().applyMatrix4(dalucs);\r\n if (a1.y < f1.y)\r\n p.negate();\r\n this._FootP1 = f1.add(p).applyMatrix4(dalUcsInv);\r\n this._FootP2 = f2.add(p).applyMatrix4(dalUcsInv);\r\n\r\n this.Update();\r\n }\r\n\r\n set TextRotation(angle: number)\r\n {\r\n this._TextRotation = angle;\r\n this.Update();\r\n }\r\n\r\n set TextAligen(al: TextAligen)\r\n {\r\n if (al !== this._Text.TextAligen)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._Text.TextAligen = al;\r\n }\r\n }\r\n\r\n get Text()\r\n {\r\n if (!this._Text.TextString)\r\n this.UpdateText();\r\n\r\n return this._Text;\r\n }\r\n\r\n protected GetString(): string\r\n {\r\n return FixedNotZero(this._ArmP1.distanceTo(this._ArmP2), this._FractionDigits);\r\n }\r\n\r\n get BoundingBox()\r\n {\r\n this.SetDataToTempPolyline();\r\n if (this._Text.HasBoundingBox)\r\n return snapPolyline.BoundingBox.union(this.Text.BoundingBox);\r\n else\r\n return snapPolyline.BoundingBox;\r\n }\r\n\r\n set LeadOutVisible(visible: boolean)\r\n {\r\n if (this._LeadOutVisible === visible) return;\r\n this.WriteAllObjectRecord();\r\n this._LeadOutVisible = visible;\r\n this.Update();\r\n }\r\n\r\n //引线朝右视为未翻转\r\n set LeadOutFlipped(isFlipped: boolean)\r\n {\r\n if (this._LeadOutIsFlipped === isFlipped) return;\r\n this.WriteAllObjectRecord();\r\n this._LeadOutIsFlipped = isFlipped;\r\n this.Update();\r\n }\r\n\r\n get LeadOutFlipped()\r\n {\r\n return this._LeadOutIsFlipped;\r\n }\r\n\r\n toggleLeadOutVisible()\r\n {\r\n this.WriteAllObjectRecord();\r\n this.LeadOutVisible = !this._LeadOutVisible;\r\n }\r\n\r\n toggleLeadOutFlipped()\r\n {\r\n this.WriteAllObjectRecord();\r\n this.LeadOutFlipped = !this._LeadOutIsFlipped;\r\n }\r\n\r\n set LeadOutOffsetY(size: number)\r\n {\r\n if (this._LeadOutOffsetY === size) return;\r\n this.WriteAllObjectRecord();\r\n this._LeadOutOffsetY = size;\r\n this.Update();\r\n }\r\n\r\n get LeadOutOffsetY()\r\n {\r\n return this._LeadOutOffsetY;\r\n }\r\n\r\n set LeadOutOffsetX(size: number)\r\n {\r\n if (this._LeadOutOffsetX === size) return;\r\n this.WriteAllObjectRecord();\r\n this._LeadOutOffsetX = size;\r\n this.Update();\r\n }\r\n\r\n get LeadOutOffsetX()\r\n {\r\n return this._LeadOutOffsetX;\r\n }\r\n\r\n set DefaultValue(val: DefaultValue)\r\n {\r\n this._DefaultVal = val;\r\n this._LeadOutOffsetX = val.offset.x;\r\n this._LeadOutOffsetY = val.offset.y;\r\n this.LeadOutFlipped = val.isFlipped;\r\n }\r\n\r\n get DefaultValue()\r\n {\r\n return this._DefaultVal;\r\n }\r\n\r\n Explode()\r\n {\r\n this.UpdateText(this._Text.Position);\r\n let res =\r\n [\r\n new Line(this._FootP1.clone(), this._ArmP1.clone()),\r\n new Line(this._ArmP2.clone(), this._ArmP1.clone()),\r\n new Line(this._ArmP2.clone(), this._FootP2.clone()),\r\n this._Text.Clone()\r\n ];\r\n if (!equalv3(this._LeadOutPts.dragPt, midPoint(this._ArmP1, this._ArmP2)))\r\n res.push(\r\n new Line(midPoint(this._ArmP1, this._ArmP2), this._LeadOutPts.dragPt.clone()),\r\n new Line(this._LeadOutPts.dragPt.clone(), this._LeadOutPts.endPt.clone())\r\n );\r\n return res.map(en => en.ApplyMatrix(this._Matrix));\r\n }\r\n protected ApplyMirrorMatrix(m: Matrix4)\r\n {\r\n this.WriteAllObjectRecord();\r\n let footP1 = this.FootP1;\r\n let footP2 = this.FootP2;\r\n let armP1 = this.ArmP1;\r\n let armP2 = this.ArmP2;\r\n\r\n reviseMirrorMatrix(this._Matrix, 0);\r\n\r\n this.FootP1 = footP1;\r\n this.FootP2 = footP2;\r\n this.ArmP1 = armP1;\r\n this.ArmP2 = armP2;\r\n\r\n this.Update(UpdateDraw.Geometry);\r\n return this;\r\n }\r\n Clone(): this\r\n {\r\n let ent = super.Clone();\r\n ent._Text.CopyFrom(this._Text);\r\n for (let [type, obj] of ent._CacheDrawObject)\r\n {\r\n for (let o of obj.children)\r\n if (o instanceof TLine)\r\n o.geometry = o.geometry.clone();\r\n }\r\n return ent;\r\n }\r\n\r\n InitDrawObject(renderType: RenderType = RenderType.Wireframe): Object3D\r\n {\r\n let obj = new Object3D();\r\n let colorMaterial = GetDimLineMaterial(this, renderType);\r\n let line: TLine | Line2;\r\n if (renderType === RenderType.WireframePrint)\r\n {\r\n const geo = new LineGeometry();\r\n line = new Line2(geo, ColorMaterial.PrintLineMatrial);\r\n }\r\n else\r\n line = new TLine(\r\n BufferGeometryUtils.CreateFromPts([this._FootP1, this._FootP2, this._ArmP1, this._ArmP2]),\r\n colorMaterial\r\n );\r\n\r\n let arrow1 = new Mesh(BufferGeometryUtils.ArrowGeometry(), colorMaterial);\r\n let arrow2 = new Mesh(BufferGeometryUtils.ArrowGeometry(), colorMaterial);\r\n\r\n obj.add(line, arrow1, arrow2);\r\n\r\n this.UpdateDrawObject(renderType, obj);\r\n\r\n return obj;\r\n }\r\n\r\n UpdateDrawObject(renderType: RenderType, obj: Object3D)\r\n {\r\n obj.remove(...obj.children.slice(3));\r\n let [line, arrow1, arrow2] = obj.children;\r\n let arrowSize = 10;\r\n if (renderType === RenderType.WireframePrint)\r\n {\r\n arrowSize *= HostApplicationServices.lineWidth * 0.5;\r\n const geometry = (line).geometry;\r\n let nums: number[] = [];\r\n for (let p of [this._FootP1, this._ArmP1, this._ArmP2, this._FootP2])\r\n nums.push(p.x, p.y, p.z);\r\n geometry.setPositions(nums);\r\n }\r\n else\r\n BufferGeometryUtils.UpdatePts((line).geometry as BufferGeometry, [this._FootP1, this._ArmP1, this._ArmP2, this._FootP2], true);\r\n\r\n arrow1.scale.set(arrowSize, arrowSize, arrowSize);\r\n arrow2.scale.set(arrowSize, arrowSize, arrowSize);\r\n\r\n let armV = this._ArmP1.clone().sub(this._ArmP2);\r\n let armAn = angle(armV);\r\n\r\n arrow1.position.copy(this._ArmP1);\r\n arrow2.position.copy(this._ArmP2);\r\n if (this._ArmP1.distanceTo(this._ArmP2) < 36)\r\n {\r\n arrow1.rotation.z = armAn + Math.PI / 2;\r\n arrow2.rotation.z = armAn - Math.PI / 2;\r\n }\r\n else\r\n {\r\n arrow1.rotation.z = armAn - Math.PI / 2;\r\n arrow2.rotation.z = armAn + Math.PI / 2;\r\n }\r\n arrow1.updateMatrix();\r\n arrow2.updateMatrix();\r\n\r\n //更新引线this._LeadOutLine 并返回新的字体位置\r\n let textPos = this.UpdateLeadOutLine(renderType);\r\n if (this._LeadOutLine.EndParam > 0 && this._LeadOutLine.Visible)\r\n AddEntityDrawObject(obj, this._LeadOutLine, renderType);\r\n\r\n this.UpdateText(textPos);\r\n AddEntityDrawObject(obj, this._Text, renderType);\r\n this.isDragLeadOutPt = false;\r\n }\r\n\r\n /**\r\n * 更新引线并返回textPosition\r\n * @returns textPosition(Vector3)\r\n * @memberof AlignedDimension\r\n */\r\n UpdateLeadOutLine(renderType: RenderType): Vector3\r\n {\r\n let textPosition: Vector3 = midPoint(this._ArmP1, this._ArmP2);\r\n\r\n let distance = this._ArmP1.distanceTo(this._ArmP2);\r\n let distanceStr = FixedNotZero(distance, 2);\r\n let strWidth = distanceStr.length * (~~(Math.abs(this.TextSize) / 2));//文字总宽度\r\n let needLeadOut = (safeEval(distanceStr) < strWidth + 1e-6) && !(equaln(distance, 0));//文字宽度是否比托盘更宽 是 则需要引线\r\n\r\n if (this._LeadOutVisible && needLeadOut) //引线可见且需要引线\r\n {\r\n let dalUcs = this.DalUcs;\r\n let dalUcsInv = new Matrix4().getInverse(dalUcs);\r\n\r\n let textWidthVec = new Vector3(strWidth);\r\n let isLeft = (v) => { return v.x < midPoint(this._ArmP1, this._ArmP2).applyMatrix4(dalUcs).x; };\r\n //确定引线的点的位置\r\n if (this.isDragLeadOutPt)//是否拖拽了dragPt(拖拽dragPt需要更新endPt)\r\n {\r\n let dragPtInDalUcs = this._LeadOutPts.dragPt.clone().applyMatrix4(dalUcs);\r\n let isleft = isLeft(dragPtInDalUcs.clone());\r\n if (isleft)//已经拖过中线 更新endPt 改变IsFlipped\r\n this._LeadOutPts.endPt = dragPtInDalUcs.clone().sub(textWidthVec);\r\n else\r\n this._LeadOutPts.endPt = dragPtInDalUcs.clone().add(textWidthVec);\r\n this._LeadOutIsFlipped = !isleft;\r\n }\r\n else //没有拖拽\r\n {\r\n this._LeadOutPts.dragPt = textPosition.clone().applyMatrix4(dalUcs).add(new Vector3(this._LeadOutIsFlipped ? this._LeadOutOffsetX : -this._LeadOutOffsetX, this._LeadOutOffsetY));\r\n if (isLeft(this._LeadOutPts.dragPt))\r\n this._LeadOutPts.endPt = this._LeadOutPts.dragPt.clone().sub(textWidthVec);\r\n else\r\n this._LeadOutPts.endPt = this._LeadOutPts.dragPt.clone().add(textWidthVec);\r\n this._LeadOutPts.dragPt.applyMatrix4(dalUcsInv);\r\n }\r\n\r\n this._LeadOutPts.endPt.applyMatrix4(dalUcsInv);\r\n\r\n this._LeadOutLine.AutoUpdate = false;\r\n this._LeadOutLine.LineData = [textPosition, this._LeadOutPts.dragPt, this._LeadOutPts.endPt].map(p => { return { pt: AsVector2(p), bul: 0 }; });\r\n this._LeadOutLine.Position = new Vector3(0, 0, textPosition.z);\r\n this._LeadOutLine.ColorIndex = this.ColorIndex;\r\n this._LeadOutLine.Visible = true;\r\n this._LeadOutLine.AutoUpdate = true;\r\n this._LeadOutLine.DeferUpdate();\r\n\r\n textPosition = midPoint(this._LeadOutPts.dragPt, this._LeadOutPts.endPt);\r\n }\r\n else //引线不可见或不需要引线\r\n {\r\n //使引线不可见 并将dragPt隐藏于托盘中点\r\n this._LeadOutPts.dragPt = midPoint(this._ArmP1, this._ArmP2);\r\n this._LeadOutLine.Visible = false;\r\n }\r\n return textPosition;\r\n }\r\n\r\n UpdateText(pos?: Vector3)\r\n {\r\n this._Text.AutoUpdate = false;\r\n\r\n let textRo = this._TextRotation ?? angleAndX(this._ArmP1.clone().sub(this._ArmP2));\r\n this._Text.TextString = this.TextString;\r\n this._Text.Position = pos ?? midPoint(this._ArmP1, this._ArmP2);\r\n this._Text.TextRotation = textRo;\r\n this._Text.ColorIndex = this._Color;\r\n this._Text.Height = this._TextSize;\r\n\r\n this._Text.DeferUpdate();\r\n this._Text.AutoUpdate = true;\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 this.SetDataToTempPolyline();\r\n return snapPolyline.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform);\r\n }\r\n\r\n private SetDataToTempPolyline()\r\n {\r\n snapPolyline.OCS = this._Matrix;\r\n snapPolyline.LineData[0].pt.set(this._FootP1.x, this._FootP1.y);\r\n snapPolyline.LineData[1].pt.set(this._ArmP1.x, this._ArmP1.y);\r\n snapPolyline.LineData[2].pt.set(this._ArmP2.x, this._ArmP2.y);\r\n snapPolyline.LineData[3].pt.set(this._FootP2.x, this._FootP2.y);\r\n\r\n if (!equaln(this._FootP1.z, 0))\r\n snapPolyline.OCSNoClone.setPosition(snapPolyline.Position.add(snapPolyline.Normal.multiplyScalar(this._FootP1.z)));\r\n // snapPolyline.LineData[4].pt.set(this._LeadOutPts.dragPt.x, this._LeadOutPts.dragPt.y); //引线拖拽点\r\n // snapPolyline.LineData[5].pt.set(this._LeadOutPts.endPt.x, this._LeadOutPts.endPt.y);\r\n }\r\n\r\n UpdateDrawObjectMaterial(renderType: RenderType, obj: Object3D, material?: Material)\r\n {\r\n if (renderType === RenderType.WireframePrint)\r\n return;\r\n this.WriteAllObjectRecord();\r\n let colorMat = GetDimLineMaterial(this, renderType);\r\n this._LeadOutLine.ColorIndex = this._Color;\r\n let [line, arrow1, arrow2] = obj.children;\r\n (line).material = colorMat;\r\n (arrow1).material = colorMat;\r\n (arrow2).material = colorMat;\r\n this._Text.ColorIndex = this._Color;\r\n }\r\n\r\n GetGripPoints(): Array\r\n {\r\n return [this._FootP1, this._FootP2, this._ArmP1, this._ArmP2, midPoint(this._ArmP1, this._ArmP2), this._LeadOutPts.dragPt].map(p =>\r\n {\r\n return p.clone().applyMatrix4(this._Matrix);\r\n });\r\n }\r\n MoveGripPoints(indexList: number[], vec: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n let inv = this.OCSInv;\r\n let inv0 = inv.clone().setPosition(0, 0, 0);\r\n let vec0 = vec.clone().applyMatrix4(inv0);\r\n for (let i of indexList)\r\n {\r\n if (i === 5)\r\n {\r\n let dalucs = this.DalUcs;\r\n //开始拖拽引线dragPt\r\n this.isDragLeadOutPt = true;\r\n this._LeadOutPts.dragPt.add(vec0);\r\n let calcV = this._LeadOutPts.dragPt.clone().applyMatrix4(dalucs).sub(midPoint(this._ArmP1, this._ArmP2).applyMatrix4(dalucs));\r\n this._LeadOutOffsetY = calcV.y;\r\n this._LeadOutOffsetX = Math.abs(calcV.x);\r\n }\r\n else if (i >= 2)\r\n {\r\n let p = this.TextPosition.add(vec).applyMatrix4(inv);\r\n let l = new Line(this._ArmP1, this._ArmP2);\r\n let cp = l.GetClosestPointTo(p, true);\r\n let v = p.clone().sub(cp);\r\n\r\n this._ArmP1.add(v);\r\n this._ArmP2.add(v);\r\n this._LeadOutPts.dragPt.add(v);\r\n }\r\n else\r\n {\r\n if (i === 0)\r\n this._FootP1.add(vec0);\r\n else\r\n this._FootP2.add(vec0);\r\n\r\n this.ChangeFootPt();\r\n }\r\n }\r\n this.Update();\r\n }\r\n GetStretchPoints(): Array\r\n {\r\n return this.GetGripPoints();\r\n }\r\n MoveStretchPoints(indexList: Array, vec: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n let lst: number[] = [];\r\n let bChangeText = false;\r\n for (let i of indexList)\r\n {\r\n if (i <= 1)\r\n lst.push(i);\r\n else\r\n bChangeText = true;\r\n }\r\n if (lst.length > 0)\r\n this.MoveGripPoints(lst, vec);\r\n if (bChangeText)\r\n this.MoveGripPoints([2], vec);\r\n }\r\n protected ChangeFootPt()\r\n {\r\n let l = new Line(this._FootP1, this._FootP2);\r\n let cp = l.GetClosestPointTo(this._ArmP1, true);\r\n\r\n let v = this._ArmP1.clone().sub(cp);\r\n\r\n this._ArmP1.copy(this._FootP1.clone().add(v));\r\n this._ArmP2.copy(this._FootP2.clone().add(v));\r\n }\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._ArmP1.fromArray(file.Read());\r\n this._ArmP2.fromArray(file.Read());\r\n this._FootP1.fromArray(file.Read());\r\n this._FootP2.fromArray(file.Read());\r\n this._TextRotation = file.Read();\r\n if (ver > 2) this._TextString = file.Read();\r\n if (ver > 3)\r\n {\r\n this._LeadOutVisible = file.Read();\r\n this._LeadOutIsFlipped = file.Read();\r\n this._LeadOutPts.dragPt.fromArray(file.Read());\r\n this._LeadOutOffsetY = file.Read();\r\n this._LeadOutOffsetX = file.Read();\r\n }\r\n if (ver > 4) this._TextSize = file.Read();\r\n if (ver > 5) this._FractionDigits = file.Read() ?? HostApplicationServices.fractionDigitsType ?? 2;\r\n\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n super.WriteFile(file);\r\n file.Write(6);\r\n file.Write(this._ArmP1.toArray());\r\n file.Write(this._ArmP2.toArray());\r\n file.Write(this._FootP1.toArray());\r\n file.Write(this._FootP2.toArray());\r\n file.Write(this._TextRotation);\r\n file.Write(this._TextString);\r\n\r\n file.Write(this._LeadOutVisible);\r\n file.Write(this._LeadOutIsFlipped);\r\n file.Write(this._LeadOutPts.dragPt.toArray());\r\n file.Write(this._LeadOutOffsetY);\r\n file.Write(this._LeadOutOffsetX);\r\n\r\n file.Write(this._TextSize);\r\n file.Write(this._FractionDigits);\r\n }\r\n //#endregion\r\n}\r\n","import { BufferGeometry, Line, Material, Matrix4, Mesh, Object3D, Vector3 } from \"three\";\r\nimport { AddEntityDrawObject } from \"../../Common/AddEntityDrawObject\";\r\nimport { FixedNotZero } from \"../../Common/Utils\";\r\nimport { BufferGeometryUtils } from \"../../Geometry/BufferGeometryUtils\";\r\nimport { AsVector3 } from \"../../Geometry/GeUtils\";\r\nimport { RenderType } from \"../../GraphicsSystem/RenderType\";\r\nimport { equaln } from \"../../Nest/Common/Util\";\r\nimport { Factory } from \"../CADFactory\";\r\nimport { CADFiler } from \"../CADFiler\";\r\nimport { Arc } from \"../Entity/Arc\";\r\nimport { Text, TextAligen } from \"../Text/Text\";\r\nimport { Dimension } from \"./Dimension\";\r\nimport { GetDimLineMaterial } from \"./GetDimLineMaterial\";\r\n\r\n@Factory\r\nexport class ArcDimension extends Dimension\r\n{\r\n private _Arc = new Arc;\r\n protected _Text = new Text();\r\n\r\n constructor(\r\n private _Center: Vector3 = new Vector3,\r\n private _StartAngle: number = 0,\r\n private _EndAngle: number = 1,\r\n private _Clockwise = false,\r\n private _Radius: number = 1,\r\n private _TextRadiusAdd: number = 1,\r\n protected _TextString: string = \"⌒<>\",\r\n )\r\n {\r\n super();\r\n }\r\n\r\n get Text()\r\n {\r\n if (!this._Text.TextString)\r\n {\r\n this.PraseArc();\r\n this.ParseText();\r\n }\r\n return this._Text;\r\n }\r\n\r\n set TextRadiusAdd(ra: number)\r\n {\r\n if (equaln(ra, this._TextRadiusAdd)) return;\r\n\r\n this.WriteAllObjectRecord();\r\n this._TextRadiusAdd = ra;\r\n this.Update();\r\n }\r\n\r\n get TextRadiusAdd() { return this._TextRadiusAdd; }\r\n\r\n protected GetString(): string\r\n {\r\n return FixedNotZero(this._Arc.Length, this._FractionDigits);\r\n }\r\n\r\n //#region 拉伸相关\r\n GetGripPoints(): Vector3[]\r\n {\r\n this.PraseArc();\r\n let pts = this._Arc.GetGripPoints();\r\n for (let p of pts)\r\n p.applyMatrix4(this.OCSNoClone);\r\n return pts;\r\n }\r\n MoveGripPoints(indexList: number[], vec: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n vec = vec.clone().applyMatrix4(this.OCSInv.setPosition(0, 0, 0));\r\n\r\n this.PraseArc();\r\n this._Arc.MoveGripPoints(indexList, vec);\r\n\r\n this.UpdateArcFromThisArc();\r\n this.Update();\r\n }\r\n\r\n GetStretchPoints(): Vector3[]\r\n {\r\n this.PraseArc();\r\n let pts = this._Arc.GetStretchPoints();\r\n for (let p of pts)\r\n p.applyMatrix4(this.OCSNoClone);\r\n return pts;\r\n }\r\n\r\n MoveStretchPoints(indexList: number[], vec: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n vec = vec.clone().applyMatrix4(this.OCSInv.setPosition(0, 0, 0));\r\n\r\n this.PraseArc();\r\n this._Arc.MoveStretchPoints(indexList, vec);\r\n\r\n this.UpdateArcFromThisArc();\r\n this.Update();\r\n }\r\n\r\n private UpdateArcFromThisArc()\r\n {\r\n this._Center.copy(this._Arc.Center);\r\n this._StartAngle = this._Arc.StartAngle;\r\n this._EndAngle = this._Arc.EndAngle;\r\n this._Radius = this._Arc.Radius;\r\n this._Clockwise = this._Arc.IsClockWise;\r\n }\r\n //#endregion\r\n\r\n //#region Draw\r\n InitDrawObject(renderType: RenderType = RenderType.Wireframe)\r\n {\r\n let colorMaterial = GetDimLineMaterial(this, renderType);\r\n\r\n let obj = new Object3D();\r\n let line = new Line(new BufferGeometry, colorMaterial);\r\n obj.add(line);\r\n\r\n let arrow1 = new Mesh(BufferGeometryUtils.ArrowGeometry(), colorMaterial);\r\n let arrow2 = new Mesh(BufferGeometryUtils.ArrowGeometry(), colorMaterial);\r\n let arrowSize = 10;\r\n arrow1.scale.set(arrowSize, arrowSize, arrowSize);\r\n arrow2.scale.set(arrowSize, arrowSize, arrowSize);\r\n obj.add(arrow1, arrow2);\r\n\r\n this.UpdateDrawObject(renderType, obj);\r\n return obj;\r\n }\r\n\r\n UpdateDrawObject(renderType: RenderType, obj: Object3D)\r\n {\r\n obj.remove(...obj.children.slice(3));\r\n\r\n let [line, arrow1, arrow2] = obj.children as [Line, Mesh, Mesh];\r\n let colorMaterial = GetDimLineMaterial(this, renderType);\r\n line.material = colorMaterial;\r\n arrow1.material = colorMaterial;\r\n arrow2.material = colorMaterial;\r\n\r\n this.PraseArc();//半径设置到实际尺寸的位置,获得正确的标注尺寸\r\n let startFootPoint = this._Arc.StartPoint;//一定要在这个位置求脚点\r\n let endFootPoint = this._Arc.EndPoint;\r\n\r\n this._Text.AutoUpdate = false;\r\n\r\n this._Text.ColorIndex = this.ColorIndex;\r\n this.ParseText();\r\n\r\n this._Arc.DeferUpdate();\r\n this._Text.DeferUpdate();\r\n\r\n let linePoints: Vector3[] = [startFootPoint];\r\n for (let p of this._Arc.Shape.getPoints(8))\r\n linePoints.push(AsVector3(p).add(this._Center));\r\n linePoints.push(endFootPoint);\r\n\r\n let geo = line.geometry as BufferGeometry;\r\n if (!BufferGeometryUtils.UpdatePts(geo, linePoints))\r\n {\r\n line.geometry.dispose();\r\n line.geometry = BufferGeometryUtils.CreateFromPts(linePoints);\r\n }\r\n\r\n AddEntityDrawObject(obj, this._Text, renderType);\r\n\r\n //更新箭头的位置和旋转角度\r\n arrow1.position.copy(this._Arc.StartPoint);\r\n arrow1.rotation.z = this._Arc.GetFistDerivAngle(0) + Math.PI / 2;\r\n arrow1.updateMatrix();\r\n\r\n arrow2.position.copy(this._Arc.EndPoint);\r\n arrow2.rotation.z = this._Arc.GetFistDerivAngle(1) - Math.PI / 2;\r\n arrow2.updateMatrix();\r\n }\r\n\r\n private ParseText()\r\n {\r\n this._Text.TextString = this.TextString;\r\n\r\n this._Arc.Radius = this._Radius + this._TextRadiusAdd; //半径设置到文字的位置,获得文字的位置\r\n let textP = this._Arc.GetPointAtParam(0.5);\r\n let ang = this._Arc.GetAngleAtParam(0.5);\r\n let textOCS = new Matrix4().makeRotationZ(ang + Math.PI * 3 / 2).setPosition(textP);\r\n this._Text.TextAligen = TextAligen.Down;\r\n this._Text.OCS = textOCS;\r\n this._Text.Height = this._TextSize;\r\n }\r\n\r\n UpdateDrawObjectMaterial(type: RenderType, obj: Object3D, material?: Material)\r\n {\r\n let colorMaterial = GetDimLineMaterial(this, type);\r\n let count = Math.min(3, obj.children.length);\r\n for (let i = 0; i < count; i++)\r\n {\r\n let l = obj.children[i] as Line;\r\n l.material = colorMaterial;\r\n }\r\n\r\n this._Text.ColorIndex = this.ColorIndex;\r\n this.Text.DeferUpdate();\r\n }\r\n\r\n private PraseArc()\r\n {\r\n this._Arc.AutoUpdate = false;\r\n\r\n this._Arc.Center = this._Center;\r\n this._Arc.StartAngle = this._StartAngle;\r\n this._Arc.EndAngle = this._EndAngle;\r\n this._Arc.IsClockWise = this._Clockwise;\r\n this._Arc.Radius = this._Radius;\r\n }\r\n\r\n //#endregion\r\n\r\n //#region -------------------------File-------------------------\r\n //对象从文件中读取数据,初始化自身\r\n protected _ReadFile(file: CADFiler)\r\n {\r\n let ver = file.Read();\r\n super._ReadFile(file);\r\n this._Center.fromArray(file.Read());\r\n this._Radius = file.Read();\r\n this._TextRadiusAdd = file.Read();\r\n this._Clockwise = file.Read();\r\n this._StartAngle = file.Read();\r\n this._EndAngle = file.Read();\r\n this._TextString = file.Read();\r\n this._TextSize = file.Read();\r\n if (ver > 1) this._FractionDigits = file.Read();\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(2);\r\n super.WriteFile(file);\r\n file.Write(this._Center.toArray());\r\n file.Write(this._Radius);\r\n file.Write(this._TextRadiusAdd);\r\n file.Write(this._Clockwise);\r\n file.Write(this._StartAngle);\r\n file.Write(this._EndAngle);\r\n file.Write(this._TextString);\r\n file.Write(this._TextSize);\r\n file.Write(this._FractionDigits);\r\n }\r\n //#endregion\r\n}\r\n","import { BufferGeometry, Line as TLine, Material, Matrix3, Matrix4, Mesh, Object3D, Vector3 } from \"three\";\r\nimport { Line2 } from \"three/examples/jsm/lines/Line2\";\r\nimport { HostApplicationServices } from \"../../ApplicationServices/HostApplicationServices\";\r\nimport { AddEntityDrawObject } from \"../../Common/AddEntityDrawObject\";\r\nimport { ColorMaterial } from \"../../Common/ColorPalette\";\r\nimport { DisposeThreeObj } from \"../../Common/Dispose\";\r\nimport { reviseMirrorMatrix } from \"../../Common/Matrix4Utils\";\r\nimport { FixedNotZero } from \"../../Common/Utils\";\r\nimport { ObjectSnapMode } from \"../../Editor/ObjectSnapMode\";\r\nimport { BufferGeometryUtils } from \"../../Geometry/BufferGeometryUtils\";\r\nimport { angle, angleAndX, MoveMatrix } from \"../../Geometry/GeUtils\";\r\nimport { RenderType } from \"../../GraphicsSystem/RenderType\";\r\nimport { Factory } from \"../CADFactory\";\r\nimport { CADFiler } from \"../CADFiler\";\r\nimport { Circle } from \"../Entity/Circle\";\r\nimport { Line } from \"../Entity/Line\";\r\nimport { ObjectId } from \"../ObjectId\";\r\nimport { Dimension } from \"./Dimension\";\r\nimport { GetDimLineMaterial } from \"./GetDimLineMaterial\";\r\n\r\n@Factory\r\nexport class RadiusDimension extends Dimension\r\n{\r\n\r\n OnlyRenderType = true;\r\n protected _TextString: string = \"R<>\";\r\n\r\n constructor(\r\n protected _Center = new Vector3(),\r\n protected _DiameterOrRadiusPoint = new Vector3(),\r\n protected _TextPoint = new Vector3(),\r\n )\r\n {\r\n super();\r\n this._Text.Height = HostApplicationServices.dimTextHeight;\r\n }\r\n\r\n get Text()\r\n {\r\n if (!this._Text.TextString)\r\n this.UpdateText();\r\n\r\n return this._Text;\r\n }\r\n\r\n protected GetString(): string\r\n {\r\n return FixedNotZero(this._Center.distanceTo(this._DiameterOrRadiusPoint), this._FractionDigits);\r\n }\r\n\r\n set Material(materialId: ObjectId) { }\r\n\r\n get Center()\r\n {\r\n return this._Center.clone().applyMatrix4(this._Matrix);\r\n }\r\n set Center(v: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._Center.copy(v).applyMatrix4(this.OCSInv);\r\n this.Update();\r\n }\r\n get DiameterOrRadiusPoint()\r\n {\r\n return this._DiameterOrRadiusPoint.clone().applyMatrix4(this._Matrix);\r\n }\r\n set DiameterOrRadiusPoint(v: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._DiameterOrRadiusPoint.copy(v).applyMatrix4(this.OCSInv);\r\n this.Update();\r\n }\r\n get TextPoint()\r\n {\r\n return this._TextPoint.clone().applyMatrix4(this._Matrix);\r\n }\r\n set TextPoint(v: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._TextPoint.copy(v).applyMatrix4(this.OCSInv);\r\n this.Update();\r\n }\r\n Explode()\r\n {\r\n this.UpdateText();\r\n return [\r\n new Line(this._Center, this._DiameterOrRadiusPoint),\r\n new Line(this._DiameterOrRadiusPoint, this._TextPoint),\r\n this._Text.Clone()\r\n ].map(en => en.ApplyMatrix(this._Matrix));\r\n }\r\n\r\n Clone(): this\r\n {\r\n let ent = super.Clone();\r\n ent._Text.CopyFrom(this._Text);\r\n for (let [type, obj] of ent._CacheDrawObject)\r\n {\r\n for (let o of obj.children)\r\n if (o instanceof TLine)\r\n o.geometry = o.geometry.clone();\r\n }\r\n return ent;\r\n }\r\n\r\n InitDrawObject(renderType: RenderType = RenderType.Wireframe): Object3D\r\n {\r\n this._Text.ColorIndex = this.ColorIndex;\r\n let obj = new Object3D();\r\n\r\n let colorMaterial = GetDimLineMaterial(this, renderType);\r\n\r\n let line: TLine | Line2;\r\n\r\n if (renderType === RenderType.WireframePrint)\r\n line = new Line2(undefined, ColorMaterial.PrintLineMatrial);\r\n else\r\n line = new TLine(\r\n BufferGeometryUtils.CreateFromPts([this._Center, this._DiameterOrRadiusPoint, this._TextPoint]),\r\n colorMaterial\r\n );\r\n\r\n let arrow = new Mesh(BufferGeometryUtils.ArrowGeometry(), colorMaterial);\r\n\r\n obj.add(line, arrow);\r\n\r\n AddEntityDrawObject(obj, this._Text, renderType);\r\n this.UpdateDrawObject(renderType, obj);\r\n\r\n return obj;\r\n }\r\n\r\n UpdateDrawObject(renderType: RenderType, obj: Object3D)\r\n {\r\n let [line, arrow, textObj] = obj.children;\r\n\r\n let arrowSize = 10;\r\n\r\n if (renderType === RenderType.WireframePrint)\r\n {\r\n arrowSize *= HostApplicationServices.lineWidth * 0.5;\r\n let geo = (line as Line2).geometry;\r\n geo.setPositions([...this._Center.toArray(), ...this._DiameterOrRadiusPoint.toArray(), ...this._TextPoint.toArray()]);\r\n }\r\n else\r\n BufferGeometryUtils.UpdatePts((line).geometry as BufferGeometry, [this._Center, this._DiameterOrRadiusPoint, this._TextPoint], true);\r\n\r\n arrow.scale.set(arrowSize, arrowSize, arrowSize);\r\n\r\n let armV = this._TextPoint.clone().sub(this._DiameterOrRadiusPoint);\r\n let armAn = angle(armV);\r\n\r\n arrow.position.copy(this._DiameterOrRadiusPoint);\r\n arrow.rotation.z = armAn + Math.PI / 2;\r\n arrow.updateMatrix();\r\n\r\n obj.remove(textObj);\r\n DisposeThreeObj(textObj);\r\n\r\n this.UpdateText();\r\n\r\n AddEntityDrawObject(obj, this._Text, renderType);\r\n }\r\n\r\n UpdateDrawObjectMaterial(renderType: RenderType, obj: Object3D, material?: Material)\r\n {\r\n if (renderType === RenderType.WireframePrint)\r\n return;\r\n let [line, arrow, textObj] = obj.children as [TLine, Mesh, Object3D];\r\n let lineMaterial = GetDimLineMaterial(this, renderType);\r\n\r\n line.material = lineMaterial;\r\n arrow.material = line.material;\r\n this._Text.ColorIndex = this.ColorIndex;\r\n\r\n //如果实体是拷贝的,那么可能修改材质失败\r\n if (textObj.children[0])\r\n {\r\n let mesh = textObj.children[0] as Mesh;\r\n mesh.material = ColorMaterial.GetBasicMaterialDoubleSide(this.ColorIndex);//TODO:在布局时应该如何渲染?\r\n }\r\n }\r\n\r\n UpdateText()\r\n {\r\n this._Text.AutoUpdate = false;\r\n\r\n let armV = this._TextPoint.clone().sub(this._DiameterOrRadiusPoint);\r\n this._Text.TextString = this.TextString;\r\n this._Text.Position = this._TextPoint;\r\n this._Text.TextRotation = angleAndX(armV);\r\n this._Text.Height = this._TextSize;\r\n\r\n this._Text.DeferUpdate();\r\n this._Text.AutoUpdate = true;\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 l = new Line(this.Center, this.TextPoint);\r\n switch (snapMode)\r\n {\r\n case ObjectSnapMode.End:\r\n return this.GetStretchPoints();\r\n default:\r\n return l.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform);\r\n }\r\n }\r\n GetGripPoints(): Array\r\n {\r\n return [this.Center, this.DiameterOrRadiusPoint, this.TextPoint];\r\n }\r\n MoveGripPoints(indexList: number[], vec: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n let inv = this.OCSInv;\r\n let vec0 = vec.clone().applyMatrix4(inv.clone().setPosition(0, 0, 0));\r\n let rad = this._Center.distanceTo(this._DiameterOrRadiusPoint);\r\n\r\n for (let i of indexList)\r\n {\r\n if (i === 1)\r\n {\r\n let center = this.DiameterOrRadiusPoint.add(vec).applyMatrix4(inv);\r\n let cir = new Circle(this._Center, rad);\r\n let cp = cir.GetClosestPointTo(center, true);\r\n this._DiameterOrRadiusPoint.copy(cp);\r\n let dist = this._Center.distanceTo(this._TextPoint);\r\n let dir = this._DiameterOrRadiusPoint.clone().sub(this._Center).normalize().multiplyScalar(dist);\r\n this._TextPoint.copy(this._Center.clone().add(dir));\r\n }\r\n else\r\n {\r\n if (i === 0)\r\n this._Center.add(vec0);\r\n else\r\n this._TextPoint.add(vec0);\r\n let dir = this._TextPoint.clone().sub(this._Center).normalize().multiplyScalar(rad);\r\n this._DiameterOrRadiusPoint.copy(this._Center.clone().add(dir));\r\n }\r\n }\r\n this.Update();\r\n }\r\n GetStretchPoints(): Array\r\n {\r\n return this.GetGripPoints();\r\n }\r\n MoveStretchPoints(indexList: Array, vec: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n if (indexList.length >= 2)\r\n this.ApplyMatrix(MoveMatrix(vec));\r\n else\r\n this.MoveGripPoints(indexList, vec);\r\n }\r\n protected ApplyMirrorMatrix(m: Matrix4)\r\n {\r\n this.WriteAllObjectRecord();\r\n let p1 = this.Center;\r\n let p2 = this.DiameterOrRadiusPoint;\r\n let p3 = this.TextPoint;\r\n\r\n reviseMirrorMatrix(this._Matrix);\r\n\r\n this.Center = p1;\r\n this.DiameterOrRadiusPoint = p2;\r\n this.TextPoint = p3;\r\n\r\n return this;\r\n }\r\n protected _ReadFile(file: CADFiler)\r\n {\r\n super._ReadFile(file);\r\n let ver = file.Read();\r\n this._Center.fromArray(file.Read());\r\n this._DiameterOrRadiusPoint.fromArray(file.Read());\r\n this._TextPoint.fromArray(file.Read());\r\n if (ver > 1) this._TextString = file.Read();\r\n if (ver > 2) this._TextSize = file.Read();\r\n if (ver > 3) this._FractionDigits = file.Read();\r\n }\r\n WriteFile(file: CADFiler)\r\n {\r\n super.WriteFile(file);\r\n file.Write(4);\r\n file.Write(this._Center.toArray());\r\n file.Write(this._DiameterOrRadiusPoint.toArray());\r\n file.Write(this._TextPoint.toArray());\r\n file.Write(this._TextString);\r\n file.Write(this._TextSize);\r\n file.Write(this._FractionDigits);\r\n }\r\n}\r\n","import { BufferGeometry, Line as TLine, Material, Mesh, Object3D, Vector3 } from \"three\";\r\nimport { Line2 } from \"three/examples/jsm/lines/Line2\";\r\nimport { HostApplicationServices } from \"../../ApplicationServices/HostApplicationServices\";\r\nimport { AddEntityDrawObject } from \"../../Common/AddEntityDrawObject\";\r\nimport { ColorMaterial } from \"../../Common/ColorPalette\";\r\nimport { DisposeThreeObj } from \"../../Common/Dispose\";\r\nimport { BufferGeometryUtils } from \"../../Geometry/BufferGeometryUtils\";\r\nimport { angle, midPoint } from \"../../Geometry/GeUtils\";\r\nimport { RenderType } from \"../../GraphicsSystem/RenderType\";\r\nimport { Factory } from \"../CADFactory\";\r\nimport { Circle } from \"../Entity/Circle\";\r\nimport { GetDimLineMaterial } from \"./GetDimLineMaterial\";\r\nimport { RadiusDimension } from \"./RadiusDimension\";\r\n\r\n\r\nconst LINE_EXTEND_VAL = 40; //尺寸线延长值\r\n\r\n@Factory\r\nexport class DiameterDimension extends RadiusDimension\r\n{\r\n protected _TextString: string = \"D<>\";\r\n InitDrawObject(renderType: RenderType = RenderType.Wireframe): Object3D\r\n {\r\n this._Text.ColorIndex = this.ColorIndex;\r\n let obj = new Object3D();\r\n\r\n let colorMaterial = GetDimLineMaterial(this, renderType);\r\n\r\n let vec = this._DiameterOrRadiusPoint.clone().sub(this._Center).normalize().multiplyScalar(-LINE_EXTEND_VAL);\r\n\r\n let line: TLine | Line2;\r\n\r\n if (renderType === RenderType.WireframePrint)\r\n line = new Line2(undefined, ColorMaterial.PrintLineMatrial);\r\n else\r\n line = new TLine(\r\n BufferGeometryUtils.CreateFromPts([this._Center.clone().add(vec), this._DiameterOrRadiusPoint, this._TextPoint]),\r\n colorMaterial\r\n );\r\n\r\n let arrow = new Mesh(BufferGeometryUtils.ArrowGeometry(), colorMaterial);\r\n let arrow2 = new Mesh(BufferGeometryUtils.ArrowGeometry(), colorMaterial);\r\n\r\n obj.add(line, arrow, arrow2);\r\n AddEntityDrawObject(obj, this._Text, renderType);\r\n\r\n this.UpdateDrawObject(renderType, obj);\r\n\r\n return obj;\r\n }\r\n UpdateDrawObject(renderType: RenderType, obj: Object3D)\r\n {\r\n let [line, arrow, arrow2, textObj] = obj.children;\r\n\r\n let vec = this._DiameterOrRadiusPoint.clone().sub(this._Center).normalize().multiplyScalar(-LINE_EXTEND_VAL);\r\n\r\n let arrowSize = 10;\r\n\r\n let sp = this._Center.clone().add(vec);\r\n\r\n if (renderType === RenderType.WireframePrint)\r\n {\r\n arrowSize *= HostApplicationServices.lineWidth * 0.5;\r\n let geo = (line as Line2).geometry;\r\n geo.setPositions([...sp.toArray(), ...this._DiameterOrRadiusPoint.toArray(), ...this._TextPoint.toArray()]);\r\n }\r\n else\r\n BufferGeometryUtils.UpdatePts((line).geometry as BufferGeometry, [sp, this._DiameterOrRadiusPoint, this._TextPoint], true);\r\n\r\n arrow.scale.set(arrowSize, arrowSize, arrowSize);\r\n arrow2.scale.set(arrowSize, arrowSize, arrowSize);\r\n\r\n let armV = this._TextPoint.clone().sub(this._DiameterOrRadiusPoint);\r\n let armAn = angle(armV);\r\n\r\n arrow.position.copy(this._DiameterOrRadiusPoint);\r\n arrow.rotation.z = armAn + Math.PI / 2;\r\n arrow.updateMatrix();\r\n\r\n arrow2.position.copy(this._Center);\r\n arrow2.rotation.z = armAn - Math.PI / 2;\r\n arrow2.updateMatrix();\r\n\r\n this.UpdateText();\r\n\r\n obj.remove(textObj);\r\n DisposeThreeObj(textObj);\r\n AddEntityDrawObject(obj, this._Text, renderType);\r\n }\r\n\r\n UpdateDrawObjectMaterial(renderType: RenderType, obj: Object3D, material?: Material)\r\n {\r\n if (renderType === RenderType.WireframePrint)\r\n return;\r\n\r\n let [line, arrow, arrow2, textObj] = obj.children as [TLine, Mesh, Mesh, Object3D];\r\n let lineMaterial = GetDimLineMaterial(this, renderType);\r\n\r\n line.material = lineMaterial;\r\n arrow.material = line.material;\r\n arrow2.material = lineMaterial;\r\n\r\n this._Text.ColorIndex = this.ColorIndex;\r\n\r\n //如果实体是拷贝的,那么可能修改材质失败\r\n if (textObj.children[0])\r\n {\r\n let mesh = textObj.children[0] as Mesh;\r\n mesh.material = ColorMaterial.GetBasicMaterialDoubleSide(this.ColorIndex);//TODO:在布局时应该如何渲染?\r\n }\r\n }\r\n\r\n MoveGripPoints(indexList: number[], vec: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n let v = vec.clone().applyMatrix4(this.OCSInv.setPosition(new Vector3()));\r\n let dia = this._Center.distanceTo(this._DiameterOrRadiusPoint);\r\n let cirCenter = midPoint(this._Center, this._DiameterOrRadiusPoint);\r\n for (let i of indexList)\r\n {\r\n if (i === 0)\r\n {\r\n this._Center.add(v);\r\n let dist = this._TextPoint.distanceTo(this._DiameterOrRadiusPoint);\r\n let v1 = cirCenter.clone().sub(this._Center);\r\n this._DiameterOrRadiusPoint.copy(cirCenter.clone().add(v1));\r\n this._TextPoint.copy(this._DiameterOrRadiusPoint.clone().add(v1.normalize().multiplyScalar(dist)));\r\n }\r\n else if (i === 1)\r\n {\r\n let dist = this._TextPoint.distanceTo(this._DiameterOrRadiusPoint);\r\n let center = this.DiameterOrRadiusPoint.add(vec).applyMatrix4(this.OCSInv);\r\n let cir = new Circle(cirCenter, dia / 2);\r\n this._DiameterOrRadiusPoint.copy(cir.GetClosestPointTo(center, true));\r\n let v1 = this._DiameterOrRadiusPoint.clone().sub(cirCenter).normalize().multiplyScalar(-dia);\r\n this._Center.copy(this._DiameterOrRadiusPoint.clone().add(v1));\r\n this._TextPoint.copy(this._DiameterOrRadiusPoint.clone().add(v1.normalize().multiplyScalar(-dist)));\r\n }\r\n else\r\n {\r\n this._TextPoint.add(v);\r\n let v1 = this._TextPoint.clone().sub(cirCenter).normalize().multiplyScalar(dia / 2);\r\n this._DiameterOrRadiusPoint.copy(cirCenter.clone().add(v1));\r\n this._Center.copy(cirCenter.add(v1.negate()));\r\n }\r\n }\r\n this.Update();\r\n }\r\n}\r\n","import { Vector3 } from \"three\";\r\nimport { isBetweenNums } from \"../../Common/Utils\";\r\nimport { equaln } from \"../../Geometry/GeUtils\";\r\nimport { Factory } from \"../CADFactory\";\r\nimport { Line } from \"../Entity/Line\";\r\nimport { AlignedDimension } from \"./AlignedDimension\";\r\n\r\nenum DimDir\r\n{\r\n /**\r\n * 水平\r\n */\r\n H = 0,\r\n /**\r\n * 垂直\r\n */\r\n V = 1\r\n}\r\n\r\n@Factory\r\nexport class LinearDimension extends AlignedDimension\r\n{\r\n private _DimDir = DimDir.H;\r\n\r\n get TextPosition()\r\n {\r\n return super.TextPosition;\r\n }\r\n set TextPosition(p: Vector3)\r\n {\r\n p = p.clone().applyMatrix4(this.OCSInv);\r\n let bit = 0;//x 1 y 2\r\n if (isBetweenNums(this._FootP1.x, this._FootP2.x, p.x))\r\n bit |= 1;\r\n if (isBetweenNums(this._FootP1.y, this._FootP2.y, p.y))\r\n bit |= 2;\r\n\r\n if (bit === 1)\r\n this._DimDir = DimDir.H;\r\n else if (bit === 2)\r\n this._DimDir = DimDir.V;\r\n\r\n if (this._DimDir === DimDir.H)\r\n {\r\n this._ArmP1.copy(this._FootP1).setY(p.y);\r\n this._ArmP2.copy(this._FootP2).setY(p.y);\r\n }\r\n else\r\n {\r\n this._ArmP1.copy(this._FootP1).setX(p.x);\r\n this._ArmP2.copy(this._FootP2).setX(p.x);\r\n }\r\n this.Update();\r\n }\r\n ChangeFootPt()\r\n {\r\n let l = new Line(this._ArmP1, this._ArmP2);\r\n if (!equaln(this._FootP1.x, this._ArmP1.x) && !equaln(this._FootP1.y, this._ArmP1.y))\r\n {\r\n let cp1 = l.GetClosestPointTo(this._FootP1, true);\r\n this._ArmP1.copy(cp1);\r\n }\r\n if (!equaln(this._FootP2.x, this._ArmP2.x) && !equaln(this._FootP2.y, this._ArmP2.y))\r\n {\r\n let cp2 = l.GetClosestPointTo(this._FootP2, true);\r\n this._ArmP2.copy(cp2);\r\n }\r\n }\r\n}\r\n","import { BoxBufferGeometry, Mesh, MeshBasicMaterial, Object3D, Vector3 } from \"three\";\r\nimport { ColorMaterial } from \"../../Common/ColorPalette\";\r\nimport { Box3Ext } from \"../../Geometry/Box\";\r\nimport { equaln } from \"../../Geometry/GeUtils\";\r\nimport { RenderType } from \"../../GraphicsSystem/RenderType\";\r\nimport { Factory } from \"../CADFactory\";\r\nimport { Entity } from \"./Entity\";\r\n\r\n\r\nlet boxGeo: BoxBufferGeometry;\r\nexport function GetBoxGeoBufferGeometry()\r\n{\r\n if (!boxGeo)\r\n boxGeo = new BoxBufferGeometry(1, 1, 1);\r\n return boxGeo;\r\n}\r\n\r\n@Factory\r\nexport class BoxSolid extends Entity\r\n{\r\n OnlyRenderType = true;\r\n private _opacity = 0.5;\r\n constructor(private _length = 1, private _width = 1, private _height = 1)\r\n {\r\n super();\r\n }\r\n\r\n get Length() { return this._length; }\r\n get Width() { return this._width; }\r\n get Height() { return this._height; }\r\n\r\n set Length(v: number)\r\n {\r\n if (!equaln(v, this._length, 1e-5))\r\n {\r\n this.WriteAllObjectRecord();\r\n this._length = v;\r\n this.Update();\r\n }\r\n }\r\n set Width(v: number)\r\n {\r\n if (!equaln(v, this._width, 1e-5))\r\n {\r\n this.WriteAllObjectRecord();\r\n this._width = v;\r\n this.Update();\r\n }\r\n }\r\n\r\n set Height(v: number)\r\n {\r\n if (!equaln(v, this._height, 1e-5))\r\n {\r\n this.WriteAllObjectRecord();\r\n this._height = v;\r\n this.Update();\r\n }\r\n }\r\n\r\n set Opacity(o: number)\r\n {\r\n if (o !== this._opacity)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._opacity = o;\r\n this.Update();\r\n }\r\n }\r\n InitDrawObject(renderType: RenderType = RenderType.Wireframe)\r\n {\r\n let box = new Object3D();\r\n let geo = GetBoxGeoBufferGeometry();\r\n let mat = ColorMaterial.GetBasicMaterialTransparent(7, this._opacity);\r\n box.add(new Mesh(geo, mat));\r\n this.UpdateDrawObject(renderType, box);\r\n return box;\r\n }\r\n UpdateDrawObject(type: RenderType, obj: Object3D)\r\n {\r\n obj.children[0].scale.set(this._length, this._width, this._height);\r\n ((obj.children[0] as Mesh).material as MeshBasicMaterial).opacity = this._opacity;\r\n obj.children[0].position.copy(new Vector3(this._length / 2, this._width / 2, this._height / 2));\r\n obj.children[0].updateMatrix();\r\n }\r\n\r\n get BoundingBoxInOCS()\r\n {\r\n return new Box3Ext(new Vector3, new Vector3(this._length, this._width, this._height));\r\n }\r\n\r\n get BoundingBox()\r\n {\r\n return this.BoundingBoxInOCS.applyMatrix4(this.OCSNoClone);\r\n }\r\n}\r\n","import { Box3, Vector3 } from \"three\";\r\nimport { Line } from \"../../DatabaseServices/Entity/Line\";\r\nimport { equalv3 } from \"../../Geometry/GeUtils\";\r\n\r\n\r\nexport function BoxLine(box: Box3): Line[]\r\n{\r\n if (box.isEmpty())\r\n return [];\r\n let pts = [\r\n new Vector3(box.min.x, box.min.y, box.min.z),\r\n new Vector3(box.min.x, box.min.y, box.max.z),\r\n new Vector3(box.min.x, box.max.y, box.min.z),\r\n new Vector3(box.min.x, box.max.y, box.max.z),\r\n\r\n new Vector3(box.max.x, box.min.y, box.min.z),\r\n new Vector3(box.max.x, box.min.y, box.max.z),\r\n new Vector3(box.max.x, box.max.y, box.min.z),\r\n new Vector3(box.max.x, box.max.y, box.max.z),\r\n ];\r\n\r\n let lines: Line[] = [];\r\n for (let line of [\r\n [0, 1], [2, 3], [0, 2], [1, 3],\r\n [4, 5], [6, 7], [4, 6], [5, 7],\r\n\r\n [0, 4], [2, 6],\r\n\r\n [1, 5], [3, 7],\r\n ])\r\n {\r\n let p1 = pts[line[0]];\r\n let p2 = pts[line[1]];\r\n if (!equalv3(p1, p2))\r\n lines.push(new Line(p1, p2));\r\n }\r\n return lines;\r\n}\r\n","import { Box3, Matrix3, Matrix4, Vector3 } from \"three\";\r\nimport { BoxLine } from \"../../Add-on/testEntity/BoxLine\";\r\nimport { UpdateDraw } from \"../../Common/Status\";\r\nimport { ObjectSnapMode } from \"../../Editor/ObjectSnapMode\";\r\nimport { Box3Ext } from \"../../Geometry/Box\";\r\nimport { equalv3 } from \"../../Geometry/GeUtils\";\r\nimport { Factory } from \"../CADFactory\";\r\nimport { CADFiler } from \"../CADFiler\";\r\nimport { ObjectId } from \"../ObjectId\";\r\nimport { Entity } from \"./Entity\";\r\n\r\nconst TempBox = new Box3;\r\n\r\n/**\r\n * 外部引用的实体,比如glTF\r\n */\r\n@Factory\r\nexport class EntityRef extends Entity\r\n{\r\n OnlyRenderType = true;\r\n\r\n private _Size = new Vector3;//原始尺寸\r\n private _ScaleSize = new Vector3;//缩放后的尺寸\r\n private _Center = new Vector3;//盒子中心\r\n\r\n private _OverWriteMaterial = new Map();//section index -> materialId\r\n\r\n // `/Data/ASSETS/DXAA_0001`\r\n constructor(private _url?: string)\r\n {\r\n super();\r\n }\r\n\r\n get Url() { return this._url; }\r\n\r\n get CurSize() { return this.ScaleSize.x ? this.ScaleSize.clone() : this._Size.clone(); }\r\n\r\n get ScaleSize() { return this._ScaleSize; }\r\n set ScaleSize(size: Vector3)\r\n {\r\n if (!equalv3(size, this._ScaleSize))\r\n {\r\n this.WriteAllObjectRecord();\r\n this._ScaleSize.copy(size);\r\n this.Update();\r\n }\r\n }\r\n\r\n get Scale()\r\n {\r\n if (this._ScaleSize.x && this._Size.x)\r\n return this._ScaleSize.clone().divide(this._Size);\r\n return new Vector3(1, 1, 1);\r\n }\r\n\r\n get BoundingBoxInOCS()\r\n {\r\n let size = this.ScaleSize.x ? this.ScaleSize : this._Size;\r\n return new Box3Ext(\r\n size.clone().multiplyScalar(-0.5).add(this._Center),\r\n size.clone().multiplyScalar(0.5).add(this._Center));\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;//因为这个实体不需要修改内部的geom 所以我们可以复用她\r\n\r\n newObj.matrix = this._Matrix;\r\n newObj.userData = { Entity: this };\r\n // newObj.userData.IsClone = true; //因为这个实体不需要修改内部的geom 所以我们可以复用她\r\n this._CacheDrawObject.set(type, newObj);\r\n }\r\n this.NeedUpdateFlag = UpdateDraw.None;\r\n }\r\n\r\n ApplyScaleMatrix(m: Matrix4)\r\n {\r\n this.WriteAllObjectRecord();\r\n let p = this.Position;\r\n p.applyMatrix4(m);\r\n\r\n m.extractBasis(Entity._xa, Entity._ya, Entity._za);\r\n\r\n let scaleX = Entity._xa.length();\r\n let scaleY = Entity._ya.length();\r\n let scaleZ = Entity._za.length();\r\n\r\n if (!this._ScaleSize.x) this._ScaleSize.copy(this._Size);\r\n\r\n this._ScaleSize.x *= scaleX;\r\n this._ScaleSize.y *= scaleY;\r\n this._ScaleSize.z *= scaleZ;\r\n\r\n Entity._xa.normalize();\r\n Entity._ya.normalize();\r\n Entity._za.normalize();\r\n m = new Matrix4().makeBasis(Entity._xa, Entity._ya, Entity._za);\r\n this.ApplyMatrix(m);\r\n\r\n this.Position = p;\r\n this.Update();\r\n return this;\r\n }\r\n\r\n // //与网络相关,如果模型没请求下来 这个盒子数据也是错误的()\r\n // // if (this._Size.x)//我们使用缓存的数据直接求盒子? 这样是不行的 因为旋转后的盒子似乎不对!\r\n // // {\r\n // // let size2 = (this._ScaleSize.x ? this._ScaleSize : this._Size).clone().multiplyScalar(0.5);\r\n // // return new Box3(this._Center.clone().sub(size2), size2.add(this._Center));\r\n // // }\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 let box = this.BoundingBox;\r\n let [x1, y1, z1] = [box.min.x, box.min.y, box.min.z];\r\n let [x2, y2, z2] = [box.max.x, box.max.y, box.max.z];\r\n switch (snapMode)\r\n {\r\n case ObjectSnapMode.End:\r\n return this.GetGripPoints();\r\n case ObjectSnapMode.Mid:\r\n let mid = [\r\n new Vector3(x1, y1, (z1 + z2) / 2),\r\n new Vector3(x1, y2, (z1 + z2) / 2),\r\n new Vector3(x2, y2, (z1 + z2) / 2),\r\n new Vector3(x2, y1, (z1 + z2) / 2),\r\n ];\r\n let midline = [\r\n new Vector3(x1, (y1 + y2) / 2, z1),\r\n new Vector3(x2, (y1 + y2) / 2, z1),\r\n new Vector3((x1 + x2) / 2, y2, z1),\r\n new Vector3((x1 + x2) / 2, y1, z1),\r\n ];\r\n let v = new Vector3(0, 0, z2);\r\n let mids: Vector3[] = [];\r\n mids.push(...mid, ...midline, ...midline.map(p => p.clone().add(v)));\r\n return mids;\r\n case ObjectSnapMode.Nea:\r\n let lines = BoxLine(this.BoundingBox);\r\n let neas: Vector3[] = [];\r\n for (let l of lines)\r\n neas.push(...l.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform));\r\n return neas;\r\n default:\r\n break;\r\n }\r\n return [];\r\n }\r\n\r\n GetGripPoints(): Array\r\n {\r\n return [];//这些点必须按照boxInOcs矩阵显示 并且这个点太多了 太烦了 暂时关闭\r\n let box = this.BoundingBox;\r\n let [x1, y1, z1] = [box.min.x, box.min.y, box.min.z];\r\n let [x2, y2, z2] = [box.max.x, box.max.y, box.max.z];\r\n let ends = [\r\n new Vector3(x1, y1, z1),\r\n new Vector3(x1, y1, z2),\r\n new Vector3(x1, y2, z1),\r\n new Vector3(x1, y2, z2),\r\n\r\n new Vector3(x2, y1, z1),\r\n new Vector3(x2, y1, z2),\r\n new Vector3(x2, y2, z1),\r\n new Vector3(x2, y2, z2),\r\n\r\n new Vector3((x1 + x2) / 2, (y1 + y2) / 2, z1),\r\n new Vector3((x1 + x2) / 2, (y1 + y2) / 2, z2),\r\n new Vector3((x1 + x2) / 2, y1, (z1 + z2) / 2),\r\n new Vector3((x1 + x2) / 2, y2, (z1 + z2) / 2),\r\n new Vector3(x1, (y1 + y2) / 2, (z1 + z2) / 2),\r\n new Vector3(x2, (y1 + y2) / 2, (z1 + z2) / 2),\r\n ];\r\n return ends;\r\n }\r\n MoveGripPoints(indexList: Array, vec: Vector3)\r\n {\r\n if (indexList.length)\r\n {\r\n this.WriteAllObjectRecord();\r\n this.Position = this.Position.add(vec);\r\n }\r\n }\r\n //#endregion\r\n\r\n //#region -------------------------File-------------------------\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._url = file.Read();\r\n\r\n if (ver > 1)\r\n {\r\n this._Size.x = file.Read();\r\n this._Size.y = file.Read();\r\n this._Size.z = file.Read();\r\n\r\n this._Center.x = file.Read();\r\n this._Center.y = file.Read();\r\n this._Center.z = file.Read();\r\n\r\n this._ScaleSize.x = file.Read();\r\n this._ScaleSize.y = file.Read();\r\n this._ScaleSize.z = file.Read();\r\n }\r\n\r\n this._OverWriteMaterial.clear();\r\n if (ver > 2)\r\n {\r\n let size = file.Read();\r\n for (let i = 0; i < size; i++)\r\n {\r\n let index = file.Read();\r\n let id = file.ReadHardObjectId();\r\n this._OverWriteMaterial.set(index, id);\r\n }\r\n }\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(3);\r\n super.WriteFile(file);\r\n file.Write(this._url);\r\n\r\n //2\r\n file.Write(this._Size.x);\r\n file.Write(this._Size.y);\r\n file.Write(this._Size.z);\r\n\r\n file.Write(this._Center.x);\r\n file.Write(this._Center.y);\r\n file.Write(this._Center.z);\r\n\r\n file.Write(this._ScaleSize.x);\r\n file.Write(this._ScaleSize.y);\r\n file.Write(this._ScaleSize.z);\r\n\r\n //ver3\r\n file.Write(this._OverWriteMaterial.size);\r\n for (let [index, id] of this._OverWriteMaterial)\r\n {\r\n file.Write(index);\r\n file.WriteHardObjectId(id);\r\n }\r\n }\r\n //#endregion\r\n}\r\n","import { Vector3 } from \"three\";\r\nimport { ObjectSnapMode } from \"../../Editor/ObjectSnapMode\";\r\nimport { MoveMatrix } from \"../../Geometry/GeUtils\";\r\nimport { Factory } from \"../CADFactory\";\r\nimport { Entity } from \"./Entity\";\r\n\r\n\r\n\r\n@Factory\r\nexport class Point extends Entity\r\n{\r\n constructor(position: Vector3 = new Vector3())\r\n {\r\n super();\r\n this._Matrix.setPosition(position);\r\n }\r\n\r\n \r\n\r\n GetObjectSnapPoints(\r\n snapMode: ObjectSnapMode,\r\n pickPoint: Vector3,\r\n lastPoint: Vector3\r\n ): Vector3[]\r\n {\r\n if (snapMode === ObjectSnapMode.End)\r\n return [this.Position];\r\n return [];\r\n }\r\n\r\n GetGripPoints(): Array\r\n {\r\n return [this.Position];\r\n }\r\n MoveGripPoints(indexList: number[], vec: Vector3)\r\n {\r\n if (indexList.length === 1)\r\n {\r\n this.WriteAllObjectRecord();\r\n this.ApplyMatrix(MoveMatrix(vec));\r\n }\r\n }\r\n\r\n GetStretchPoints(): Array\r\n {\r\n return this.GetGripPoints();\r\n }\r\n\r\n /**\r\n * 拉伸夹点,用于Stretch命令\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.MoveGripPoints(indexList, vec);\r\n }\r\n}\r\n","\r\nimport { BufferGeometry, Color, CylinderBufferGeometry, Float32BufferAttribute, LineBasicMaterial, LineSegments, MathUtils, Matrix4, Mesh, MeshBasicMaterial, Object3D, PointLight, SphereBufferGeometry, Vector3 } from 'three';\r\n\r\nexport class PointLightHelper extends Object3D\r\n{\r\n light: PointLight;\r\n color: Color | string | number;\r\n material: LineBasicMaterial;\r\n cone: LineSegments[];\r\n mesh: Mesh[];\r\n constructor(distance: number, color?: Color | string | number)\r\n {\r\n\r\n const geometry = new BufferGeometry();\r\n const positions = [];\r\n for (let i = 0, j = 1, l = 32; i < l; i++, j++)\r\n {\r\n\r\n const p1 = (i / l) * Math.PI * 2;\r\n const p2 = (j / l) * Math.PI * 2;\r\n\r\n positions.push(\r\n Math.cos(p1) * distance, Math.sin(p1) * distance, 0,\r\n Math.cos(p2) * distance, Math.sin(p2) * distance, 0\r\n );\r\n\r\n }\r\n geometry.setAttribute('position', new Float32BufferAttribute(positions, 3));\r\n\r\n super();\r\n this.color = color;\r\n this.matrixAutoUpdate = false;\r\n this.material = new LineBasicMaterial({ fog: false });;\r\n\r\n this.cone = [];\r\n this.mesh = [];\r\n\r\n this.cone[0] = new LineSegments(geometry, this.material[0]);\r\n this.cone[1] = this.cone[0].clone();\r\n\r\n let moveMatInv = new Matrix4().getInverse(this.matrix);\r\n let roMat = new Matrix4().makeRotationAxis(new Vector3(0, 1, 0), MathUtils.degToRad(60));\r\n let mtx = this.matrix.clone().multiply(roMat).multiply(moveMatInv);\r\n\r\n this.cone[1].applyMatrix4(mtx);\r\n this.cone[2] = this.cone[1].clone();\r\n this.cone[2].applyMatrix4(mtx);\r\n\r\n let cylinderRoMat = new Matrix4().makeRotationAxis(new Vector3(1, 0, 0), MathUtils.degToRad(90));\r\n let cylinderMtx = this.matrix.clone().multiply(cylinderRoMat).multiply(moveMatInv);\r\n\r\n let cylinderGeometry = new CylinderBufferGeometry(40, 40, 80, 32); //灯泡圆柱\r\n this.mesh[0] = new Mesh(cylinderGeometry, new MeshBasicMaterial({ color: 0xFFEAAD }));\r\n this.mesh[0].applyMatrix4(cylinderMtx);\r\n this.mesh[0].position.add(new Vector3(0, 0, 50));\r\n this.mesh[0].updateMatrix();\r\n\r\n let sphereBufferGeometry = new SphereBufferGeometry(75, 32, 32); //灯泡球体\r\n this.mesh[1] = new Mesh(sphereBufferGeometry, this.material);\r\n this.mesh[1].position.sub(new Vector3(0, 0, 30));\r\n this.mesh[1].updateMatrix();\r\n\r\n this.add(this.cone[0], this.cone[1], this.cone[2], this.mesh[0], this.mesh[1]);\r\n }\r\n\r\n dispose()\r\n {\r\n this.material.dispose();\r\n\r\n this.cone[0].geometry.dispose();\r\n //@ts-ignore\r\n this.cone[0].material.dispose();\r\n\r\n this.cone[1].geometry.dispose();\r\n //@ts-ignore\r\n this.cone[1].material.dispose();\r\n\r\n this.cone[2].geometry.dispose();\r\n //@ts-ignore\r\n this.cone[2].material.dispose();\r\n\r\n this.mesh[0].geometry.dispose();\r\n //@ts-ignore\r\n this.mesh[0].material.dispose();\r\n\r\n this.mesh[1].geometry.dispose();\r\n //@ts-ignore\r\n this.mesh[1].material.dispose();\r\n }\r\n\r\n update()\r\n {\r\n //@ts-ignore\r\n this.mesh[1].material.color.set(this.color).multiplyScalar(0.9);\r\n }\r\n}\r\n","import { Group, LineBasicMaterial, Mesh, MeshBasicMaterial, Object3D, PointLight as TPointLight, SphereGeometry } from 'three';\r\nimport { HostApplicationServices } from '../../ApplicationServices/HostApplicationServices';\r\nimport { RenderType } from '../../GraphicsSystem/RenderType';\r\nimport { AutoRecord } from '../AutoRecord';\r\nimport { Factory } from '../CADFactory';\r\nimport { CADFiler } from '../CADFiler';\r\nimport { Light } from './Light';\r\nimport { PointLightHelper } from './PointLightHelper';\r\n\r\n/**\r\n * 点光源\r\n */\r\n@Factory\r\nexport class PointLight extends Light\r\n{\r\n /**\r\n * 光照长度,如果为0那么为无穷大\r\n */\r\n private _Distance: number = 20000;//20米\r\n protected _Intensity: number = 100; //强度\r\n\r\n // 光线沿着光线的距离变暗的量\r\n // 在物理上正确的模式下,衰减 = 2会导致物理上真实的光线衰减。\r\n // 缺省值是1。\r\n private _Decay: number = 0.45;\r\n\r\n //PointLightComponent\r\n @AutoRecord SourceRadius = 10;//源半径 范围0-300\r\n @AutoRecord SoftSourceRadius = 0;//软源半径 范围0-300\r\n @AutoRecord SourceLength = 0;//源长度 默认0 范围0-1000\r\n\r\n //LocalLightComponent\r\n //Radius:number 没设置这个\r\n @AutoRecord AttenuationRadius = 300; //衰减半径 10-1000\r\n\r\n constructor()\r\n {\r\n super();\r\n }\r\n\r\n get Decay(): number\r\n {\r\n return this._Decay;\r\n }\r\n set Decay(decay: number)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._Decay = decay;\r\n this.Update();\r\n }\r\n\r\n get Distance()\r\n {\r\n return this._Distance;\r\n }\r\n set Distance(dist: number)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._Distance = dist;\r\n this.Update();\r\n }\r\n\r\n get WebIntensity()\r\n {\r\n let x = this._Intensity / 2000;\r\n x = Math.pow(x, 0.7);\r\n return (x * 2000) / (4 * Math.PI);//流明转cd 文档是4pi\r\n }\r\n\r\n protected InitDrawObject(renderType: RenderType = RenderType.Wireframe): Object3D\r\n {\r\n let lightGroup = new Group();\r\n let ptLight = new TPointLight(this._LightColor, this.WebIntensity, this._Distance, this._Decay);\r\n\r\n Object.defineProperty(ptLight, \"castShadow\", { get: () => HostApplicationServices.isShowLightShadow && this.CaseShadow });\r\n\r\n ptLight.shadow.camera.matrixAutoUpdate = true;\r\n ptLight.shadow.camera.far = 10000;\r\n //绘制灯光助手\r\n let lightGeo = new SphereGeometry(50);\r\n let geoMat = new MeshBasicMaterial({ color: this._LightColor });\r\n ptLight.add(new Mesh(lightGeo, geoMat));\r\n\r\n let helper = new PointLightHelper(ptLight.distance / 4, this.Color);\r\n\r\n lightGroup.add(ptLight, helper);\r\n lightGroup.matrixAutoUpdate = false;\r\n lightGroup.matrix.copy(this._Matrix);\r\n lightGroup.updateMatrixWorld(true);\r\n this.UpdateDrawObject(renderType, lightGroup);\r\n return lightGroup;\r\n }\r\n UpdateDrawObject(type: RenderType, en: Object3D)\r\n {\r\n let ptLight = en.children[0] as TPointLight;\r\n super.UpdateDrawObject(type, ptLight);\r\n\r\n ptLight.distance = this._Distance;\r\n ptLight.decay = this._Decay;\r\n\r\n let con = ptLight.children[0] as Mesh;\r\n con.material = new LineBasicMaterial({ color: this.Color });\r\n\r\n let helper = en.children[1] as PointLightHelper;\r\n helper.visible = this._ShowHelper;\r\n if (this._ShowHelper)\r\n helper.color = this.Color;\r\n helper.update();\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();\r\n // this._Distance = file.Read();\r\n // this._Decay = file.Read();\r\n //屏蔽原先的2个属性\r\n file.Read();\r\n file.Read();\r\n\r\n if (ver > 1)\r\n {\r\n this.SourceRadius = file.Read();\r\n this.SoftSourceRadius = file.Read();\r\n this.SourceLength = file.Read();\r\n this.AttenuationRadius = 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._Distance);\r\n file.Write(this._Decay);\r\n\r\n //ver 2\r\n file.Write(this.SourceRadius);\r\n file.Write(this.SoftSourceRadius);\r\n file.Write(this.SourceLength);\r\n file.Write(this.AttenuationRadius);\r\n }\r\n}\r\n","import { BackSide, BufferGeometry, Color, Float32BufferAttribute, Line, LineBasicMaterial, Mesh, MeshBasicMaterial, RectAreaLight as TRectAreaLight } from \"three\";\r\n\r\n/**\r\n * This helper must be added as a child of the light (移植threejs最新的版本)\r\n */\r\nexport class RectAreaLightHelper extends Line\r\n{\r\n light: TRectAreaLight;\r\n color: Color;\r\n material: LineBasicMaterial;\r\n children: [Mesh];\r\n BarnDoorLength: number;\r\n BarnDoorAngle: number;\r\n\r\n private _posAtt: Float32BufferAttribute;\r\n private _indexAtt: Float32BufferAttribute;\r\n\r\n constructor(light: TRectAreaLight, color: Color)\r\n {\r\n const positions = [1, 1, 0, -1, 1, 0, -1, -1, 0, 1, -1, 0, 1, 1, 0,\r\n 0.618, 0.618, 0,\r\n // 0.618, 0.618, -100,\r\n // 0.618, 0.618, 0,\r\n\r\n -0.618, 0.618, 0,\r\n -1, 1, 0,\r\n -0.618, 0.618, 0,\r\n // -0.618, 0.618, -100,\r\n // -0.618, 0.618, 0,\r\n\r\n -0.618, -0.618, 0,\r\n -1, -1, 0,\r\n -0.618, -0.618, 0,\r\n // -0.618, -0.618, -100,\r\n // -0.618, -0.618, 0,\r\n\r\n 0.618, -0.618, 0,\r\n 1, -1, 0,\r\n 0.618, -0.618, 0,\r\n // 0.618, -0.618, -100,\r\n // 0.618, -0.618, 0,\r\n\r\n 0.618, 0.618, 0\r\n ];\r\n\r\n const geometry = new BufferGeometry();\r\n let posatt = new Float32BufferAttribute(positions, 3);\r\n geometry.setAttribute('position', posatt);\r\n geometry.computeBoundingSphere();\r\n\r\n const material = new LineBasicMaterial({ fog: false });\r\n\r\n super(geometry, material);\r\n\r\n this._posAtt = posatt;\r\n\r\n this.light = light;\r\n this.color = color; // optional hardwired color for the helper\r\n this.type = 'RectAreaLightHelper';\r\n\r\n //\r\n const positions2 = [1, 1, 0, -1, 1, 0, -1, -1, 0, 1, 1, 0, -1, -1, 0, 1, -1, 0];\r\n\r\n const geometry2 = new BufferGeometry();\r\n this._indexAtt = new Float32BufferAttribute(positions2, 3);\r\n geometry2.setAttribute('position', this._indexAtt);\r\n geometry2.computeBoundingSphere();\r\n\r\n this.add(new Mesh(geometry2, new MeshBasicMaterial({ side: BackSide, fog: false, transparent: true, opacity: 0.8 })));\r\n }\r\n\r\n updateMatrixWorld()\r\n {\r\n this.scale.set(0.5 * this.light.width, 0.5 * this.light.height, 1);\r\n\r\n if (this.color !== undefined)\r\n {\r\n this.material.color.set(this.color);\r\n //@ts-ignore\r\n this.children[0].material.color.set(this.color);\r\n }\r\n else\r\n {\r\n this.material.color.copy(this.light.color).multiplyScalar(this.light.intensity);\r\n\r\n // prevent hue shift\r\n const c = this.material.color;\r\n const max = Math.max(c.r, c.g, c.b);\r\n if (max > 1)\r\n c.multiplyScalar(1 / max);\r\n //@ts-ignore\r\n this.children[0].material.color.copy(this.material.color);\r\n }\r\n\r\n // ignore world scale on light\r\n this.matrixWorld.extractRotation(this.light.matrixWorld).scale(this.scale).copyPosition(this.light.matrixWorld);\r\n\r\n this.children[0].matrixWorld.copy(this.matrixWorld);\r\n }\r\n\r\n updataRange()\r\n {\r\n let [n, w, h] = [1, 1, 1];\r\n let t = Math.sin(this.BarnDoorAngle * Math.PI / 180) * this.BarnDoorLength;\r\n let cosAngle = Math.cos(this.BarnDoorAngle * Math.PI / 180);\r\n if (Math.floor(cosAngle * 1e5))\r\n {\r\n w = ((this.light.width + this.BarnDoorLength * 2) / this.light.width - 1) * cosAngle + 1;\r\n h = ((this.light.height + this.BarnDoorLength * 2) / this.light.height - 1) * cosAngle + 1;\r\n }\r\n\r\n let positions = [w, h, -t, -w, h, -t, -w, -h, -t, w, -h, -t, w, h, -t,\r\n n, n, 0,\r\n\r\n -n, n, 0,\r\n -w, h, -t,\r\n -n, n, 0,\r\n\r\n -n, -n, 0,\r\n -w, -h, -t,\r\n -n, -n, 0,\r\n\r\n n, -n, 0,\r\n w, -h, -t,\r\n n, -n, 0,\r\n\r\n n, n, 0\r\n ];\r\n\r\n let positions2 = [w, h, -t, -w, h, -t, -w, -h, -t, w, h, -t, -w, -h, -t, w, -h, -t];\r\n\r\n this._posAtt.copyArray(positions);\r\n this._posAtt.needsUpdate = true;\r\n\r\n this._indexAtt.copyArray(positions2);\r\n this._indexAtt.needsUpdate = true;\r\n }\r\n\r\n dispose()\r\n {\r\n this.geometry.dispose();\r\n this.material.dispose();\r\n this.children[0].geometry.dispose();\r\n //@ts-ignore\r\n this.children[0].material.dispose();\r\n }\r\n}\r\n","import { Box3, Group, Object3D, RectAreaLight as TRectAreaLight, Vector3 } from \"three\";\r\nimport { UpdateDraw } from \"../../Common/Status\";\r\nimport { Box3Ext } from \"../../Geometry/Box\";\r\nimport { equalv3, YAxis, ZeroVec } from \"../../Geometry/GeUtils\";\r\nimport { RenderType } from \"../../GraphicsSystem/RenderType\";\r\nimport { equaln } from \"../../Nest/Common/Util\";\r\nimport { AutoRecord } from \"../AutoRecord\";\r\nimport { Factory } from \"../CADFactory\";\r\nimport { CADFiler } from \"../CADFiler\";\r\nimport { ObjectId } from \"../ObjectId\";\r\nimport { Light } from \"./Light\";\r\nimport { RectAreaLightHelper } from \"./RectAreaLightHelper\";\r\n\r\nconst TARGET_DISTANCE = -100;\r\n\r\n@Factory\r\nexport class RectAreaLight extends Light\r\n{\r\n protected _Intensity = 100;\r\n\r\n private _Width: number = 1;//UE SourceWidth\r\n private _Height: number = 1;//UE SourceHeight\r\n\r\n //LocalLightComponent\r\n //Radius:number 没设置这个\r\n @AutoRecord AttenuationRadius = 300; //衰减半径 10-1000\r\n\r\n //RectLightComponent extends LocalLightComponent\r\n private _BarnDoorAngle: number = 0; //0-90 挡光板角度\r\n private _BarnDoorLength: number = 0; //0-100 挡光板长度\r\n @AutoRecord SourceTexture: ObjectId;//Texture 源纹理 默认无 可以追加一张贴图\r\n\r\n get Target()\r\n {\r\n return this.Position.add(this.Normal.multiplyScalar(TARGET_DISTANCE));\r\n }\r\n\r\n set Target(p: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._Matrix.lookAt(this.Position, p, YAxis);\r\n this.Update(UpdateDraw.Geometry);\r\n }\r\n\r\n get Height() { return this._Height; }\r\n\r\n set Height(v: number)\r\n {\r\n if (equaln(v, this._Height, 1e-2)) return;\r\n this.WriteAllObjectRecord();\r\n this._Height = v;\r\n this.Update();\r\n }\r\n\r\n get Width() { return this._Width; }\r\n\r\n set Width(v: number)\r\n {\r\n if (equaln(v, this._Width, 1e-2)) return;\r\n this.WriteAllObjectRecord();\r\n this._Width = v;\r\n this.Update();\r\n }\r\n\r\n get BarnDoorAngle() { return this._BarnDoorAngle; }\r\n\r\n set BarnDoorAngle(v: number)\r\n {\r\n if (equaln(this._BarnDoorAngle, v, 1e-2)) return;\r\n this.WriteAllObjectRecord();\r\n this._BarnDoorAngle = v;\r\n this.Update();\r\n }\r\n\r\n get BarnDoorLength() { return this._BarnDoorLength; }\r\n\r\n set BarnDoorLength(v: number)\r\n {\r\n if (equaln(this._BarnDoorLength, v, 1e-2)) return;\r\n this.WriteAllObjectRecord();\r\n this._BarnDoorLength = v;\r\n this.Update();\r\n }\r\n\r\n get WebIntensity()\r\n {\r\n let x = this._Intensity / 2000;\r\n x = Math.pow(x, 0.5);\r\n return (x * 50) / (Math.PI);//流明转cd 文档是4pi\r\n }\r\n\r\n get BoundingBoxInOCS()\r\n {\r\n return new Box3Ext(new Vector3(-this._Width * 0.5, -this._Height * 0.5, 0), new Vector3(this._Width * 0.5, this._Height * 0.5, 0.01));\r\n }\r\n\r\n get BoundingBox()\r\n {\r\n return new Box3().setFromCenterAndSize(new Vector3(), new Vector3(this._Width, this._Height)).applyMatrix4(this._Matrix);\r\n }\r\n\r\n GetGripPoints(): Array\r\n {\r\n let heightHalf = this._Height * 0.5;\r\n let widthHalf = this.Width * 0.5;\r\n let pos = this.Position;\r\n\r\n let pts: Vector3[] = [\r\n new Vector3(-widthHalf, -heightHalf, 0).applyMatrix4(this.OCSNoClone),//左下\r\n new Vector3(widthHalf, -heightHalf, 0).applyMatrix4(this.OCSNoClone),//右下\r\n new Vector3(widthHalf, heightHalf, 0).applyMatrix4(this.OCSNoClone),//右上\r\n new Vector3(-widthHalf, heightHalf, 0).applyMatrix4(this.OCSNoClone),//左上\r\n pos,\r\n pos.clone().add(this.Normal.multiplyScalar(TARGET_DISTANCE))\r\n ];\r\n return pts;\r\n }\r\n\r\n MoveGripPoints(indexList: number[], vec: Vector3)\r\n {\r\n let vecInv = vec.clone().applyMatrix4(this.OCSInv.setPosition(0, 0, 0));\r\n if (equalv3(vecInv, ZeroVec, 1e-4)) return;\r\n\r\n this.WriteAllObjectRecord();\r\n\r\n let heightHalf = this._Height * 0.5;\r\n let widthHalf = this.Width * 0.5;\r\n let pts: Vector3[] = [\r\n new Vector3(-widthHalf, -heightHalf, 0),\r\n new Vector3(widthHalf, -heightHalf, 0),\r\n new Vector3(widthHalf, heightHalf, 0),\r\n new Vector3(-widthHalf, heightHalf, 0),\r\n ];\r\n\r\n let i = indexList[0];\r\n if (i < 4)\r\n {\r\n pts[i].add(vecInv);\r\n\r\n let newBox = new Box3;\r\n if (i === 0 || i === 2)\r\n newBox.setFromPoints([pts[0], pts[2]]);\r\n else\r\n newBox.setFromPoints([pts[1], pts[3]]);\r\n\r\n //变量复用\r\n let size = newBox.getSize(new Vector3);\r\n this._Width = size.x;\r\n this._Height = size.y;\r\n\r\n //新的中心\r\n let center = newBox.getCenter(size);\r\n center.setZ(0);\r\n\r\n center.applyMatrix4(this.OCSNoClone);\r\n\r\n this._Matrix.setPosition(center);\r\n this.Update();\r\n }\r\n else if (i === 4)\r\n {\r\n this.Position = this.Position.add(vec);\r\n this.Update(UpdateDraw.Matrix);\r\n }\r\n else if (i === 5)\r\n {\r\n let target = this.Position.add(this.Normal.multiplyScalar(TARGET_DISTANCE)).add(vec);\r\n this.Target = target;\r\n }\r\n }\r\n\r\n GetStretchPoints()\r\n {\r\n let heightHalf = this._Height * 0.5;\r\n let widthHalf = this.Width * 0.5;\r\n let pos = this.Position;\r\n\r\n let pts: Vector3[] = [\r\n new Vector3(-widthHalf, -heightHalf, 0).applyMatrix4(this.OCSNoClone),//左下\r\n new Vector3(widthHalf, -heightHalf, 0).applyMatrix4(this.OCSNoClone),//右下\r\n new Vector3(widthHalf, heightHalf, 0).applyMatrix4(this.OCSNoClone),//右上\r\n new Vector3(-widthHalf, heightHalf, 0).applyMatrix4(this.OCSNoClone),//左上\r\n pos.clone().add(this.Normal.multiplyScalar(TARGET_DISTANCE))\r\n ];\r\n return pts;\r\n }\r\n\r\n MoveStretchPoints(ids: number[], vec: Vector3)\r\n {\r\n if (ids.length === 4)\r\n {\r\n this.Move(vec);\r\n return;\r\n }\r\n\r\n const MoveOneGrip = () =>\r\n {\r\n let i = ids[0];\r\n if (i < 4)\r\n this.MoveGripPoints(ids, vec);\r\n else\r\n this.MoveGripPoints([5], vec);\r\n };\r\n\r\n if (ids.length === 1)\r\n {\r\n MoveOneGrip();\r\n return;\r\n }\r\n\r\n //ids.length === 2,3\r\n ids = ids.filter(i => i !== 4);//移除中心\r\n if (ids.length === 1)\r\n {\r\n MoveOneGrip();\r\n return;\r\n }\r\n\r\n //ids.length === 2\r\n ids.sort((a1, a2) => a1 - a2);\r\n let inv = this.OCSInv.setPosition(0, 0, 0);\r\n vec = vec.clone().applyMatrix4(inv);\r\n let ocs = inv.copy(this._Matrix).setPosition(0, 0, 0);\r\n\r\n if (ids[0] === 0)\r\n {\r\n if (ids[1] === 1)//下\r\n {\r\n vec.x = 0;\r\n vec.z = 0;\r\n vec.applyMatrix4(ocs);\r\n\r\n this.MoveGripPoints([0], vec);\r\n }\r\n else if (ids[1] === 3)//左\r\n {\r\n vec.y = 0;\r\n vec.z = 0;\r\n vec.applyMatrix4(ocs);\r\n this.MoveGripPoints([0], vec);\r\n }\r\n }\r\n else if (ids[0] === 1)\r\n {\r\n if (ids[1] === 2)//右\r\n {\r\n vec.y = 0;\r\n vec.z = 0;\r\n vec.applyMatrix4(ocs);\r\n this.MoveGripPoints([1], vec);\r\n }\r\n }\r\n else if (ids[0] === 2)\r\n {\r\n if (ids[1] === 3)//上\r\n {\r\n vec.x = 0;\r\n vec.z = 0;\r\n vec.applyMatrix4(ocs);\r\n\r\n this.MoveGripPoints([2], vec);\r\n }\r\n }\r\n }\r\n\r\n protected InitDrawObject(renderType: RenderType = RenderType.Wireframe): Object3D\r\n {\r\n let lightGroup = new Group();\r\n let light = new TRectAreaLight(this.Color, this.WebIntensity, this._Width, this._Height);\r\n lightGroup.add(light);\r\n this.UpdateDrawObject(renderType, lightGroup);\r\n return lightGroup;\r\n }\r\n\r\n UpdateDrawObject(type: RenderType, obj: Object3D)\r\n {\r\n let light = obj.children[0] as TRectAreaLight;\r\n super.UpdateDrawObject(type, light);\r\n light.width = this._Width;\r\n light.height = this._Height;\r\n light.color.copy(this.Color);\r\n // light.castShadow = true;//threejs没有支持这个影子\r\n\r\n let help: RectAreaLightHelper;\r\n if (obj.children.length === 1)\r\n {\r\n help = new RectAreaLightHelper(light, light.color);\r\n obj.add(help);\r\n }\r\n else\r\n help = obj.children[1] as RectAreaLightHelper;\r\n\r\n help.BarnDoorAngle = 90 - this.BarnDoorAngle;\r\n help.BarnDoorLength = this.BarnDoorLength;\r\n help.color = this.Color;\r\n help.updataRange();\r\n\r\n help.updateMatrixWorld();\r\n\r\n help = obj.children[1] as RectAreaLightHelper;\r\n help.visible = this._ShowHelper;\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._Height = file.Read();\r\n this._Width = file.Read();\r\n new Vector3().fromArray(file.Read());\r\n\r\n //ver2\r\n if (ver > 1)\r\n {\r\n this.AttenuationRadius = file.Read();\r\n this._BarnDoorAngle = file.Read();\r\n this._BarnDoorLength = file.Read();\r\n this.SourceTexture = file.Read();\r\n }\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._Height);\r\n file.Write(this._Width);\r\n file.Write([0, 0, 0]);\r\n\r\n //ver2\r\n file.Write(this.AttenuationRadius);\r\n file.Write(this._BarnDoorAngle);\r\n file.Write(this._BarnDoorLength);\r\n file.Write(this.SourceTexture);\r\n }\r\n}\r\n","import { BufferGeometry, Float32BufferAttribute, LineBasicMaterial, LineSegments, MathUtils, Object3D } from 'three';\r\nimport { SpotLight } from './SpotLight';\r\n\r\nexport class SpotLightHelper extends Object3D\r\n{\r\n cone: LineSegments[] = [];\r\n constructor(private light: SpotLight)\r\n {\r\n super();\r\n\r\n const geometry = new BufferGeometry();\r\n const positions = [\r\n 0, 0, 0, 0, 0, 1,\r\n 0, 0, 0, 1, 0, 1,\r\n 0, 0, 0, - 1, 0, 1,\r\n 0, 0, 0, 0, 1, 1,\r\n 0, 0, 0, 0, - 1, 1\r\n ];\r\n for (let i = 0, j = 1, l = 32; i < l; i++, j++)\r\n {\r\n const p1 = (i / l) * Math.PI * 2;\r\n const p2 = (j / l) * Math.PI * 2;\r\n\r\n positions.push(\r\n Math.cos(p1), Math.sin(p1), 1,\r\n Math.cos(p2), Math.sin(p2), 1\r\n );\r\n\r\n }\r\n geometry.setAttribute('position', new Float32BufferAttribute(positions, 3));\r\n\r\n this.cone[0] = new LineSegments(geometry, new LineBasicMaterial({ fog: false }));\r\n this.cone[1] = new LineSegments(geometry, new LineBasicMaterial({ fog: false }));\r\n\r\n this.cone[0].rotation.x = Math.PI;\r\n this.cone[1].rotation.x = Math.PI;\r\n\r\n this.add(this.cone[0], this.cone[1]);\r\n }\r\n\r\n dispose()\r\n {\r\n this.cone[0].geometry.dispose();\r\n this.cone[1].geometry.dispose();\r\n this.cone[0].material.dispose();\r\n this.cone[1].material.dispose();\r\n }\r\n\r\n update()\r\n {\r\n const coneLength = this.light.Distance ? this.light.Distance : 1000;\r\n const coneWidth1 = coneLength * Math.tan(this.light.Angle);\r\n const coneWidth2 = coneLength * Math.tan(MathUtils.degToRad(this.light.InnerConeAngle));\r\n\r\n this.cone[0].scale.set(coneWidth1, coneWidth1, coneLength);\r\n this.cone[1].scale.set(coneWidth2, coneWidth2, coneLength);\r\n this.cone[0].updateMatrix();\r\n this.cone[1].updateMatrix();\r\n\r\n this.cone[0].material.color.set(this.light.Color).multiplyScalar(0.3);\r\n this.cone[1].material.color.set(this.light.Color);\r\n }\r\n}\r\n","import { ConeGeometry, Group, MathUtils, Mesh, MeshBasicMaterial, Object3D, SpotLight as TSpotLight, Vector3 } from \"three\";\r\nimport { HostApplicationServices } from \"../../ApplicationServices/HostApplicationServices\";\r\nimport { UpdateDraw } from \"../../Common/Status\";\r\nimport { ObjectSnapMode } from \"../../Editor/ObjectSnapMode\";\r\nimport { equalv3, YAxis } from \"../../Geometry/GeUtils\";\r\nimport { RenderType } from \"../../GraphicsSystem/RenderType\";\r\nimport { equaln } from \"../../Nest/Common/Util\";\r\nimport { AutoRecord } from \"../AutoRecord\";\r\nimport { Factory } from \"../CADFactory\";\r\nimport { CADFiler } from \"../CADFiler\";\r\nimport { Light } from \"./Light\";\r\nimport { SpotLightHelper } from \"./SpotLightHelper\";\r\n\r\n@Factory\r\nexport class SpotLight extends Light\r\n{\r\n /**\r\n * If non-zero, light will attenuate linearly from maximum intensity at light position down to zero at distance.\r\n * Default — 0.0.\r\n */\r\n private _Distance: number = 5000;\r\n protected _Intensity: number = 100; //强度\r\n\r\n // 光线沿着光线的距离变暗的量\r\n // 在物理上正确的模式下,衰减 = 2会导致物理上真实的光线衰减。\r\n // 缺省值是1。\r\n private _Decay: number = 0.2;\r\n // 光线散射角度,最大为Math.PI/2\r\n private _Angle: number = Math.PI / 4;//默认\r\n\r\n // 聚光锥的半影衰减百分比。在0和1之间的值。 默认值 — 0.0。\r\n private _Penumbra: number = 0;\r\n\r\n //SpotLightComponent extends PointLightComponent\r\n @AutoRecord InnerConeAngle: number = 0;//椎体内部角度 默认0 范围0-90\r\n @AutoRecord OuterConeAngle: number = 40;//椎体外部角度 默认40 范围0-90 (弃用,使用Angle)\r\n\r\n //PointLightComponent\r\n @AutoRecord SourceRadius = 0;//源半径 范围0-300\r\n @AutoRecord SoftSourceRadius = 0;//软源半径 范围0-300\r\n @AutoRecord SourceLength = 0;//源长度 默认0 范围0-1000\r\n\r\n //LocalLightComponent\r\n //Radius:number 没设置这个\r\n @AutoRecord AttenuationRadius = 300; //衰减半径 10-1000\r\n\r\n get Target()\r\n {\r\n return this.Position.add(this.Normal.multiplyScalar(-this._Distance * 0.5));\r\n }\r\n set Target(p: Vector3)\r\n {\r\n if (!equalv3(p, this.Position))\r\n {\r\n this.WriteAllObjectRecord();\r\n this._Matrix.lookAt(this.Position, p, YAxis);\r\n this.Update(UpdateDraw.Matrix);\r\n }\r\n }\r\n\r\n get Angle()\r\n {\r\n return this._Angle;\r\n }\r\n set Angle(rad: number)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._Angle = rad;\r\n this.Update();\r\n }\r\n get Decay(): number\r\n {\r\n return this._Decay;\r\n }\r\n set Decay(decay: number)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._Decay = decay;\r\n this.Update();\r\n }\r\n get Distance()\r\n {\r\n return this._Distance;\r\n }\r\n set Distance(dist: number)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._Distance = dist;\r\n this.Update();\r\n }\r\n get Penumbra()\r\n {\r\n return this._Penumbra;\r\n }\r\n set Penumbra(v: number)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._Penumbra = v;\r\n this.Update();\r\n }\r\n\r\n get EndPoint()\r\n {\r\n return this.Position.add(this.Target.sub(this.Position).normalize().multiplyScalar(this._Distance));\r\n }\r\n\r\n get WebIntensity()\r\n {\r\n let x = this._Intensity / 2000;\r\n x = Math.pow(x, 0.45);\r\n return (x * 125) / Math.PI;//流明转cd 文档是4pi\r\n }\r\n\r\n GetGripPoints(): Vector3[]\r\n {\r\n let radius = this.Distance * Math.tan(this._Angle);\r\n let pts: Vector3[] = [\r\n this.Position, this.Target,\r\n new Vector3(radius, 0, -this._Distance).applyMatrix4(this._Matrix),\r\n new Vector3(-radius, 0, -this._Distance).applyMatrix4(this._Matrix),\r\n new Vector3(0, radius, -this._Distance).applyMatrix4(this._Matrix),\r\n new Vector3(0, -radius, -this._Distance).applyMatrix4(this._Matrix),\r\n ];\r\n\r\n let a2 = MathUtils.degToRad(this.InnerConeAngle);\r\n if (this.InnerConeAngle >= 1 && !equaln(this._Angle, a2))\r\n {\r\n let radius2 = this.Distance * Math.tan(a2);\r\n pts.push(\r\n new Vector3(radius2, 0, -this._Distance).applyMatrix4(this._Matrix),\r\n new Vector3(-radius2, 0, -this._Distance).applyMatrix4(this._Matrix),\r\n new Vector3(0, radius2, -this._Distance).applyMatrix4(this._Matrix),\r\n new Vector3(0, -radius2, -this._Distance).applyMatrix4(this._Matrix),\r\n );\r\n }\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 if (indexList[0] === 0)\r\n {\r\n this.Move(vec);\r\n }\r\n else if (indexList[0] === 1)\r\n this.Target = this.Target.add(vec);\r\n else\r\n {\r\n let pts = this.GetGripPoints();\r\n let p = pts[indexList[0]].add(vec);\r\n let pos = this.Position;\r\n\r\n let dir = this.EndPoint.sub(pos).normalize();\r\n let dir2 = p.sub(pos).normalize();\r\n\r\n let angle = dir.angleTo(dir2);\r\n if (indexList[0] < 6)\r\n {\r\n this.Angle = angle;\r\n this.InnerConeAngle = Math.min(this.InnerConeAngle, MathUtils.radToDeg(angle));\r\n }\r\n else\r\n {\r\n this.InnerConeAngle = MathUtils.radToDeg(angle);\r\n this.Angle = Math.max(angle, this.Angle);\r\n }\r\n\r\n this.Update();\r\n }\r\n }\r\n\r\n GetStretchPoints(): Vector3[]\r\n {\r\n return this.GetGripPoints();\r\n }\r\n\r\n MoveStretchPoints(indexList: Array, vec: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n if (indexList.length === 1)\r\n return this.MoveGripPoints(indexList, vec);\r\n else if (indexList.length === 7)\r\n this.Move(vec);\r\n else if (indexList.length > 1)\r\n {\r\n if (indexList.indexOf(0) === -1)\r\n this.MoveGripPoints([1], vec);\r\n else\r\n this.Move(vec);\r\n }\r\n }\r\n\r\n GetObjectSnapPoints(\r\n snapMode: ObjectSnapMode,\r\n pickPoint: Vector3,\r\n lastPoint: Vector3\r\n ): Vector3[]\r\n {\r\n switch (snapMode)\r\n {\r\n case ObjectSnapMode.End:\r\n return this.GetGripPoints();\r\n default:\r\n break;\r\n }\r\n return [];\r\n }\r\n\r\n protected InitDrawObject(renderType: RenderType = RenderType.Wireframe): Object3D\r\n {\r\n // if (renderType !== RenderType.Physical) return;\r\n\r\n let group = new Group();\r\n\r\n let light = new TSpotLight(this._LightColor, this.WebIntensity, this._Distance, this._Angle, this._Penumbra, this._Decay);\r\n light.position.set(0, 0, 0);\r\n light.updateMatrix();\r\n\r\n light.target.position.set(0, 0, -1);\r\n light.target.updateMatrix();\r\n light.add(light.target);\r\n\r\n Object.defineProperty(light, \"castShadow\", { get: () => HostApplicationServices.isShowLightShadow && this.CaseShadow });\r\n light.shadow.camera.matrixAutoUpdate = true;\r\n light.shadow.camera.far = this._Distance;\r\n\r\n group.add(light);//灯光\r\n\r\n //灯光圆锥\r\n let con = new Mesh(new ConeGeometry(50, 80, 30, 1), new MeshBasicMaterial({ color: this._LightColor }));\r\n con.rotation.x = Math.PI * 0.5;\r\n con.position.z = -40;\r\n con.castShadow = false;\r\n con.updateMatrix();\r\n\r\n group.add(con);//椎体\r\n\r\n this.UpdateDrawObject(renderType, group);\r\n return group;\r\n }\r\n\r\n UpdateDrawObject(type: RenderType, en: Object3D)\r\n {\r\n // if (type !== RenderType.Physical) return;\r\n\r\n let [light, con, helper] = en.children as [TSpotLight, Mesh, SpotLightHelper];\r\n\r\n super.UpdateDrawObject(type, light);\r\n light.distance = this._Distance;\r\n light.decay = this._Decay;\r\n light.angle = this._Angle;\r\n light.penumbra = this._Penumbra;\r\n\r\n con.material.color.copy(this.Color);\r\n\r\n if (this._ShowHelper)\r\n {\r\n if (!helper)\r\n {\r\n helper = new SpotLightHelper(this);\r\n en.add(helper);\r\n }\r\n else\r\n helper.visible = true;\r\n\r\n helper.update();\r\n }\r\n else\r\n if (helper) helper.visible = this._ShowHelper;\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._Distance = file.Read();\r\n this._Decay = file.Read();\r\n this._Angle = file.Read();\r\n this._Penumbra = file.Read();\r\n\r\n let target = new Vector3();\r\n target.fromArray(file.Read());\r\n if (ver < 3)\r\n this.Target = target;\r\n\r\n if (ver > 1)\r\n {\r\n this.InnerConeAngle = file.Read();\r\n this.OuterConeAngle = file.Read();\r\n this.SourceRadius = file.Read();\r\n this.SoftSourceRadius = file.Read();\r\n this.SourceLength = file.Read();\r\n this.AttenuationRadius = file.Read();\r\n }\r\n }\r\n WriteFile(file: CADFiler)\r\n {\r\n super.WriteFile(file);\r\n file.Write(3);\r\n file.Write(this._Distance);\r\n file.Write(this._Decay);\r\n file.Write(this._Angle);\r\n file.Write(this._Penumbra);\r\n file.Write([0, 0, 0]);\r\n\r\n //ver2\r\n file.Write(this.InnerConeAngle);\r\n file.Write(this.OuterConeAngle);\r\n file.Write(this.SourceRadius);\r\n file.Write(this.SoftSourceRadius);\r\n file.Write(this.SourceLength);\r\n file.Write(this.AttenuationRadius);\r\n }\r\n}\r\n","import { arrayRemoveIf } from \"../../Common/ArrayExt\";\r\nimport { AutoRecord } from \"../AutoRecord\";\r\nimport { Factory } from \"../CADFactory\";\r\nimport { CADFiler } from \"../CADFiler\";\r\nimport { ObjectId } from \"../ObjectId\";\r\nimport { SymbolTableRecord } from \"../SymbolTableRecord\";\r\n\r\n/**\r\n * 加工组信息设置.\r\n * 为了保证加工组的信息得到正确的添加和删除.\r\n * 请保证更新Entity的加工组数据,并更新ProcessingGroup的数据.\r\n */\r\n@Factory\r\nexport class ProcessingGroupRecord extends SymbolTableRecord\r\n{\r\n @AutoRecord Objects: ObjectId[] = [];\r\n constructor()\r\n {\r\n super();\r\n }\r\n\r\n get Name()\r\n {\r\n return this.name;\r\n }\r\n set Name(name: string)\r\n {\r\n if (name !== this.name)\r\n {\r\n this.WriteAllObjectRecord();\r\n this.name = name;\r\n }\r\n }\r\n\r\n Purge()\r\n {\r\n arrayRemoveIf(this.Objects, id => !id || id.IsErase);\r\n }\r\n\r\n //#region -------------------------File-------------------------\r\n\r\n //对象从文件中读取数据,初始化自身\r\n ReadFile(file: CADFiler)\r\n {\r\n let ver = file.Read();\r\n super.ReadFile(file);\r\n let count = file.Read();\r\n this.Objects.length = 0;\r\n for (let i = 0; i < count; i++)\r\n {\r\n let id = file.ReadObjectId();\r\n if (id) this.Objects.push(id);\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.Objects.length);\r\n for (let id of this.Objects)\r\n file.WriteObjectId(id);\r\n }\r\n //#endregion\r\n}\r\n","import { Box3, BufferGeometry, Geometry, Line as TLine, LineSegments, Mesh, Object3D, ShapeGeometry, Vector2, Vector3 } from \"three\";\r\nimport { ColorMaterial } from \"../../../../Common/ColorPalette\";\r\nimport { Box3Ext } from \"../../../../Geometry/Box\";\r\nimport { BufferGeometryUtils } from \"../../../../Geometry/BufferGeometryUtils\";\r\nimport { AsVector3 } from \"../../../../Geometry/GeUtils\";\r\nimport { ScaleUV } from \"../../../../Geometry/UVUtils\";\r\nimport { RenderType } from \"../../../../GraphicsSystem/RenderType\";\r\nimport { Factory } from \"../../../CADFactory\";\r\nimport { CADFiler } from \"../../../CADFiler\";\r\nimport { Polyline } from \"../../../Entity/Polyline\";\r\nimport { ObjectId } from \"../../../ObjectId\";\r\nimport { RoomBase } from \"../RoomBase\";\r\n\r\nconst TempPolyline = new Polyline;\r\nexport function UpdateTempPolyline(_ContourData: { pts: Vector2[], buls: number[]; })\r\n{\r\n TempPolyline.LineData.length = 0;;\r\n for (let i = 0; i < _ContourData.pts.length; i++)\r\n TempPolyline.LineData.push({ pt: _ContourData.pts[i], bul: _ContourData.buls[i] });\r\n return TempPolyline;\r\n}\r\n\r\n/**\r\n * 平面实体基类\r\n * 子类:地板 天花\r\n */\r\n@Factory\r\nexport class RoomFlatBase extends RoomBase\r\n{\r\n protected _RegionId: ObjectId;\r\n protected _ContourData: { pts: Vector2[]; buls: number[]; };\r\n\r\n protected _HoleDatas: { pts: Vector2[]; buls: number[]; }[];\r\n\r\n constructor(\r\n _Contour?: Polyline,//为了防止contour被删除(所以我们直接备份这个)\r\n _Holes: Polyline[] = []\r\n )\r\n {\r\n super();\r\n if (_Contour) this.Contour = _Contour;\r\n\r\n this._HoleDatas = _Holes.map(h => h.MatrixAlignTo2(this.OCSNoClone));\r\n }\r\n\r\n get ContourData(): { pts: Vector2[]; buls: number[]; }\r\n {\r\n return this._ContourData;\r\n }\r\n\r\n set ContourData(value: { pts: Vector2[]; buls: number[]; })\r\n {\r\n }\r\n\r\n get HoleDatas(): { pts: Vector2[]; buls: number[]; }[]\r\n {\r\n return this._HoleDatas;\r\n }\r\n set HoleDatas(value: { pts: Vector2[]; buls: number[]; }[])\r\n {\r\n }\r\n\r\n get Area()\r\n {\r\n let area = this.Contour.Area;\r\n\r\n for (let hole of this._HoleDatas)\r\n area -= UpdateTempPolyline(hole).Area;\r\n\r\n return area;\r\n }\r\n\r\n get BoundingBoxInOCS(): Box3Ext\r\n {\r\n return this.Contour.BoundingBoxInOCS;\r\n }\r\n\r\n get BoundingBox(): Box3\r\n {\r\n return this.BoundingBoxInOCS.applyMatrix4(this._Matrix);\r\n }\r\n\r\n public UpdateContourHoles(_Contour: Polyline, _Holes: Polyline[])\r\n {\r\n let conData = _Contour.MatrixAlignTo2(this.OCSNoClone);\r\n let holeData = _Holes.map(h => h.MatrixAlignTo2(this.OCSNoClone));\r\n\r\n this.WriteAllObjectRecord();\r\n this._ContourData = conData;\r\n this._HoleDatas = holeData;\r\n this.Update();\r\n }\r\n\r\n\r\n public set Contour(_Contour: Polyline)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._ContourData = _Contour.MatrixAlignTo2(this.OCSNoClone);\r\n this.Update();\r\n }\r\n public get Contour()\r\n {\r\n return UpdateTempPolyline(this._ContourData);\r\n }\r\n\r\n public set Holes(_Holes: Polyline[])\r\n {\r\n this.WriteAllObjectRecord();\r\n this._HoleDatas = _Holes.map(h => h.MatrixAlignTo2(this.OCSNoClone));\r\n this.Update();\r\n }\r\n\r\n public get RegionId(): ObjectId\r\n {\r\n return this._RegionId;\r\n }\r\n public set RegionId(value: ObjectId)\r\n {\r\n if (value === this._RegionId) return;\r\n this.WriteAllObjectRecord();\r\n this._RegionId = value;\r\n }\r\n\r\n override GetGripPoints(): Vector3[]\r\n {\r\n let pts: Vector3[] = [];\r\n const Add2Pts = (p: Vector2) => { pts.push(AsVector3(p).applyMatrix4(this.OCSNoClone)); };\r\n this._ContourData.pts.forEach(Add2Pts);\r\n this._HoleDatas.forEach(h => h.pts.forEach(Add2Pts));\r\n return pts;\r\n }\r\n override MoveGripPoints(indexList: number[], vec: Vector3): void\r\n {\r\n }\r\n\r\n override GetStretchPoints(): Vector3[]\r\n {\r\n return this.GetGripPoints();\r\n // return [new Vector3(1e10, 1e10, 1e10)];//我们允许拉伸内部轮廓 但是不允许拉伸外部轮廓\r\n }\r\n\r\n override MoveStretchPoints(indexList: number[], vec: Vector3): void\r\n {\r\n\r\n }\r\n\r\n //绘制\r\n override UpdateDrawGeometry()\r\n {\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 protected _EdgeGeometry: BufferGeometry;\r\n protected get EdgeGeometry()\r\n {\r\n if (this._EdgeGeometry)\r\n return this._EdgeGeometry;\r\n\r\n let pts = this.Contour.Shape.getPoints(30).map(AsVector3);\r\n this._EdgeGeometry = BufferGeometryUtils.CreateFromPts(pts);\r\n return this._EdgeGeometry;\r\n }\r\n\r\n protected _MeshGeometry: Geometry;\r\n protected get MeshGeometry(): Geometry\r\n {\r\n if (!this._MeshGeometry)\r\n {\r\n let shape = this.Contour.Shape;\r\n for (let hole of this._HoleDatas)\r\n shape.holes.push(UpdateTempPolyline(hole).Shape);\r\n this._MeshGeometry = new ShapeGeometry(shape);\r\n ScaleUV(this.MeshGeometry, 1e-3);\r\n }\r\n return this._MeshGeometry;\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 override InitDrawObject(renderType: RenderType = RenderType.Wireframe): Object3D\r\n {\r\n if (renderType === RenderType.Wireframe)\r\n {\r\n // return new Object3D;//在二维线框中,如果显示这个线框,操作时会选到这个,所以不绘制\r\n\r\n //避免在二维线框下无法选中!\r\n return new TLine(BufferGeometryUtils.CreateFromPts([AsVector3(this.ContourData.pts[0]), AsVector3(this.ContourData.pts[0])]), 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.GetBasicMaterialTransparent2(this.ColorIndex, 0.1)),\r\n new TLine(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\r\n Object.defineProperty(mesh, \"castShadow\", {\r\n get: () => this.CaseShadow\r\n });\r\n Object.defineProperty(mesh, \"receiveShadow\", {\r\n get: () => this.CaseShadow\r\n });\r\n\r\n return mesh;\r\n }\r\n else if (renderType === RenderType.Jig)\r\n {\r\n return new Object3D;\r\n }\r\n }\r\n\r\n override UpdateDrawObject(renderType: RenderType, obj: Object3D)\r\n {\r\n if (renderType === RenderType.Wireframe)\r\n {\r\n let l = obj as TLine;\r\n BufferGeometryUtils.UpdatePts(l.geometry, [AsVector3(this.ContourData.pts[0]), AsVector3(this.ContourData.pts[0])]);\r\n\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 let mesh = obj.children[0] as Mesh;\r\n if (mesh.geometry !== this.MeshGeometry)\r\n {\r\n mesh.geometry.dispose();\r\n mesh.geometry = this.MeshGeometry;\r\n }\r\n\r\n let line = obj.children[1] as LineSegments;\r\n if (line.geometry !== this.EdgeGeometry)\r\n {\r\n line.geometry.dispose();\r\n line.geometry = this.EdgeGeometry;\r\n }\r\n }\r\n else if (renderType === RenderType.Physical)\r\n {\r\n let mesh = obj as Mesh;\r\n if (mesh.geometry !== this.MeshGeometry)\r\n {\r\n mesh.geometry.dispose();\r\n mesh.geometry = this.MeshGeometry;\r\n }\r\n }\r\n }\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\r\n this._RegionId = file.ReadObjectId();\r\n\r\n this._ContourData = ReadContour();\r\n\r\n let count = file.Read();\r\n this._HoleDatas = [];\r\n for (let i = 0; i < count; i++)\r\n this._HoleDatas.push(ReadContour());\r\n\r\n function ReadContour()\r\n {\r\n let count = file.Read() as number;\r\n let conData = { pts: [], buls: [] };\r\n for (let i = 0; i < count; i++)\r\n {\r\n conData.pts.push(new Vector2(file.Read(), file.Read()));\r\n conData.buls.push(file.Read());\r\n }\r\n return conData;\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.WriteObjectId(this._RegionId);\r\n\r\n WriteContour(this._ContourData);\r\n file.Write(this._HoleDatas.length);\r\n for (let h of this._HoleDatas)\r\n WriteContour(h);\r\n\r\n function WriteContour(conData: { pts: Vector2[], buls: number[]; })\r\n {\r\n file.Write(conData.pts.length);\r\n for (let i = 0; i < conData.pts.length; i++)\r\n {\r\n let p = conData.pts[i];\r\n file.Write(p.x);\r\n file.Write(p.y);\r\n file.Write(conData.buls[i]);\r\n }\r\n }\r\n }\r\n}\r\n","import { Factory } from \"../../../CADFactory\";\r\nimport { CADFiler } from \"../../../CADFiler\";\r\nimport { RoomFlatBase } from \"./RoomFlatBase\";\r\n\r\n\r\n/**\r\n * 地板\r\n */\r\n@Factory\r\nexport class RoomFlatFloor extends RoomFlatBase\r\n{\r\n //#region -----------------------------File-----------------------------\r\n //对象应该实现dataIn和DataOut的方法,为了对象的序列化和反序列化\r\n\r\n //对象从文件中读取数据,初始化自身\r\n protected override _ReadFile(file: CADFiler)\r\n {\r\n super._ReadFile(file);\r\n let ver = file.Read();//1\r\n }\r\n //对象将自身数据写入到文件.\r\n override WriteFile(file: CADFiler)\r\n {\r\n super.WriteFile(file);\r\n file.Write(1);//ver\r\n }\r\n}\r\n","import { Face3, Geometry, ShapeUtils, Vector3 } from \"three\";\r\nimport { arrayPushArray } from \"../../../../Common/ArrayExt\";\r\nimport { AsVector3 } from \"../../../../Geometry/GeUtils\";\r\nimport { Factory } from \"../../../CADFactory\";\r\nimport { RoomFlatBase, UpdateTempPolyline } from \"./RoomFlatBase\";\r\n\r\n\r\n/**\r\n * 天花板\r\n */\r\n@Factory\r\nexport class RoomFlatTop extends RoomFlatBase\r\n{\r\n protected override get MeshGeometry(): Geometry\r\n {\r\n if (!this._MeshGeometry)\r\n {\r\n this._MeshGeometry = new Geometry;\r\n let shape = this.Contour.Shape;\r\n for (let hole of this._HoleDatas)\r\n shape.holes.push(UpdateTempPolyline(hole).Shape);\r\n\r\n const points = shape.extractPoints(30);\r\n let shapeVertices = points.shape;\r\n const shapeHoles = points.holes;\r\n\r\n const faces = ShapeUtils.triangulateShape(shapeVertices, shapeHoles);\r\n\r\n for (let hole of shapeHoles)\r\n arrayPushArray(shapeVertices, hole);\r\n\r\n for (let p of shapeVertices)\r\n {\r\n this._MeshGeometry.vertices.push(AsVector3(p));\r\n p.multiplyScalar(1e-3);\r\n }\r\n\r\n let normal = new Vector3(0, 0, -1);\r\n // incides\r\n for (let i = 0, l = faces.length; i < l; i++)\r\n {\r\n const face = faces[i];\r\n\r\n const a = face[2];\r\n const b = face[1];\r\n const c = face[0];\r\n\r\n this._MeshGeometry.faces.push(new Face3(a, b, c, normal));\r\n this._MeshGeometry.faceVertexUvs[0].push([shapeVertices[a], shapeVertices[b], shapeVertices[c]]);\r\n }\r\n }\r\n return this._MeshGeometry;\r\n }\r\n\r\n protected override get CaseShadow()\r\n {\r\n return true;\r\n }\r\n protected override get ReceiveShadow()\r\n {\r\n return false;\r\n }\r\n}\r\n","import { BufferGeometry, Line, Object3D, Vector2, Vector3 } from \"three\";\r\nimport { AddEntityDrawObject } from \"../../../../Common/AddEntityDrawObject\";\r\nimport { FixedNotZero } from \"../../../../Common/Utils\";\r\nimport { BufferGeometryUtils } from \"../../../../Geometry/BufferGeometryUtils\";\r\nimport { AsVector3, equaln } from \"../../../../Geometry/GeUtils\";\r\nimport { RenderType } from \"../../../../GraphicsSystem/RenderType\";\r\nimport { Factory } from \"../../../CADFactory\";\r\nimport { CADFiler } from \"../../../CADFiler\";\r\nimport { ObjectId } from \"../../../ObjectId\";\r\nimport { Text, TextAligen } from \"../../../Text/Text\";\r\nimport { RoomFlatBase } from \"../Flat/RoomFlatBase\";\r\nimport { RoomBase } from \"../RoomBase\";\r\n\r\n/**\r\n * 户型区域:厨房,客厅,主卧,卫生间\r\n * 绑定了天花板和地板对象\r\n */\r\n@Factory\r\nexport class RoomRegion extends RoomBase\r\n{\r\n _Text: Text;\r\n constructor(\r\n private _Name: string = \"\",//名称\r\n\r\n private _Top: ObjectId,//天花板\r\n\r\n private _Floor: ObjectId,//地板\r\n private _Area = 0,\r\n )\r\n {\r\n super();\r\n }\r\n\r\n public get Area()\r\n {\r\n return this._Area;\r\n }\r\n\r\n public set Area(value)\r\n {\r\n if (equaln(value, this._Area, 1e-3)) return;\r\n\r\n this.WriteAllObjectRecord();\r\n this._Area = value;\r\n this.Update();\r\n }\r\n\r\n get TextString() { return this._Name; }\r\n set TextString(name: string)\r\n {\r\n if (name === this._Name) return;\r\n this._Name = name;\r\n this.Update();\r\n }\r\n\r\n public get Top(): ObjectId\r\n {\r\n return this._Top;\r\n }\r\n\r\n public set Top(value: ObjectId)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._Top = value;\r\n }\r\n\r\n public get Floor(): ObjectId\r\n {\r\n return this._Floor;\r\n }\r\n public set Floor(value: ObjectId)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._Floor = value;\r\n }\r\n\r\n private get Text()\r\n {\r\n if (!this._Text)\r\n this._Text = new Text(undefined, undefined, \"yahei\", 100);\r\n\r\n return this._Text;\r\n }\r\n\r\n GetGripPoints(): Vector3[]\r\n {\r\n let pts: Vector3[] = [];\r\n let obj = (this._Floor?.Object ?? this._Top?.Object) as RoomFlatBase;\r\n if (obj)\r\n {\r\n const Add2Pts = (p: Vector2) => { pts.push(AsVector3(p).applyMatrix4(obj.OCSNoClone)); };\r\n obj.ContourData.pts.forEach(Add2Pts);\r\n obj.HoleDatas.forEach(h => h.pts.forEach(Add2Pts));\r\n }\r\n return pts;\r\n }\r\n\r\n //TODO:绘制时只绘制文字对象\r\n InitDrawObject(renderType: RenderType = RenderType.Wireframe): Object3D\r\n {\r\n let obj = new Object3D;\r\n this.UpdateDrawObject(renderType, obj);\r\n return obj;\r\n }\r\n\r\n /**\r\n * 重载:更新绘制的实体\r\n * @param {RenderType} type\r\n * @param {Object3D} obj\r\n */\r\n UpdateDrawObject(renderType: RenderType, obj: Object3D)\r\n {\r\n if (renderType === RenderType.Wireframe || renderType === RenderType.Conceptual)\r\n {\r\n obj.remove(...obj.children.slice(0));\r\n this.Text.TextAligen = TextAligen.Mid;\r\n this._Text.TextString = `${this.TextString || \"未命名\"} ${FixedNotZero(this._Area * 1e-6, 2)}m²`;\r\n AddEntityDrawObject(obj, this._Text, renderType);\r\n }\r\n else\r\n {\r\n //避免在真实视图无法选中!\r\n let line = obj.children[0] as Line;\r\n let pts = this.GetGripPoints();\r\n if (pts.length)\r\n {\r\n let p = pts[0].applyMatrix4(this.OCSInv);\r\n if (!line)\r\n obj.add(new Line(BufferGeometryUtils.CreateFromPts([p, p])));\r\n else\r\n BufferGeometryUtils.UpdatePts(line.geometry, [p, p]);\r\n }\r\n }\r\n }\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._Name = file.Read();\r\n this._Top = file.ReadObjectId();\r\n this._Floor = file.ReadObjectId();\r\n if (ver > 1)\r\n this._Area = file.Read();\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n super.WriteFile(file);\r\n file.Write(2);//ver\r\n file.Write(this._Name);\r\n file.WriteObjectId(this._Top);\r\n file.WriteObjectId(this._Floor);\r\n file.Write(this._Area);\r\n }\r\n //#endregion\r\n}\r\n","import { Object3D, Vector3 } from \"three\";\r\nimport { equalv3 } from \"../../../../../Geometry/GeUtils\";\r\nimport { RenderType } from \"../../../../../GraphicsSystem/RenderType\";\r\nimport { Factory } from \"../../../../CADFactory\";\r\nimport { CADFiler } from \"../../../../CADFiler\";\r\nimport { CADObject } from \"../../../../CADObject\";\r\nimport { Line } from \"../../../../Entity/Line\";\r\nimport { RoomBase } from \"../../RoomBase\";\r\nimport { applyMixins } from \"../RoomWallBase\";\r\nimport { RoomHoleBase } from \"./RoomHoleBase\";\r\n\r\nconst TempP = new Vector3;\r\n\r\n\r\n/**\r\n * 直线洞 2点(暂时不要用这个 全部使用RoomHolePolyline)\r\n */\r\n@Factory\r\nexport class RoomHoleLine extends RoomHoleBase\r\n{\r\n //虽然使用了三维的点,但是我们实际使用的是二维的点 z总是等于0\r\n constructor(private _StartPoint = new Vector3,\r\n private _EndPoint = new Vector3,\r\n )\r\n {\r\n super();\r\n }\r\n\r\n get StartPoint(): Vector3\r\n {\r\n return this._StartPoint.clone().applyMatrix4(this.OCSNoClone);\r\n }\r\n\r\n get EndPoint(): Vector3\r\n {\r\n return this._EndPoint.clone().applyMatrix4(this.OCSNoClone);\r\n }\r\n\r\n set StartPoint(p: Vector3)\r\n {\r\n p = TempP.copy(p).applyMatrix4(this.OCSInv).setZ(0);\r\n if (!equalv3(p, this._StartPoint, 1e-4))\r\n {\r\n this.WriteAllObjectRecord();\r\n this._StartPoint.copy(p);\r\n this.Update();\r\n }\r\n }\r\n\r\n set EndPoint(p: Vector3)\r\n {\r\n p = TempP.copy(p).applyMatrix4(this.OCSInv).setZ(0);\r\n if (!equalv3(p, this._EndPoint, 1e-4))\r\n {\r\n this.WriteAllObjectRecord();\r\n this._EndPoint.copy(p);\r\n this.Update();\r\n }\r\n }\r\n\r\n //#region Draw\r\n InitDrawObject(renderType: RenderType = RenderType.Wireframe)\r\n {\r\n let obj = new Object3D();\r\n return obj;\r\n }\r\n\r\n UpdateDrawObject(type: RenderType, obj: Object3D)\r\n {\r\n }\r\n //#endregion\r\n\r\n //#region -------------------------File-------------------------\r\n //对象从文件中读取数据,初始化自身\r\n protected _ReadFile(file: CADFiler)\r\n {\r\n let ver = file.Read();\r\n super._ReadFile(file);\r\n\r\n this._StartPoint.set(file.Read(), file.Read(), 0);\r\n this._EndPoint.set(file.Read(), file.Read(), 0);\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(1);\r\n super.WriteFile(file);\r\n\r\n file.Write(this._StartPoint.x);\r\n file.Write(this._StartPoint.y);\r\n\r\n file.Write(this._EndPoint.x);\r\n file.Write(this._EndPoint.y);\r\n }\r\n //局部撤销\r\n ApplyPartialUndo(undoData: CADObject)\r\n {\r\n super.ApplyPartialUndo(undoData);\r\n }\r\n //#endregion\r\n\r\n}\r\n\r\n//@ts-ignore\r\nexport interface RoomHoleLine extends RoomBase, Line { }\r\n\r\napplyMixins(RoomHoleLine, Line);\r\n","import { Factory } from \"../../CADFactory\";\r\nimport { CADFiler } from \"../../CADFiler\";\r\nimport { Board } from \"../../Entity/Board\";\r\nimport { ObjectId } from \"../../ObjectId\";\r\nimport { TemplateAction } from \"./TemplateAction\";\r\n\r\nexport enum ThicknessDirection\r\n{\r\n Center = 0,\r\n Back = 1,\r\n Front = 2,\r\n}\r\n\r\nexport interface ThicknessActionData\r\n{\r\n //方向\r\n Direction: ThicknessDirection;\r\n /**\r\n * 附加的动作\r\n */\r\n Actions: TemplateAction[];\r\n}\r\n\r\n/**\r\n * 模版动作\r\n */\r\n@Factory\r\nexport class TempateThicknessAction extends TemplateAction\r\n{\r\n EntityDirectionMap: Map = new Map();\r\n protected _Update(paramDiff: number, newValue: number)\r\n {\r\n for (let [id, d] of this.EntityDirectionMap)\r\n {\r\n if (!id || id.IsErase) continue;\r\n\r\n let br = id.Object as Board;\r\n\r\n br.Thickness += paramDiff;\r\n if (d.Direction === ThicknessDirection.Back)\r\n br.Position = br.Position.sub(br.Normal.multiplyScalar(paramDiff));\r\n else if (d.Direction === ThicknessDirection.Center)\r\n br.Position = br.Position.sub(br.Normal.multiplyScalar(paramDiff * 0.5));\r\n\r\n for (let a of d.Actions)\r\n {\r\n a.parent = this.parent;\r\n a.Update(paramDiff, newValue);\r\n }\r\n }\r\n }\r\n\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 super.ReadFile(file);\r\n\r\n let count = file.Read() as number;\r\n this.EntityDirectionMap.clear();\r\n for (let i = 0; i < count; i++)\r\n {\r\n let id = file.ReadObjectId();\r\n let direction = file.Read() as ThicknessDirection;\r\n let actionsCount = file.Read() as number;\r\n let actions: TemplateAction[] = [];\r\n for (let j = 0; j < actionsCount; j++)\r\n {\r\n actions.push(file.ReadObject() as TemplateAction);\r\n }\r\n this.EntityDirectionMap.set(id, { Direction: direction, Actions: actions });\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\r\n file.Write(this.EntityDirectionMap.size);\r\n for (let [id, d] of this.EntityDirectionMap)\r\n {\r\n file.WriteObjectId(id);\r\n file.Write(d.Direction);\r\n file.Write(d.Actions.length);\r\n for (let a of d.Actions)\r\n file.WriteObject(a);\r\n }\r\n }\r\n}\r\n","import { Vector3 } from \"three\";\r\nimport { MoveMatrix } from \"../../../Geometry/GeUtils\";\r\nimport { Factory } from \"../../CADFactory\";\r\nimport { CADFiler } from \"../../CADFiler\";\r\nimport { Entity } from \"../../Entity/Entity\";\r\nimport { ObjectId } from \"../../ObjectId\";\r\nimport { TemplateAction } from \"./TemplateAction\";\r\n\r\n@Factory\r\nexport class TemplateMoveAction extends TemplateAction\r\n{\r\n\r\n constructor(public StretchDirection = new Vector3,\r\n public MoveEntitys: ObjectId[] = []\r\n )\r\n {\r\n super();\r\n }\r\n\r\n protected _CacheMoveVector: Vector3;\r\n protected _Update(paramDiff: number)\r\n {\r\n if (!this._CacheMoveVector) this._CacheMoveVector = new Vector3();\r\n\r\n this._CacheMoveVector.copy(this.StretchDirection).multiplyScalar(paramDiff);\r\n\r\n let moveMatrix = MoveMatrix(this._CacheMoveVector);\r\n for (let id of this.MoveEntitys)\r\n {\r\n if (id?.Object)\r\n {\r\n let ent = id.Object as Entity;\r\n ent.ApplyMatrix(moveMatrix);\r\n }\r\n }\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 super.ReadFile(file);\r\n this.StretchDirection.fromArray(file.Read());\r\n this.MoveEntitys.length = 0;\r\n let count = file.Read();\r\n for (let i = 0; i < count; i++)\r\n {\r\n let id = file.ReadObjectId();\r\n if (id) this.MoveEntitys.push(id);\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.StretchDirection.toArray());\r\n file.Write(this.MoveEntitys.length);\r\n for (let ent of this.MoveEntitys)\r\n file.WriteObjectId(ent);\r\n }\r\n}\r\n","import { arrayClone } from \"../../../Common/ArrayExt\";\r\nimport { GetBoardHighSeal, GetBoardSealingCurves, HandleRectBoardSealingData } from \"../../../GraphicsSystem/CalcEdgeSealing\";\r\nimport { Factory } from \"../../CADFactory\";\r\nimport { CADFiler } from \"../../CADFiler\";\r\nimport { Board } from \"../../Entity/Board\";\r\nimport { ObjectId } from \"../../ObjectId\";\r\nimport { TemplateAction } from \"./TemplateAction\";\r\n\r\n/**\r\n * 设置封边动作\r\n */\r\n@Factory\r\nexport class TemplateSetSealAction extends TemplateAction\r\n{\r\n EntitySealIndexsMap: {\r\n entity: ObjectId;\r\n indexs: number[];\r\n }[] = [];\r\n\r\n protected override _Update(diff: number, newV: number)\r\n {\r\n for (let { entity, indexs } of this.EntitySealIndexsMap)\r\n {\r\n if (entity?.Object && !entity.IsErase)\r\n {\r\n let br = entity.Object;\r\n let highSealData = GetBoardSealingCurves(br, true);\r\n let highseals = GetBoardHighSeal(br, highSealData);\r\n\r\n for (let i of indexs)\r\n {\r\n if (highseals[i])\r\n highseals[i].size = newV;\r\n }\r\n\r\n HandleRectBoardSealingData(br, highseals, highSealData);\r\n br.BoardProcessOption.highSealed = highseals;\r\n }\r\n }\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 super.ReadFile(file);\r\n this.EntitySealIndexsMap.length = 0;\r\n let count = file.Read() as number;\r\n for (let i = 0; i < count; i++)\r\n {\r\n let entity = file.ReadObjectId() as ObjectId;\r\n let indexs = file.Read();\r\n if (entity) this.EntitySealIndexsMap.push({ entity, indexs });\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.EntitySealIndexsMap.length);\r\n for (let d of this.EntitySealIndexsMap)\r\n {\r\n file.WriteObjectId(d.entity);\r\n file.Write(arrayClone(d.indexs));\r\n }\r\n }\r\n}\r\n","import { arrayClone } from \"../../../Common/ArrayExt\";\r\nimport { Factory } from \"../../CADFactory\";\r\nimport { CADFiler } from \"../../CADFiler\";\r\nimport { Entity } from \"../../Entity/Entity\";\r\nimport { ObjectId } from \"../../ObjectId\";\r\nimport { TemplateMoveAction } from \"./TemplateMoveAction\";\r\n\r\n/**\r\n * Stretch夹点动作\r\n */\r\n@Factory\r\nexport class TemplateStretchGripAction extends TemplateMoveAction\r\n{\r\n EntityStretchPointMap: {\r\n entity: ObjectId;\r\n indexs: number[];\r\n }[] = [];\r\n\r\n protected _Update(dist: number)\r\n {\r\n super._Update(dist);\r\n for (let { entity, indexs } of this.EntityStretchPointMap)\r\n {\r\n if (entity?.Object)\r\n {\r\n let ent = entity.Object as Entity;\r\n ent.MoveStretchPoints(indexs, this._CacheMoveVector);\r\n }\r\n }\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 super.ReadFile(file);\r\n this.EntityStretchPointMap.length = 0;\r\n let count = file.Read() as number;\r\n for (let i = 0; i < count; i++)\r\n {\r\n let entity = file.ReadObjectId();\r\n let indexs = file.Read();\r\n if (entity) this.EntityStretchPointMap.push({ entity, indexs });\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.EntityStretchPointMap.length);\r\n for (let d of this.EntityStretchPointMap)\r\n {\r\n file.WriteObjectId(d.entity);\r\n file.Write(arrayClone(d.indexs));\r\n }\r\n }\r\n}\r\n","import { Box3, Vector3 } from \"three\";\r\nimport { Factory } from \"../../CADFactory\";\r\nimport { CADFiler } from \"../../CADFiler\";\r\nimport { Entity } from \"../../Entity/Entity\";\r\nimport { ObjectId } from \"../../ObjectId\";\r\nimport { TemplateMoveAction } from \"./TemplateMoveAction\";\r\n\r\n/**\r\n * 拽拖比例盒子动作\r\n */\r\n@Factory\r\nexport class TemplateStretchScaleBoxAction extends TemplateMoveAction\r\n{\r\n /**\r\n * 正常不会直接修改下面的2个属性,如果真的需要修改,请调用 `this.WriteAllObjectRecord`;\r\n * 避免历史记录没有记录更新.\r\n */\r\n constructor(\r\n public StretchDirection: Vector3 = new Vector3(),\r\n public EntityStretchData: { entity: ObjectId; scaleBox: Box3; }[] = []\r\n )\r\n {\r\n super();\r\n }\r\n\r\n protected _Update(dist: number)\r\n {\r\n super._Update(dist);\r\n\r\n for (let { entity, scaleBox } of this.EntityStretchData)\r\n {\r\n if (!entity || entity.IsErase) continue;\r\n\r\n let ent = entity.Object as Entity;\r\n let pts = ent.GetStretchPoints();\r\n let ocsInv = ent.OCSInv;\r\n let entityBox = ent.BoundingBoxInOCS;\r\n let size = entityBox.getSize(new Vector3());\r\n scaleBox = scaleBox.clone();\r\n scaleBox.min.multiply(size).sub(new Vector3(1, 1, 1));\r\n scaleBox.max.multiply(size).add(new Vector3(1, 1, 1));\r\n let stretchIndexs: number[] = [];\r\n for (let i = 0, length = pts.length; i < length; i++)\r\n {\r\n let p = pts[i];\r\n p.applyMatrix4(ocsInv);\r\n if (scaleBox.containsPoint(p))\r\n stretchIndexs.push(i);\r\n }\r\n ent.MoveStretchPoints(stretchIndexs, this._CacheMoveVector);\r\n }\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 super.ReadFile(file);\r\n this.EntityStretchData.length = 0;\r\n let count = file.Read() as number;\r\n for (let i = 0; i < count; i++)\r\n {\r\n let entity = file.ReadObjectId();\r\n let min = new Vector3().fromArray(file.Read());\r\n let max = new Vector3().fromArray(file.Read());\r\n this.EntityStretchData.push({ entity, scaleBox: new Box3(min, max) });\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.EntityStretchData.length);\r\n for (let d of this.EntityStretchData)\r\n {\r\n file.WriteObjectId(d.entity);\r\n file.Write(d.scaleBox.min.toArray());\r\n file.Write(d.scaleBox.max.toArray());\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * 拽拖固定大小盒子动作(弃用)\r\n */\r\n/*\r\nclass TemplateStretchSizeBoxAction extends TemplateAction\r\n{\r\n StretchDirection: Vector3;\r\n\r\n EntityStretchPointMap: { entity: Entity, sizeBox: Box3 }[];\r\n}\r\n*/\r\n","import { Vector3 } from \"three\";\r\nimport { AutoRecord } from \"../../AutoRecord\";\r\nimport { Factory } from \"../../CADFactory\";\r\nimport { CADFiler } from \"../../CADFiler\";\r\nimport { Board } from \"../../Entity/Board\";\r\nimport { ObjectId } from \"../../ObjectId\";\r\nimport { Positioning } from \"./Positioning\";\r\n\r\n@Factory\r\nexport class PositioningBoardSpace extends Positioning\r\n{\r\n @AutoRecord ObjectId: ObjectId;\r\n /**\r\n * 定位\r\n */\r\n async Positioning()\r\n {\r\n this.SpaceCS = undefined;\r\n this.SpaceSize = undefined;\r\n\r\n if (this.ObjectId && !this.ObjectId.IsErase)\r\n {\r\n let ent = this.ObjectId.Object as Board;\r\n this.SpaceCS = ent.OCS;\r\n this.SpaceSize = new Vector3(ent.Width, ent.Height, ent.Thickness);\r\n }\r\n }\r\n\r\n //#region File\r\n ReadFile(file: CADFiler): void\r\n {\r\n let ver = file.Read();\r\n this.ObjectId = file.ReadObjectId();\r\n }\r\n\r\n WriteFile(file: CADFiler): void\r\n {\r\n file.Write(1);\r\n file.WriteObjectId(this.ObjectId);\r\n }\r\n //#endregion\r\n\r\n}\r\n","import { ExtendsBoardThickness } from \"../../../Add-on/DrawBoard/BuildBoardTool\";\r\nimport { EBoardKeyList } from \"../../../Common/BoardKeyList\";\r\nimport { ISpaceParse } from \"../../../Geometry/SpaceParse/ISpaceParse\";\r\nimport { BoardConfigOption, BoardProcessOption } from \"../../../UI/Store/BoardInterface\";\r\nimport { AutoRecord } from \"../../AutoRecord\";\r\nimport { Factory } from \"../../CADFactory\";\r\nimport { CADFiler } from \"../../CADFiler\";\r\nimport { Board } from \"../../Entity/Board\";\r\nimport { Entity } from \"../../Entity/Entity\";\r\nimport { TemplateRecord } from \"../TemplateRecord\";\r\n\r\n/**\r\n * 板件模板的基类.(层板,立板,背板)\r\n */\r\n@Factory\r\nexport class TemplateBoardRecord extends TemplateRecord\r\n{\r\n //板件初始化的时候需要设置周围板件的数据,通常只有一次\r\n UseBoardProcessOption = false;\r\n BoardProcessOption: BoardProcessOption;\r\n\r\n @AutoRecord DrawBoardCount = 1;\r\n\r\n protected _option: BoardConfigOption;\r\n // InitBaseParams()\r\n // {\r\n // super.InitBaseParams();\r\n // return this;\r\n // }\r\n get Option()\r\n {\r\n return Object.assign({}, this._option);\r\n }\r\n set Option(option: BoardConfigOption)\r\n {\r\n this.WriteAllObjectRecord();\r\n Object.assign(this._option, option);\r\n ExtendsBoardThickness(this, option.thickness);\r\n }\r\n protected GeneralBoardList(space: ISpaceParse): Board[]\r\n {\r\n return [];\r\n }\r\n\r\n Purge()\r\n {\r\n super.Purge();\r\n if (this.Objects.length === 0)\r\n this.IsClear = true;\r\n }\r\n\r\n protected async Update()\r\n {\r\n await super.Update();\r\n if (this.IsClear) return;\r\n\r\n let thickness = this.GetParam(\"BH\")?.value as number;\r\n if (thickness)\r\n this._option.thickness = thickness;\r\n let nbrs = this.GeneralBoardList(this.SpaceParse);\r\n\r\n let sbrs = this.PositioningSupportBoards;\r\n\r\n if (this.BoardProcessOption)\r\n {\r\n for (let br of nbrs)\r\n br.BoardProcessOption = this.BoardProcessOption;\r\n this.BoardProcessOption = undefined;\r\n }\r\n if (this.UseBoardProcessOption && sbrs.length > 0)\r\n {\r\n let cname = sbrs[0].BoardProcessOption[EBoardKeyList.CabinetName];\r\n let rname = sbrs[0].BoardProcessOption[EBoardKeyList.RoomName];\r\n for (let br of nbrs)\r\n {\r\n br.BoardProcessOption[EBoardKeyList.CabinetName] = cname;\r\n br.BoardProcessOption[EBoardKeyList.RoomName] = rname;\r\n }\r\n\r\n this.UseBoardProcessOption = false;\r\n }\r\n\r\n let refBr: Board;\r\n if (this.Objects.length > 0)\r\n refBr = this.Objects[0].Object as Board;\r\n\r\n for (let i = nbrs.length; i < this.Objects.length; i++)\r\n this.Objects[i].Object.Erase();\r\n\r\n for (let i = 0; i < nbrs.length; i++)\r\n {\r\n if (i < this.Objects.length)\r\n {\r\n let br = this.Objects[i].Object as Board;\r\n if (i >= this.DrawBoardCount)\r\n br.Erase(false);\r\n br.Position = nbrs[i].Position;\r\n br.Width = nbrs[i].Width;\r\n br.Height = nbrs[i].Height;\r\n br.Thickness = nbrs[i].Thickness;\r\n }\r\n else\r\n {\r\n if (refBr)\r\n {\r\n nbrs[i].ContourCurve = refBr.ContourCurve.Clone();\r\n nbrs[i].BoardProcessOption = refBr.BoardProcessOption;\r\n }\r\n this._db.ModelSpace.Append(nbrs[i]);\r\n this.Objects.push(nbrs[i].Id);\r\n }\r\n }\r\n this.DrawBoardCount = nbrs.length;\r\n\r\n //保持SpaceCS\r\n for (let id of this.Objects)\r\n {\r\n if (id && !id.IsErase)\r\n (id.Object as Entity).SpaceOCS = this._CacheSpaceCS;\r\n }\r\n }\r\n\r\n ReadFile(file: CADFiler)\r\n {\r\n let ver = file.Read();\r\n super.ReadFile(file);\r\n this.DrawBoardCount = file.Read();\r\n }\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(1);\r\n super.WriteFile(file);\r\n file.Write(this.DrawBoardCount);\r\n }\r\n}\r\n","import { BuildBehindBoards } from \"../../../Add-on/DrawBoard/BuildBoardTool\";\r\nimport { ISpaceParse } from \"../../../Geometry/SpaceParse/ISpaceParse\";\r\nimport { BehindBoardOption, IGrooveOption } from \"../../../UI/Store/BoardInterface\";\r\nimport { Factory } from \"../../CADFactory\";\r\nimport { TemplateBoardRecord } from \"./TemplateBoard\";\r\nimport { DefaultBehindBoardConfig } from \"../../../Editor/DefaultConfig\";\r\nimport { CADFiler } from \"../../CADFiler\";\r\n\r\n/**\r\n * 背板模板\r\n */\r\n@Factory\r\nexport class TemplateBehindBoard extends TemplateBoardRecord\r\n{\r\n protected _option: BehindBoardOption = { ...DefaultBehindBoardConfig };\r\n private grooveoption: IGrooveOption = {\r\n grooveAddLength: \"0\",\r\n grooveAddWidth: \"0\",\r\n grooveAddDepth: \"0\",\r\n knifeRadius: \"3\",\r\n };\r\n constructor()\r\n {\r\n super();\r\n this.name = \"背板(自动)\";\r\n }\r\n set Grooveoption(option: IGrooveOption)\r\n {\r\n this.WriteAllObjectRecord();\r\n Object.assign(this.grooveoption, option);\r\n }\r\n GeneralBoardList(space: ISpaceParse)\r\n {\r\n return BuildBehindBoards(this._option, space, this.grooveoption);\r\n }\r\n ReadFile(file: CADFiler)\r\n {\r\n let ver = file.Read();\r\n super.ReadFile(file);\r\n this._option.type = file.Read();\r\n this._option.name = file.Read();\r\n this._option.leftExt = file.Read();\r\n this._option.rightExt = file.Read();\r\n this._option.topExt = file.Read();\r\n this._option.bottomExt = file.Read();\r\n this._option.thickness = file.Read();\r\n this._option.boardPosition = file.Read();\r\n this._option.calcHeight = file.Read();\r\n this._option.moveDist = file.Read();\r\n this._option.boardRelative = file.Read();\r\n this._option.spaceSize = file.Read();\r\n this._option.count = file.Read();\r\n\r\n this.grooveoption.grooveAddLength = file.Read();\r\n this.grooveoption.grooveAddWidth = file.Read();\r\n this.grooveoption.grooveAddDepth = file.Read();\r\n this.grooveoption.knifeRadius = file.Read();\r\n\r\n if (ver === 1)\r\n {\r\n this._option.calcSpaceSize = this._option.spaceSize.toString();\r\n this._option.calcMoveDist = this._option.moveDist.toString();\r\n }\r\n\r\n if (ver >= 2)\r\n {\r\n this._option.calcSpaceSize = file.Read();\r\n this._option.calcMoveDist = file.Read();\r\n }\r\n\r\n }\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(2);\r\n super.WriteFile(file);\r\n file.Write(this._option.type);\r\n file.Write(this._option.name);\r\n file.Write(this._option.leftExt);\r\n file.Write(this._option.rightExt);\r\n file.Write(this._option.topExt);\r\n file.Write(this._option.bottomExt);\r\n file.Write(this._option.thickness);\r\n file.Write(this._option.boardPosition);\r\n file.Write(this._option.calcHeight);\r\n file.Write(this._option.moveDist);\r\n file.Write(this._option.boardRelative);\r\n file.Write(this._option.spaceSize);\r\n file.Write(this._option.count);\r\n\r\n file.Write(this.grooveoption.grooveAddLength);\r\n file.Write(this.grooveoption.grooveAddWidth);\r\n file.Write(this.grooveoption.grooveAddDepth);\r\n file.Write(this.grooveoption.knifeRadius);\r\n\r\n file.Write(this._option.calcSpaceSize);\r\n file.Write(this._option.calcMoveDist);\r\n\r\n }\r\n}\r\n","import { BufferGeometry, Object3D, Points, PointsMaterial } from 'three';\r\nimport { DisposeThreeObj } from '../Common/Dispose';\r\nimport { GetEntity, IsEntity } from '../Common/Utils';\r\nimport { BufferGeometryUtils } from '../Geometry/BufferGeometryUtils';\r\n\r\nexport class GripScene extends Object3D\r\n{\r\n\r\n _GripMaterial: PointsMaterial;\r\n\r\n _GripMap = new Map();\r\n constructor()\r\n {\r\n super();\r\n this._GripMaterial = new PointsMaterial({\r\n size: 15,\r\n color: 0x001dfa,\r\n sizeAttenuation: false\r\n });\r\n }\r\n //增加\r\n Append(obj: Object3D)\r\n {\r\n if (this._GripMap.has(obj))\r\n return;\r\n\r\n if (IsEntity(obj))\r\n {\r\n let en = GetEntity(obj);\r\n let pts = en.GetGripPoints();\r\n if (pts.length > 1000) return;//显示太多的夹点会导致性能过低\r\n let geo = BufferGeometryUtils.CreateFromPts(pts);\r\n let ptsObj = new Points(geo, this._GripMaterial);\r\n ptsObj.userData.Entity = en;\r\n this.add(ptsObj);\r\n this._GripMap.set(obj, ptsObj);\r\n }\r\n }\r\n Remove(obj: Object3D)\r\n {\r\n let pts = this._GripMap.get(obj);\r\n if (pts)\r\n {\r\n DisposeThreeObj(pts);\r\n this.remove(pts);\r\n this._GripMap.delete(obj);\r\n }\r\n }\r\n\r\n //删除所有.\r\n Clear()\r\n {\r\n for (let [, pts] of this._GripMap)\r\n {\r\n this.remove(pts);\r\n pts.geometry.dispose();\r\n }\r\n this._GripMap.clear();\r\n }\r\n Update(entity: Object3D)\r\n {\r\n this.Remove(entity);\r\n this.Append(entity);\r\n }\r\n UpdateAll()\r\n {\r\n for (let [obj, ptsObj] of this._GripMap)\r\n {\r\n if (obj.parent && obj.visible)\r\n {\r\n let en = GetEntity(obj);\r\n let geo = ptsObj.geometry as BufferGeometry;\r\n let pts = en.GetGripPoints();\r\n if (!BufferGeometryUtils.UpdatePts(geo, pts))\r\n {\r\n geo.dispose();\r\n ptsObj.geometry = BufferGeometryUtils.CreateFromPts(pts);\r\n }\r\n }\r\n else\r\n {\r\n this.Remove(obj);\r\n }\r\n }\r\n }\r\n}\r\n","import { Object3D } from \"three\";\r\nimport { GetEntity } from \"../Common/Utils\";\r\nimport { Entity } from \"../DatabaseServices/Entity/Entity\";\r\nimport { GripScene } from \"../GraphicsSystem/GripScene\";\r\n\r\nexport interface Filter\r\n{\r\n //需要过滤的图元类型,如[Line,Arc]].\r\n filterTypes?: any[];\r\n filterFunction?: (obj: Object3D, ent?: Entity) => boolean;\r\n /**\r\n * 过滤掉已经被删除的图元或者未加入到数据库的图元\r\n */\r\n filterErase?: boolean;\r\n}\r\n\r\nexport function CheckFilter(obj: Object3D, filter?: Filter)\r\n{\r\n if (!obj.visible || obj instanceof GripScene)\r\n return false;\r\n if (!filter)\r\n return true;\r\n\r\n let ent = GetEntity(obj);\r\n if (filter.filterErase && (!ent || ent.Id === undefined || ent.IsErase))\r\n return false;\r\n\r\n if (filter.filterFunction && !filter.filterFunction(obj, ent))\r\n return false;\r\n if (filter.filterTypes && filter.filterTypes.some(T => ent instanceof T) !== true)\r\n return false;\r\n return true;\r\n}\r\n","import { Box2, Matrix4, Object3D, OrthographicCamera, PerspectiveCamera, Vector2, Vector3 } from 'three';\r\nimport { BoxCheckIntersect } from '../Geometry/CheckIntersect';\r\nimport { IViewer } from '../GraphicsSystem/IView';\r\nimport { SelectSetBase } from './SelectBase';\r\n\r\n//https://knowledge.autodesk.com/search-result/caas/CloudHelp/cloudhelp/2015/ENU/AutoCAD-AutoLISP/files/GUID-0F37CC5E-1559-4011-B8CF-A3BA0973B2C3-htm.html\r\nexport enum SelectType\r\n{\r\n None = 0,\r\n C = 1,//Crossing selection.\r\n W = 2 //Window selection.\r\n}\r\n\r\n/**\r\n * 矩形选区\r\n * 如果图形无法选择,那么注意该图形是否调用计算图形的包围球.\r\n */\r\nexport class SelectBox extends SelectSetBase\r\n{\r\n\r\n private _SelectBox: Box2 = new Box2();\r\n private _BoxCheck: BoxCheckIntersect;\r\n _SelectType: SelectType;\r\n _bIsPerCamera: boolean;\r\n\r\n constructor(view: IViewer, p1: Vector2, p2: Vector2, selectType?: SelectType)\r\n {\r\n super(view);\r\n this._SelectBox.setFromPoints([p1, p2]);\r\n this._SelectBox.max.add(new Vector2(1, 1));//避免盒子为空\r\n this._BoxCheck = new BoxCheckIntersect(this._SelectBox);\r\n this._SelectType = selectType;\r\n\r\n let camera = this._Viewer.Camera;\r\n if (camera instanceof OrthographicCamera || camera instanceof PerspectiveCamera)\r\n {\r\n let size = this._SelectBox.getSize(new Vector2());\r\n\r\n camera.setViewOffset(view.Width, view.Height, this._SelectBox.min.x, this._SelectBox.min.y, size.x, size.y);\r\n camera.updateProjectionMatrix();\r\n\r\n let _projScreenMatrix = new Matrix4();\r\n _projScreenMatrix.multiplyMatrices(camera.projectionMatrix, camera.matrixWorldInverse);\r\n\r\n this._Frustum.setFromProjectionMatrix(_projScreenMatrix);\r\n\r\n camera.clearViewOffset();\r\n }\r\n }\r\n\r\n get SelectBox()\r\n {\r\n return this._SelectBox;\r\n }\r\n\r\n //重载\r\n CheckSelectTraverse(obj: Object3D): boolean\r\n {\r\n if (!obj.visible) return false;\r\n\r\n if (this._SelectType === SelectType.C)\r\n {\r\n let isSelect = false;\r\n const traverse = (o: Object3D) =>\r\n {\r\n if (!o.visible) return;\r\n\r\n isSelect = this.CheckSelectC(o);\r\n if (isSelect) return;\r\n for (let c of o.children)\r\n {\r\n traverse(c);\r\n if (isSelect) return;\r\n }\r\n };\r\n\r\n traverse(obj);\r\n\r\n return isSelect;\r\n }\r\n else\r\n {\r\n //对于窗选,需要所有的实体都被包含才能被选中,所以这里区分了三个状态,0,-1,1,必须要有1,并且没有-1才行\r\n let isSelect = 0;//0表示没有被选中 1表示有被选中 -1表示选不重 某些东西没有几何体,返回0\r\n const traverse = (o: Object3D) =>\r\n {\r\n if (!o.visible) return;\r\n\r\n let isSelectObject = this.CheckSelectW(o);\r\n if (isSelectObject === 1)\r\n isSelect = isSelectObject;\r\n else if (isSelectObject === -1)\r\n {\r\n isSelect = isSelectObject;\r\n return;\r\n }\r\n\r\n for (let c of o.children)\r\n {\r\n traverse(c);\r\n if (isSelect === -1) return;\r\n }\r\n };\r\n\r\n traverse(obj);\r\n\r\n return isSelect === 1;\r\n }\r\n }\r\n\r\n private CheckSelectC(obj: Object3D): boolean\r\n {\r\n //@ts-ignore\r\n if (!obj.geometry || !this.FrustomIntersectObject(obj))\r\n return false;\r\n\r\n return this.IntersectObject(obj);\r\n }\r\n\r\n private CheckSelectW(obj: Object3D): 0 | -1 | 1\r\n {\r\n //@ts-ignore\r\n if (!obj.geometry || !this.FrustomIntersectObject(obj))\r\n return 0;\r\n\r\n return this.ContainerObject(obj);\r\n }\r\n\r\n //重载\r\n IntersectLine(p1Screen: Vector3, p2Screen: Vector3): boolean\r\n {\r\n return this._BoxCheck.IsIntersectLine(p1Screen, p2Screen);\r\n }\r\n /**\r\n * 包含该对象. 采用所有点都在选区内的做法\r\n */\r\n ContainerObject(obj: Object3D): 1 | -1\r\n {\r\n let { pts, } = this.GetObjectVertices(obj);\r\n if (pts.length === 0)\r\n return -1;\r\n for (let p of pts)\r\n {\r\n if (!this.ContainsPoint(p))\r\n return -1;\r\n }\r\n return 1;\r\n }\r\n //选择框包含该顶点\r\n ContainsPoint(ptWcs: Vector3): boolean\r\n {\r\n return this._Frustum.containsPoint(ptWcs);\r\n }\r\n}\r\n","import { Intersection, Object3D, OrthographicCamera, Raycaster, Vector2, Vector3 } from 'three';\r\nimport { HostApplicationServices } from '../ApplicationServices/HostApplicationServices';\r\nimport { equaln } from '../Geometry/GeUtils';\r\nimport { IViewer } from '../GraphicsSystem/IView';\r\nimport { SelectBox, SelectType } from './SelectBox';\r\nimport { CheckFilter, Filter } from './SelectFilter';\r\n\r\n/**\r\n * 构造射线投射器.\r\n * @param {Vector3} ptVcs 屏幕坐标系的点\r\n */\r\nexport function GenerateRaycaster(ptVcs: Vector3, view: IViewer): Raycaster\r\n{\r\n let raycaster = new Raycaster();\r\n raycaster.setFromCamera({\r\n x: (ptVcs.x / view.Width) * 2 - 1, //-1 到 1 所以 (x-(w/2))/(w/2) =>\r\n y: - (ptVcs.y / view.Height) * 2 + 1 //y轴相反\r\n }, view.Camera);\r\n if (view.Camera instanceof OrthographicCamera)\r\n raycaster.ray.origin.sub(raycaster.ray.direction.clone().multiplyScalar(1e6));\r\n return raycaster;\r\n}\r\n\r\nlet boxSize = new Vector2;\r\nlet pCenter = new Vector2;\r\n\r\n/**\r\n * 根据鼠标位置确定鼠标范围内选中的实体.\r\n * @param {Vector3} ptVcs 鼠标的屏幕点\r\n * @param {IViewer} view 指定视图\r\n * @param {Object3D} [selectObject] 选择的对象. 如果为空则为app.view.scene\r\n * @param {Boolean} selectBoxGetLastestEn 点选曲线和点时是否选取最后创建的 默认true\r\n * @returns {Object3D[]} 返回选择到的对象,注意该返回的对象并不会得到它的子对象.\r\n */\r\nexport function PointPick(ptVcs: Vector3,\r\n view: IViewer,\r\n filter?: Filter,\r\n selectObjects: Object3D[] = view.Scene.children,\r\n selectSize = 10\r\n): Object3D[]\r\n{\r\n let raycaster = GenerateRaycaster(ptVcs, view);\r\n\r\n let intersection = Raycast(raycaster, selectObjects, filter);\r\n if (intersection && intersection.object)\r\n return [intersection.object];\r\n\r\n pCenter.set(ptVcs.x, ptVcs.y);\r\n boxSize.set(selectSize, selectSize);\r\n let minPt = pCenter.clone().sub(boxSize);\r\n let maxPt = pCenter.clone().add(boxSize);\r\n\r\n let selectBox = new SelectBox(view, minPt, maxPt, SelectType.C);\r\n selectBox.Select(selectObjects, filter);\r\n\r\n return [...selectBox._SelectList];\r\n}\r\n\r\nexport function PointPickOneObject(\r\n ptVcs: Vector3,\r\n view: IViewer,\r\n filter?: Filter,\r\n selectObjects: Object3D[] = view.Scene.children,\r\n useSelectBox = true\r\n): Object3D | undefined\r\n{\r\n let raycaster = GenerateRaycaster(ptVcs, view);\r\n\r\n let intersection = Raycast(raycaster, selectObjects, filter);\r\n if (intersection && intersection.object)\r\n return intersection.object;\r\n\r\n if (!useSelectBox) return;\r\n\r\n let pCenter = new Vector2(ptVcs.x, ptVcs.y);\r\n let selectSize = new Vector2(HostApplicationServices.cursorSize.SquareSize, HostApplicationServices.cursorSize.SquareSize);\r\n let minPt = pCenter.clone().sub(selectSize);\r\n let maxPt = pCenter.clone().add(selectSize);\r\n\r\n let selectBox = new SelectBox(view, minPt, maxPt, SelectType.C);\r\n selectBox.Select(selectObjects, filter);\r\n\r\n if (selectBox.SelectEntityList.length > 0)\r\n {\r\n let maxId = -Infinity;\r\n let object: Object3D;\r\n for (let o of selectBox._SelectList)\r\n {\r\n if (o.id > maxId)\r\n {\r\n maxId = o.id;\r\n object = o;\r\n }\r\n }\r\n return object;\r\n }\r\n}\r\n\r\nexport function Raycast(ray: Raycaster, objectCol: Object3D[], filter?: Filter): Intersection | undefined\r\n{\r\n let pick: Intersection;\r\n\r\n for (let obj of objectCol)\r\n {\r\n if (!CheckFilter(obj, filter))\r\n continue;\r\n\r\n let intersects: Intersection[] = [];\r\n obj.traverse(o =>\r\n {\r\n //@ts-ignore\r\n if (intersects.length === 0 && o.visible && !o.isLine && !o.isPoints)\r\n o.raycast(ray, intersects);\r\n });\r\n if (intersects.length > 0)\r\n {\r\n for (let i of intersects)\r\n {\r\n if (!pick\r\n || pick.distance > i.distance\r\n || (equaln(pick.distance, i.distance) && pick.object.id < i.object.id))\r\n {\r\n pick = i;\r\n pick.object = obj;\r\n }\r\n }\r\n }\r\n }\r\n return pick;\r\n}\r\n","import { Box2, Box3, Intersection, Matrix4, Object3D, Raycaster, Vector2, Vector3 } from \"three\";\r\nimport { GetEntity } from \"../../Common/Utils\";\r\nimport { CylinderHole, GangDrillType } from \"../../DatabaseServices/3DSolid/CylinderHole\";\r\nimport { Contour } from \"../../DatabaseServices/Contour\";\r\nimport { Board } from \"../../DatabaseServices/Entity/Board\";\r\nimport { Polyline } from \"../../DatabaseServices/Entity/Polyline\";\r\nimport { ObjectId } from \"../../DatabaseServices/ObjectId\";\r\nimport { Shape } from \"../../DatabaseServices/Shape\";\r\nimport { Raycast } from \"../../Editor/PointPick\";\r\nimport { BoardFaceType, BoardGetFace } from \"../../Geometry/DrillParse/BoardGetFace\";\r\nimport { Face } from \"../../Geometry/DrillParse/Face\";\r\nimport { angleTo, AsVector2, equaln, equalv3, isParallelTo, MoveMatrix } from \"../../Geometry/GeUtils\";\r\nimport { RenderType } from \"../../GraphicsSystem/RenderType\";\r\nimport { INailRule, IShinkOption, LayerNailOption } from \"../../UI/Store/BoardInterface\";\r\n\r\nclass ActivityLayerBoardTool\r\n{\r\n NailRules: INailRule[];\r\n private GetBoardIntersection(face: Face, objects: Object3D[], br: Board)\r\n {\r\n for (let s of [0.5, 0.1, 0.9])\r\n {\r\n let center = new Vector3(face.Length * s, face.Width * s).applyMatrix4(face.OCS).add(face.Normal.negate());\r\n\r\n let intersection = this.RayPoint(center, face.Normal, objects);\r\n if (intersection && intersection.object)\r\n {\r\n let en = GetEntity(intersection.object) as Board;\r\n if (en.BoardProcessOption.roomName === br.BoardProcessOption.roomName && en.BoardProcessOption.cabinetName === br.BoardProcessOption.cabinetName)\r\n return intersection;\r\n }\r\n }\r\n }\r\n private IntersectFace(otherBoard: Board, face: Face)\r\n {\r\n let size: Vector3 | Vector2 = new Vector3();\r\n let min = new Vector3();\r\n let diffMat = face.OCSInv.multiply(otherBoard.OCS);\r\n\r\n if (otherBoard.IsSpecialShape)\r\n {\r\n let rect = new Polyline().RectangleFrom2Pt(new Vector3(), new Vector3(face.Length, face.Width));\r\n let con = otherBoard.ContourCurve.Clone().ApplyMatrix(diffMat);\r\n con.Z0();\r\n let shape1 = new Shape(Contour.CreateContour([rect]));\r\n let shape2 = new Shape(Contour.CreateContour([con]));\r\n\r\n let shapes = shape1.IntersectionBoolOperation(shape2);\r\n if (shapes.length > 0)\r\n {\r\n let box = shapes[0].BoundingBox;\r\n min.copy(box.min);\r\n size = box.getSize(new Vector3);\r\n }\r\n }\r\n else\r\n {\r\n let b1 = new Box3(new Vector3(), new Vector3(otherBoard.Width, otherBoard.Height));\r\n b1.applyMatrix4(diffMat);\r\n\r\n let box = new Box2().setFromPoints([AsVector2(b1.min), AsVector2(b1.max)]);\r\n let box2 = new Box2(new Vector2(), new Vector2(face.Length, face.Width));\r\n\r\n box2.intersect(box);\r\n\r\n size = box2.getSize(new Vector2);\r\n min.set(box2.min.x, box2.min.y, 0);\r\n }\r\n\r\n face.Length = size.x;\r\n face.Width = size.y;\r\n face.OCS.multiply(MoveMatrix(min));\r\n }\r\n private GetShrinkDist(face: Face, br: Board, option: IShinkOption)\r\n {\r\n let fNoarmal = face.Normal;\r\n let xVec = new Vector3().setFromMatrixColumn(br.OCS, 0);\r\n let yVec = new Vector3().setFromMatrixColumn(br.OCS, 1);\r\n\r\n let shrink = 0;\r\n if (isParallelTo(fNoarmal, xVec))\r\n {\r\n if (equalv3(fNoarmal, xVec, 1e-5))\r\n shrink = option.back;\r\n else\r\n shrink = option.front;\r\n }\r\n else if (isParallelTo(fNoarmal, yVec))\r\n {\r\n if (equalv3(fNoarmal, yVec, 1e-5))\r\n shrink = option.left;\r\n else\r\n shrink = option.right;\r\n }\r\n return shrink;\r\n }\r\n private GetShrinkBoardIndexesMap(face: Face, br: Board, shrink: number, indexMap: Map)\r\n {\r\n if (shrink)\r\n {\r\n const FUZZ = 0.1;\r\n let scaleBox = new Box3().setFromPoints([new Vector3(-FUZZ, -FUZZ, -FUZZ), new Vector3(face.Length + FUZZ, face.Width + FUZZ, FUZZ)]).applyMatrix4(face.OCS);\r\n let pts = br.GetStretchPoints();\r\n let stretchIndexs: number[] = [];\r\n for (let i = 0, length = pts.length; i < length; i++)\r\n {\r\n let p = pts[i];\r\n if (scaleBox.containsPoint(p))\r\n stretchIndexs.push(i);\r\n }\r\n indexMap.set(face.Normal.negate().multiplyScalar(shrink), stretchIndexs);\r\n }\r\n }\r\n private GetRuleCount(width: number, rules: INailRule[])\r\n {\r\n if (this.NailRules)\r\n rules = this.NailRules;\r\n for (let rule of rules)\r\n {\r\n if (width > rule.startDist && width <= rule.endDist + 1e-6)\r\n {\r\n return rule.count;\r\n }\r\n }\r\n return 0;\r\n }\r\n private BuildNails(initNail: CylinderHole, nailOpt: LayerNailOption, face: Face, fYVec: Vector3)\r\n {\r\n let fXVec = new Vector3().setFromMatrixColumn(face.OCS, 0);\r\n let addCount = nailOpt.addCount;\r\n let count = nailOpt.count;\r\n let dist = nailOpt.dist;\r\n let frontDist = nailOpt.front;\r\n let backDist = nailOpt.behind;\r\n let singleDist: number;\r\n //绘制数量为1时,层板钉在中间位置\r\n if (count === 1)\r\n singleDist = face.Length / 2 - frontDist;\r\n else\r\n singleDist = (face.Length - frontDist - backDist) / (count - 1);\r\n\r\n let buildNails: CylinderHole[] = [];\r\n\r\n //构建层板钉\r\n for (let i = 0; i < count; i++)\r\n {\r\n if (count === 1)\r\n {\r\n initNail.ApplyMatrix(MoveMatrix(fXVec.multiplyScalar(singleDist)));\r\n buildNails.push(initNail);\r\n }\r\n else\r\n {\r\n let nail = initNail.Clone();\r\n nail.ApplyMatrix(MoveMatrix(fXVec.clone().multiplyScalar(i * singleDist)));\r\n buildNails.push(nail);\r\n }\r\n }\r\n\r\n //增加的层板钉\r\n let addNails: CylinderHole[] = [];\r\n for (let i = 1; i <= addCount; i++)\r\n {\r\n for (let nail of buildNails)\r\n {\r\n addNails.push(nail.Clone().ApplyMatrix(MoveMatrix(fYVec.clone().multiplyScalar(dist * i))));\r\n addNails.push(nail.Clone().ApplyMatrix(MoveMatrix(fYVec.clone().negate().multiplyScalar(dist * i))));\r\n }\r\n }\r\n buildNails.push(...addNails);\r\n return buildNails;\r\n }\r\n private RayPoint(p: Vector3, n: Vector3, brs: Object3D[]): Intersection\r\n {\r\n let ray = new Raycaster(p, n);\r\n let intersection = Raycast(ray, brs);\r\n return intersection;\r\n }\r\n Start(brs: Board[], nailOption: LayerNailOption, rules: INailRule[] = [], option?: IShinkOption)\r\n {\r\n if (brs.length === 0) return;\r\n\r\n let objects: Object3D[] = [];\r\n //如果层板和左右板得距离大于这个值,则这边不绘制层板钉\r\n let refDist = nailOption.length - nailOption.depth;\r\n\r\n for (let br of brs[0].Db.ModelSpace.Entitys)\r\n {\r\n if (!br.IsErase && br.Visible && br instanceof Board)\r\n {\r\n objects.push(br.GetDrawObjectFromRenderType(RenderType.Physical));\r\n }\r\n }\r\n for (let br of brs)\r\n {\r\n let faces = BoardGetFace.GetAllSidesFaces(br, true);\r\n let vecIndexMap: Map = new Map();\r\n let xVec = new Vector3().setFromMatrixColumn(br.OCS, 0);\r\n if (option?.name)\r\n br.Name = option.name;\r\n\r\n let nailBoardMap = new WeakMap();\r\n let allNails: CylinderHole[] = [];\r\n for (let face of faces)\r\n {\r\n if (face.type === BoardFaceType.Side)\r\n {\r\n let shrink = 0;\r\n if (option)\r\n {\r\n shrink = this.GetShrinkDist(face, br, option);\r\n this.GetShrinkBoardIndexesMap(face, br, shrink, vecIndexMap);\r\n }\r\n if (!nailOption.isDraw) continue;\r\n if (!nailOption.isInBack && isParallelTo(face.Normal, xVec)) continue;\r\n\r\n let intersection = this.GetBoardIntersection(face, objects, br);\r\n if (intersection)\r\n {\r\n //防止板件悬空 #I1DPHR\r\n if (intersection.distance - 1 + shrink >= refDist)\r\n continue;\r\n\r\n let otherBoard = GetEntity(intersection.object) as Board;\r\n\r\n this.IntersectFace(otherBoard, face);\r\n\r\n let nail = CylinderHole.CreateCylHole(nailOption.rad, nailOption.length, GangDrillType.Nail);\r\n nail.ColorIndex = 4;\r\n let fNor = face.Normal;\r\n let ang = -angleTo(fNor, otherBoard.Normal.negate());\r\n if (equaln(Math.abs(ang), Math.PI))\r\n ang = 0;\r\n\r\n let xDist = nailOption.front;\r\n let yDist = - nailOption.rad - shrink * Math.sin(ang);\r\n let zDist = 0;\r\n let zRoMat = new Matrix4().makeRotationX(ang);\r\n\r\n let p = new Vector3().setFromMatrixPosition(face.OCS.clone().multiply(zRoMat)).applyMatrix4(otherBoard.OCSInv);\r\n if (p.z < 1e-6)\r\n {\r\n zDist = -p.z;\r\n }\r\n else if (p.z > otherBoard.Thickness - 1e-6)\r\n {\r\n zDist = p.z - otherBoard.Thickness;\r\n }\r\n else\r\n {\r\n console.error(\"不该存在的情况\");\r\n }\r\n\r\n zDist += (- nail.Height + nailOption.depth);\r\n\r\n nail.Position = nail.Position.add(new Vector3(xDist, yDist, zDist));\r\n nail.ApplyMatrix(zRoMat).ApplyMatrix(face.OCS);\r\n\r\n if (option || this.NailRules)\r\n nailOption.count = this.GetRuleCount(face.Length, rules);\r\n\r\n let yVec = new Vector3().setFromMatrixColumn(otherBoard.OCS, 1);\r\n\r\n let nails = this.BuildNails(nail, nailOption, face, yVec);\r\n for (let nail of nails)\r\n nailBoardMap.set(nail, otherBoard);\r\n allNails.push(...nails);\r\n }\r\n }\r\n }\r\n this.AppendBoard(br, nailBoardMap, allNails);\r\n for (let [vec, indexes] of vecIndexMap)\r\n {\r\n br.MoveStretchPoints(indexes, vec);\r\n vec = null;\r\n }\r\n }\r\n this.NailRules = null;\r\n }\r\n private AppendBoard(br: Board, brNailMap: WeakMap, nails: CylinderHole[])\r\n {\r\n let oldNailIds = br.LayerNails.filter(n => n?.Object);\r\n this.HandleNailList(nails, oldNailIds, brNailMap);\r\n for (let i = nails.length; i < oldNailIds.length; i++)\r\n oldNailIds[i]?.Object?.Erase();\r\n for (let i = 0; i < nails.length; i++)\r\n {\r\n let nId: ObjectId;\r\n let otherBoard = brNailMap.get(nails[i]);\r\n if (i < oldNailIds.length && oldNailIds[i])\r\n {\r\n let nail = oldNailIds[i].Object as CylinderHole;\r\n if (nail.IsErase)\r\n nail.Erase(false);\r\n if (!equalv3(nail.Normal, nails[i].Normal))\r\n nail.OCS = nails[i].OCS;\r\n nail.Radius = nails[i].Radius;\r\n nail.Height = nails[i].Height;\r\n nail.Position = nails[i].Position;\r\n nId = nail.Id;\r\n\r\n if (nail.FId !== otherBoard.Id)\r\n {\r\n nail.FId = otherBoard.Id;\r\n otherBoard.AppendNails([nId]);\r\n }\r\n }\r\n else\r\n {\r\n br.Db.ModelSpace.Append(nails[i]);\r\n nId = nails[i].Id;\r\n br.AppendNails([nId]);\r\n nails[i].MId = br.Id;\r\n nails[i].FId = otherBoard.Id;\r\n otherBoard.AppendNails([nId]);\r\n }\r\n }\r\n }\r\n private HandleNailList(newNails: CylinderHole[], oldNails: ObjectId[], naiMap: WeakMap)\r\n {\r\n if (oldNails.length < newNails.length)\r\n {\r\n let temp: CylinderHole[] = [];\r\n for (let i = 0; i < oldNails.length; i++)\r\n {\r\n let nail = oldNails[i].Object as CylinderHole;\r\n if (newNails.length === 0) break;\r\n let j = 0;\r\n for (; j < newNails.length; j++)\r\n {\r\n let newNail = newNails[j] as CylinderHole;\r\n let otherBoard = naiMap.get(newNail);\r\n if (otherBoard.Id === nail.FId)\r\n break;\r\n }\r\n if (j < newNails.length)\r\n temp.push(...newNails.splice(j, 1));\r\n }\r\n newNails.unshift(...temp);\r\n }\r\n else\r\n {\r\n let temp: ObjectId[] = [];\r\n\r\n for (let i = 0; i < newNails.length; i++)\r\n {\r\n let nail = newNails[i];\r\n let otherBoard = naiMap.get(nail);\r\n let j = 0;\r\n for (; j < oldNails.length; j++)\r\n {\r\n let oldNail = oldNails[j].Object as CylinderHole;\r\n if (oldNail.FId === otherBoard.Id)\r\n break;\r\n }\r\n if (j < oldNails.length)\r\n temp.push(...oldNails.splice(j, 1));\r\n else\r\n temp.push(undefined); //不存在可以复用的层板钉,占个位 重新添加\r\n }\r\n oldNails.unshift(...temp);\r\n }\r\n }\r\n}\r\n\r\nexport const activityLayerBoardTool = new ActivityLayerBoardTool();\r\n","import { activityLayerBoardTool } from \"../../../Add-on/DrawBoard/ActivityLayerBoardTool\";\r\nimport { BuildLayerBoards } from \"../../../Add-on/DrawBoard/BuildBoardTool\";\r\nimport { DefaultLayerBoardConfig, DefaultNailOption } from \"../../../Editor/DefaultConfig\";\r\nimport { ISpaceParse } from \"../../../Geometry/SpaceParse/ISpaceParse\";\r\nimport { IGrooveOption, LayerBoardOption, LayerNailOption } from \"../../../UI/Store/BoardInterface\";\r\nimport { Factory } from \"../../CADFactory\";\r\nimport { CADFiler } from \"../../CADFiler\";\r\nimport { Board } from \"../../Entity/Board\";\r\nimport { TemplateBoardRecord } from \"./TemplateBoard\";\r\n\r\n/**\r\n * 层板模板\r\n */\r\n@Factory\r\nexport class TemplateLayerBoard extends TemplateBoardRecord\r\n{\r\n constructor()\r\n {\r\n super();\r\n this.name = \"层板(自动)\";\r\n }\r\n protected _option: LayerBoardOption = { ...DefaultLayerBoardConfig };\r\n private _nailOption: LayerNailOption = { ...DefaultNailOption };\r\n private grooveOption: IGrooveOption = {\r\n grooveAddLength: \"0\",\r\n grooveAddWidth: \"0\",\r\n grooveAddDepth: \"0\",\r\n knifeRadius: \"3\",\r\n };\r\n set GrooveOption(option: IGrooveOption)\r\n {\r\n this.WriteAllObjectRecord();\r\n Object.assign(this.grooveOption, option);\r\n }\r\n get NailOption()\r\n {\r\n return { ...this._nailOption };\r\n }\r\n set NailOption(nailOpt: LayerNailOption)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._nailOption = { ...nailOpt };\r\n }\r\n\r\n GeneralBoardList(space: ISpaceParse)\r\n {\r\n return BuildLayerBoards(this._option, space, this.grooveOption);\r\n }\r\n protected async Update()\r\n {\r\n await super.Update();\r\n\r\n let brs: Board[] = [];\r\n\r\n for (let id of this.Objects)\r\n {\r\n if (!id.IsErase)\r\n {\r\n let b = id.Object as Board;\r\n brs.push(b);\r\n }\r\n }\r\n if (this._option.isActive)\r\n activityLayerBoardTool.Start(brs, this._nailOption);\r\n }\r\n ReadFile(file: CADFiler)\r\n {\r\n let ver = file.Read();\r\n super.ReadFile(file);\r\n this._option.type = file.Read();\r\n this._option.name = file.Read();\r\n this._option.frontShrink = file.Read();\r\n this._option.leftShrink = file.Read();\r\n this._option.rightShrink = file.Read();\r\n this._option.calcHeight = file.Read();\r\n this._option.isTotalLength = file.Read();\r\n this._option.boardRelative = file.Read();\r\n this._option.thickness = file.Read();\r\n this._option.count = file.Read();\r\n this._option.spaceSize = file.Read();\r\n this._option.isActive = file.Read();\r\n\r\n if (ver > 1)\r\n {\r\n this._nailOption.isDraw = file.Read();\r\n this._nailOption.addCount = file.Read();\r\n this._nailOption.dist = file.Read();\r\n this._nailOption.isGroup = file.Read();\r\n this._nailOption.isInBack = file.Read();\r\n this._nailOption.front = file.Read();\r\n this._nailOption.behind = file.Read();\r\n this._nailOption.count = file.Read();\r\n this._nailOption.rad = file.Read();\r\n this._nailOption.length = file.Read();\r\n this._nailOption.depth = file.Read();\r\n }\r\n\r\n if (ver >= 3)\r\n {\r\n this._option.calcSpaceSize = file.Read();\r\n this._option.calcFrontShrink = file.Read();\r\n this._option.calcLeftShrink = file.Read();\r\n this._option.calcRightShrink = file.Read();\r\n }\r\n else\r\n {\r\n this._option.calcSpaceSize = this._option.spaceSize.toString();\r\n this._option.calcFrontShrink = this._option.frontShrink.toString();\r\n this._option.calcLeftShrink = this._option.leftShrink.toString();\r\n this._option.calcRightShrink = this._option.rightShrink.toString();\r\n }\r\n if (ver > 3)\r\n {\r\n this.grooveOption.grooveAddLength = file.Read();\r\n this.grooveOption.grooveAddWidth = file.Read();\r\n this.grooveOption.grooveAddDepth = file.Read();\r\n this.grooveOption.knifeRadius = file.Read();\r\n }\r\n else\r\n {\r\n this.grooveOption.grooveAddLength = this.grooveOption.grooveAddLength.toString();\r\n this.grooveOption.grooveAddWidth = this.grooveOption.grooveAddWidth.toString();\r\n this.grooveOption.grooveAddDepth = this.grooveOption.grooveAddDepth.toString();\r\n this.grooveOption.knifeRadius = this.grooveOption.knifeRadius.toString();\r\n }\r\n }\r\n\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(4);\r\n super.WriteFile(file);\r\n file.Write(this._option.type);\r\n file.Write(this._option.name);\r\n file.Write(this._option.frontShrink);\r\n file.Write(this._option.leftShrink);\r\n file.Write(this._option.rightShrink);\r\n file.Write(this._option.calcHeight);\r\n file.Write(this._option.isTotalLength);\r\n file.Write(this._option.boardRelative);\r\n file.Write(this._option.thickness);\r\n file.Write(this._option.count);\r\n file.Write(this._option.spaceSize);\r\n file.Write(this._option.isActive);\r\n\r\n //ver2\r\n file.Write(this._nailOption.isDraw);\r\n file.Write(this._nailOption.addCount);\r\n file.Write(this._nailOption.dist);\r\n file.Write(this._nailOption.isGroup);\r\n file.Write(this._nailOption.isInBack);\r\n file.Write(this._nailOption.front);\r\n file.Write(this._nailOption.behind);\r\n file.Write(this._nailOption.count);\r\n file.Write(this._nailOption.rad);\r\n file.Write(this._nailOption.length);\r\n file.Write(this._nailOption.depth);\r\n\r\n file.Write(this._option.calcSpaceSize);\r\n file.Write(this._option.calcFrontShrink);\r\n file.Write(this._option.calcLeftShrink);\r\n file.Write(this._option.calcRightShrink);\r\n\r\n //ver4\r\n file.Write(this.grooveOption.grooveAddLength);\r\n file.Write(this.grooveOption.grooveAddWidth);\r\n file.Write(this.grooveOption.grooveAddDepth);\r\n file.Write(this.grooveOption.knifeRadius);\r\n }\r\n}\r\n","import { Vector3 } from \"three\";\r\nimport { Factory } from \"../../CADFactory\";\r\nimport { CADFiler } from \"../../CADFiler\";\r\nimport { Board } from \"../../Entity/Board\";\r\nimport { TemplateParam } from \"../Param/TemplateParam\";\r\nimport { TemplateParamType } from \"../Param/TemplateParamType\";\r\nimport { TemplateRecord } from \"../TemplateRecord\";\r\n\r\n/**\r\n * 左右侧板模板\r\n */\r\n@Factory\r\nexport class TemplateLeftRightBoardRecord extends TemplateRecord\r\n{\r\n constructor()\r\n {\r\n super();\r\n this.name = \"左右侧板(自动)\";\r\n }\r\n InitBaseParams()\r\n {\r\n super.InitBaseParams();\r\n let lparam = new TemplateParam();\r\n lparam.name = \"ZS\";\r\n lparam.description = \"左缩\";\r\n lparam.type = TemplateParamType.Float;\r\n lparam.value = 0;\r\n this.Params.push(lparam);\r\n\r\n let rparam = new TemplateParam();\r\n rparam.name = \"YS\";\r\n rparam.description = \"右缩\";\r\n rparam.type = TemplateParamType.Float;\r\n rparam.value = 0;\r\n this.Params.push(rparam);\r\n return this;\r\n }\r\n protected async Update()\r\n {\r\n let [lId, rId] = this.Objects;\r\n\r\n if (!lId || lId.IsErase || !rId || rId.IsErase) return;\r\n\r\n let lBr = lId.Object as Board;\r\n let rBr = rId.Object as Board;\r\n let ls = this.GetParam(\"ZS\")?.value as number ?? 0;\r\n lBr.Position = lBr.Position.sub(new Vector3(0, ls));\r\n\r\n await super.Update();\r\n\r\n let thickness = this.GetParam(\"BH\")?.value as number ?? 18;\r\n ls = this.GetParam(\"ZS\")?.value as number ?? 0;\r\n let rs = this.GetParam(\"YS\")?.value as number ?? 0;\r\n\r\n lBr.Thickness = thickness;\r\n rBr.Thickness = thickness;\r\n\r\n if (!this._CacheSpaceSize)\r\n {\r\n console.warn(\"左右侧板模板数据错误无法更新\");\r\n return;\r\n }\r\n\r\n lBr.Height = this._CacheSpaceSize.z;\r\n rBr.Height = this._CacheSpaceSize.z;\r\n\r\n lBr.Width = this._CacheSpaceSize.y - ls;\r\n rBr.Width = this._CacheSpaceSize.y - rs;\r\n lBr.Position = lBr.Position.add(new Vector3(0, ls));\r\n\r\n let x = new Vector3().setFromMatrixColumn(this._CacheSpaceCS, 0);\r\n let y = new Vector3().setFromMatrixColumn(this._CacheSpaceCS, 1);\r\n x.multiplyScalar(this._CacheSpaceSize.x - lBr.Thickness);\r\n rBr.Position = lBr.Position.sub(y.multiplyScalar(ls - rs)).add(x);\r\n\r\n //保持SpaceCS\r\n for (let ent of [lBr, rBr])\r\n ent.SpaceOCS = this._CacheSpaceCS;\r\n }\r\n ReadFile(file: CADFiler)\r\n {\r\n super.ReadFile(file);\r\n if (this._Version < 3)\r\n {\r\n if (!this.GetParam((\"ZS\")))\r\n {\r\n let lparam = new TemplateParam();\r\n lparam.name = \"ZS\";\r\n lparam.description = \"左缩\";\r\n lparam.type = TemplateParamType.Float;\r\n lparam.value = 0;\r\n this.Params.push(lparam);\r\n\r\n let rparam = new TemplateParam();\r\n rparam.name = \"YS\";\r\n rparam.description = \"右缩\";\r\n rparam.type = TemplateParamType.Float;\r\n rparam.value = 0;\r\n this.Params.push(rparam);\r\n }\r\n }\r\n\r\n }\r\n}\r\n","import { Factory } from \"../../CADFactory\";\r\nimport { Board } from \"../../Entity/Board\";\r\nimport { TemplateRecord } from \"../TemplateRecord\";\r\nimport { BoardType } from \"../../../UI/Store/BoardInterface\";\r\n\r\n@Factory\r\nexport class TemplateSizeBoard extends TemplateRecord\r\n{\r\n protected async Update()\r\n {\r\n await super.Update();\r\n if (this.Objects.length === 0) return;\r\n\r\n let originBr = this.Objects[0].Object as Board;\r\n\r\n if (!originBr.IsErase)\r\n {\r\n if (originBr.BoardType === BoardType.Layer)\r\n {\r\n originBr.Height = this._CacheSpaceSize.x;\r\n originBr.Width = this._CacheSpaceSize.y;\r\n originBr.Thickness = this._CacheSpaceSize.z;\r\n }\r\n else if (originBr.BoardType === BoardType.Vertical)\r\n {\r\n originBr.Height = this._CacheSpaceSize.z;\r\n originBr.Width = this._CacheSpaceSize.y;\r\n originBr.Thickness = this._CacheSpaceSize.x;\r\n }\r\n else\r\n {\r\n originBr.Height = this._CacheSpaceSize.z;\r\n originBr.Width = this._CacheSpaceSize.x;\r\n originBr.Thickness = this._CacheSpaceSize.y;\r\n }\r\n }\r\n }\r\n}\r\n","import { BuildVerticalBoards } from \"../../../Add-on/DrawBoard/BuildBoardTool\";\r\nimport { DefaultVerticalBoardConfig } from \"../../../Editor/DefaultConfig\";\r\nimport { ISpaceParse } from \"../../../Geometry/SpaceParse/ISpaceParse\";\r\nimport { IGrooveOption, VerticalBoardOption } from \"../../../UI/Store/BoardInterface\";\r\nimport { Factory } from \"../../CADFactory\";\r\nimport { CADFiler } from \"../../CADFiler\";\r\nimport { TemplateBoardRecord } from \"./TemplateBoard\";\r\n\r\n/**\r\n * 立板模板\r\n */\r\n@Factory\r\nexport class TemplateVerticalBoard extends TemplateBoardRecord\r\n{\r\n constructor()\r\n {\r\n super();\r\n this.name = \"立板(自动)\";\r\n }\r\n protected _option: VerticalBoardOption = { ...DefaultVerticalBoardConfig };\r\n private grooveOption: IGrooveOption = {\r\n grooveAddLength: \"0\",\r\n grooveAddWidth: \"0\",\r\n grooveAddDepth: \"0\",\r\n knifeRadius: \"3\",\r\n };\r\n set GrooveOption(option: IGrooveOption)\r\n {\r\n this.WriteAllObjectRecord();\r\n Object.assign(this.grooveOption, option);\r\n }\r\n GeneralBoardList(space: ISpaceParse)\r\n {\r\n return BuildVerticalBoards(this._option, space, this.grooveOption);\r\n }\r\n ReadFile(file: CADFiler)\r\n {\r\n let ver = file.Read();\r\n super.ReadFile(file);\r\n this._option.type = file.Read();\r\n this._option.name = file.Read();\r\n this._option.frontShrink = file.Read();\r\n this._option.bottomShrink = file.Read();\r\n this._option.calcWidth = file.Read();\r\n this._option.calcHeight = file.Read();\r\n this._option.isTotalLength = file.Read();\r\n this._option.isTotalWidth = file.Read();\r\n this._option.boardRelative = file.Read();\r\n this._option.thickness = file.Read();\r\n this._option.count = file.Read();\r\n this._option.spaceSize = file.Read();\r\n\r\n if (ver >= 2)\r\n {\r\n this._option.calcSpaceSize = file.Read();\r\n this._option.calcFrontShrink = file.Read();\r\n this._option.calcBottomShrink = file.Read();\r\n }\r\n else\r\n {\r\n this._option.calcSpaceSize = this._option.spaceSize.toString();\r\n this._option.calcFrontShrink = this._option.frontShrink.toString();\r\n this._option.calcBottomShrink = this._option.bottomShrink.toString();\r\n }\r\n if (ver > 2)\r\n {\r\n this.grooveOption.grooveAddLength = file.Read();\r\n this.grooveOption.grooveAddWidth = file.Read();\r\n this.grooveOption.grooveAddDepth = file.Read();\r\n this.grooveOption.knifeRadius = file.Read();\r\n }\r\n else\r\n {\r\n this.grooveOption.grooveAddLength = this.grooveOption.grooveAddLength.toString();\r\n this.grooveOption.grooveAddWidth = this.grooveOption.grooveAddWidth.toString();\r\n this.grooveOption.grooveAddDepth = this.grooveOption.grooveAddDepth.toString();\r\n this.grooveOption.knifeRadius = this.grooveOption.knifeRadius.toString();\r\n }\r\n }\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(3);\r\n super.WriteFile(file);\r\n file.Write(this._option.type);\r\n file.Write(this._option.name);\r\n file.Write(this._option.frontShrink);\r\n file.Write(this._option.bottomShrink);\r\n file.Write(this._option.calcWidth);\r\n file.Write(this._option.calcHeight);\r\n file.Write(this._option.isTotalLength);\r\n file.Write(this._option.isTotalWidth);\r\n file.Write(this._option.boardRelative);\r\n file.Write(this._option.thickness);\r\n file.Write(this._option.count);\r\n file.Write(this._option.spaceSize);\r\n\r\n file.Write(this._option.calcSpaceSize);\r\n file.Write(this._option.calcFrontShrink);\r\n file.Write(this._option.calcBottomShrink);\r\n\r\n file.Write(this.grooveOption.grooveAddLength);\r\n file.Write(this.grooveOption.grooveAddWidth);\r\n file.Write(this.grooveOption.grooveAddDepth);\r\n file.Write(this.grooveOption.knifeRadius);\r\n }\r\n}\r\n","import { VisualSpaceBox } from \"../../../Editor/VisualSpaceBox\";\r\nimport { AutoRecord } from \"../../AutoRecord\";\r\nimport { Factory } from \"../../CADFactory\";\r\nimport { CADFiler } from \"../../CADFiler\";\r\nimport { TemplateRecord } from \"../TemplateRecord\";\r\n\r\n@Factory\r\nexport class TemplateVisualSpace extends TemplateRecord\r\n{\r\n @AutoRecord IsVisible = true;\r\n constructor()\r\n {\r\n super();\r\n this.Name = \"可视化模块空间\";\r\n }\r\n\r\n protected async Update()\r\n {\r\n await super.Update();\r\n if (!this.Db) return;//如果没有绘制到DB空间,那么将不会进行更新(否则绘制失败)\r\n //在这里重建虚拟空间,(未来我们可能会避免自动重建)\r\n if (this.Objects.length === 0 || this.Objects[0].Object === undefined)\r\n {\r\n this.Objects.length = 0;\r\n let visualEntity = new VisualSpaceBox(this.LParam.value as number, this.WParam.value as number, this.HParam.value as number);\r\n visualEntity.ApplyMatrix(this._CacheSpaceCS);\r\n visualEntity.SpaceOCS = this._CacheSpaceCS;\r\n //这里避免使用app.Database,否则插入图纸后,会错误的在app的图纸里面绘制一个空间,导致程序错误.\r\n this.Db.ModelSpace.Append(visualEntity);\r\n this.Objects.push(visualEntity.Id);\r\n }\r\n let visualEntity = this.Objects[0].Object as VisualSpaceBox;\r\n\r\n let depth = this.NodeDepth;\r\n visualEntity.ColorIndex = depth === 0 ? 7 : depth + 1;\r\n\r\n let IsRoot = this.Parent === undefined;\r\n let isVisual = IsRoot || this.Children.length === 0;\r\n\r\n visualEntity.Visible = this.IsVisible && isVisual;\r\n visualEntity.SetSize(this.LParam.value as number, this.WParam.value as number, this.HParam.value as number);\r\n visualEntity.IsRoot = this.Children.length !== 0;\r\n\r\n if (!IsRoot)\r\n {\r\n let root = this.Root;\r\n visualEntity.DisplayLength = this.LParam.value !== root.LParam.value;\r\n visualEntity.DisplayWidth = this.WParam.value !== root.WParam.value;\r\n visualEntity.DisplayHeight = this.HParam.value !== root.HParam.value;\r\n }\r\n }\r\n\r\n //#region -------------------------File-------------------------\r\n\r\n //对象从文件中读取数据,初始化自身\r\n ReadFile(file: CADFiler)\r\n {\r\n let ver = file.Read();\r\n super.ReadFile(file);\r\n this.IsVisible = file.Read();\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.IsVisible);\r\n }\r\n // //局部撤销\r\n // ApplyPartialUndo(undoData: CADObject)\r\n // {\r\n // super.ApplyPartialUndo(undoData);\r\n // }\r\n //#endregion\r\n}\r\n","import { Geometry, Vector3, WebGLRenderer } from \"three\";\r\nimport { CADFiler } from \"../../api\";\r\nimport { CameraUpdate } from \"../../GraphicsSystem/CameraUpdate\";\r\nimport { RenderType } from \"../../GraphicsSystem/RenderType\";\r\nimport { Factory } from \"../CADFactory\";\r\nimport { Entity } from \"../Entity/Entity\";\r\nimport { ObjectId } from \"../ObjectId\";\r\n\r\nconst MaxSize = 2048 * 2;\r\n\r\n/**\r\n * 更新视口实体的时机:\r\n * ->在布局状态下才应该更新,否则则标记为需要更新(或者不需要标记)\r\n * ->在缩放相机时,标记所有的需要更新(异步更新任务)(优先更新可见视口)\r\n * ->切换到布局时,更新全部视口(使用更新任务)\r\n */\r\n\r\n@Factory\r\nexport class ViewportEntity2 extends Entity\r\n{\r\n static Renderer: WebGLRenderer;\r\n OnlyRenderType = true;\r\n\r\n //当前视口的渲染类型\r\n private _RenderType: RenderType = RenderType.Conceptual;\r\n //当前视口绘制的图形列表\r\n private _DisplayEntitys: Set = new Set();\r\n\r\n private _CameraData = new CameraUpdate;\r\n constructor(\r\n private _Width: number = 1,\r\n private _Height: number = 1,\r\n )\r\n {\r\n super();\r\n }\r\n\r\n SetSize(width: number, height: number)\r\n {\r\n if (this._Width === width && this._Height === height) return;\r\n\r\n this.WriteAllObjectRecord();\r\n this._Width = width;\r\n this._Height = height;\r\n this.Update();\r\n }\r\n\r\n AppendEntity(ens: Iterable)\r\n {\r\n this.WriteAllObjectRecord();\r\n for (let e of ens)\r\n this._DisplayEntitys.add(e.Id);\r\n\r\n this.Update();\r\n }\r\n\r\n _Target = new Vector3(0, 0, -1);\r\n\r\n \r\n\r\n Destroy()\r\n {\r\n super.Destroy();\r\n }\r\n\r\n\r\n //#region -------------------------File-------------------------\r\n //对象从文件中读取数据,初始化自身\r\n protected _ReadFile(file: CADFiler)\r\n {\r\n let ver = file.Read();\r\n super._ReadFile(file);\r\n\r\n\r\n this._Width = file.Read();\r\n this._Height = file.Read();\r\n\r\n this._DisplayEntitys.clear();\r\n let count = file.Read();\r\n for (let i = 0; i < count; i++)\r\n {\r\n let id = file.ReadSoftObjectId();\r\n if (id)\r\n this._DisplayEntitys.add(id);\r\n }\r\n\r\n this._RenderType = file.Read();\r\n this._Target.fromArray(file.Read());\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(1);\r\n super.WriteFile(file);\r\n\r\n file.Write(this._Width);\r\n file.Write(this._Height);\r\n\r\n file.Write(this._DisplayEntitys.size);\r\n for (let id of this._DisplayEntitys)\r\n file.WriteSoftObjectId(id);\r\n\r\n file.Write(this._RenderType);\r\n file.Write(this._Target.toArray());\r\n }\r\n //#endregion\r\n}\r\n\r\n//\r\nfunction ScaleUV2(geo: Geometry, xScale = 1e-3, yScale = 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.x /= xScale;\r\n uv.y /= yScale;\r\n }\r\n }\r\n }\r\n}\r\n","import { Box3, BufferGeometry, Face3, Geometry, Line as TLine, LineSegments, MathUtils, Matrix3, Mesh, Object3D, ShapeUtils, Vector2, Vector3 } from \"three\";\r\nimport { HostApplicationServices } from \"../../../../ApplicationServices/HostApplicationServices\";\r\nimport { arrayPushArray } from \"../../../../Common/ArrayExt\";\r\nimport { ColorMaterial } from \"../../../../Common/ColorPalette\";\r\nimport { EntityUpdateWrap } from \"../../../../Common/EntityUpdateWrap\";\r\nimport { ObjectSnapMode } from \"../../../../Editor/ObjectSnapMode\";\r\nimport { Box3Ext } from \"../../../../Geometry/Box\";\r\nimport { BufferGeometryUtils } from \"../../../../Geometry/BufferGeometryUtils\";\r\nimport { equaln, equalv3, midPoint, MoveMatrix, ZAxis, ZeroVec } from \"../../../../Geometry/GeUtils\";\r\nimport { RenderType } from \"../../../../GraphicsSystem/RenderType\";\r\nimport { SubtractRange, Tape } from \"../../../../ueapi\";\r\nimport { Factory } from \"../../../CADFactory\";\r\nimport { CADFiler } from \"../../../CADFiler\";\r\nimport { Curve } from \"../../../Entity/Curve\";\r\nimport { Line } from \"../../../Entity/Line\";\r\nimport { GetLineParam } from \"../../ParseService/GetCurveParam\";\r\nimport { applyMixins, CURVE_FACE_TYPE_KEY, RoomWallBase, WallFaceType } from \"./RoomWallBase\";\r\nimport { WallSnapMode } from \"./WallSnapMode\";\r\n\r\nconst SnapTempLine = new Line;\r\nconst TempP = new Vector3;\r\n\r\n@Factory\r\nexport class RoomWallLine extends RoomWallBase\r\n{\r\n\r\n constructor(private _StartPoint = new Vector3,\r\n private _EndPoint = new Vector3,\r\n _Thickness = 120\r\n )\r\n {\r\n super();\r\n this.Thickness = _Thickness;\r\n }\r\n\r\n UpdateOCSToMinBox()\r\n {\r\n this.WriteAllObjectRecord();\r\n let sp = this.StartPoint;\r\n let ep = this.EndPoint;\r\n\r\n let x = this.GetFistDeriv(0).normalize();\r\n let z = ZAxis;\r\n let y = z.clone().cross(x).normalize();\r\n this._Matrix.makeBasis(x, y, z).setPosition(sp);\r\n\r\n let inv = this.OCSInv;\r\n this._StartPoint.copy(sp).applyMatrix4(inv);\r\n this._EndPoint.copy(ep).applyMatrix4(inv);\r\n }\r\n\r\n get StartPoint(): Vector3\r\n {\r\n return this._StartPoint.clone().applyMatrix4(this.OCSNoClone);\r\n }\r\n\r\n get EndPoint(): Vector3\r\n {\r\n return this._EndPoint.clone().applyMatrix4(this.OCSNoClone);\r\n }\r\n\r\n set StartPoint(p: Vector3)\r\n {\r\n p = TempP.copy(p).applyMatrix4(this.OCSInv).setZ(0);\r\n if (!equalv3(p, this._StartPoint, 1e-4))\r\n {\r\n this.WriteAllObjectRecord();\r\n this._StartPoint.copy(p);\r\n this.Update();\r\n }\r\n }\r\n\r\n set EndPoint(p: Vector3)\r\n {\r\n p = TempP.copy(p).applyMatrix4(this.OCSInv).setZ(0);\r\n if (!equalv3(p, this._EndPoint, 1e-4))\r\n {\r\n this.WriteAllObjectRecord();\r\n this._EndPoint.copy(p);\r\n this.Update();\r\n }\r\n }\r\n\r\n Reverse(): this\r\n {\r\n this.WriteAllObjectRecord();\r\n [this._EndPoint, this._StartPoint] = [this._StartPoint, this._EndPoint];\r\n return this;\r\n }\r\n\r\n //中心轴线\r\n override get CenterAxisCurve(): Line\r\n {\r\n let line = new Line(this._StartPoint.clone(), this._EndPoint.clone());\r\n line.OCSNoClone.copy(this.OCSNoClone);\r\n return line;\r\n }\r\n\r\n get BoundingBox(): Box3\r\n {\r\n return this.BoundingBoxInOCS.applyMatrix4(this.OCSNoClone);\r\n }\r\n\r\n get BoundingBoxInOCS(): Box3Ext\r\n {\r\n let line = new Line(this._StartPoint, this._EndPoint);\r\n let parse = new GetLineParam(line);\r\n if (parse.Length > 1e-5)\r\n {\r\n let p1 = parse.OffsetPoint(this._StartPoint.clone(), this.Thickness * 0.5);//left\r\n let p2 = parse.OffsetPoint(this._StartPoint.clone(), this.Thickness * -0.5);//right\r\n\r\n let p3 = parse.OffsetPoint(this._EndPoint.clone(), this.Thickness * 0.5);//left\r\n let p4 = parse.OffsetPoint(this._EndPoint.clone(), this.Thickness * -0.5);//right\r\n\r\n p1.z = this._Height;\r\n\r\n return new Box3Ext().setFromPoints([p1, p2, p3, p4]);\r\n }\r\n\r\n return new Box3Ext().setFromPoints([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 let pts = [];\r\n pts = pts.concat(Line.prototype.GetObjectSnapPoints.call(this, snapMode, pickPoint, lastPoint, viewXform));\r\n const CurveSnap = (curve: Curve) =>\r\n {\r\n let bakZ = curve.Z;\r\n //底部线\r\n arrayPushArray(pts, curve.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform));\r\n\r\n //顶部线\r\n curve.Z += this._Height;\r\n arrayPushArray(pts, curve.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform));\r\n curve.Z = bakZ;\r\n\r\n //柱子线\r\n SnapTempLine.OCSNoClone.copy(curve.OCSNoClone);\r\n //@ts-ignore\r\n SnapTempLine._StartPoint.copy(curve._StartPoint);\r\n //@ts-ignore\r\n SnapTempLine._EndPoint.copy(curve._StartPoint);\r\n //@ts-ignore\r\n SnapTempLine._EndPoint.z += this._Height;\r\n\r\n arrayPushArray(pts, SnapTempLine.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform));\r\n\r\n //@ts-ignore\r\n SnapTempLine._StartPoint.copy(curve._EndPoint);\r\n //@ts-ignore\r\n SnapTempLine._EndPoint.copy(curve._EndPoint);\r\n //@ts-ignore\r\n SnapTempLine._EndPoint.z += this._Height;\r\n\r\n arrayPushArray(pts, SnapTempLine.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform));\r\n };\r\n\r\n if (this.LeftCurves && (RoomWallBase.SnapMode & WallSnapMode.Out) > 0)\r\n {\r\n this.LeftCurves.forEach(CurveSnap);\r\n this.RightCurves.forEach(CurveSnap);\r\n this.LidCurves.forEach(CurveSnap);\r\n }\r\n\r\n return pts;\r\n }\r\n\r\n GetGripPoints(): Vector3[]\r\n {\r\n let sp = this.StartPoint;\r\n let ep = this.EndPoint;\r\n let pts = [sp, midPoint(sp, ep), ep];\r\n for (let i = 0; i < 3; i++)\r\n {\r\n let p = pts[i].clone();\r\n pts.push(p.setZ(p.z + this._Height));\r\n }\r\n return pts;\r\n }\r\n\r\n MoveGripPoints(indexs: number[], vec: Vector3)\r\n {\r\n if (equalv3(vec, ZeroVec, 1e-4)) return;\r\n this.WriteAllObjectRecord();\r\n\r\n let set = new Set();\r\n for (let i of indexs)\r\n if (i > 2) set.add(i - 3);\r\n else set.add(i);\r\n\r\n EntityUpdateWrap(this, () =>\r\n {\r\n for (let index of set)\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\r\n GetStretchPoints(): Vector3[]\r\n {\r\n return [this.StartPoint, this.EndPoint];\r\n }\r\n MoveStretchPoints(indexList: number[], vec: Vector3)\r\n {\r\n if (equalv3(vec, ZeroVec, 1e-4)) return;\r\n this.WriteAllObjectRecord();\r\n EntityUpdateWrap(this, () =>\r\n {\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\r\n //#region //绘制\r\n\r\n UpdateDrawGeometry()\r\n {\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\r\n private _EdgeGeometry: BufferGeometry;\r\n get EdgeGeometry()\r\n {\r\n if (this._EdgeGeometry) return this._EdgeGeometry;\r\n\r\n for (let hole of this.RealHoles)\r\n if (hole.StartParam > hole.EndParam)\r\n [hole.StartParam, hole.EndParam] = [hole.EndParam, hole.StartParam];\r\n\r\n let pts: Vector3[];\r\n if (!this.LeftCurves)\r\n {\r\n let line = new Line(this._StartPoint, this._EndPoint);\r\n let parse = new GetLineParam(line);\r\n if (parse.Length > 0.1)\r\n {\r\n let p1 = parse.OffsetPoint(this._StartPoint.clone(), this.Thickness * 0.5);//left\r\n let p2 = parse.OffsetPoint(this._StartPoint.clone(), this.Thickness * -0.5);//right\r\n\r\n let p3 = parse.OffsetPoint(this._EndPoint.clone(), this.Thickness * 0.5);//left\r\n let p4 = parse.OffsetPoint(this._EndPoint.clone(), this.Thickness * -0.5);//right\r\n\r\n let [pz1, pz2, pz3, pz4] = [p1, p2, p3, p4].map(p => p.clone().setZ(this._Height));\r\n pts = [p1, p2, p2, p4, p4, p3, p3, p1,\r\n pz1, pz2, pz2, pz4, pz4, pz3, pz3, pz1,\r\n\r\n p1, pz1,\r\n p2, pz2,\r\n p3, pz3,\r\n p4, pz4\r\n ];\r\n }\r\n }\r\n else\r\n {\r\n pts = [];\r\n let inv = this.OCSInv;\r\n const DrawCurve = (curve: Curve, _leftRanges: [number, number][], _rightRanges: [number, number][]) =>\r\n {\r\n if (curve instanceof Line)\r\n {\r\n let p1 = curve.StartPoint.applyMatrix4(inv);\r\n let p2 = curve.EndPoint.applyMatrix4(inv);\r\n pts.push(p1, p2);\r\n\r\n for (let range of _leftRanges)\r\n pts.push(p1.clone().setZ(range[0]), p1.clone().setZ(range[1]));\r\n for (let range of _rightRanges)\r\n pts.push(p2.clone().setZ(range[0]), p2.clone().setZ(range[1]));\r\n\r\n pts.push(p1.clone().setZ(this._Height), p2.clone().setZ(this._Height));\r\n }\r\n };\r\n\r\n let lidRanges: [number, number][] = [[0, this._Height]];\r\n let leftRanges = lidRanges;\r\n let rightRanges = lidRanges;\r\n for (let hole of this.RealHoles)\r\n {\r\n if (equaln(hole.StartParam, 0))\r\n {\r\n let newLeftRanges = [];\r\n for (let range of leftRanges)\r\n arrayPushArray(newLeftRanges, SubtractRange(range[0], range[1], hole.Bottom, hole.Top, 1e5));\r\n leftRanges = newLeftRanges;\r\n }\r\n\r\n if (equaln(hole.EndParam, 1))\r\n {\r\n let newRightRanges = [];\r\n for (let range of rightRanges)\r\n arrayPushArray(newRightRanges, SubtractRange(range[0], range[1], hole.Bottom, hole.Top, 1e5));\r\n rightRanges = newRightRanges;\r\n }\r\n }\r\n\r\n for (let i = 0; i < this.LeftCurves.length; i++)\r\n {\r\n let curve = this.LeftCurves[i];\r\n DrawCurve(curve, i === 0 ? leftRanges : lidRanges, (i === this.LeftCurves.length - 1) ? rightRanges : lidRanges);\r\n }\r\n for (let i = 0; i < this.RightCurves.length; i++)\r\n {\r\n let curve = this.RightCurves[i];\r\n DrawCurve(curve, i === 0 ? leftRanges : lidRanges, (i === this.RightCurves.length - 1) ? rightRanges : lidRanges);\r\n }\r\n for (let i = 0; i < this.LidCurves.length; i++)\r\n {\r\n let curve = this.LidCurves[i];\r\n DrawCurve(curve, lidRanges, lidRanges);\r\n }\r\n }\r\n\r\n this._EdgeGeometry = BufferGeometryUtils.CreateFromPts(pts ?? []);\r\n return this._EdgeGeometry;\r\n }\r\n\r\n private _MeshGeometry: Geometry;\r\n get MeshGeometry()\r\n {\r\n if (this._MeshGeometry) return this._MeshGeometry;\r\n\r\n this._MeshGeometry = new Geometry;\r\n\r\n let geo = this._MeshGeometry;\r\n\r\n let normal = this.Normal;\r\n let normaln = normal.clone().negate();\r\n\r\n let line = new Line(this._StartPoint, this._EndPoint);\r\n let parse = new GetLineParam(line);\r\n if (!this.LeftCurves)\r\n {\r\n if (parse.Length > 0.1)\r\n {\r\n let p1 = parse.OffsetPoint(this._StartPoint.clone(), this.Thickness * 0.5);//left\r\n let p2 = parse.OffsetPoint(this._StartPoint.clone(), this.Thickness * -0.5);//right\r\n\r\n let p3 = parse.OffsetPoint(this._EndPoint.clone(), this.Thickness * 0.5);//left\r\n let p4 = parse.OffsetPoint(this._EndPoint.clone(), this.Thickness * -0.5);//right\r\n\r\n let [pz1, pz2, pz3, pz4] = [p1, p2, p3, p4].map(p => p.clone().setZ(this._Height));\r\n\r\n geo.vertices.push(p1, p2, p3, p4, pz1, pz2, pz3, pz4);\r\n\r\n geo.faces.push(\r\n //底部\r\n new Face3(0, 2, 1, normaln),\r\n new Face3(1, 2, 3, normaln),\r\n //顶部\r\n new Face3(0 + 4, 1 + 4, 2 + 4, normal),\r\n new Face3(1 + 4, 3 + 4, 2 + 4, normal),\r\n //开始盖子\r\n new Face3(0, 1, 5, parse.Direction.clone().negate()),\r\n new Face3(0, 5, 4, parse.Direction.clone().negate()),\r\n //结束盖子\r\n new Face3(2, 7, 3, parse.Direction),\r\n new Face3(2, 6, 7, parse.Direction),\r\n //left\r\n new Face3(0, 6, 2, parse.LeftDir),\r\n new Face3(0, 4, 6, parse.LeftDir),\r\n //right\r\n new Face3(1, 3, 7, parse.LeftDir.clone().negate()),\r\n new Face3(1, 7, 5, parse.LeftDir.clone().negate()),\r\n );\r\n\r\n //x\r\n let x = parse.Length * 1e-3;\r\n let y = this.Thickness * 1e-3;\r\n let z = this._Height * 1e-3;\r\n geo.faceVertexUvs[0].push(\r\n //floor\r\n [new Vector2(0, 0), new Vector2(x, 0), new Vector2(0, y)],\r\n [new Vector2(0, y), new Vector2(x, 0), new Vector2(x, y)],\r\n //top\r\n [new Vector2(0, 0), new Vector2(0, y), new Vector2(x, 0)],\r\n [new Vector2(0, y), new Vector2(x, y), new Vector2(x, 0)],\r\n //start lid\r\n [new Vector2(0, 0), new Vector2(y, 0), new Vector2(y, z)],\r\n [new Vector2(0, 0), new Vector2(y, z), new Vector2(0, z)],\r\n //end lid\r\n [new Vector2(y, 0), new Vector2(0, z), new Vector2(0, 0)],\r\n [new Vector2(y, 0), new Vector2(y, z), new Vector2(0, z)],\r\n //left\r\n [new Vector2(0, 0), new Vector2(x, z), new Vector2(x, 0)],\r\n [new Vector2(0, 0), new Vector2(0, z), new Vector2(x, z)],\r\n //right\r\n [new Vector2(0, 0), new Vector2(x, 0), new Vector2(0, z)],\r\n [new Vector2(0, 0), new Vector2(0, z), new Vector2(0, z)],\r\n );\r\n\r\n\r\n }\r\n }\r\n else\r\n {\r\n let inv = this.OCSInv;\r\n let thisParam = new GetLineParam(this as unknown as Line);\r\n const BuildLeftFace = (curve: Curve) =>\r\n {\r\n let materialIndex = 0;\r\n if (curve[CURVE_FACE_TYPE_KEY] === WallFaceType.Outside)\r\n {\r\n \r\n materialIndex = 1;\r\n }\r\n\r\n if (curve instanceof Line)\r\n {\r\n let tapes = [new Tape(0, 1, 0, this._Height)];\r\n let curveParam = new GetLineParam(curve);\r\n\r\n let holes = this.RealHoles;\r\n if (holes.length)\r\n {\r\n for (let hole of holes)\r\n {\r\n let start = equaln(hole.StartParam, 0) ? 0 : MathUtils.clamp(curveParam.GetParamAtPoint(thisParam.GetPointAtParam(hole.StartParam)), 0, 1);\r\n let end = equaln(hole.EndParam, 1) ? 1 : MathUtils.clamp(curveParam.GetParamAtPoint(thisParam.GetPointAtParam(hole.EndParam)), 0, 1);\r\n if (equaln(start, end, 1e-8)) continue;//重复的点造成了绘制错误\r\n\r\n if (start > end) [start, end] = [end, start];\r\n start = Math.max(0, start);\r\n end = Math.min(1, end);\r\n if (start >= end) continue;\r\n\r\n let holeTape = new Tape(start, end, hole.Bottom, hole.Top);\r\n\r\n let newTapes: Tape[] = [];\r\n for (let tape of tapes)\r\n arrayPushArray(newTapes, tape.Clip(holeTape));\r\n\r\n tapes = newTapes;\r\n }\r\n }\r\n\r\n for (let tape of tapes)\r\n {\r\n let startIndex = geo.vertices.length;\r\n\r\n let p1 = curveParam.GetPointAtParam(tape.start).applyMatrix4(inv);\r\n let p2 = curveParam.GetPointAtParam(tape.end).applyMatrix4(inv);\r\n geo.vertices.push(p1.setZ(tape.bottom), p2.setZ(tape.bottom));\r\n geo.vertices.push(p1.clone().setZ(tape.top));\r\n geo.vertices.push(p2.clone().setZ(tape.top));\r\n\r\n let startX = curveParam.Length * 1e-3 * tape.start;\r\n let endX = curveParam.Length * 1e-3 * tape.end;\r\n\r\n let startZ = tape.bottom * 1e-3;\r\n let endZ = tape.top * 1e-3;\r\n\r\n geo.faces.push(\r\n new Face3(startIndex, startIndex + 2, startIndex + 1, parse.LeftDir, undefined, materialIndex),\r\n new Face3(startIndex + 1, startIndex + 2, startIndex + 3, parse.LeftDir, undefined, materialIndex),\r\n );\r\n\r\n geo.faceVertexUvs[0].push(\r\n [new Vector2(startX, startZ), new Vector2(startX, endZ), new Vector2(endX, startZ)],\r\n [new Vector2(endX, startZ), new Vector2(startX, endZ), new Vector2(endX, endZ)],\r\n );\r\n }\r\n }\r\n };\r\n const BuildRightFace = (curve: Curve) =>\r\n {\r\n let materialIndex = 0;\r\n if (curve[CURVE_FACE_TYPE_KEY] === WallFaceType.Outside)\r\n {\r\n \r\n materialIndex = 1;\r\n }\r\n\r\n if (curve instanceof Line)\r\n {\r\n let tapes = [new Tape(0, 1, 0, this._Height)];\r\n let curveParam = new GetLineParam(curve);\r\n\r\n let holes = this.RealHoles;\r\n if (holes.length)\r\n {\r\n for (let hole of holes)\r\n {\r\n let start = equaln(hole.StartParam, 0) ? 0 : MathUtils.clamp(curveParam.GetParamAtPoint(thisParam.GetPointAtParam(hole.StartParam)), 0, 1);\r\n let end = equaln(hole.EndParam, 1) ? 1 : MathUtils.clamp(curveParam.GetParamAtPoint(thisParam.GetPointAtParam(hole.EndParam)), 0, 1);\r\n if (equaln(start, end, 1e-8)) continue;//重复的点造成了绘制错误\r\n\r\n if (start > end) [start, end] = [end, start];\r\n start = Math.max(0, start);\r\n end = Math.min(1, end);\r\n if (start >= end) continue;\r\n\r\n let holeTape = new Tape(start, end, hole.Bottom, hole.Top);\r\n\r\n let newTapes: Tape[] = [];\r\n for (let tape of tapes)\r\n arrayPushArray(newTapes, tape.Clip(holeTape));\r\n\r\n tapes = newTapes;\r\n }\r\n }\r\n\r\n for (let tape of tapes)\r\n {\r\n let startIndex = geo.vertices.length;\r\n\r\n let p1 = curveParam.GetPointAtParam(tape.start).applyMatrix4(inv);\r\n let p2 = curveParam.GetPointAtParam(tape.end).applyMatrix4(inv);\r\n geo.vertices.push(p1.setZ(tape.bottom), p2.setZ(tape.bottom));\r\n geo.vertices.push(p1.clone().setZ(tape.top));\r\n geo.vertices.push(p2.clone().setZ(tape.top));\r\n\r\n let startX = curveParam.Length * 1e-3 * tape.start;\r\n let endX = curveParam.Length * 1e-3 * tape.end;\r\n\r\n let startZ = tape.bottom * 1e-3;\r\n let endZ = tape.top * 1e-3;\r\n\r\n geo.faces.push(\r\n new Face3(startIndex, startIndex + 1, startIndex + 2, curveParam.RightDir, undefined, materialIndex),\r\n new Face3(startIndex + 1, startIndex + 3, startIndex + 2, curveParam.RightDir, undefined, materialIndex),\r\n );\r\n\r\n geo.faceVertexUvs[0].push(\r\n [new Vector2(startX, startZ), new Vector2(endX, startZ), new Vector2(startX, endZ)],\r\n [new Vector2(endX, startZ), new Vector2(endX, endZ), new Vector2(startX, endZ)],\r\n );\r\n }\r\n }\r\n };\r\n this.LeftCurves.forEach(BuildLeftFace);\r\n this.RightCurves.forEach(BuildRightFace);\r\n this.LidCurves.forEach(BuildRightFace);\r\n\r\n if (this.Region)\r\n {\r\n let bakZ = this.Region.OCSNoClone.elements[14];\r\n this.Region.OCSNoClone.elements[14] = this._Matrix.elements[14];\r\n\r\n let pts = this.Region.MatrixAlignTo2(this.OCSNoClone).pts;\r\n this.Region.OCSNoClone.elements[14] = bakZ;\r\n\r\n let faces = ShapeUtils.triangulateShape(pts, []);\r\n\r\n let startIndex = geo.vertices.length;\r\n for (let p of pts) geo.vertices.push(new Vector3(p.x, p.y, this._Height));\r\n if (HostApplicationServices.DrawWallBottomFace) for (let p of pts) geo.vertices.push(new Vector3(p.x, p.y, 0));\r\n\r\n for (let i = 0; i < faces.length; i++)\r\n {\r\n let [a, b, c] = faces[i];\r\n geo.faces.push(new Face3(startIndex + a, startIndex + b, startIndex + c, normal));\r\n let uvs = faces[i].map(index => pts[index].clone());\r\n geo.faceVertexUvs[0].push(uvs);\r\n\r\n if (HostApplicationServices.DrawWallBottomFace)\r\n {\r\n geo.faces.push(new Face3(startIndex + pts.length + c, startIndex + pts.length + b, startIndex + pts.length + a, normaln));\r\n geo.faceVertexUvs[0].push(uvs.concat().reverse().map(v => v.clone()));\r\n }\r\n }\r\n\r\n // //todo:为了优化显示 我们可以把侧面也画出来 (应该使用和酷家乐一样的技术 在视线对准时,隐藏整个墙)\r\n // let d = this._EndPoint.clone().sub(this._StartPoint).normalize();\r\n // let pre = pts[pts.length - 1];\r\n // let tempV = new Vector3;\r\n // for (let i = 0; i < pts.length; i++)\r\n // {\r\n // let p = pts[i];\r\n // tempV.set(p.x - pre.x, p.y - pre.y, 0).normalize();\r\n // //todo:盖子会重复绘制\r\n // if (!isParallelTo(d, tempV, 1e-3) && !isPerpendicularityTo(d, tempV, 1e-3))\r\n // {\r\n // startIndex = geo.vertices.length;\r\n // geo.vertices.push(AsVector3(pre), AsVector3(p));\r\n // geo.vertices.push(AsVector3(pre).setZ(this._Height));\r\n // geo.vertices.push(AsVector3(p).setZ(this._Height));\r\n\r\n // LEFT_ROTATE_MTX2.applyVector(tempV);\r\n // tempV.negate();\r\n\r\n // let n = tempV.clone();\r\n\r\n // geo.faces.push(\r\n // new Face3(startIndex, startIndex + 1, startIndex + 2, n),\r\n // new Face3(startIndex + 1, startIndex + 3, startIndex + 2, n),\r\n // );\r\n\r\n // geo.faceVertexUvs[0].push(\r\n // [new Vector2(), new Vector2(0, 0), new Vector2(0, 0)],\r\n // [new Vector2(0, 0), new Vector2(0, 0), new Vector2(0, 0)],\r\n // );\r\n // }\r\n\r\n // pre = p;\r\n // }\r\n }\r\n }\r\n\r\n geo.computeFaceNormals();\r\n geo.verticesNeedUpdate = true;\r\n geo.uvsNeedUpdate = true;\r\n\r\n return geo;\r\n }\r\n\r\n\r\n InitDrawObject(renderType: RenderType = RenderType.Wireframe): Object3D\r\n {\r\n 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\r\n let obj = new Object3D;\r\n if (renderType === RenderType.Wireframe || renderType === RenderType.Jig)\r\n {\r\n let pts = [this._StartPoint, this._EndPoint];\r\n let geo = new BufferGeometry().setFromPoints(pts);\r\n let axisLine = new TLine(geo, ColorMaterial.GetWallLineMtl(1));\r\n axisLine.computeLineDistances();\r\n obj.add(axisLine);\r\n\r\n let line = new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(this.ColorIndex));\r\n obj.add(line);\r\n }\r\n else if (renderType === RenderType.Conceptual)\r\n {\r\n let mesh = new Mesh(this.MeshGeometry, ColorMaterial.GetConceptualMaterial(this.ColorIndex));\r\n let line = new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(this.ColorIndex));\r\n obj.add(mesh, line);\r\n }\r\n return obj;\r\n }\r\n\r\n /**\r\n * 重载:更新绘制的实体\r\n * @param {RenderType} renderType\r\n * @param {Object3D} obj\r\n */\r\n UpdateDrawObject(renderType: RenderType, obj: Object3D)\r\n {\r\n if (renderType === RenderType.Wireframe || renderType === RenderType.Jig)\r\n {\r\n let [axisLine, outWallLine] = obj.children as [TLine, TLine];\r\n\r\n BufferGeometryUtils.UpdatePts(axisLine.geometry, [this._StartPoint, this._EndPoint]);\r\n axisLine.computeLineDistances();\r\n\r\n if (outWallLine.geometry !== this.EdgeGeometry)\r\n {\r\n outWallLine.geometry.dispose();\r\n outWallLine.geometry = this.EdgeGeometry;\r\n }\r\n }\r\n else if (renderType === RenderType.Conceptual)\r\n {\r\n let mesh = obj.children[0] as Mesh;\r\n if (mesh.geometry !== this.MeshGeometry)\r\n {\r\n mesh.geometry.dispose();\r\n mesh.geometry = this.MeshGeometry;\r\n }\r\n\r\n let line = obj.children[1] as LineSegments;\r\n if (line.geometry !== this.EdgeGeometry)\r\n {\r\n line.geometry.dispose();\r\n line.geometry = this.EdgeGeometry;\r\n }\r\n }\r\n else if (renderType === RenderType.Physical)\r\n {\r\n let mesh = obj as Mesh;\r\n if (mesh.geometry !== this.MeshGeometry)\r\n {\r\n mesh.geometry.dispose();\r\n mesh.geometry = this.MeshGeometry;\r\n }\r\n }\r\n }\r\n //#endregion\r\n\r\n\r\n //#region -------------------------File-------------------------\r\n //对象从文件中读取数据,初始化自身\r\n protected override _ReadFile(file: CADFiler)\r\n {\r\n let ver = file.Read();\r\n super._ReadFile(file);\r\n\r\n this._StartPoint.set(file.Read(), file.Read(), file.Read());\r\n this._EndPoint.set(file.Read(), file.Read(), file.Read());\r\n }\r\n //对象将自身数据写入到文件.\r\n override WriteFile(file: CADFiler)\r\n {\r\n file.Write(1);\r\n super.WriteFile(file);\r\n\r\n file.WriteVec3(this._StartPoint);\r\n file.WriteVec3(this._EndPoint);\r\n }\r\n //#endregion\r\n}\r\n\r\napplyMixins(RoomWallLine, Line);\r\n","import { Vector2, Vector3 } from \"three\";\r\nimport { Matrix2 } from \"../../../Geometry/Matrix2\";\r\nimport { Arc } from \"../../Entity/Arc\";\r\nimport { Line } from \"../../Entity/Line\";\r\nimport { RoomWallBase } from \"../Entity/Wall/RoomWallBase\";\r\nimport { RoomWallLine } from \"../Entity/Wall/RoomWallLine\";\r\n\r\nexport const LEFT_ROTATE_MTX2 = new Matrix2().set(0, 1, -1, 0);\r\n\r\nconst TempDiffVec = new Vector3;\r\n\r\nexport interface GetCurveParam\r\n{\r\n // Direction: Vector3;\r\n // NegDirection: Vector3;\r\n // Length: number;\r\n // LeftDir: Vector3;\r\n // RightDir: Vector3;\r\n\r\n GetParamAtPoint(p: Vector3): number;\r\n GetParamAtPoint2(p: Vector3): [number, boolean];\r\n GetPointAtParam(param: number): Vector3;\r\n // OffsetPoint(p: Vector3, dis: number): Vector3;\r\n}\r\n\r\nexport function CreateGetCurveParam(curve: Line | Arc | RoomWallBase)\r\n{\r\n if (curve instanceof Line || curve instanceof RoomWallLine) return new GetLineParam(curve as Line);\r\n else return new GetArcParam(curve as Arc);\r\n}\r\n\r\nexport class GetLineParam\r\n{\r\n Direction: Vector3;\r\n Length: number;\r\n LeftDir: Vector3;\r\n\r\n private _StartPoint: Vector3;\r\n constructor(line: Line)\r\n {\r\n this.Direction = line.GetFistDeriv(0);\r\n this.Length = this.Direction.length();\r\n this.Direction.divideScalar(this.Length);\r\n this._StartPoint = line.StartPoint;\r\n\r\n this.LeftDir = this.Direction.clone();\r\n\r\n LEFT_ROTATE_MTX2.applyVector(this.LeftDir);\r\n }\r\n\r\n private _RightDir: Vector3;\r\n get RightDir()\r\n {\r\n if (!this._RightDir) this._RightDir = this.LeftDir.clone().negate();\r\n\r\n return this._RightDir;\r\n }\r\n\r\n private _NegDirection: Vector3;\r\n get NegDirection()\r\n {\r\n if (!this._NegDirection) this._NegDirection = this.Direction.clone().negate();\r\n return this._NegDirection;\r\n }\r\n\r\n GetParamAtPoint(p: Vector3)\r\n {\r\n TempDiffVec.subVectors(p, this._StartPoint);\r\n let param = this.Direction.dot(TempDiffVec);\r\n\r\n return param / this.Length;\r\n }\r\n\r\n GetParamAtPoint2(p: Vector3): [number, boolean]\r\n {\r\n let param = this.GetParamAtPoint(p);\r\n let np = this.GetPointAtParam(param);\r\n return [param, Vector2.prototype.distanceToSquared.call(np, p) < 1e-4];\r\n }\r\n\r\n GetPointAtParam(param: number)\r\n {\r\n return this.Direction.clone().multiplyScalar(param * this.Length).add(this._StartPoint);\r\n }\r\n\r\n OffsetPoint(p: Vector3, dis: number)\r\n {\r\n return p.add(this.LeftDir.clone().multiplyScalar(dis));\r\n }\r\n}\r\n\r\nexport class GetArcParam implements GetCurveParam\r\n{\r\n constructor(private _Arc: Arc)\r\n {\r\n\r\n }\r\n\r\n GetParamAtPoint2(p: Vector3): [number, boolean]\r\n {\r\n let param = this._Arc.GetParamAtAngle(this._Arc.GetAngleAtPoint(p));\r\n return [param, this._Arc.ParamOnCurve(param)];\r\n }\r\n\r\n GetPointAtParam(param: number): Vector3\r\n {\r\n return this._Arc.GetPointAtParam(param);\r\n }\r\n\r\n GetParamAtPoint(p: Vector3): number\r\n {\r\n return this._Arc.GetParamAtAngle(this._Arc.GetAngleAtPoint(p));\r\n }\r\n}\r\n","import { Point } from \"./Point\";\r\n\r\n//点表面积\r\nexport function Area(pts: Point[]): number\r\n{\r\n let cnt = pts.length;\r\n if (cnt < 3)\r\n return 0;\r\n let a = 0;\r\n for (let i = 0, j = cnt - 1; i < cnt; ++i)\r\n {\r\n a += (pts[j].x + pts[i].x) * (pts[j].y - pts[i].y);\r\n j = i;\r\n }\r\n return -a * 0.5;\r\n}\r\n","import { Point } from \"./Point\";\r\n\r\nexport class Vector2\r\n{\r\n x: number;\r\n y: number;\r\n readonly isVector2: boolean = true;\r\n constructor(x: number = 0, y: number = 0)\r\n {\r\n this.x = x;\r\n this.y = y;\r\n }\r\n get width(): number { return this.x; }\r\n set width(value: number) { this.x = value; }\r\n get height(): number { return this.y; }\r\n set height(value: number) { this.y = value; }\r\n set(x: number, y: number): Vector2\r\n {\r\n this.x = x;\r\n this.y = y;\r\n return this;\r\n }\r\n setScalar(scalar: number): Vector2\r\n {\r\n this.x = scalar;\r\n this.y = scalar;\r\n return this;\r\n }\r\n setX(x: number): Vector2\r\n {\r\n this.x = x;\r\n return this;\r\n }\r\n setY(y: number): Vector2\r\n {\r\n this.y = y;\r\n return this;\r\n }\r\n setComponent(index: number, value: number): Vector2\r\n {\r\n switch (index)\r\n {\r\n case 0: this.x = value; break;\r\n case 1: this.y = value; break;\r\n default: throw new Error('index is out of range: ' + index);\r\n }\r\n return this;\r\n }\r\n getComponent(index: number): number\r\n {\r\n switch (index)\r\n {\r\n case 0: return this.x;\r\n case 1: return this.y;\r\n default: throw new Error('index is out of range: ' + index);\r\n }\r\n }\r\n clone(): Vector2\r\n {\r\n return new (this.constructor as any)().copy(this);\r\n }\r\n copy(v: Vector2): Vector2\r\n {\r\n this.x = v.x;\r\n this.y = v.y;\r\n return this;\r\n }\r\n add(v: Point): Vector2\r\n {\r\n this.x += v.x;\r\n this.y += v.y;\r\n return this;\r\n }\r\n addScalar(s: number): Vector2\r\n {\r\n this.x += s;\r\n this.y += s;\r\n return this;\r\n }\r\n addVectors(a: Vector2, b: Vector2): Vector2\r\n {\r\n this.x = a.x + b.x;\r\n this.y = a.y + b.y;\r\n return this;\r\n }\r\n addScaledVector(v: Vector2, s: number): Vector2\r\n {\r\n this.x += v.x * s;\r\n this.y += v.y * s;\r\n return this;\r\n }\r\n sub(v: Vector2): Vector2\r\n {\r\n this.x -= v.x;\r\n this.y -= v.y;\r\n return this;\r\n }\r\n subScalar(s: number): Vector2\r\n {\r\n this.x -= s;\r\n this.y -= s;\r\n return this;\r\n }\r\n subVectors(a: Vector2, b: Vector2): Vector2\r\n {\r\n this.x = a.x - b.x;\r\n this.y = a.y - b.y;\r\n return this;\r\n }\r\n multiply(v: Vector2): Vector2\r\n {\r\n this.x *= v.x;\r\n this.y *= v.y;\r\n return this;\r\n }\r\n multiplyScalar(scalar: number): Vector2\r\n {\r\n if (isFinite(scalar))\r\n {\r\n this.x *= scalar;\r\n this.y *= scalar;\r\n } else\r\n {\r\n this.x = 0;\r\n this.y = 0;\r\n }\r\n return this;\r\n }\r\n divide(v: Vector2): Vector2\r\n {\r\n this.x /= v.x;\r\n this.y /= v.y;\r\n return this;\r\n }\r\n divideScalar(scalar: number): Vector2\r\n {\r\n return this.multiplyScalar(1 / scalar);\r\n }\r\n min(v: Point): Vector2\r\n {\r\n this.x = Math.min(this.x, v.x);\r\n this.y = Math.min(this.y, v.y);\r\n return this;\r\n }\r\n max(v: Point): Vector2\r\n {\r\n this.x = Math.max(this.x, v.x);\r\n this.y = Math.max(this.y, v.y);\r\n return this;\r\n }\r\n clamp(min: Vector2, max: Vector2): Vector2\r\n {\r\n // This function assumes min < max, if this assumption isn't true it will not operate correctly\r\n this.x = Math.max(min.x, Math.min(max.x, this.x));\r\n this.y = Math.max(min.y, Math.min(max.y, this.y));\r\n return this;\r\n }\r\n private static clampScalar_min = new Vector2();\r\n private static clampScalar_max = new Vector2();\r\n clampScalar(minVal: number, maxVal: number): Vector2\r\n {\r\n const min: Vector2 = Vector2.clampScalar_min.set(minVal, minVal);\r\n const max: Vector2 = Vector2.clampScalar_max.set(maxVal, maxVal);\r\n return this.clamp(min, max);\r\n }\r\n clampLength(min: number, max: number): Vector2\r\n {\r\n const length: number = this.length();\r\n return this.multiplyScalar(Math.max(min, Math.min(max, length)) / length);\r\n }\r\n floor(): Vector2\r\n {\r\n this.x = Math.floor(this.x);\r\n this.y = Math.floor(this.y);\r\n return this;\r\n }\r\n ceil(): Vector2\r\n {\r\n this.x = Math.ceil(this.x);\r\n this.y = Math.ceil(this.y);\r\n return this;\r\n }\r\n round(): Vector2\r\n {\r\n this.x = Math.round(this.x);\r\n this.y = Math.round(this.y);\r\n return this;\r\n }\r\n roundToZero(): Vector2\r\n {\r\n this.x = (this.x < 0) ? Math.ceil(this.x) : Math.floor(this.x);\r\n this.y = (this.y < 0) ? Math.ceil(this.y) : Math.floor(this.y);\r\n return this;\r\n }\r\n negate(): Vector2\r\n {\r\n this.x = - this.x;\r\n this.y = - this.y;\r\n return this;\r\n }\r\n dot(v: Vector2): number\r\n {\r\n return this.x * v.x + this.y * v.y;\r\n }\r\n lengthSq(): number\r\n {\r\n return this.x * this.x + this.y * this.y;\r\n }\r\n length(): number\r\n {\r\n return Math.sqrt(this.x * this.x + this.y * this.y);\r\n }\r\n lengthManhattan(): number\r\n {\r\n return Math.abs(this.x) + Math.abs(this.y);\r\n }\r\n normalize(): Vector2\r\n {\r\n return this.divideScalar(this.length());\r\n }\r\n angle(): number\r\n {\r\n // computes the angle in radians with respect to the positive x-axis\r\n let angle: number = Math.atan2(this.y, this.x);\r\n if (angle < 0) angle += 2 * Math.PI;\r\n return angle;\r\n }\r\n distanceTo(v: Vector2): number\r\n {\r\n return Math.sqrt(this.distanceToSquared(v));\r\n }\r\n distanceToSquared(v: Vector2): number\r\n {\r\n const dx: number = this.x - v.x, dy: number = this.y - v.y;\r\n return dx * dx + dy * dy;\r\n }\r\n distanceToManhattan(v: Vector2): number\r\n {\r\n return Math.abs(this.x - v.x) + Math.abs(this.y - v.y);\r\n }\r\n setLength(length: number): Vector2\r\n {\r\n return this.multiplyScalar(length / this.length());\r\n }\r\n lerp(v: Vector2, alpha: number): Vector2\r\n {\r\n this.x += (v.x - this.x) * alpha;\r\n this.y += (v.y - this.y) * alpha;\r\n return this;\r\n }\r\n lerpVectors(v1: Vector2, v2: Vector2, alpha: number): Vector2\r\n {\r\n return this.subVectors(v2, v1).multiplyScalar(alpha).add(v1);\r\n }\r\n equals(v: Vector2): boolean\r\n {\r\n return ((v.x === this.x) && (v.y === this.y));\r\n }\r\n fromArray(array: Float32Array | number[], offset: number = 0): Vector2\r\n {\r\n this.x = array[offset];\r\n this.y = array[offset + 1];\r\n return this;\r\n }\r\n toArray(array: Float32Array | number[] = [], offset: number = 0): Float32Array | number[]\r\n {\r\n array[offset] = this.x;\r\n array[offset + 1] = this.y;\r\n return array;\r\n }\r\n fromAttribute(attribute: any, index: number, offset: number = 0): Vector2\r\n {\r\n index = index * attribute.itemSize + offset;\r\n this.x = attribute.array[index];\r\n this.y = attribute.array[index + 1];\r\n return this;\r\n }\r\n rotateAround(center: Vector2, angle: number): Vector2\r\n {\r\n const c: number = Math.cos(angle), s: number = Math.sin(angle);\r\n const x: number = this.x - center.x;\r\n const y: number = this.y - center.y;\r\n this.x = x * c - y * s + center.x;\r\n this.y = x * s + y * c + center.y;\r\n return this;\r\n }\r\n}\r\n","import { Vector2 } from \"./Vector2\";\r\nimport { Point } from \"./Point\";\r\n\r\nexport class Box2\r\n{\r\n min: Vector2;\r\n max: Vector2;\r\n constructor(min = new Vector2(+ Infinity, + Infinity), max = new Vector2(- Infinity, - Infinity))\r\n {\r\n this.min = min;\r\n this.max = max;\r\n }\r\n\r\n get area(): number\r\n {\r\n return (this.max.x - this.min.x) * (this.max.y - this.min.y);\r\n }\r\n\r\n set(min: Vector2, max: Vector2): Box2\r\n {\r\n this.min.copy(min);\r\n this.max.copy(max);\r\n return this;\r\n }\r\n setFromPoints(points: Iterable): Box2\r\n {\r\n this.makeEmpty();\r\n for (let p of points)\r\n {\r\n this.expandByPoint(p);\r\n }\r\n return this;\r\n }\r\n private static _setFromCenterAndSize_v1 = new Vector2();\r\n setFromCenterAndSize(center: Vector2, size: Vector2): Box2\r\n {\r\n const v1 = Box2._setFromCenterAndSize_v1;\r\n const halfSize = v1.copy(size).multiplyScalar(0.5);\r\n this.min.copy(center).sub(halfSize);\r\n this.max.copy(center).add(halfSize);\r\n return this;\r\n }\r\n clone(): Box2\r\n {\r\n return new (this.constructor as any)().copy(this);\r\n }\r\n copy(box: Box2): Box2\r\n {\r\n this.min.copy(box.min);\r\n this.max.copy(box.max);\r\n return this;\r\n }\r\n makeEmpty(): Box2\r\n {\r\n this.min.x = this.min.y = + Infinity;\r\n this.max.x = this.max.y = - Infinity;\r\n return this;\r\n }\r\n isEmpty(): boolean\r\n {\r\n // this is a more robust check for empty than (volume <= 0) because volume can get positive with two negative axes\r\n return (this.max.x < this.min.x) || (this.max.y < this.min.y);\r\n }\r\n getCenter(result: Vector2 = new Vector2()): Vector2\r\n {\r\n return this.isEmpty() ? result.set(0, 0) : result.addVectors(this.min, this.max).multiplyScalar(0.5);\r\n }\r\n getSize(result: Vector2 = new Vector2()): Vector2\r\n {\r\n return this.isEmpty() ? result.set(0, 0) : result.subVectors(this.max, this.min);\r\n }\r\n expandByPoint(point: Point): Box2\r\n {\r\n this.min.min(point);\r\n this.max.max(point);\r\n return this;\r\n }\r\n expandByVector(vector: Vector2): Box2\r\n {\r\n this.min.sub(vector);\r\n this.max.add(vector);\r\n return this;\r\n }\r\n expandByScalar(scalar: number): Box2\r\n {\r\n this.min.addScalar(- scalar);\r\n this.max.addScalar(scalar);\r\n return this;\r\n }\r\n containsPoint(point: Vector2): boolean\r\n {\r\n if (point.x < this.min.x || point.x > this.max.x ||\r\n point.y < this.min.y || point.y > this.max.y)\r\n {\r\n return false;\r\n }\r\n return true;\r\n }\r\n containsBox(box: Box2): boolean\r\n {\r\n if ((this.min.x <= box.min.x) && (box.max.x <= this.max.x) &&\r\n (this.min.y <= box.min.y) && (box.max.y <= this.max.y))\r\n {\r\n return true;\r\n }\r\n return false;\r\n }\r\n getParameter(point: Vector2, result: Vector2 = new Vector2()): Vector2\r\n {\r\n // This can potentially have a divide by zero if the box\r\n // has a size dimension of 0.\r\n return result.set(\r\n (point.x - this.min.x) / (this.max.x - this.min.x),\r\n (point.y - this.min.y) / (this.max.y - this.min.y)\r\n );\r\n }\r\n intersectsBox(box: Box2): boolean\r\n {\r\n // using 6 splitting planes to rule out intersections.\r\n if (box.max.x < this.min.x || box.min.x > this.max.x ||\r\n box.max.y < this.min.y || box.min.y > this.max.y)\r\n {\r\n return false;\r\n }\r\n return true;\r\n }\r\n clampPoint(point: Vector2, result: Vector2 = new Vector2()): Vector2\r\n {\r\n return result.copy(point).clamp(this.min, this.max);\r\n }\r\n private static _distanceToPoint_v1 = new Vector2();\r\n distanceToPoint(point: Vector2): number\r\n {\r\n const v1 = Box2._distanceToPoint_v1;\r\n const clampedPoint = v1.copy(point).clamp(this.min, this.max);\r\n return clampedPoint.sub(point).length();\r\n }\r\n intersect(box: Box2): Box2\r\n {\r\n this.min.max(box.min);\r\n this.max.min(box.max);\r\n return this;\r\n }\r\n union(box: Box2): Box2\r\n {\r\n this.min.min(box.min);\r\n this.max.max(box.max);\r\n return this;\r\n }\r\n translate(offset: Point): Box2\r\n {\r\n this.min.add(offset);\r\n this.max.add(offset);\r\n return this;\r\n }\r\n equals(box: Box2): boolean\r\n {\r\n return box.min.equals(this.min) && box.max.equals(this.max);\r\n }\r\n};\r\n","import { Area } from \"../Common/Area\";\r\nimport { Box2 } from \"../Common/Box2\";\r\nimport { clipperCpp } from \"../Common/ClipperCpp\";\r\nimport { NestFiler } from \"../Common/Filer\";\r\nimport { Point } from \"../Common/Point\";\r\nimport { equaln } from \"../Common/Util\";\r\nimport { Vector2 } from \"../Common/Vector2\";\r\n\r\n/**\r\n * 轮廓路径类\r\n * 可以求NFP,和保存NFPCahce\r\n * 因为NFP结果是按照最低点移动的,所以将点旋转后,按照盒子将点移动到0点.\r\n */\r\nexport class Path\r\n{\r\n Id: number;\r\n Points: Point[];\r\n OutsideNFPCache: { [key: number]: Point[][]; } = {};\r\n InsideNFPCache: { [key: number]: Point[][]; } = {};\r\n\r\n constructor(public OrigionPoints?: Point[], rotation: number = 0)\r\n {\r\n if (OrigionPoints)\r\n this.Init(OrigionPoints, rotation);\r\n }\r\n\r\n Origion: Path;\r\n //点表在旋转后的原始最小点.使用这个点将轮廓移动到0点\r\n OrigionMinPoint: Vector2;\r\n Rotation: number;\r\n\r\n Size: Vector2;//序列化\r\n private Init(origionPoints: Point[], rotation: number)\r\n {\r\n this.Rotation = rotation;\r\n if (rotation === 0)\r\n this.Points = origionPoints.map(p => { return { ...p }; });\r\n else\r\n {\r\n let c = Math.cos(rotation);\r\n let s = Math.sin(rotation);\r\n\r\n let npts: Point[] = [];\r\n for (let p of origionPoints)\r\n {\r\n let x = p.x;\r\n let y = p.y;\r\n const x1 = x * c - y * s;\r\n const y1 = x * s + y * c;\r\n npts.push({ x: x1, y: y1 });\r\n }\r\n this.Points = npts;\r\n }\r\n\r\n let box = new Box2();\r\n let v2 = new Vector2();\r\n for (let p of this.Points)\r\n {\r\n v2.x = p.x;\r\n v2.y = p.y;\r\n box.expandByPoint(v2);\r\n }\r\n\r\n this.OrigionMinPoint = box.min;\r\n this.Size = box.max.sub(box.min);\r\n\r\n for (let p of this.Points)\r\n {\r\n p.x -= box.min.x;\r\n p.y -= box.min.y;\r\n }\r\n }\r\n\r\n GetNFPs(path: Path, outside: boolean): (Point[])[]\r\n {\r\n // 寻找内轮廓时,面积应该比本path小,这个判断移交给使用者自己判断\r\n // if (!outside && this.Area < path.Area) return [];\r\n let nfps = clipperCpp.lib.minkowskiSumPath(this.BigIntPoints, path.MirrorPoints, true);\r\n\r\n //必须删除自交,否则将会出错\r\n nfps = clipperCpp.lib.simplifyPolygons(nfps);\r\n nfps = nfps.filter((nfp) =>\r\n {\r\n let area = Area(nfp);\r\n // if (area > 1) return outside;//第一个不一定是外轮廓,但是面积为正时肯定为外轮廓 (因为使用了简化多段线,所以这个代码已经不能有了)\r\n if (Math.abs(area) < 10) return false;//应该不用在移除这个了\r\n\r\n let { x, y } = nfp[0];\r\n if (outside)\r\n {\r\n if (this.Area > path.Area)\r\n {\r\n let p = { x: path.InPoint.x + x, y: path.InPoint.y + y };\r\n if (p.x < 0 || p.y < 0 || p.x > this.BigSize.x || p.y > this.BigSize.y)\r\n return true;\r\n let dir = clipperCpp.lib.pointInPolygon(p, this.BigIntPoints);\r\n return dir === 0;\r\n }\r\n else\r\n {\r\n let p = { x: this.InPoint.x - x, y: this.InPoint.y - y };\r\n if (p.x < 0 || p.y < 0 || p.x > path.BigSize.x || p.y > path.BigSize.y)\r\n return true;\r\n let dir = clipperCpp.lib.pointInPolygon(p, path.BigIntPoints);\r\n return dir === 0;\r\n }\r\n }\r\n else\r\n {\r\n let p = { x: path.InPoint.x + x, y: path.InPoint.y + y };\r\n if (p.x < 0 || p.y < 0 || p.x > this.BigSize.x || p.y > this.BigSize.y)\r\n return false;\r\n let dir = clipperCpp.lib.pointInPolygon(p, this.BigIntPoints);\r\n return dir === 1;\r\n }\r\n });\r\n return nfps;\r\n }\r\n\r\n GetOutsideNFP(path: Path): (Point[])[]\r\n {\r\n let nfps = this.OutsideNFPCache[path.Id];\r\n if (nfps) return nfps;\r\n\r\n if (this.IsRect && path.IsRect)\r\n {\r\n let [ax, ay] = [this.Size.x * 1e4, this.Size.y * 1e4];\r\n let [bx, by] = [path.Size.x * 1e4, path.Size.y * 1e4];\r\n nfps = [[\r\n { x: -bx, y: -by },\r\n { x: ax, y: -by },\r\n { x: ax, y: ay },\r\n { x: -bx, y: ay },\r\n ]];\r\n }\r\n else\r\n nfps = this.GetNFPs(path, true);\r\n this.OutsideNFPCache[path.Id] = nfps;\r\n //虽然有这种神奇的特性,但是好像并不会提高性能。\r\n // path.OutsideNFPCache[this.id] = (this, nfps.map(nfp =>\r\n // {\r\n // return nfp.map(p =>\r\n // {\r\n // return { x: -p.x, y: -p.y };\r\n // });\r\n // }));\r\n return nfps;\r\n }\r\n GetInsideNFP(path: Path): (Point[])[]\r\n {\r\n if (path.Area > this.Area) return;\r\n let nfp = this.InsideNFPCache[path.Id];\r\n if (nfp) return nfp;\r\n\r\n let nfps: (Point[])[];\r\n if (this.IsRect)\r\n {\r\n let [ax, ay] = [this.Size.x * 1e4, this.Size.y * 1e4];\r\n let [bx, by] = [path.Size.x * 1e4, path.Size.y * 1e4];\r\n\r\n let l = ax - bx;\r\n let h = ay - by;\r\n\r\n const MinNumber = 200;//清理的数值是100,所以200是可以接受的, 200=0.020问题不大(过盈配合)\r\n if (l < -MinNumber || h < -MinNumber)\r\n return;\r\n\r\n if (l < MinNumber)\r\n l = MinNumber;\r\n else\r\n l += MinNumber;\r\n\r\n if (h < MinNumber)\r\n h = MinNumber;\r\n else\r\n h += MinNumber;\r\n\r\n nfps = [[\r\n { x: 0, y: 0 },\r\n { x: l, y: 0 },\r\n { x: l, y: h },\r\n { x: 0, y: h }\r\n ]];\r\n }\r\n else\r\n nfps = this.GetNFPs(path, false);\r\n\r\n if (path.Id !== undefined)\r\n this.InsideNFPCache[path.Id] = nfps;\r\n return nfps;\r\n }\r\n\r\n private _InPoint: Point;\r\n\r\n /**\r\n * 用这个点来检测是否在Path内部\r\n */\r\n private get InPoint()\r\n {\r\n if (this._InPoint) return this._InPoint;\r\n let mp = { x: (this.Points[0].x + this.Points[1].x) / 2, y: (this.Points[0].y + this.Points[1].y) / 2 };\r\n let normal = new Vector2(this.Points[1].x - this.Points[0].x, this.Points[1].y - this.Points[0].y).normalize();\r\n // [normal.x, normal.y] = [normal.y, -normal.x];\r\n mp.x -= normal.y;\r\n mp.y += normal.x;\r\n\r\n mp.x *= 1e4;\r\n mp.y *= 1e4;\r\n this._InPoint = mp;\r\n return mp;\r\n }\r\n\r\n protected _BigIntPoints: Point[];\r\n get BigIntPoints()\r\n {\r\n if (this._BigIntPoints) return this._BigIntPoints;\r\n this._BigIntPoints = this.Points.map(p =>\r\n {\r\n return {\r\n x: Math.round(p.x * 1e4),\r\n y: Math.round(p.y * 1e4),\r\n };\r\n });\r\n return this._BigIntPoints;\r\n }\r\n\r\n private _BigSize: Vector2;\r\n get BigSize()\r\n {\r\n if (this._BigSize) return this._BigSize;\r\n this._BigSize = new Vector2(this.Size.x * 1e4, this.Size.y * 1e4);\r\n return this._BigSize;\r\n }\r\n\r\n protected _MirrorPoints: Point[];\r\n get MirrorPoints()\r\n {\r\n if (!this._MirrorPoints)\r\n this._MirrorPoints = this.BigIntPoints.map(p =>\r\n {\r\n return { x: -p.x, y: -p.y };\r\n });\r\n\r\n return this._MirrorPoints;\r\n }\r\n\r\n protected _BoundingBox: Box2;\r\n get BoundingBox()\r\n {\r\n if (!this._BoundingBox)\r\n this._BoundingBox = new Box2(new Vector2, this.Size);\r\n return this._BoundingBox;\r\n }\r\n\r\n protected _Area: number;\r\n get Area()\r\n {\r\n if (this._Area === undefined)\r\n this._Area = Area(this.Points);\r\n return this._Area;\r\n }\r\n set Area(a: number)\r\n {\r\n this._Area = a;\r\n }\r\n\r\n private _IsRect: boolean;\r\n get IsRect()\r\n {\r\n if (this._IsRect === undefined)\r\n {\r\n let s = this.BoundingBox.getSize(new Vector2);\r\n this._IsRect = equaln(this.Area, s.x * s.y, 1);\r\n }\r\n return this._IsRect;\r\n }\r\n\r\n ReadFile(file: NestFiler): void\r\n {\r\n let ver = file.Read();\r\n this.Id = file.Read();\r\n let arr = file.Read();\r\n this.Points = [];\r\n for (let i = 0; i < arr.length; i += 2)\r\n {\r\n let p = { x: arr[i], y: arr[i + 1] };\r\n this.Points.push(p);\r\n }\r\n\r\n this.Size = new Vector2(file.Read(), file.Read());\r\n this._Area = file.Read();\r\n let id = file.Read();\r\n if (id !== -1)\r\n {\r\n this.Origion = id;\r\n this.Rotation = file.Read();\r\n this.OrigionMinPoint = new Vector2(file.Read(), file.Read());\r\n }\r\n }\r\n WriteFile(file: NestFiler): void\r\n {\r\n file.Write(1);//ver\r\n file.Write(this.Id);\r\n let arr: number[] = [];\r\n for (let p of this.Points)\r\n arr.push(p.x, p.y);\r\n file.Write(arr);\r\n\r\n file.Write(this.Size.x);\r\n file.Write(this.Size.y);\r\n file.Write(this._Area);\r\n if (this.Origion && this.Origion.Id)\r\n {\r\n //如果有原始的id,则传递它,以便后续进行NFP复用.\r\n file.Write(this.Origion.Id);\r\n file.Write(this.Rotation);\r\n file.Write(this.OrigionMinPoint.x);\r\n file.Write(this.OrigionMinPoint.y);\r\n }\r\n else\r\n file.Write(-1);\r\n }\r\n}\r\n\r\n/**\r\n * 平移点表,返回新点表\r\n */\r\nexport function TranslatePath(pts: Point[], p: Point): Point[]\r\n{\r\n return pts.map(px =>\r\n {\r\n return { x: p.x + px.x, y: p.y + px.y };\r\n });\r\n}\r\n\r\nexport function TranslatePath_Self(pts: Point[], mx: number, my: number): Point[]\r\n{\r\n for (let pt of pts)\r\n {\r\n pt.x += mx;\r\n pt.y += my;\r\n }\r\n return pts;\r\n}\r\n\r\n//缩放点表,返回原始点表\r\nexport function PathScale(pts: Point[], scale: number): Point[]\r\n{\r\n for (let p of pts)\r\n {\r\n p.x *= scale;\r\n p.y *= scale;\r\n }\r\n return pts;\r\n}\r\n","import { Point } from \"../Common/Point\";\r\nimport { Path } from \"./Path\";\r\n\r\nexport class NestCache\r\n{\r\n //放置零件时,命中缓存的次数\r\n static CachePartPosCount = 0;\r\n //放置零件时,命中无法放置缓存的次数\r\n static CacheNoSetCount = 0;//noset\r\n\r\n static PositionCache: { [key: string]: Point; } = {};\r\n static NoPutCache: { [key: string]: Set; } = {};\r\n private static CacheRect = new Map();\r\n\r\n /**\r\n * 用于创建原点在0点的矩形路径\r\n */\r\n static CreatePath(x: number, y: number, knifRadius = 3.5): Path\r\n {\r\n let minX = -knifRadius;\r\n let maxX = x + knifRadius;\r\n let minY = -knifRadius;\r\n let maxY = y + knifRadius;\r\n return new Path([\r\n { x: minX, y: minY },\r\n { x: maxX, y: minY },\r\n { x: maxX, y: maxY },\r\n { x: minX, y: maxY },\r\n ]);\r\n }\r\n\r\n static Clear()\r\n {\r\n this.CachePartPosCount = 0;\r\n this.CacheNoSetCount = 0;\r\n this.CacheRect.clear();\r\n this.PositionCache = {};\r\n }\r\n}\r\n","import { Point } from \"../Common/Point\";\r\nimport { Polyline } from \"../../DatabaseServices/Entity/Polyline\";\r\nimport { AsVector2 } from \"../../Geometry/GeUtils\";\r\n\r\nexport function Path2Polyline(path: Point[]): Polyline\r\n{\r\n let pl = new Polyline();\r\n pl.LineData = path.map(p =>\r\n {\r\n return { pt: AsVector2(p), bul: 0 };\r\n });\r\n pl.CloseMark = true;\r\n return pl;\r\n}\r\n","import { EndType, JoinType } from \"js-angusj-clipper/web\";\r\nimport { Arc } from \"../../DatabaseServices/Entity/Arc\";\r\nimport { Circle } from \"../../DatabaseServices/Entity/Circle\";\r\nimport { Polyline } from \"../../DatabaseServices/Entity/Polyline\";\r\nimport { polar } from \"../../Geometry/GeUtils\";\r\nimport { clipperCpp } from \"../Common/ClipperCpp\";\r\nimport { Point } from \"../Common/Point\";\r\nimport { PathScale } from \"../Core/Path\";\r\nimport { Circle2Points } from \"./Curves2Parts\";\r\n\r\nexport let Rotations = [\r\n [0, Math.PI],\r\n [Math.PI / 2, Math.PI * 1.5],\r\n [0, Math.PI, Math.PI / 2, Math.PI * 1.5],\r\n];\r\n\r\n/**\r\n * 针对板件的曲线变点表做的特殊优化\r\n */\r\nexport function Curves2Points(cu: Circle | Polyline, outside: boolean, knifeRadius: number): [(Circle | Polyline), Point[]]\r\n{\r\n if (cu instanceof Circle)\r\n return [cu.Clone(), Circle2Points(cu, knifeRadius, 8, outside)];\r\n else\r\n return Polyline2Points(cu, outside, knifeRadius);\r\n}\r\n\r\nexport function Polyline2Points(pl: Polyline, outside: boolean, knifeRadius: number): [Polyline, Point[]]\r\n{\r\n let pts: Point[] = [];\r\n\r\n if (!outside) knifeRadius = -knifeRadius;\r\n if (pl.IsClockWise) pl.Reverse();\r\n for (let i = 0; i < pl.EndParam; i++)\r\n {\r\n pts.push(pl.GetPointAtParam(i));\r\n\r\n let bul = pl.GetBulgeAt(i);\r\n if (bul !== 0)\r\n {\r\n let arc = pl.GetCurveAtIndex(i) as Arc;\r\n\r\n let allAngle = arc.AllAngle;\r\n let arcLength = arc.Length;\r\n\r\n let minCount = Math.floor(allAngle * 4 / Math.PI);\r\n\r\n let splitCount = Math.round(allAngle / 0.4);\r\n if (arcLength < 300)\r\n splitCount = Math.max(2, minCount);\r\n else\r\n splitCount = Math.max(arcLength / 200, splitCount, 2, minCount);\r\n\r\n let radius = arc.Radius;\r\n if (outside === bul > 0)\r\n radius = radius / Math.cos(allAngle / (splitCount * 2));\r\n\r\n let cp = arc.Center;\r\n for (let j = 0.5; j < splitCount; j++)\r\n {\r\n let a = arc.GetAngleAtParam(j * (1 / splitCount));\r\n let p = polar(cp.clone(), a, radius);\r\n pts.push(p);\r\n }\r\n }\r\n }\r\n\r\n if (knifeRadius !== 0)\r\n {\r\n pts = clipperCpp.lib.offsetToPaths({\r\n delta: knifeRadius * 1e4,\r\n offsetInputs: [{ data: PathScale(pts, 1e4), joinType: JoinType.Miter, endType: EndType.ClosedPolygon }]\r\n })[0];\r\n PathScale(pts, 1e-4);\r\n }\r\n return [pl, pts];\r\n}\r\n","import polylabel from \"polylabel\";\r\nimport { Vector3 } from \"three\";\r\nimport { Area } from \"../../../Nest/Common/Area\";\r\nimport { Point } from \"../../../Nest/Common/Point\";\r\nimport { Max } from \"../../../Nest/Common/Util\";\r\nimport { Path2Polyline } from \"../../../Nest/Converter/Path2Polyline\";\r\nimport { NestCache } from \"../../../Nest/Core/NestCache\";\r\nimport { Path, PathScale, TranslatePath_Self } from \"../../../Nest/Core/Path\";\r\nimport { Contour } from \"../../Contour\";\r\nimport { Polyline } from \"../../Entity/Polyline\";\r\nimport { Shape } from \"../../Shape\";\r\nimport { ShapeManager } from \"../../ShapeManager\";\r\n\r\nexport const TEXT_BOX = NestCache.CreatePath(570, 110);\r\n\r\n//分析文字放置位置\r\nexport function ParseRegionTextPos(contour: Point[], holes: (Point[])[])\r\n{\r\n let hasTextBox = true;\r\n let path = new Path(contour);\r\n let nfps: Polyline[] = path.GetInsideNFP(TEXT_BOX)?.map(nfp => Path2Polyline(TranslatePath_Self(PathScale(nfp, 1e-4), path.OrigionMinPoint.x, path.OrigionMinPoint.y))); //可能无法获得\r\n if (!nfps || nfps.length === 0)\r\n {\r\n nfps = [Path2Polyline(contour)];\r\n hasTextBox = false;\r\n }\r\n\r\n let holenfps: Contour[] = [];\r\n for (let hole of holes)\r\n {\r\n let hpath = new Path(hole);\r\n let nfps = hpath.GetOutsideNFP(TEXT_BOX);\r\n let nfp = nfps[Max(nfps, (n1, n2) => Area(n2) > Area(n1))];\r\n\r\n let pl = Path2Polyline(TranslatePath_Self(PathScale(nfp, 1e-4), hpath.OrigionMinPoint.x, hpath.OrigionMinPoint.y));\r\n let box = pl.BoundingBox;\r\n\r\n let boxpl = new Polyline().RectangleFrom2Pt(new Vector3(box.min.x - 1e5, box.min.y - 1), new Vector3(box.max.x + 1e5, box.min.y + 1));\r\n\r\n let con1 = Contour.CreateContour(pl, false);\r\n let con2 = Contour.CreateContour(boxpl, false);\r\n\r\n holenfps.push(\r\n ...con1.UnionBoolOperation(con2).contours\r\n );\r\n }\r\n\r\n let shapes = nfps.map(pl => new Shape(Contour.CreateContour(pl, false)));\r\n let subShapes = new ShapeManager;\r\n holenfps.forEach(pl =>\r\n {\r\n subShapes.UnionBoolOperation(new ShapeManager([new Shape(pl)]));\r\n });\r\n\r\n let resShapes: Shape[] = [];\r\n for (let shape of shapes)\r\n {\r\n // TestDraw(shape.Outline.Curve, 6);\r\n resShapes.push(...shape.SubstactBoolOperation(subShapes.ShapeList)); //可能减完丢了\r\n }\r\n\r\n if (resShapes.length === 0)\r\n resShapes = shapes;\r\n\r\n let maxDist = -Infinity;\r\n let minp: number[];\r\n let curve: Polyline;\r\n\r\n for (let shape of resShapes)\r\n {\r\n let pl = shape.Outline.Curve as Polyline;\r\n if (pl.Area < 1)\r\n {\r\n if (!minp) minp = pl.BoundingBox.getCenter(new Vector3).toArray();\r\n continue;\r\n }\r\n // TestDraw(pl, 3); //绘制裁剪后的线\r\n let p = polylabel([pl.LineData.map(p => p.pt.toArray())], 1.0);//这里不再需要转换 因为我们传递进来的就是没有凸度的点表\r\n\r\n let dist = p[\"distance\"];\r\n if (dist > maxDist)\r\n {\r\n maxDist = dist;\r\n let pos = pl.Position;\r\n minp = p;\r\n minp[0] += pos.x;\r\n minp[1] += pos.y;\r\n\r\n curve = pl;\r\n }\r\n }\r\n\r\n let p = new Vector3(minp[0], minp[1]);\r\n //左右均分\r\n // TestDraw(new Point(p));\r\n // let line = new Line(p, p.clone().setX(minp[0] + 1));\r\n\r\n // let pts = curve.IntersectWith(line, IntersectOption.ExtendArg);\r\n // pts.push(p);\r\n // pts.sort(ComparePoint(\"xyz\"));\r\n // let index = pts.indexOf(p);\r\n // p = midPoint(pts[index - 1], pts[index + 1]);\r\n // TestDraw(new Point(p));\r\n\r\n // //上下居中\r\n // line = new Line(p, p.clone().setY(p.y + 1));\r\n // pts = curve.IntersectWith(line, IntersectOption.ExtendArg);\r\n // pts.push(p);\r\n // pts.sort(ComparePoint(\"xyz\"));\r\n // index = pts.indexOf(p);\r\n // p = midPoint(pts[index - 1], pts[index + 1]);\r\n // TestDraw(new Point(p));\r\n\r\n if (hasTextBox)\r\n {\r\n p.x += 280;\r\n p.y += 60;\r\n }\r\n return p;\r\n}\r\n","import Flatbush from 'flatbush';\r\nimport { Vector3 } from 'three';\r\nimport { Polyline } from '../../Entity/Polyline';\r\nimport { RoomFlatBase, UpdateTempPolyline } from \"../Entity/Flat/RoomFlatBase\";\r\nimport { RoomRegion } from \"../Entity/Region/RoomRegion\";\r\n\r\n//区域更迭(新老新区交换)\r\nexport class RegionReplacement\r\n{\r\n fb: Flatbush;\r\n contours: [Polyline, Polyline[]][] = [];\r\n constructor(private oldRegions: RoomRegion[])\r\n {\r\n if (oldRegions.length === 0) return;\r\n this.fb = new Flatbush(oldRegions.length);\r\n oldRegions.forEach(r =>\r\n {\r\n let flat = (r.Floor?.Object ?? r.Top.Object) as RoomFlatBase;\r\n //TODO:备份轮廓和网洞\r\n let box = flat.BoundingBox;\r\n this.fb.add(box.min.x, box.min.y, box.max.x, box.max.y);\r\n\r\n this.contours.push([flat.Contour.Clone().ApplyMatrix(flat.OCSNoClone), flat.HoleDatas.map(h => UpdateTempPolyline(h).Clone().ApplyMatrix(flat.OCSNoClone))]);\r\n });\r\n this.fb.finish();\r\n }\r\n\r\n //获得旧的区域\r\n GetReplaceOldReg(p: Vector3)\r\n {\r\n if (!this.fb) return;\r\n\r\n let ids = this.fb.search(p.x - 1, p.y - 1, p.x + 1, p.y + 1);\r\n for (let id of ids)\r\n {\r\n let [con, holes] = this.contours[id];\r\n if (con.PtInCurve(p) && !holes.some(h => h.PtInCurve(p)))\r\n {\r\n return this.oldRegions[id];\r\n }\r\n }\r\n }\r\n}\r\n","import { EntitysUpdateWrap } from \"../../../Common/EntityUpdateWrap\";\r\nimport { Route } from \"../../../Geometry/CurveMap\";\r\nimport { RegionParse } from \"../../../Geometry/RegionParse\";\r\nimport { Polyline2Points } from \"../../../Nest/Converter/Curves2Points\";\r\nimport { ContourTreeNode } from \"../../../ueapi\";\r\nimport { Contour } from \"../../Contour\";\r\nimport { Database } from \"../../Database\";\r\nimport { Curve } from \"../../Entity/Curve\";\r\nimport { Polyline } from \"../../Entity/Polyline\";\r\nimport { UpdateTempPolyline } from \"../Entity/Flat/RoomFlatBase\";\r\nimport { RoomFlatFloor } from \"../Entity/Flat/RoomFlatFloor\";\r\nimport { RoomFlatTop } from \"../Entity/Flat/RoomFlatTop\";\r\nimport { RoomRegion } from \"../Entity/Region/RoomRegion\";\r\nimport { CURVE_FACE_TYPE_KEY, RoomWallBase, WallFaceType } from \"../Entity/Wall/RoomWallBase\";\r\nimport { ParseRegionTextPos } from \"./ParseRegionTextPos\";\r\nimport { RegionReplacement } from \"./RegionReplacement\";\r\n\r\n//获取所有的曲线 ?:并且知道每个曲线是墙体的左边还是右边 (有没有用?)\r\n\r\n//分析面域\r\n\r\n//分析可用的内空间(墙面方向指向空间内部为内空间) 否则为外墙空间\r\n\r\n//构造面域树? 不需要了? 还是需要的 需要一个最大的天花板\r\n\r\n//区域对象 (地面+天花?)\r\n\r\n\r\n\r\n/**\r\n * 区域分析(房间+外墙+全屋顶)\r\n */\r\nexport class RoomRegionParse\r\n{\r\n rr: RegionReplacement;//区域替换工具\r\n reped: Set;//已经替换的区域\r\n oldregs: RoomRegion[];//旧的区域\r\n\r\n /**\r\n * @param _UpdateDb 当提供db时,我们更新了区域的信息\r\n */\r\n constructor(private _UpdateDb: Database)\r\n {\r\n if (this._UpdateDb)\r\n {\r\n this.oldregs = this._UpdateDb.ModelSpace.Entitys.filter(e => !e.IsErase && e instanceof RoomRegion) as RoomRegion[];\r\n this.rr = new RegionReplacement(this.oldregs);\r\n this.reped = new Set();\r\n }\r\n }\r\n\r\n Do(walls: RoomWallBase[])\r\n {\r\n let curves: Curve[] = [];\r\n\r\n let aloneWalls: RoomWallBase[] = [];\r\n\r\n let leftCurves = new Set();\r\n\r\n let maxZ = -Infinity;\r\n let minZ = walls[0].Z;\r\n for (let wall of walls)\r\n {\r\n maxZ = Math.max(wall.Z + wall.Height, maxZ);\r\n if (!wall.LeftCurves)\r\n {\r\n aloneWalls.push(wall);\r\n continue;\r\n }\r\n\r\n for (let c of wall.LeftCurves)\r\n {\r\n curves.push(c);\r\n leftCurves.add(c);\r\n }\r\n for (let c of wall.RightCurves)\r\n curves.push(c);\r\n\r\n for (let c of wall.LidCurves)\r\n curves.push(c);\r\n }\r\n\r\n const REGION_PARSE_NUM = 3;\r\n const POLYLINE_JOIN_FUZZ = Math.pow(10, -REGION_PARSE_NUM);\r\n\r\n let parse = new RegionParse(curves, REGION_PARSE_NUM);\r\n\r\n for (let [orgArc, arcs] of parse.ExpLineMap)\r\n {\r\n if (leftCurves.has(orgArc))\r\n for (let arc of arcs)\r\n leftCurves.add(arc);\r\n }\r\n\r\n let regionPolylines: Polyline[] = [];\r\n\r\n let map = new Map();\r\n //分析内外墙1内2外\r\n for (let routes of parse.RegionsOutline)\r\n {\r\n let pl = Polyline.Combine(routes.map(r => r.curve), POLYLINE_JOIN_FUZZ);\r\n\r\n // for (let i = 0; i < routes.length; i++)\r\n // {\r\n if (leftCurves.has(routes[0].curve))\r\n pl.ColorIndex = routes[0].isReverse ? 1 : 2;\r\n else //if (right.has(routes[0].curve))\r\n pl.ColorIndex = routes[0].isReverse ? 2 : 1;\r\n // else //因为盖子不分左右 所以我们忽略盖子 (现在盖子和右侧的一致)\r\n // continue;\r\n\r\n // break;\r\n // }\r\n\r\n // TestDraw(routes[0].curve); //test\r\n regionPolylines.push(pl);\r\n map.set(pl, routes);\r\n }\r\n\r\n //不可能有内部轮廓 如果有 就证明错了\r\n for (let routes of parse.RegionsInternal)\r\n {\r\n let pl = Polyline.Combine(routes.map(r => r.curve));\r\n pl.ColorIndex = pl.Area2 > 0 ? 3 : 4;\r\n // throw \"未知错误 出现外部轮廓\"\r\n }\r\n\r\n let cons = regionPolylines.map(pl => new ContourTreeNode(Contour.CreateContour(pl, false)));\r\n ContourTreeNode.ParseContourTree(cons);\r\n\r\n let roofs: Polyline[] = [];\r\n\r\n //解析 天花板区域 内空区域\r\n for (let con of cons)\r\n {\r\n let routes = map.get(con.contour.Curve as Polyline);\r\n if (con.contour.Curve.ColorIndex === 2)//天花板区域(或者柱子)\r\n {\r\n if (con.Depth !== 0 || con.area < 1e6)//柱子\r\n for (let r of routes)\r\n r.curve[CURVE_FACE_TYPE_KEY] = WallFaceType.Pillar;\r\n else\r\n for (let r of routes)\r\n r.curve[CURVE_FACE_TYPE_KEY] = WallFaceType.Outside;\r\n\r\n //我们需要返回这个轮廓,以便在ue中可以绘制真正的屋顶\r\n con.contour.Curve[\"MaxZ\"] = maxZ;\r\n con.contour.Curve[\"MinZ\"] = minZ;\r\n roofs.push(con.contour.Curve as Polyline);\r\n }\r\n else if (con.contour.Curve.ColorIndex === 1)//内空区域\r\n {\r\n for (let r of routes)\r\n r.curve[CURVE_FACE_TYPE_KEY] = WallFaceType.Inside;\r\n\r\n if (this._UpdateDb && con.contour.Area > 1e4)\r\n {\r\n //组合外圈和网洞 画出来 就行了\r\n let floor = new RoomFlatFloor();\r\n let top = new RoomFlatTop();\r\n floor.OCS = con.contour.Curve.OCSNoClone;//设置坐标系 以便我们正常的应用轮廓\r\n top.OCS = con.contour.Curve.OCSNoClone;\r\n\r\n floor.Contour = con.contour.Curve as Polyline;\r\n top.Contour = con.contour.Curve as Polyline;\r\n\r\n floor.Holes = con.children.map(c => c.contour.Curve as Polyline);\r\n top.Holes = con.children.map(c => c.contour.Curve as Polyline);\r\n\r\n floor.Z = minZ;\r\n top.Z = maxZ;//等轮廓设置完在移动 否则设置失败\r\n\r\n let conPts = Polyline2Points(floor.Contour, false, 0)[1];\r\n let holePts = floor.HoleDatas.map(h => Polyline2Points(UpdateTempPolyline(h), false, 0)[1]);\r\n\r\n let pos = ParseRegionTextPos(conPts, holePts);\r\n pos.applyMatrix4(floor.OCSNoClone);\r\n let oldR = this.rr.GetReplaceOldReg(pos);\r\n\r\n let name = \"\";\r\n if (oldR)\r\n {\r\n if (this.reped.has(oldR)) //新增\r\n {\r\n //继承信息\r\n if (oldR.TextString)//继承名称\r\n {\r\n name = oldR.TextString;\r\n }\r\n }\r\n else//替换旧的\r\n {\r\n floor = oldR.Floor.Object as RoomFlatFloor;\r\n top = oldR.Top.Object as RoomFlatTop;\r\n\r\n EntitysUpdateWrap([floor, top, oldR], () =>\r\n {\r\n top.WriteAllObjectRecord();//因为修改了ocs 所以我们先记录下原始数据\r\n top.OCS = con.contour.Curve.OCSNoClone;\r\n\r\n floor.WriteAllObjectRecord();\r\n floor.OCS = con.contour.Curve.OCSNoClone;\r\n\r\n floor.UpdateContourHoles(con.contour.Curve as Polyline, con.children.map(c => c.contour.Curve as Polyline));\r\n top.UpdateContourHoles(con.contour.Curve as Polyline, con.children.map(c => c.contour.Curve as Polyline));\r\n\r\n floor.Z = minZ;\r\n top.Z = maxZ;//等轮廓设置完在移动 否则设置失败\r\n\r\n oldR.Position = pos;\r\n oldR.Area = floor.Area;\r\n });\r\n\r\n this.reped.add(oldR);\r\n continue;\r\n }\r\n }\r\n\r\n this._UpdateDb.ModelSpace.Append(floor);\r\n this._UpdateDb.ModelSpace.Append(top);\r\n let region = new RoomRegion(name, top.Id, floor.Id, floor.Area);\r\n region.Position = pos;\r\n this._UpdateDb.ModelSpace.Append(region);\r\n floor.RegionId = region.Id;\r\n top.RegionId = region.Id;\r\n }\r\n }\r\n }\r\n\r\n for (let [orgArc, arcs] of parse.ExpLineMap)\r\n orgArc[CURVE_FACE_TYPE_KEY] = arcs[0][CURVE_FACE_TYPE_KEY];\r\n\r\n for (let wall of walls)\r\n {\r\n // 因为我们现在没有分裂圆弧 所以我们不需要在合并线\r\n // wall.LeftCurves && arrayRemoveDuplicateBySort(wall.LeftCurves, (cu1: Curve, cu2: Curve) => cu1.Join(cu2) === Status.True);\r\n // wall.RightCurves && arrayRemoveDuplicateBySort(wall.RightCurves, (cu1: Curve, cu2: Curve) => cu1.Join(cu2) === Status.True);\r\n wall.Update();\r\n }\r\n\r\n return roofs;\r\n }\r\n\r\n End()\r\n {\r\n if (this._UpdateDb)\r\n {\r\n for (let r of this.oldregs)\r\n if (!this.reped.has(r))\r\n {\r\n r.Erase();\r\n r.Floor?.Object.Erase();\r\n r.Top?.Object.Erase();\r\n }\r\n }\r\n }\r\n}\r\n","import { Vector3 } from \"three\";\r\nimport { arrayRemoveDuplicateBySort, arraySortByNumber } from \"../../../Common/ArrayExt\";\r\nimport { CurveIntersection2 } from \"../../../Geometry/CurveIntersection\";\r\nimport { equaln } from \"../../../Geometry/GeUtils\";\r\nimport { IntersectOption } from \"../../../GraphicsSystem/IntersectWith\";\r\nimport { Curve } from \"../../Entity/Curve\";\r\n\r\n/**\r\n * 1.自动合理的延伸墙体,以便保证吸附失败的时候自动吸附(当被MOVE时,我们希望修复吸附失败的问题!)\r\n * 可延伸的距离等于墙体的厚度\r\n *\r\n * 2.在交点处把墙体打断,以便我们分析区域\r\n */\r\nexport class RoomWallExtendAndBreak\r\n{\r\n\r\n //曲线->分裂曲线的映射\r\n _Curve2SplitCurveMap = new Map();\r\n //分裂曲线->原始曲线的映射\r\n _SplitCurve2OrgCurveMap = new Map();\r\n\r\n ExtendCurves = new Set();\r\n AloneCurves: Curve[] = [];\r\n\r\n OrgCurveMapGroup: (Curve[])[] = [];\r\n\r\n constructor(curves: Curve[])\r\n {\r\n let intersect = new CurveIntersection2(curves, true, IntersectOption.ExtendBoth, 100, true);\r\n\r\n let breakCurves: Curve[] = [];\r\n //延伸+打断\r\n for (let [cu, pmap] of intersect.intersect2)\r\n {\r\n pmap.sort((p1, p2) => p1[0] - p2[0]);\r\n\r\n if (pmap.length > 0) breakCurves.push(cu);\r\n else this.AloneCurves.push(cu);\r\n\r\n //#region 1.延伸\r\n let hasExtend = false;\r\n let endParam = cu.EndParam;\r\n\r\n //最接近起点的点(我们使用这个点来决定我们是否延伸,这样有效避免了距离小于间距的一半时,但是距离却又大于设置参数时延伸时的尴尬!) 例如 | --|--------- 该例子不延伸到左边\r\n let index1 = FindMin(pmap, 0);\r\n let index2 = FindMin(pmap, endParam);\r\n\r\n let start = pmap[index1];\r\n let end = pmap[index2];\r\n\r\n if (start[0] < -1e-8)\r\n {\r\n cu.Extend(start[0]);\r\n hasExtend = true;\r\n }\r\n\r\n if (end[0] > (endParam + 1e-8))\r\n {\r\n cu.Extend(hasExtend ? cu.GetParamAtPoint(end[1]) : end[0]);\r\n hasExtend = true;\r\n\r\n pmap.splice(index2);//移除多余的交点参数\r\n }\r\n\r\n if (start[0] < -1e-8)\r\n pmap.splice(0, index1);//移除多余的交点参数\r\n\r\n if (hasExtend)//记录这个曲线被延伸了\r\n this.ExtendCurves.add(cu);\r\n }\r\n\r\n //有效的相交数据(用来切割)\r\n let intersectData = new Map();\r\n for (let cu of breakCurves)\r\n intersectData.set(cu, []);\r\n\r\n //去除无效的交点 移除多余的交点参数\r\n for (let [c1, c2, pts] of intersect.intersect3)\r\n {\r\n let c1arr = intersectData.get(c1);\r\n let c2arr = intersectData.get(c2);\r\n\r\n for (let p of pts)\r\n {\r\n let c1param = c1.GetParamAtPoint(p);\r\n if (!c1.ParamOnCurve(c1param)) continue;\r\n\r\n let c2param = c2.GetParamAtPoint(p);\r\n\r\n if (!c2.ParamOnCurve(c2param)) continue;\r\n\r\n c1arr.push(c1param);\r\n c2arr.push(c2param);\r\n }\r\n }\r\n\r\n //打断\r\n for (let [cu, params] of intersectData)\r\n {\r\n params = params.filter(p => p > 1e-3 && p < 0.999);\r\n // let isArc = cu instanceof Arc;\r\n // if (isArc)\r\n // {\r\n // let param = cu.GetParamAtPoint2((cu as Arc).Center.add(YAxisN));\r\n // if (cu.ParamOnCurve(param))\r\n // params.push(param);//保证切割\r\n // }\r\n if (params.length)\r\n {\r\n arraySortByNumber(params);\r\n arrayRemoveDuplicateBySort(params, (e1, e2) => equaln(e1, e2, 1e-4));\r\n // if (equaln(params[params.length - 1], 1, 1e-4)) //已经filter 不再需要\r\n // params[params.length - 1] = 1;\r\n }\r\n\r\n let splitCurves = params.length === 0 ? [cu.Clone()] : cu.GetSplitCurves(params);\r\n\r\n // if (isArc && splitCurves.length > 1)//将短圆弧转换为直线 我们由上层业务代码决定何时转换 不在此转换\r\n // {\r\n // // for (let i = 0; i < splitCurves.length; i++)\r\n // // {\r\n // // let c = splitCurves[i] as Arc;\r\n // // if (c.Radius < 100) //不能歧视 否则轮廓就错了\r\n // // splitCurves[i] = new Line(c.StartPoint, c.EndPoint);\r\n // // }\r\n // }\r\n\r\n //记录关联关系\r\n this._Curve2SplitCurveMap.set(cu, splitCurves);\r\n for (let scu of splitCurves)\r\n this._SplitCurve2OrgCurveMap.set(scu, cu);\r\n }\r\n\r\n //分组(只有相交的部分才会在一个组)\r\n let parsed = new Set();\r\n for (let cu of curves)\r\n {\r\n if (parsed.has(cu)) continue;\r\n parsed.add(cu);\r\n\r\n let group: Curve[] = [cu];\r\n\r\n for (let i = 0; i < group.length; i++)\r\n {\r\n let interMap = intersect.intersect.get(group[i]);\r\n if (!interMap) continue;\r\n for (let [ic] of interMap)\r\n {\r\n if (parsed.has(ic)) continue;\r\n parsed.add(ic);\r\n\r\n group.push(ic);\r\n }\r\n }\r\n\r\n if (group.length > 1)\r\n this.OrgCurveMapGroup.push(group);\r\n }\r\n }\r\n}\r\n\r\n//找到最接近某个参数的索引位置\r\nfunction FindMin(params: [number, Vector3][], closeToParam: number)\r\n{\r\n if (params.length < 2) return params.length - 1;\r\n\r\n let minDist = Infinity;\r\n let minIndex = -1;\r\n for (let i = 0; i < params.length; i++)\r\n {\r\n let absDist = Math.abs(params[i][0] - closeToParam);\r\n if (absDist < minDist)\r\n {\r\n minDist = absDist;\r\n minIndex = i;\r\n }\r\n }\r\n return minIndex;\r\n}\r\n","import Flatbush from 'flatbush';\r\nimport { Box3, Vector3 } from \"three\";\r\nimport { arrayPushArray } from '../../../Common/ArrayExt';\r\nimport { CurveMap, Vertice } from \"../../../Geometry/CurveMap\";\r\nimport { AsVector2, equalv3, midPoint, SelectNearP } from \"../../../Geometry/GeUtils\";\r\nimport { CalcRouteAngle, RegionParse } from \"../../../Geometry/RegionParse\";\r\nimport { IntersectOption } from \"../../../GraphicsSystem/IntersectWith\";\r\nimport { EntityEncode2 } from \"../../../GraphicsSystem/OffsetPolyline\";\r\nimport { Contour } from \"../../Contour\";\r\nimport { Database } from '../../Database';\r\nimport { Arc } from \"../../Entity/Arc\";\r\nimport { Curve } from \"../../Entity/Curve\";\r\nimport { Line } from \"../../Entity/Line\";\r\nimport { Polyline } from \"../../Entity/Polyline\";\r\nimport { RoomWallBase } from \"../Entity/Wall/RoomWallBase\";\r\nimport { CurveTrim, CurveTrimArc, CurveTrimLine } from \"./CurveTrim\";\r\nimport { CreateGetCurveParam, GetCurveParam, GetLineParam } from './GetCurveParam';\r\nimport { RoomRegionParse } from './RoomRegionParse';\r\nimport { RoomWallExtendAndBreak } from \"./RoomWallExtendAndBreak\";\r\n\r\nconst SHOW_PERF = false;\r\nconst ROOM_WALL_INDEX_KEY = \"__ROOM_WALL_INDEX_KEY__\";\r\nconst SAVE_SP_KEY = \"__SAVE_SP__\";\r\nconst SAVE_EP_KEY = \"__SAVE_EP__\";\r\n\r\n/**\r\n * 户型分析服务:\r\n * 1.自动延伸墙\r\n * 2.合理的构建墙\r\n * 3.自动分析地板\r\n *\r\n * 墙体被分裂后合并(join line)\r\n *\r\n * TODO:\r\n * 删除重复的墙(例如 2个rec wall)\r\n * 增量更新 diff walls(始作俑者 1) -> dep walls(需要更新 2) ->dep's dep walls(需要被依赖 3) +[可能被影响到的wall 2(比如被切割的墙) (依赖墙 3)]\r\n * ->1.用盒子搜索范围依赖(盒子1级依赖)\r\n * ->2.用盒子扩大搜索范围依赖(盒子2级依赖)\r\n * ->正确的分析1级依赖 2级依赖 (或者不要分析? 直接用盒子来?)\r\n * ->分析\r\n * ->更新1级 2级 的墙\r\n */\r\nexport class RoomWallParse\r\n{\r\n\r\n static _CacheWallNodePoints: Vector3[] = [];\r\n static _CacheWallMaps: [RoomWallExtendAndBreak, CurveMap][] = [];\r\n static _CacheCurveWallMaps: Map = new Map();\r\n static _CacheRoofs: Polyline[] = [];\r\n\r\n /**\r\n * @param [_ExtendsWalls=true] 更新墙体,在开图时不更新图纸\r\n * @param [_UpdateDb] 更新的图纸(新绘制Region)\r\n * @param [_IsCacheWallNodePoints] 需要把节点缓存下来?\r\n */\r\n constructor(private _ExtendsWalls: boolean, private _UpdateDb: Database, private _IsCacheWallNodePoints: boolean)\r\n {\r\n\r\n }\r\n\r\n /**\r\n * @param walls 需要解析的墙体列表\r\n * @param changeWalls 更新的墙体列表(如果提供 增量模式)\r\n */\r\n Parse(walls: RoomWallBase[], changeWalls: RoomWallBase[] = undefined)\r\n {\r\n if (this._IsCacheWallNodePoints)\r\n {\r\n RoomWallParse._CacheWallNodePoints = [];\r\n RoomWallParse._CacheWallMaps = [];\r\n RoomWallParse._CacheCurveWallMaps = new Map();\r\n RoomWallParse._CacheRoofs = [];\r\n }\r\n\r\n let regionPrase = new RoomRegionParse(this._UpdateDb);\r\n\r\n const GroupWalls = (walls: RoomWallBase[], fn: (wall: RoomWallBase) => number) =>\r\n {\r\n let map = new Map();\r\n for (let w of walls)\r\n {\r\n if (w.Length < 1e-6)\r\n {\r\n // w.Erase();//删除空长度的墙\r\n\r\n //避免窗户0长度错误\r\n w.LeftCurves = [];\r\n w.RightCurves = [];\r\n w.LidCurves = [];\r\n continue;\r\n };\r\n\r\n let value = fn(w);\r\n let arr = map.get(value);\r\n if (!arr)\r\n {\r\n arr = [];\r\n map.set(value, arr);\r\n }\r\n arr.push(w);\r\n }\r\n return map;\r\n };\r\n\r\n //按Z轴区分\r\n let zgroupMap = GroupWalls(walls, w => Math.round(w.Z * 100));\r\n\r\n for (let [, walls] of zgroupMap)\r\n {\r\n this.PraseWallsFromSameFloor(walls, changeWalls);\r\n let roofs = regionPrase.Do(walls);\r\n\r\n if (this._IsCacheWallNodePoints)\r\n arrayPushArray(RoomWallParse._CacheRoofs, roofs);\r\n }\r\n\r\n regionPrase.End();\r\n }\r\n\r\n private PraseWallsFromSameFloor(walls: RoomWallBase[], changeWalls: RoomWallBase[] = undefined)\r\n {\r\n SHOW_PERF && console.time(\"尖角化+裁剪面\");\r\n //{墙}->{轴线} {轴线}->{墙}\r\n let wallCurveMap = new Map();\r\n let curveWallMap = new Map();\r\n\r\n let axisCurves = walls.map(wall =>\r\n {\r\n //清理\r\n wall.LeftCurves = [];\r\n wall.RightCurves = [];\r\n wall.LidCurves = [];\r\n wall.Region = undefined;\r\n\r\n let cu = wall.CenterAxisCurve;\r\n\r\n wallCurveMap.set(wall, cu);\r\n curveWallMap.set(cu, wall);\r\n\r\n if (this._IsCacheWallNodePoints)\r\n RoomWallParse._CacheCurveWallMaps.set(cu, wall);\r\n return cu;\r\n });\r\n\r\n //打断数据\r\n let breakData = new RoomWallExtendAndBreak(axisCurves);\r\n\r\n if (this._ExtendsWalls)//墙体延伸\r\n for (let cu of breakData.ExtendCurves)\r\n {\r\n let wall = curveWallMap.get(cu);\r\n\r\n wall.StartPoint = cu.StartPoint;\r\n wall.EndPoint = cu.EndPoint;\r\n }\r\n\r\n let orgCurveLeftMap = new Map();\r\n let orgCurveRightMap = new Map();\r\n\r\n //{打断后的曲线}指向{新生成曲线}\r\n let curveLeftCurveMap: Map = new Map;\r\n let curveRightCurveMap: Map = new Map;\r\n //新生成的曲线的补盖子\r\n let curveStartLidCurveMap: Map = new Map;\r\n let curveEndLidCurveMap: Map = new Map;\r\n //半盖\r\n let curveStarLeftHalfLidCurveMap: Map = new Map;\r\n let curveStarRightHalfLidCurveMap: Map = new Map;\r\n let curveEndLeftHalfLidCurveMap: Map = new Map;\r\n let curveEndRightHalfLidCurveMap: Map = new Map;\r\n\r\n //尖角连接\r\n for (let groupCurves of breakData.OrgCurveMapGroup)\r\n {\r\n let curveMap = new CurveMap(4, true);\r\n\r\n for (let orgCurve of groupCurves)\r\n {\r\n let orgWall = curveWallMap.get(orgCurve);\r\n let splitCurves = breakData._Curve2SplitCurveMap.get(orgCurve);\r\n for (let cu of splitCurves)\r\n {\r\n //TODO:墙体重复时, 使用大厚度的墙?\r\n if (curveMap.AddCurveToMap(cu, cu instanceof Arc, true, true) || true)//避免重叠墙体构建错误 我们设置了true 参考用例 `重叠墙分析丢失墙体`\r\n {\r\n //左右线\r\n let leftCurve = cu.GetOffsetCurves(-orgWall.Thickness * 0.5)[0];\r\n let rightCurve = cu.GetOffsetCurves(orgWall.Thickness * 0.5)[0];\r\n\r\n leftCurve.ColorIndex = 2;\r\n rightCurve.ColorIndex = 3;\r\n\r\n curveLeftCurveMap.set(cu, leftCurve);\r\n curveRightCurveMap.set(cu, rightCurve);\r\n }\r\n }\r\n }\r\n\r\n if (this._IsCacheWallNodePoints)\r\n RoomWallParse._CacheWallMaps.push([breakData, curveMap]);\r\n\r\n //逆时针\r\n for (let v of curveMap._Vertices)\r\n {\r\n if (this._IsCacheWallNodePoints)\r\n RoomWallParse._CacheWallNodePoints.push(v.position);\r\n\r\n if (v.routes.length === 0) continue;\r\n if (v.routes.length < 2)\r\n {\r\n let r = v.routes[0];\r\n let preCurve = curveLeftCurveMap.get(r.curve);//左边的\r\n let nowCurve = curveRightCurveMap.get(r.curve);//右边的\r\n\r\n let sp = r.isReverse ? preCurve.EndPoint : preCurve.StartPoint;\r\n let ep = r.isReverse ? nowCurve.EndPoint : nowCurve.StartPoint;\r\n let l = new Line(sp, ep);\r\n l.ColorIndex = 6;\r\n if (r.isReverse)\r\n curveEndLidCurveMap.set(r.curve, new Line(ep, sp));\r\n else\r\n curveStartLidCurveMap.set(r.curve, new Line(sp, ep));\r\n continue;\r\n };\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 //倒角\r\n let pre = v.routes.length - 1;\r\n for (let i = 0; i < v.routes.length; i++)\r\n {\r\n let preR = v.routes[pre];\r\n let nowR = v.routes[i];\r\n\r\n let preCurve = preR.isReverse ? curveRightCurveMap.get(preR.curve) : curveLeftCurveMap.get(preR.curve);//左边的\r\n let nowCurve = nowR.isReverse ? curveLeftCurveMap.get(nowR.curve) : curveRightCurveMap.get(nowR.curve);//右边的\r\n\r\n let sp = preR.isReverse ? preCurve.EndPoint : preCurve.StartPoint;\r\n let ep = nowR.isReverse ? nowCurve.EndPoint : nowCurve.StartPoint;\r\n if (equalv3(sp, ep))//直连\r\n {\r\n pre = i;\r\n continue;\r\n }\r\n\r\n let iPam = preCurve.IntersectWith2(nowCurve, IntersectOption.ExtendBoth);\r\n let iPts = iPam.map(p => p.pt);\r\n let tPts = iPam.filter(p => preCurve.ParamOnCurve(p.thisParam) && nowCurve.ParamOnCurve(p.argParam)).map(p => p.pt);\r\n\r\n let code = EntityEncode2(preCurve, nowCurve);\r\n let tp: Vector3;\r\n if (code === 1)//都是直线\r\n {\r\n if (tPts.length > 0)\r\n {\r\n tp = iPts[0];\r\n\r\n //奇怪的行为,避免它\r\n if (equalv3(tp, preCurve.StartPoint, 1e-3)\r\n || equalv3(tp, preCurve.EndPoint, 1e-3)\r\n || equalv3(tp, nowCurve.StartPoint, 1e-3)\r\n || equalv3(tp, nowCurve.EndPoint, 1e-3)\r\n )\r\n tp = undefined;\r\n }\r\n else\r\n {\r\n if (iPts.length > 0)\r\n {\r\n //fuck 没有括号导致的错误\r\n //尖角时才延伸,否则补盖 (延伸或者在线上)\r\n let isExtend = (preR.isReverse ? iPam[0].thisParam > 0 : iPam[0].thisParam < 1)\r\n && (nowR.isReverse ? iPam[0].argParam > 0 : iPam[0].argParam < 1);\r\n\r\n let distSq = iPts[0].distanceToSquared(v.position);\r\n if (isExtend && distSq < 500 * 500)//尖角\r\n tp = iPts[0];\r\n else\r\n {\r\n //钝角 直接连接 在下面的代码连接\r\n // console.log();\r\n }\r\n }\r\n }\r\n }\r\n else//直线与圆弧\r\n {\r\n if (tPts.length > 0) //ipts = 1 or ipts = 2\r\n tp = SelectNearP(tPts, v.position);\r\n else\r\n {\r\n if (iPts.length === 0)\r\n {\r\n //直接连接 在下面的代码连接\r\n }\r\n else\r\n {\r\n let p: Vector3;\r\n\r\n if (code === 2 && iPts.length === 2)\r\n {\r\n let preArc = preCurve as Arc;\r\n let minArc = new Arc(preArc.Center, preArc.Radius,\r\n preR.isReverse ? preArc.EndAngle : preArc.StartAngle,\r\n 0,\r\n preR.isReverse ? preArc.IsClockWise : !preArc.IsClockWise\r\n );\r\n\r\n let p1 = iPts[0];\r\n let a1 = minArc.GetAngleAtPoint(p1);\r\n let anAll1 = preArc.ParamOnCurve(preArc.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 = preArc.ParamOnCurve(preArc.GetParamAtAngle(a2)) ? Infinity : minArc.ComputeAnlge(a2);\r\n\r\n if (anAll2 < anAll1)\r\n {\r\n p = p2;\r\n iPam[0] = iPam[1];\r\n }\r\n else\r\n p = p1;\r\n }\r\n else\r\n {\r\n p = SelectNearP(iPts, v.position);\r\n if (p === iPts[1])\r\n iPam[0] = iPam[1];\r\n }\r\n\r\n let isExtend = (preR.isReverse ? iPam[0].thisParam > 1 : iPam[0].thisParam < 0)\r\n && (nowR.isReverse ? iPam[0].argParam > 1 : iPam[0].argParam < 0);\r\n\r\n //tp 必须不能破坏圆弧,否则造成裁剪错误\r\n if (!isExtend || p.distanceToSquared(v.position) > 500 * 500)\r\n p = undefined;\r\n else//预习 如果破坏的圆弧轮廓,则不允许连接\r\n {\r\n let line: Line;\r\n if (preCurve instanceof Arc)\r\n {\r\n let tempC = preCurve.Clone();\r\n if (preR.isReverse) tempC.EndPoint = p;\r\n else tempC.StartPoint = p;\r\n\r\n line = new Line(v.position.clone(), p);\r\n let ipts = line.IntersectWith(tempC, IntersectOption.ExtendNone);\r\n if (ipts.length === 2)\r\n p = undefined;\r\n }\r\n\r\n if (p && nowCurve instanceof Arc)\r\n {\r\n let tempC = nowCurve.Clone();\r\n if (nowR.isReverse) tempC.EndPoint = p;\r\n else tempC.StartPoint = p;\r\n\r\n if (!line) line = new Line(v.position.clone(), p);\r\n let ipts = line.IntersectWith(tempC, IntersectOption.ExtendNone);\r\n if (ipts.length === 2)\r\n p = undefined;\r\n }\r\n }\r\n\r\n tp = p;\r\n }\r\n }\r\n }\r\n\r\n if (tp)\r\n {\r\n if (preR.isReverse) preCurve[SAVE_EP_KEY] = tp;\r\n else preCurve[SAVE_SP_KEY] = tp;\r\n\r\n if (nowR.isReverse) nowCurve[SAVE_EP_KEY] = tp;\r\n else nowCurve[SAVE_SP_KEY] = tp;\r\n }\r\n else\r\n {\r\n //如果两线(直线)平行 无交点时,应该只补厚墙的盖子\r\n if (code === 1 && iPts.length === 0)//&& false 尽管是false 这里的代码还是成立的 没有禁用这个代码是因为能带来一丢丢性能提升\r\n {\r\n let w1 = curveWallMap.get(breakData._SplitCurve2OrgCurveMap.get(preR.curve));\r\n let w2 = curveWallMap.get(breakData._SplitCurve2OrgCurveMap.get(nowR.curve));\r\n\r\n let sp = preR.isReverse ? preCurve.EndPoint : preCurve.StartPoint;\r\n let ep = nowR.isReverse ? nowCurve.EndPoint : nowCurve.StartPoint;\r\n\r\n if (w1.Thickness > w2.Thickness)\r\n {\r\n if (preR.isReverse)\r\n curveEndLeftHalfLidCurveMap.set(preR.curve, new Line(sp, ep));\r\n else\r\n curveStarLeftHalfLidCurveMap.set(preR.curve, new Line(sp, ep));\r\n }\r\n else\r\n {\r\n if (nowR.isReverse)\r\n curveEndRightHalfLidCurveMap.set(nowR.curve, new Line(sp, ep));\r\n else\r\n curveStarRightHalfLidCurveMap.set(nowR.curve, new Line(sp, ep));\r\n }\r\n }\r\n // else if (equalv3(sp, ep, 10)) //在sp ep接近时,我们直接连接sp ep 会更好? 看起来是没必要的\r\n // {\r\n // if (preR.isReverse)\r\n // curveEndLeftHalfLidCurveMap.set(preR.curve, new Line(ep, sp));\r\n // else\r\n // curveStarLeftHalfLidCurveMap.set(preR.curve, new Line(sp, ep));\r\n // }\r\n else\r\n {\r\n if (preR.isReverse)\r\n curveEndLeftHalfLidCurveMap.set(preR.curve, new Line(sp, v.position.clone()));//yep\r\n else\r\n curveStarLeftHalfLidCurveMap.set(preR.curve, new Line(sp, v.position.clone()));//yep\r\n\r\n if (nowR.isReverse)\r\n curveEndRightHalfLidCurveMap.set(nowR.curve, new Line(v.position.clone(), ep));//yep\r\n else\r\n curveStarRightHalfLidCurveMap.set(nowR.curve, new Line(v.position.clone(), ep));//yep\r\n }\r\n }\r\n\r\n pre = i;\r\n }\r\n }\r\n\r\n //延迟连接\r\n for (let orgCurve of groupCurves)\r\n {\r\n let splitCurves = breakData._Curve2SplitCurveMap.get(orgCurve);\r\n for (let cu of splitCurves)\r\n {\r\n let left = curveLeftCurveMap.get(cu);\r\n let right = curveRightCurveMap.get(cu);\r\n\r\n UpdateStartEndPoint(left);\r\n UpdateStartEndPoint(right);\r\n }\r\n }\r\n\r\n class RegionParse2 extends RegionParse\r\n {\r\n protected override GenerateVerticeMap(curveList: Curve[]): Vertice[]\r\n {\r\n return curveMap.Stands;\r\n }\r\n }\r\n\r\n //现在已经不再需要移除小房间了\r\n // //移除过小房间的内墙(空间过小 或者 没有空间)\r\n // let regionData = new RegionParse2(undefined);\r\n // const RemoveSmallSpaceInteriorWall = (routes: Route[]) =>\r\n // {\r\n // let polyline = Polyline.Combine(routes.map(r => r.curve), 1e-3);\r\n // let space = polyline.GetOffsetCurves(-120)[0];\r\n\r\n // if (!space || space.Area < 1e4)//0.1平米\r\n // {\r\n // for (let r of routes)\r\n // {\r\n // let cu: Curve;\r\n // //因为是逆时针 所以我们删除右边的线\r\n // if (r.isReverse)\r\n // {\r\n // cu = curveLeftCurveMap.get(r.curve);\r\n // curveLeftCurveMap.delete(r.curve);\r\n // }\r\n // else\r\n // {\r\n // cu = curveRightCurveMap.get(r.curve);\r\n // curveRightCurveMap.delete(r.curve);\r\n // }\r\n\r\n // //还要删除补的盖子\r\n // if (cu)\r\n // {\r\n // curveStarLeftHalfLidCurveMap.delete(cu);\r\n // curveEndLeftHalfLidCurveMap.delete(cu);\r\n\r\n // curveStartLidCurveMap.delete(cu);\r\n // curveEndLidCurveMap.delete(cu);\r\n // }\r\n // }\r\n // }\r\n // };\r\n // regionData.RegionsInternal.forEach(RemoveSmallSpaceInteriorWall);\r\n // regionData.RegionsOutline.forEach(RemoveSmallSpaceInteriorWall);\r\n }\r\n\r\n //构建裁剪面\r\n let trimContours: Contour[] = [];\r\n let orgCurveParams: GetCurveParam[] = [];\r\n for (let i = 0; i < axisCurves.length; i++)\r\n {\r\n let orgCurve = axisCurves[i];\r\n orgCurve[ROOM_WALL_INDEX_KEY] = i;\r\n let parse = CreateGetCurveParam(orgCurve);\r\n orgCurveParams.push(parse);\r\n\r\n let splitCurves = breakData._Curve2SplitCurveMap.get(orgCurve);\r\n let orgWall = curveWallMap.get(orgCurve);\r\n\r\n let leftStartParam = 1, leftEndParam = 0,\r\n rightStartParam = 1, rightEndParam = 0;\r\n if (!splitCurves)\r\n {\r\n //左右线\r\n let leftCurve = orgCurve.GetOffsetCurves(-orgWall.Thickness * 0.5)[0];\r\n let rightCurve = orgCurve.GetOffsetCurves(orgWall.Thickness * 0.5)[0];\r\n\r\n leftCurve.ColorIndex = 2;\r\n rightCurve.ColorIndex = 3;\r\n\r\n curveLeftCurveMap.set(orgCurve, leftCurve);\r\n curveRightCurveMap.set(orgCurve, rightCurve);\r\n\r\n curveStartLidCurveMap.set(orgCurve, new Line(leftCurve.StartPoint, rightCurve.StartPoint));\r\n curveEndLidCurveMap.set(orgCurve, new Line(rightCurve.EndPoint, leftCurve.EndPoint));\r\n\r\n breakData._SplitCurve2OrgCurveMap.set(orgCurve, orgCurve);//直接定位到自己\r\n\r\n //更新 孤独的墙也应该被切割,所以移除这个代码\r\n // orgWall.Region = undefined;\r\n // orgWall.LeftCurves = undefined;\r\n // orgWall.RightCurves = undefined;\r\n // orgWall.LidCurves = undefined;\r\n\r\n if (this._IsCacheWallNodePoints)\r\n RoomWallParse._CacheWallNodePoints.push(orgCurve.StartPoint, orgCurve.EndPoint);\r\n\r\n // continue;//孤独的墙(TODO:) //update:孤独的墙也应该裁剪被人\r\n leftStartParam = rightStartParam = 0;\r\n leftEndParam = rightEndParam = 1;\r\n }\r\n else\r\n {\r\n for (let cu of splitCurves)\r\n {\r\n let left = curveLeftCurveMap.get(cu);\r\n let right = curveRightCurveMap.get(cu);\r\n\r\n if (left)\r\n {\r\n leftStartParam = Math.min(leftStartParam, parse.GetParamAtPoint(left.StartPoint));\r\n leftEndParam = Math.max(leftEndParam, parse.GetParamAtPoint(left.EndPoint));\r\n }\r\n\r\n if (right)\r\n {\r\n rightStartParam = Math.min(rightStartParam, parse.GetParamAtPoint(right.StartPoint));\r\n rightEndParam = Math.max(rightEndParam, parse.GetParamAtPoint(right.EndPoint));\r\n }\r\n }\r\n\r\n if (leftStartParam > leftEndParam)\r\n {\r\n leftStartParam = 0;\r\n leftEndParam = 1;\r\n }\r\n if (rightStartParam > rightEndParam)\r\n {\r\n rightStartParam = 0;\r\n rightEndParam = 1;\r\n }\r\n }\r\n\r\n let sp = orgCurve.StartPoint;\r\n let ep = orgCurve.EndPoint;\r\n if (orgCurve instanceof Line)\r\n {\r\n let lparse = parse as GetLineParam;\r\n let p1 = parse.GetPointAtParam(leftStartParam);\r\n let p2 = parse.GetPointAtParam(leftEndParam);\r\n lparse.OffsetPoint(p1, orgWall.Thickness * 0.5);\r\n lparse.OffsetPoint(p2, orgWall.Thickness * 0.5);\r\n\r\n let p3 = lparse.GetPointAtParam(rightStartParam);\r\n let p4 = lparse.GetPointAtParam(rightEndParam);\r\n lparse.OffsetPoint(p3, orgWall.Thickness * -0.5);\r\n lparse.OffsetPoint(p4, orgWall.Thickness * -0.5);\r\n\r\n\r\n let pts: Vector3[] = [];\r\n if (!equalv3(midPoint(p1, p3), sp))\r\n pts.push(sp);\r\n\r\n pts.push(p1, p2);\r\n\r\n if (!equalv3(midPoint(p2, p4), ep))\r\n pts.push(ep);\r\n\r\n pts.push(p4, p3);\r\n\r\n let pl = new Polyline(pts.map(p => { return { pt: AsVector2(p), bul: 0 }; }));\r\n pl.CloseMark = true;\r\n pl.Z = p1.z;\r\n\r\n let contour = Contour.CreateContour(pl, false);\r\n\r\n // let reg = Region.CreateFromCurves([contour.Curve]);\r\n // if (reg)\r\n // TestDraw(reg);\r\n\r\n trimContours.push(contour);\r\n orgWall.Region = pl;\r\n\r\n orgCurveLeftMap.set(orgCurve, new Line(p1, p2));\r\n orgCurveRightMap.set(orgCurve, new Line(p3, p4));\r\n }\r\n else\r\n {\r\n //左右线\r\n let leftCurve = orgCurve.GetOffsetCurves(-orgWall.Thickness * 0.5)[0];\r\n let rightCurve = orgCurve.GetOffsetCurves(orgWall.Thickness * 0.5)[0];\r\n\r\n leftCurve.EndAngle = orgCurve.GetAngleAtParam(leftEndParam);\r\n leftCurve.StartAngle = orgCurve.GetAngleAtParam(leftStartParam);\r\n\r\n rightCurve.EndAngle = orgCurve.GetAngleAtParam(rightEndParam);\r\n rightCurve.StartAngle = orgCurve.GetAngleAtParam(rightStartParam);\r\n\r\n let curves: (Line | Arc)[] = [];\r\n let [p1, p2] = [leftCurve.StartPoint, leftCurve.EndPoint];\r\n let [p3, p4] = [rightCurve.StartPoint, rightCurve.EndPoint];\r\n\r\n if (!equalv3(midPoint(p1, p3), sp))\r\n curves.push(new Line(p3, sp), new Line(sp, p1));\r\n else\r\n curves.push(new Line(p1, p3));\r\n curves.push(leftCurve);\r\n if (!equalv3(midPoint(p2, p4), ep))\r\n curves.push(new Line(p2, ep), new Line(ep, p4));\r\n else\r\n curves.push(new Line(p2, p4));\r\n curves.push(rightCurve);\r\n\r\n let contour = Contour.CreateContour(curves, false);\r\n if (!contour)\r\n {\r\n // for (let i = 0; i < curves.length; i++)\r\n // TestDraw(curves[i], i + 1);\r\n contour = Contour.CreateContour(new Polyline().RectangleFrom2Pt(new Vector3, new Vector3(100, 100)), false);\r\n console.error(\"生成轮廓失败\");\r\n }\r\n else\r\n {\r\n // let reg = Region.CreateFromCurves([contour.Curve]);\r\n // if (reg)\r\n // TestDraw(reg);\r\n }\r\n trimContours.push(contour);\r\n orgWall.Region = contour.Curve as Polyline;\r\n\r\n orgCurveLeftMap.set(orgCurve, leftCurve);\r\n orgCurveRightMap.set(orgCurve, rightCurve);\r\n }\r\n }\r\n\r\n // jig.End();\r\n\r\n SHOW_PERF && console.timeEnd(\"尖角化+裁剪面\");\r\n\r\n SHOW_PERF && console.time(\"墙体裁剪\");\r\n\r\n this.GenFB(trimContours);\r\n\r\n enum CurveType\r\n {\r\n Left = 0,\r\n Right = 1,\r\n StartLid = 2,\r\n EndLid = 3,\r\n }\r\n\r\n const Trim = (splitCurve: Curve, offsetCurve: Curve, index: number, type: CurveType) =>\r\n {\r\n let trim: CurveTrim;\r\n if (offsetCurve instanceof Line)\r\n {\r\n let getParam = orgCurveParams[index] as GetLineParam;\r\n let dir: Vector3;\r\n if (type === CurveType.Left) dir = getParam.Direction;\r\n else if (type === CurveType.Right) dir = getParam.NegDirection;\r\n else if (type === CurveType.StartLid) dir = getParam.LeftDir;\r\n else if (type === CurveType.EndLid) dir = getParam.RightDir;\r\n\r\n if (!dir)\r\n {\r\n dir = offsetCurve.GetFistDeriv(0).normalize().negate();\r\n }\r\n\r\n trim = new CurveTrimLine(offsetCurve, dir);\r\n }\r\n else\r\n trim = new CurveTrimArc(offsetCurve as Arc, type !== CurveType.Left);\r\n\r\n //需要更快的判断直线会不会被轮廓切割?\r\n\r\n this.fb.search(trim._Box.min.x - 1e-2, trim._Box.min.y - 1e-2, trim._Box.max.x + 1e-2, trim._Box.max.y + 1e-2, (id =>\r\n {\r\n // if (id !== index) //裁剪的好处是有些细的盖子将会消失\r\n trim.TrimBy(trimContours[id], this.boxs[id], index > id);\r\n return false;\r\n }));\r\n\r\n let curves = trim.Curves;\r\n return curves as (Arc | Line)[];\r\n };\r\n\r\n for (let [orgCurve, offsetCurve] of orgCurveLeftMap)\r\n {\r\n let orgWall = curveWallMap.get(orgCurve);\r\n arrayPushArray(orgWall.LeftCurves, Trim(orgCurve, offsetCurve, orgCurve[ROOM_WALL_INDEX_KEY], CurveType.Left));\r\n }\r\n for (let [orgCurve, offsetCurve] of orgCurveRightMap)\r\n {\r\n let orgWall = curveWallMap.get(orgCurve);\r\n arrayPushArray(orgWall.RightCurves, Trim(orgCurve, offsetCurve, orgCurve[ROOM_WALL_INDEX_KEY], CurveType.Right));\r\n }\r\n\r\n for (let [splitCurve, offsetCurve] of curveStartLidCurveMap)\r\n {\r\n let orgCurve = breakData._SplitCurve2OrgCurveMap.get(splitCurve);\r\n let orgWall = curveWallMap.get(orgCurve);\r\n arrayPushArray(orgWall.LidCurves, Trim(splitCurve, offsetCurve, orgCurve[ROOM_WALL_INDEX_KEY], CurveType.StartLid));\r\n }\r\n for (let [splitCurve, offsetCurve] of curveEndLidCurveMap)\r\n {\r\n let orgCurve = breakData._SplitCurve2OrgCurveMap.get(splitCurve);\r\n let orgWall = curveWallMap.get(orgCurve);\r\n arrayPushArray(orgWall.LidCurves, Trim(splitCurve, offsetCurve, orgCurve[ROOM_WALL_INDEX_KEY], CurveType.EndLid));\r\n }\r\n\r\n for (let [splitCurve, offsetCurve] of curveStarLeftHalfLidCurveMap)\r\n {\r\n let orgCurve = breakData._SplitCurve2OrgCurveMap.get(splitCurve);\r\n let orgWall = curveWallMap.get(orgCurve);\r\n arrayPushArray(orgWall.LidCurves, Trim(splitCurve, offsetCurve, orgCurve[ROOM_WALL_INDEX_KEY], CurveType.StartLid));\r\n }\r\n for (let [splitCurve, offsetCurve] of curveStarRightHalfLidCurveMap)\r\n {\r\n let orgCurve = breakData._SplitCurve2OrgCurveMap.get(splitCurve);\r\n let orgWall = curveWallMap.get(orgCurve);\r\n arrayPushArray(orgWall.LidCurves, Trim(splitCurve, offsetCurve, orgCurve[ROOM_WALL_INDEX_KEY], CurveType.StartLid));\r\n }\r\n\r\n for (let [splitCurve, offsetCurve] of curveEndLeftHalfLidCurveMap)\r\n {\r\n let orgCurve = breakData._SplitCurve2OrgCurveMap.get(splitCurve);\r\n let orgWall = curveWallMap.get(orgCurve);\r\n arrayPushArray(orgWall.LidCurves, Trim(splitCurve, offsetCurve, orgCurve[ROOM_WALL_INDEX_KEY], CurveType.EndLid));\r\n }\r\n for (let [splitCurve, offsetCurve] of curveEndRightHalfLidCurveMap)\r\n {\r\n let orgCurve = breakData._SplitCurve2OrgCurveMap.get(splitCurve);\r\n let orgWall = curveWallMap.get(orgCurve);\r\n arrayPushArray(orgWall.LidCurves, Trim(splitCurve, offsetCurve, orgCurve[ROOM_WALL_INDEX_KEY], CurveType.EndLid));\r\n }\r\n\r\n //Update:2022-04-28 我们不再分裂圆弧,所以也不再需要合并线\r\n //区域分析需要破裂的圆弧,这里暂时不合并墙(在room region parse中合并)\r\n // for (let wall of walls)\r\n // {\r\n // wall.LeftCurves && arrayRemoveDuplicateBySort(wall.LeftCurves, (cu1: Curve, cu2: Curve) => cu1.Join(cu2) === Status.True);\r\n // wall.RightCurves && arrayRemoveDuplicateBySort(wall.RightCurves, (cu1: Curve, cu2: Curve) => cu1.Join(cu2) === Status.True);\r\n // }\r\n\r\n SHOW_PERF && console.timeEnd(\"墙体裁剪\");\r\n }\r\n\r\n fb: Flatbush;\r\n boxs: Box3[];\r\n GenFB(trimContours: Contour[])\r\n {\r\n if (trimContours.length === 0) return;\r\n\r\n let fb = new Flatbush(trimContours.length);\r\n this.boxs = [];\r\n\r\n let v = new Vector3(1e-2, 1e-2);\r\n for (let con of trimContours)\r\n {\r\n let box = con.BoundingBox;\r\n box.expandByVector(v);\r\n fb.add(box.min.x, box.min.y, box.max.x, box.max.y);\r\n this.boxs.push(box);\r\n }\r\n fb.finish();\r\n\r\n this.fb = fb;\r\n }\r\n\r\n}\r\n\r\nfunction UpdateStartEndPoint(curve: Curve)\r\n{\r\n let sp = curve[SAVE_SP_KEY];\r\n let ep = curve[SAVE_EP_KEY];\r\n\r\n if (sp && ep)\r\n {\r\n let param1 = curve.GetParamAtPoint(sp);\r\n let param2 = curve.GetParamAtPoint(ep);\r\n\r\n if (curve.ParamOnCurve(param1) && curve.ParamOnCurve(param2) && param1 > param2)\r\n [sp, ep] = [ep, sp];\r\n }\r\n if (sp)\r\n curve.StartPoint = sp;\r\n if (ep)\r\n curve.EndPoint = ep;\r\n}\r\n"],"names":["Vector3","Matrix4","RenderType","Status","UpdateDraw","DuplicateRecordCloning","Box3","Entity","AllObjectData","EraseEntityData","iaop","HistorycRecord","MaterialTableRecord","UVType","PhysicalMaterialRecord","Color","FrontSide","MeshPhysicalMaterial","EntityColorHistoryRecord","equaln","Object3D","FixIndex","Vector2","Quaternion","MathUtils","Shape","Arc","EllipseCurve","LineBasicMaterial","DoubleSide","LineDashedMaterial","MeshBasicMaterial","ShaderMaterial","LineMaterial","BufferGeometry","ShapeGeometry","BufferAttribute","ExtendType","Curve","LineGeometry","Line2","TLine","Plane","Line3","Line","Circle","Polyline","Ellipse","Spline","CatmullRomCurve3","cache","TempPolyline","TShape","Path","Region","BufferGeometryUtils2","LineSegments","Mesh","Hole","GangDrillType","CylinderHole","CylinderBufferGeometry","Float32BufferAttribute","Geometry","ShapeUtils","Face3","SweepSolid","BoxBufferGeometry","InstancedInterleavedBuffer","InterleavedBufferAttribute","HardwareTopline","Board","geom3","intersect","create","DepthType","Flatbush","ExtrudeSolid","ExtrudeGeometry","BoxGeometry","ExtrudeHole","CompositeEntity","HardwareCompositeEntity","clipperLib","RoomBase","RoomHoleBase","RoomHolePolyline","RoomWallLine","WallFaceType","RoomWallBase","RoomWallArc","CreateObjectData","RemoveObjectData","SymbolTable","observable","BlockTable","ObjectCollection","BlockTableRecord","end","ObjectAllDataHistoryRecord","CommandHistoryRecord","CameraSnapshootRecord","GroupTable","HistoricManage","Light","AmbientLight","TAmbientLight","DirectionalLightHelper","SphereBufferGeometry","DirectionalLight","Matrix3","Group","TDirectionalLight","HemisphereLight","THemisphereLight","ProcessingGroupTable","TemplateTable","TextureTableRecord","MirroredRepeatWrapping","Texture","TextureTable","Database","FaceEntity","GroupRecord","TemplateAction","TemplateFilletAction","TemplateMaterialAction","TemplateParam","Positioning","PositioningClampSpace","PositioningTemporary","TemplateRecord","TemplateLatticeRecord","TemplateTopBottomBoard","TemplateWineRackRecord","TextAligen","Text","VisualSpaceBox","CameraType","OrthographicCamera","PerspectiveCamera","ViewportEntity","Scene","WebGLRenderTarget","Frustum","Cylineder","MeshNormalMaterial","RevolveSolid","Dimension","LineAngularDimension","AlignedDimension","ArcDimension","RadiusDimension","DiameterDimension","LinearDimension","BoxSolid","EntityRef","Point","PointLight","TPointLight","SphereGeometry","BackSide","RectAreaLight","TRectAreaLight","SpotLight","TSpotLight","ConeGeometry","ProcessingGroupRecord","RoomFlatBase","RoomFlatFloor","RoomFlatTop","RoomRegion","TempP","RoomHoleLine","ThicknessDirection","TempateThicknessAction","TemplateMoveAction","TemplateSetSealAction","TemplateStretchGripAction","TemplateStretchScaleBoxAction","PositioningBoardSpace","TemplateBoardRecord","TemplateBehindBoard","PointsMaterial","Points","Box2","Raycaster","TemplateLayerBoard","TemplateLeftRightBoardRecord","TemplateSizeBoard","TemplateVerticalBoard","TemplateVisualSpace","ViewportEntity2","JoinType","EndType","polylabel"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEA;;AAEG;MACU,gBAAgB,CAAA;AAOzB,IAAA,WAAA,CAAY,OAAiB,EAAE,KAAe,EAAE,KAAe,EAAE,KAAe,EAAA;AAE5E,QAAA,IAAI,CAAC,OAAO,GAAG,OAAO,IAAI,IAAIA,aAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAC/C,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK,IAAI,IAAIA,aAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAC3C,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK,IAAI,IAAIA,aAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAC3C,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK,IAAI,IAAIA,aAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;KAC9C;AAED,IAAA,YAAY,CAAC,IAAa,EAAA;AAEtB,QAAA,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;AAChC,QAAA,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,WAAW,CAAC,IAAIA,aAAO,EAAE,CAAC,CAAC;AACpD,QAAA,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;AAC/B,QAAA,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;AAC/B,QAAA,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;AAC/B,QAAA,OAAO,IAAI,CAAC;KACf;AAED,IAAA,UAAU,CAAC,CAAC,GAAG,IAAIC,aAAO,EAAA;AAEtB,QAAA,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;AAChD,QAAA,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAC5B,QAAA,OAAO,CAAC,CAAC;KACZ;AACD,IAAA,QAAQ,CAAC,IAAa,EAAA;AAElB,QAAA,IAAI,CAAC,OAAO,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC;AACzC,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;AACtD,QAAA,OAAO,IAAI,CAAC;KACf;AAED,IAAA,YAAY,CAAC,MAAe,EAAE,MAAe,EAAE,MAAe,EAAA;AAE1D,QAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACxB,QAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACxB,QAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KAC3B;AACD,IAAA,IAAI,CAAC,EAAoB,EAAA;QAErB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC;QAC9B,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;QAC1B,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;QAC1B,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;AAC1B,QAAA,OAAO,IAAI,CAAC;KACf;IACD,KAAK,GAAA;AAED,QAAA,IAAI,CAAC,GAAG,IAAI,gBAAgB,EAAE,CAAC;QAC/B,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACjC,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QAC7B,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QAC7B,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;AAC7B,QAAA,OAAO,CAAC,CAAC;KACZ;AACJ;;AClED,IAAY,MAIX,CAAA;AAJD,CAAA,UAAY,MAAM,EAAA;AAEd,IAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAQ,CAAA;AACR,IAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAQ,CAAA;AACZ,CAAC,EAJW,MAAM,KAAN,MAAM,GAIjB,EAAA,CAAA,CAAA,CAAA;AAED,IAAY,WASX,CAAA;AATD,CAAA,UAAY,WAAW,EAAA;AAEnB,IAAA,WAAA,CAAA,WAAA,CAAA,IAAA,CAAA,GAAA,CAAA,CAAA,GAAA,IAAM,CAAA;AACN,IAAA,WAAA,CAAA,WAAA,CAAA,KAAA,CAAA,GAAA,CAAA,CAAA,GAAA,KAAO,CAAA;AACP,IAAA,WAAA,CAAA,WAAA,CAAA,IAAA,CAAA,GAAA,CAAA,CAAA,GAAA,IAAM,CAAA;AACN,IAAA,WAAA,CAAA,WAAA,CAAA,IAAA,CAAA,GAAA,CAAA,CAAA,GAAA,IAAM,CAAA;AACN,IAAA,WAAA,CAAA,WAAA,CAAA,IAAA,CAAA,GAAA,CAAA,CAAA,GAAA,IAAM,CAAA;AACN,IAAA,WAAA,CAAA,WAAA,CAAA,IAAA,CAAA,GAAA,CAAA,CAAA,GAAA,IAAM,CAAA;AACN,IAAA,WAAA,CAAA,WAAA,CAAA,IAAA,CAAA,GAAA,CAAA,CAAA,GAAA,IAAM,CAAA;AACV,CAAC,EATW,WAAW,KAAX,WAAW,GAStB,EAAA,CAAA,CAAA,CAAA;AAED,IAAY,kBAQX,CAAA;AARD,CAAA,UAAY,kBAAkB,EAAA;AAE1B,IAAA,kBAAA,CAAA,kBAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAQ,CAAA;AACR,IAAA,kBAAA,CAAA,kBAAA,CAAA,KAAA,CAAA,GAAA,CAAA,CAAA,GAAA,KAAO,CAAA;AACP,IAAA,kBAAA,CAAA,kBAAA,CAAA,KAAA,CAAA,GAAA,CAAA,CAAA,GAAA,KAAO,CAAA;AACP,IAAA,kBAAA,CAAA,kBAAA,CAAA,OAAA,CAAA,GAAA,CAAA,CAAA,GAAA,OAAS,CAAA;AACT,IAAA,kBAAA,CAAA,kBAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAQ,CAAA;AACR,IAAA,kBAAA,CAAA,kBAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAQ,CAAA;AACZ,CAAC,EARW,kBAAkB,KAAlB,kBAAkB,GAQ7B,EAAA,CAAA,CAAA;;ACxBD;;AAEG;AACSC,4BA8CX;AA9CD,CAAA,UAAY,UAAU,EAAA;AAElB;;AAEG;AACH,IAAA,UAAA,CAAA,UAAA,CAAA,WAAA,CAAA,GAAA,CAAA,CAAA,GAAA,WAAa,CAAA;AAEb;;AAEG;AACH,IAAA,UAAA,CAAA,UAAA,CAAA,YAAA,CAAA,GAAA,CAAA,CAAA,GAAA,YAAc,CAAA;AAGd;;AAEG;AACH,IAAA,UAAA,CAAA,UAAA,CAAA,UAAA,CAAA,GAAA,CAAA,CAAA,GAAA,UAAY,CAAA;AAEZ,IAAA,UAAA,CAAA,UAAA,CAAA,KAAA,CAAA,GAAA,CAAA,CAAA,GAAA,KAAO,CAAA;AACP,IAAA,UAAA,CAAA,UAAA,CAAA,OAAA,CAAA,GAAA,CAAA,CAAA,GAAA,OAAS,CAAA;;AAET,IAAA,UAAA,CAAA,UAAA,CAAA,WAAA,CAAA,GAAA,CAAA,CAAA,GAAA,WAAa,CAAA;AACb,IAAA,UAAA,CAAA,UAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAQ,CAAA;AACR,IAAA,UAAA,CAAA,UAAA,CAAA,WAAA,CAAA,GAAA,CAAA,CAAA,GAAA,WAAa,CAAA;;AAGb;;AAEE;AACF,IAAA,UAAA,CAAA,UAAA,CAAA,gBAAA,CAAA,GAAA,GAAA,CAAA,GAAA,gBAAoB,CAAA;AAEpB;;AAEG;AACH,IAAA,UAAA,CAAA,UAAA,CAAA,iBAAA,CAAA,GAAA,GAAA,CAAA,GAAA,iBAAqB,CAAA;AAGrB;;AAEG;AACH,IAAA,UAAA,CAAA,UAAA,CAAA,eAAA,CAAA,GAAA,GAAA,CAAA,GAAA,eAAmB,CAAA;AAEnB,IAAA,UAAA,CAAA,UAAA,CAAA,UAAA,CAAA,GAAA,GAAA,CAAA,GAAA,UAAc,CAAA;AACd,IAAA,UAAA,CAAA,UAAA,CAAA,YAAA,CAAA,GAAA,GAAA,CAAA,GAAA,YAAgB,CAAA;;AAEhB,IAAA,UAAA,CAAA,UAAA,CAAA,gBAAA,CAAA,GAAA,GAAA,CAAA,GAAA,gBAAoB,CAAA;AACxB,CAAC,EA9CWA,kBAAU,KAAVA,kBAAU,GA8CrB,EAAA,CAAA,CAAA,CAAA;AAEK,SAAU,UAAU,CAAC,UAAsB,EAAA;IAE7C,OAAO,UAAU,KAAKA,kBAAU,CAAC,QAAQ,IAAI,UAAU,KAAKA,kBAAU,CAAC,SAAS,IAAI,UAAU,KAAKA,kBAAU,CAAC,aAAa,IAAI,UAAU,KAAKA,kBAAU,CAAC,cAAc,CAAC;AAC5K;;MCjDa,wBAAwB,CAAA;AAkFjC,IAAA,WAAA,GAAA;AA/EY,QAAA,IAAA,CAAA,iBAAiB,GAAY,IAAI,CAAC;QAC9C,IAAc,CAAA,cAAA,GAAY,IAAI,CAAC;AAEnB,QAAA,IAAA,CAAA,kBAAkB,GAAG,CAAC,CAAC;AACvB,QAAA,IAAA,CAAA,mBAAmB,GAAG,CAAC,CAAC;AAEpC,QAAA,IAAA,CAAA,kBAAkB,GAAG,KAAK,CAAC;;AAkBf,QAAA,IAAA,CAAA,WAAW,GAAeA,kBAAU,CAAC,SAAS,CAAC;;;QAI/C,IAAY,CAAA,YAAA,GAAkC,IAAI,GAAG,CAAC;;;QAItD,IAAmB,CAAA,mBAAA,GAAG,IAAI,CAAC;;;QAI3B,IAAe,CAAA,eAAA,GAAuB,EAAE,CAAC;;;QAIzC,IAAS,CAAA,SAAA,GAAG,KAAK,CAAC;;;QAQlB,IAAc,CAAA,cAAA,GAAY,KAAK,CAAC;;AAGhC,QAAA,IAAA,CAAA,aAAa,GAAG;AACxB,YAAA,YAAY,EAAE,CAAC;AACf,YAAA,WAAW,EAAE,CAAC;AACd,YAAA,aAAa,EAAE,KAAK;AACpB,YAAA,MAAM,EAAE,GAAG;AACX,YAAA,gBAAgB,EAAE,EAAE;AACpB,YAAA,gBAAgB,EAAE,KAAK;AACvB,YAAA,aAAa,EAAE,EAAE;AACjB,YAAA,MAAM,EAAE,KAAK;YACb,MAAM,EAAE,KAAK;SAChB,CAAC;AAEU,QAAA,IAAA,CAAA,QAAQ,GAAG;AACnB,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,aAAa,EAAE,GAAG;AAClB,YAAA,SAAS,EAAE,GAAG;SACjB,CAAC;AAEU,QAAA,IAAA,CAAA,UAAU,GAAkB;AACpC,YAAA,EAAE,EAAE,IAAI;AACR,YAAA,EAAE,EAAE,GAAG;AACP,YAAA,UAAU,EAAE,EAAE;SACjB,CAAC;QAEU,IAAa,CAAA,aAAA,GAAG,EAAE,CAAC;AACnB,QAAA,IAAA,CAAA,SAAS,GAAG,CAAC,CAAC;AACd,QAAA,IAAA,CAAA,kBAAkB,GAAuB,kBAAkB,CAAC,GAAG,CAAC;KAEnD;IArEzB,IAAI,WAAW,KAAK,OAAO,IAAI,CAAC,eAAe,CAAC,EAAE;IAClD,IAAI,WAAW,CAAC,GAAQ,EAAA;AAEpB,QAAA,IAAI,CAAC,eAAe,GAAG,GAAG,CAAC;AAE3B,QAAA,KAAK,IAAI,GAAG,IAAI,wBAAwB,CAAC,aAAa,EACtD;YACI,IAAI,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;YAClC,IAAI,CAAC,KAAK,SAAS;AACf,gBAAA,MAAM,gBAAgB,CAAC;AAC9B,SAAA;KACJ;;AA6DD,IAAA,OAAO,WAAW,GAAA;QAEd,IAAI,IAAI,CAAC,eAAe;YAAE,OAAO,IAAI,CAAC,eAAe,CAAC;AACtD,QAAA,IAAI,CAAC,eAAe,GAAG,IAAI,wBAAwB,CAAC;QACpD,OAAO,IAAI,CAAC,eAAe,CAAC;KAC/B;;AAGD,IAAA,MAAM,cAAc,GAAuB,EAAA,OAAO,EAAE;AACpD,IAAA,MAAM,YAAY,GAAuB,EAAA,OAAO,EAAE;;AAlF3C,wBAAA,CAAA,aAAa,GAAa,EAAE,CAAC;AATxB,UAAA,CAAA;IAAX,UAAU;AAAmC,CAAA,EAAA,wBAAA,CAAA,SAAA,EAAA,mBAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AAGlC,UAAA,CAAA;IAAX,UAAU;AAAwB,CAAA,EAAA,wBAAA,CAAA,SAAA,EAAA,oBAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AACvB,UAAA,CAAA;IAAX,UAAU;AAAyB,CAAA,EAAA,wBAAA,CAAA,SAAA,EAAA,qBAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AAoBxB,UAAA,CAAA;IAAX,UAAU;AAAgD,CAAA,EAAA,wBAAA,CAAA,SAAA,EAAA,aAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AAI/C,UAAA,CAAA;IAAX,UAAU;AAAuD,CAAA,EAAA,wBAAA,CAAA,SAAA,EAAA,cAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AAItD,UAAA,CAAA;IAAX,UAAU;AAA4B,CAAA,EAAA,wBAAA,CAAA,SAAA,EAAA,qBAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AAI3B,UAAA,CAAA;IAAX,UAAU;AAA0C,CAAA,EAAA,wBAAA,CAAA,SAAA,EAAA,iBAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AAIzC,UAAA,CAAA;IAAX,UAAU;AAAmB,CAAA,EAAA,wBAAA,CAAA,SAAA,EAAA,WAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AAIlB,UAAA,CAAA;IAAX,UAAU;AAAc,CAAA,EAAA,wBAAA,CAAA,SAAA,EAAA,MAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AAIb,UAAA,CAAA;IAAX,UAAU;AAAiC,CAAA,EAAA,wBAAA,CAAA,SAAA,EAAA,gBAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AAGhC,UAAA,CAAA;IAAX,UAAU;AAUT,CAAA,EAAA,wBAAA,CAAA,SAAA,EAAA,eAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AAEU,UAAA,CAAA;IAAX,UAAU;AAIT,CAAA,EAAA,wBAAA,CAAA,SAAA,EAAA,UAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AAEU,UAAA,CAAA;IAAX,UAAU;AAIT,CAAA,EAAA,wBAAA,CAAA,SAAA,EAAA,YAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AAEU,UAAA,CAAA;IAAX,UAAU;AAAoB,CAAA,EAAA,wBAAA,CAAA,SAAA,EAAA,eAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AACnB,UAAA,CAAA;IAAX,UAAU;AAAe,CAAA,EAAA,wBAAA,CAAA,SAAA,EAAA,WAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AACd,UAAA,CAAA;IAAX,UAAU;AAAiE,CAAA,EAAA,wBAAA,CAAA,SAAA,EAAA,oBAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AAiBzE,IAAI,uBAAuB,GAAG,wBAAwB,CAAC,WAAW,EAAE,CAAC;AAG5E;AACA,SAAS,UAAU,CACf,MAAW,EACX,WAAmB,EACnB,UAA8B,EAAA;AAE9B,IAAA,IAAI,UAAU,GAAG,IAAI,GAAG,WAAW,CAAC;AACpC,IAAA,wBAAwB,CAAC,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;AAEzD,IAAA,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,WAAW,EACrC;QACI,GAAG,EAAE,UAAU,KAAK,EAAA;YAEhB,IAAI,IAAI,CAAC,WAAW;AAChB,gBAAA,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,GAAG,KAAK,CAAC;;AAEtC,gBAAA,IAAI,CAAC,UAAU,CAAC,GAAG,KAAK,CAAC;SAChC;AACD,QAAA,GAAG,EAAE,YAAA;YAED,IAAI,IAAI,CAAC,WAAW;AAChB,gBAAA,OAAO,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;AACzC,YAAA,OAAO,IAAI,CAAC,UAAU,CAAC,CAAC;SAC3B;AACD,QAAA,UAAU,EAAE,IAAI;AAChB,QAAA,YAAY,EAAE,IAAI;AACrB,KAAA,CACJ,CAAC;AACN;;ACpIA;;AAEG;AACG,SAAU,eAAe,CAAC,GAAa,EAAA;AAEzC,IAAA,KAAK,IAAI,CAAC,IAAI,GAAG,CAAC,QAAQ,EAC1B;QACI,IAAI,IAAI,GAAG,CAAQ,CAAC;;QAEpB,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,KAAK,MAAM;AAC9C,YAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;QAE5B,IAAI,IAAI,CAAC,QAAQ;YACb,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,EAChC;AACI,gBAAA,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC,QAAQ;oBACvB,CAAC,CAAC,OAAO,EAAE,CAAC;AACnB,aAAA;AAED,iBAAA;AACI,gBAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;AAC3B,aAAA;QAEL,eAAe,CAAC,CAAC,CAAC,CAAC;;;;AAKtB,KAAA;;;AAGD,IAAA,OAAO,GAAG,CAAC;AACf,CAAC;AAEK,SAAU,iBAAiB,CAAC,GAAa,EAAA;AAE3C,IAAA,KAAK,IAAI,CAAC,IAAI,GAAG,CAAC,QAAQ,EAC1B;AACI,QAAA,CAAC,CAAC,MAAM,GAAG,IAAI,CAAC;QAChB,CAAC,CAAC,aAAa,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;AACxC,KAAA;AACD,IAAA,GAAG,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;AACxB,IAAA,OAAO,GAAG,CAAC;AACf;;AC1CYC,wBASX;AATD,CAAA,UAAY,MAAM,EAAA;AAEd,IAAA,MAAA,CAAA,MAAA,CAAA,OAAA,CAAA,GAAA,CAAA,CAAA,GAAA,OAAS,CAAA;AACT,IAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAQ,CAAA;AACR,IAAA,MAAA,CAAA,MAAA,CAAA,OAAA,CAAA,GAAA,CAAA,CAAA,CAAA,GAAA,OAAU,CAAA;AAEV,IAAA,MAAA,CAAA,MAAA,CAAA,gBAAA,CAAA,GAAA,GAAA,CAAA,GAAA,gBAAoB,CAAA;AAEpB,IAAA,MAAA,CAAA,MAAA,CAAA,qBAAA,CAAA,GAAA,GAAA,CAAA,GAAA,qBAAyB,CAAA;AAC7B,CAAC,EATWA,cAAM,KAANA,cAAM,GASjB,EAAA,CAAA,CAAA,CAAA;AAEWC,4BAOX;AAPD,CAAA,UAAY,UAAU,EAAA;AAElB,IAAA,UAAA,CAAA,UAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAQ,CAAA;AACR,IAAA,UAAA,CAAA,UAAA,CAAA,QAAA,CAAA,GAAA,CAAA,CAAA,GAAA,QAAU,CAAA;AACV,IAAA,UAAA,CAAA,UAAA,CAAA,UAAA,CAAA,GAAA,CAAA,CAAA,GAAA,UAAY,CAAA;AACZ,IAAA,UAAA,CAAA,UAAA,CAAA,UAAA,CAAA,GAAA,CAAA,CAAA,GAAA,UAAY,CAAA;AACZ,IAAA,UAAA,CAAA,UAAA,CAAA,KAAA,CAAA,GAAA,EAAA,CAAA,GAAA,KAAgB,CAAA;AACpB,CAAC,EAPWA,kBAAU,KAAVA,kBAAU,GAOrB,EAAA,CAAA,CAAA,CAAA;AAED;;AAEG;AACSC,wCAKX;AALD,CAAA,UAAY,sBAAsB,EAAA;AAE9B,IAAA,sBAAA,CAAA,sBAAA,CAAA,QAAA,CAAA,GAAA,CAAA,CAAA,GAAA,QAAU,CAAA;AACV,IAAA,sBAAA,CAAA,sBAAA,CAAA,SAAA,CAAA,GAAA,CAAA,CAAA,GAAA,SAAW,CAAA;AACX,IAAA,sBAAA,CAAA,sBAAA,CAAA,QAAA,CAAA,GAAA,CAAA,CAAA,GAAA,QAAU,CAAA;AACd,CAAC,EALWA,8BAAsB,KAAtBA,8BAAsB,GAKjC,EAAA,CAAA,CAAA;;AC7BD;;AAEG;AACH,IAAY,SAKX,CAAA;AALD,CAAA,UAAY,SAAS,EAAA;AAEjB,IAAA,SAAA,CAAA,SAAA,CAAA,GAAA,CAAA,GAAA,CAAA,CAAA,GAAA,GAAK,CAAA;AACL,IAAA,SAAA,CAAA,SAAA,CAAA,GAAA,CAAA,GAAA,CAAA,CAAA,GAAA,GAAK,CAAA;AACL,IAAA,SAAA,CAAA,SAAA,CAAA,GAAA,CAAA,GAAA,CAAA,CAAA,GAAA,GAAK,CAAA;AACT,CAAC,EALW,SAAS,KAAT,SAAS,GAKpB,EAAA,CAAA,CAAA,CAAA;AAED;;AAEG;AACG,MAAO,OAAQ,SAAQC,UAAI,CAAA;AAG7B,IAAA,IAAI,MAAM,GAAA;QAEN,IAAI,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,IAAIN,aAAO,EAAE,CAAC,CAAC;QACvC,OAAO,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;KACnC;;IAGD,OAAO,CAAC,OAAO,GAAG,CAAC,EAAA;AAEf,QAAA,OAAO,UAAU,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;KACpC;IACD,SAAS,CAAC,CAAU,EAAE,SAAoB,EAAA;QAEtC,IAAI,QAAQ,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,SAAS,CAAC,CAAC,CAAS,CAAC;QACjD,IAAI,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE;YACzC,OAAO,CAAC,IAAI,CAAC,CAAC;QAElB,IAAI,EAAE,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,YAAY,CAAC,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC;QACxF,IAAI,EAAE,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,YAAY,CAAC,SAAS,EAAE,QAAQ,CAAC,GAAG,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC;QAE5F,IAAI,EAAE,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,YAAY,CAAC,SAAS,EAAE,QAAQ,CAAC,GAAG,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC;QAC5F,IAAI,EAAE,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,YAAY,CAAC,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC;QAExF,OAAO;AACH,YAAA,IAAI,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC;AACnB,YAAA,IAAI,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC;SACtB,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;KAC9B;IACD,UAAU,CAAC,EAAW,EAAE,SAAoB,EAAA;AAExC,QAAA,IAAI,QAAQ,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;QAC5B,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;QACzB,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;AACzB,QAAA,QAAQ,CAAC,GAAG,CAAC,YAAY,CAAC,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AACjH,QAAA,QAAQ,CAAC,GAAG,CAAC,YAAY,CAAC,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AACjH,QAAA,OAAO,QAAQ,CAAC;KACnB;AACD,IAAA,aAAa,CAAC,GAAS,EAAE,IAAI,GAAG,IAAI,EAAA;QAEhC,OAAO,aAAa,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;KACzC;AACJ,CAAA;AAEK,SAAU,aAAa,CAAC,IAAU,EAAE,IAAU,EAAE,IAAI,GAAG,IAAI,EAAA;IAE7D,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI;QACnE,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI;AAChE,QAAA,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,GAAG,KAAK,GAAG,IAAI,CAAC;AACxF,CAAC;AAED;AACM,SAAU,aAAa,CAAC,IAAU,EAAE,IAAU,EAAE,IAAI,GAAG,IAAI,EAAA;IAE7D,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI;AACnE,QAAA,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,GAAG,KAAK,GAAG,IAAI,CAAC;AACxF,CAAC;AAED,IAAI,IAAI,GAAG,IAAIA,aAAO,CAAC;SACP,UAAU,CAAC,GAAS,EAAE,OAAO,GAAG,CAAC,EAAA;AAE7C,IAAA,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAClB,IAAA,OAAO,IAAI,CAAC,CAAC,GAAG,OAAO,IAAI,IAAI,CAAC,CAAC,GAAG,OAAO,IAAI,IAAI,CAAC,CAAC,GAAG,OAAO,CAAC;AACpE;;AC9EO,MAAM,UAAU,GAAG,UAAU,CAAC;AAErC;;;;;;;;;;AAUG;SACa,UAAU,CACtB,MAA6C,EAC7C,QAAgB,EAChB,UAA8B,EAAA;AAE9B,IAAA,IAAI,UAAU,GAAG,IAAI,GAAG,QAAQ,CAAC;AACjC,IAAA,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,QAAQ,EAClC;QACI,GAAG,EAAE,UAAU,KAAK,EAAA;YAEhB,IAAI,KAAK,YAAY,KAAK,EAC1B;AACI,gBAAA,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,EACrB;oBACI,IAAI,KAAK,CAAC,UAAU,CAAC;AACjB,wBAAA,IAAI,CAAC,UAAU,CAAC,GAAG,KAAK,CAAC;;wBAEzB,IAAI,CAAC,UAAU,CAAC,GAAG,IAAI,KAAK,CAAC,KAAK,EAAE;4BAChC,GAAG,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,QAAQ,KAAI;gCAElC,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,EAAE,QAAQ,CAAC,KAAK,KAAK;oCAC5C,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAChC,gCAAA,OAAO,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;6BACpD;4BACD,GAAG,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,QAAQ,KAAI;gCAE3B,IAAI,GAAG,KAAK,UAAU;AAClB,oCAAA,OAAO,IAAI,CAAC;;gCAEhB,IAAI,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,KAAK,IAAI,GAAG,KAAK,OAAO;oCACpD,IAAI,CAAC,oBAAoB,EAAE,CAAC;gCAChC,OAAO,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC;6BAC7C;AACJ,yBAAA,CAAC,CAAC;AACV,iBAAA;AAED,qBAAA;AACI,oBAAA,IAAI,GAAG,GAAG,IAAI,CAAC,UAAU,CAAe,CAAC;AACzC,oBAAA,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC;AACf,oBAAA,GAAG,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC;;;;;AAMtB,iBAAA;AACJ,aAAA;AAED,iBAAA;AACI,gBAAA,IAAI,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC;gBAC5B,IAAI,IAAI,KAAK,KAAK,EAClB;oBACI,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAC5B,oBAAA,IAAI,CAAC,UAAU,CAAC,GAAG,KAAK,CAAC;AAC5B,iBAAA;AACJ,aAAA;SACJ;AACD,QAAA,GAAG,EAAE,YAAA;AAED,YAAA,OAAO,IAAI,CAAC,UAAU,CAAC,CAAC;SAC3B;AACD,QAAA,UAAU,EAAE,IAAI;AAChB,QAAA,YAAY,EAAE,IAAI;AACrB,KAAA,CACJ,CAAC;AACN,CAAC;SAGe,gBAAgB,CAC5B,MAA6C,EAC7C,QAAgB,EAChB,UAA8B,EAAA;AAE9B,IAAA,IAAI,UAAU,GAAG,IAAI,GAAG,QAAQ,CAAC;AACjC,IAAA,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,QAAQ,EAClC;QACI,GAAG,EAAE,UAAU,KAAK,EAAA;YAEhB,IAAI,KAAK,YAAY,MAAM,EAC3B;AACI,gBAAA,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,EACrB;oBACI,IAAI,KAAK,CAAC,UAAU,CAAC;AACjB,wBAAA,IAAI,CAAC,UAAU,CAAC,GAAG,KAAK,CAAC;;wBAEzB,IAAI,CAAC,UAAU,CAAC,GAAG,IAAI,KAAK,CAAC,KAAK,EAAE;4BAChC,GAAG,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,QAAQ,KAAI;gCAElC,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,EAAE,QAAQ,CAAC,KAAK,KAAK;oCAC5C,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAChC,gCAAA,OAAO,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;6BACpD;4BACD,GAAG,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,QAAQ,KAAI;gCAE3B,IAAI,GAAG,KAAK,UAAU;AAClB,oCAAA,OAAO,IAAI,CAAC;gCAChB,OAAO,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC;6BAC7C;AACJ,yBAAA,CAAC,CAAC;AACV,iBAAA;AAED,qBAAA;AACI,oBAAA,IAAI,GAAG,GAAG,IAAI,CAAC,UAAU,CAAQ,CAAC;AAClC,oBAAA,KAAK,IAAI,GAAG,IAAI,KAAK,EACrB;wBACI,IAAI,GAAG,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,GAAG,CAAC,EAC3B;4BACI,IAAI,CAAC,oBAAoB,EAAE,CAAC;4BAC5B,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;AACzB,yBAAA;AACJ,qBAAA;AACJ,iBAAA;AACJ,aAAA;AAED,iBAAA;AACI,gBAAA,IAAI,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC;gBAC5B,IAAI,IAAI,KAAK,KAAK,EAClB;oBACI,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAC5B,oBAAA,IAAI,CAAC,UAAU,CAAC,GAAG,KAAK,CAAC;AAC5B,iBAAA;AACJ,aAAA;SACJ;AACD,QAAA,GAAG,EAAE,YAAA;AAED,YAAA,OAAO,IAAI,CAAC,UAAU,CAAC,CAAC;SAC3B;AACD,QAAA,UAAU,EAAE,IAAI;AAChB,QAAA,YAAY,EAAE,IAAI;AACrB,KAAA,CACJ,CAAC;AACN;;ACjJA;AAEA;;AAEG;MACU,UAAU,CAAA;AAEnB,IAAA,WAAA,GAAA;AACQ,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,GAAG,EAAe,CAAC;KADtB;IAGzB,OAAO,cAAc,CAAC,CAAM,EAAA;;AAGxB,QAAA,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;KAC7C;AACD,IAAA,OAAO,mBAAmB,CAAC,CAAM,EAAE,IAAY,EAAA;QAE3C,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;KAC3C;IACD,OAAO,YAAY,CAAC,IAAY,EAAA;AAE5B,QAAA,IAAI,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAC7C,QAAA,IAAI,CAAC;YAAE,OAAO,IAAI,CAAC,EAAE,CAAC;KACzB;;AAdc,UAAA,CAAA,OAAO,GAAG,IAAI,UAAU,EAAE,CAAC;AAiB9C;AACM,SAAU,OAAO,CAAC,MAAc,EAAA;AAElC,IAAA,UAAU,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;AACtC;;AC7BA,IAAY,aAKX,CAAA;AALD,CAAA,UAAY,aAAa,EAAA;AAErB,IAAA,aAAA,CAAA,aAAA,CAAA,SAAA,CAAA,GAAA,CAAA,CAAA,GAAA,SAAW,CAAA;AACX,IAAA,aAAA,CAAA,aAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAQ,CAAA;AACR,IAAA,aAAA,CAAA,aAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAQ,CAAA;AACZ,CAAC,EALW,aAAa,KAAb,aAAa,GAKxB,EAAA,CAAA,CAAA,CAAA;AAED;;;;;;AAME;MACW,QAAQ,CAAA;IAGjB,WAAoB,CAAA,MAAA,GAAS,CAAC,EAAU,OAAW,EAAA;QAA/B,IAAM,CAAA,MAAA,GAAN,MAAM,CAAI;QAAU,IAAO,CAAA,OAAA,GAAP,OAAO,CAAI;AADnD,QAAA,IAAA,CAAA,cAAc,GAAG,aAAa,CAAC,OAAO,CAAC;KACiB;AAExD,IAAA,IAAI,OAAO,GAAA;QAEP,OAAO,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;KAChD;IAED,IAAI,MAAM,CAAC,GAAM,EAAA;AAEb,QAAA,IAAI,CAAC,OAAO,GAAG,GAAG,CAAC;KACtB;AACD,IAAA,IAAI,MAAM,GAAA;QAEN,OAAO,IAAI,CAAC,OAAO,CAAC;KACvB;AACD,IAAA,IAAI,KAAK,GAAA;QAEL,OAAO,IAAI,CAAC,MAAM,CAAC;KACtB;IACD,IAAI,KAAK,CAAC,KAAa,EAAA;AAEnB,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;KACvB;AACJ;;AClCD;;AAEG;MACU,QAAQ,CAAA;AAIjB,IAAA,WAAA,CAAsB,SAAgB,EAAE,EAAA;QAAlB,IAAM,CAAA,MAAA,GAAN,MAAM,CAAY;QADhC,IAAS,CAAA,SAAA,GAAW,CAAC,CAAC;KAG7B;IAED,OAAO,GAAA;QAEH,OAAO,IAAI,CAAC,MAAM,CAAC;QACnB,OAAO,IAAI,CAAC,SAAS,CAAC;KACzB;AAED,IAAA,IAAI,IAAI,GAAA;QAEJ,OAAO,IAAI,CAAC,MAAM,CAAC;KACtB;IAED,IAAI,IAAI,CAAC,IAAW,EAAA;AAEhB,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QACnB,IAAI,CAAC,KAAK,EAAE,CAAC;KAChB;IAED,KAAK,GAAA;AAED,QAAA,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;AACvB,QAAA,OAAO,IAAI,CAAC,KAAK,EAAE,CAAC;KACvB;IACD,KAAK,GAAA;AAED,QAAA,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;AACnB,QAAA,OAAO,IAAI,CAAC;KACf;AAED,IAAA,WAAW,CAAC,GAAW,EAAA;AAEnB,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACtB,QAAA,OAAO,IAAI,CAAC;KACf;IAED,UAAU,GAAA;QAEN,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,CAAW,CAAC;KAClD;AAED,IAAA,WAAW,CAAC,GAAe,EAAA;QAEvB,IAAI,CAAC,GAAG,EACR;AACI,YAAA,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACf,OAAO;AACV,SAAA;QACD,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;AACvC,QAAA,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;AAEpB,QAAA,OAAO,IAAI,CAAC;KACf;AAED,IAAA,UAAU,CAAmC,GAAO,EAAA;AAEhD,QAAA,IAAI,SAAS,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;AAClC,QAAA,IAAI,SAAS,EACb;YACI,IAAI,GAAG,KAAK,SAAS,EACrB;AACI,gBAAA,GAAG,GAAG,UAAU,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;gBACzC,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS,IAAI,GAAG,YAAY,SAAS;AACvD,oBAAA,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AACvC,aAAA;AACD,YAAA,IAAI,CAAC,GAAG;AACJ,gBAAA,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;AACvC,YAAA,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AACnB,YAAA,OAAO,GAAG,CAAC;AACd,SAAA;KACJ;AAED,IAAA,YAAY,CAAC,OAAoB,EAAE,aAAA,GAA6B,EAAE,EAAA;QAE9D,KAAK,IAAI,CAAC,IAAI,OAAO;AACjB,YAAA,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;AACxB,QAAA,IAAI,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC;QAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAC9B;AACI,YAAA,IAAI,GAAG,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;YAC5B,IAAI,GAAG,YAAYO,cAAM;gBACrB,GAAG,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,CAAW,CAAC,CAAC;AAC9C,YAAA,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC3B,SAAA;AAED,QAAA,OAAO,aAAa,CAAC;KACxB;AAED,IAAA,KAAK,CAAC,IAAS,EAAA;QAEX,IAAI,IAAI,YAAY,QAAQ;YACxB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;;AAE7B,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAE3B,QAAA,OAAO,IAAI,CAAC;KACf;AAED,IAAA,SAAS,CAAC,EAAQ,EAAA;AAEd,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;KACtC;IAED,IAAI,GAAA;QAEA,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;KACxC;AAED,IAAA,SAAS,CAAC,KAAa,EAAA;AAEnB,QAAA,IAAI,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,CAAC;AACpE,QAAA,IAAI,CAAC,SAAS,IAAI,KAAK,CAAC;AACxB,QAAA,OAAO,GAAG,CAAC;KACd;;AAGD;;;;;AAKE;;AAGF,IAAA,aAAa,CAAC,EAAY,EAAA;QAEtB,IAAI,EAAE;AACF,YAAA,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;;AAErB,YAAA,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAClB,QAAA,OAAO,IAAI,CAAC;KACf;IAED,YAAY,GAAA;AAER,QAAA,IAAI,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QACxB,IAAI,IAAI,CAAC,QAAQ;YACb,OAAO,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;KACrD;;AAGD,IAAA,iBAAiB,CAAC,EAAY,EAAA;AAE1B,QAAA,OAAO,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;KACjC;IACD,gBAAgB,GAAA;AAEZ,QAAA,OAAO,IAAI,CAAC,YAAY,EAAE,CAAC;KAC9B;;AAGD,IAAA,iBAAiB,CAAC,EAAY,EAAA;AAE1B,QAAA,OAAO,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;KACjC;IACD,gBAAgB,GAAA;AAEZ,QAAA,OAAO,IAAI,CAAC,YAAY,EAAE,CAAC;KAC9B;;IAGD,QAAQ,GAAA;QAEJ,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;KACtC;AACD,IAAA,UAAU,CAAC,GAAW,EAAA;QAElB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;KACjC;AACJ;;ACrLD;;AAEG;AAEUC,qBAAa,GAA1B,MAAa,aAAa,CAAA;AAGtB,IAAA,WAAA,CAAY,GAAe,EAAA;AAEvB,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,QAAQ,EAAE,CAAC;AAC3B,QAAA,IAAI,GAAG;AACH,YAAA,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KAChC;;;;AAID,IAAA,QAAQ,CAAC,IAAc,EAAA;AAEnB,QAAU,IAAI,CAAC,IAAI,GAAG;AACtB,QAAA,IAAI,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;AACvB,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACtB,QAAA,OAAO,IAAI,CAAC;KACf;;AAED,IAAA,SAAS,CAAC,IAAc,EAAA;AAEpB,QAAA,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACd,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC3B,QAAA,OAAO,IAAI,CAAC;KACf;EACJ;AA1BYA,qBAAa,GAAA,UAAA,CAAA;IADzB,OAAO;AACK,CAAA,EAAAA,qBAAa,CA0BzB;;AC/BYC,uBAAe,GAA5B,MAAa,eAAe,CAAA;AAYxB,IAAA,WAAA,CAAmB,UAAU,IAAI,EAAA;QAAd,IAAO,CAAA,OAAA,GAAP,OAAO,CAAO;KAEhC;AAZD,IAAA,QAAQ,CAAC,IAAc,EAAA;AAEnB,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;AAC3B,QAAA,OAAO,IAAI,CAAC;KACf;AACD,IAAA,SAAS,CAAC,IAAc,EAAA;AAEpB,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACzB,QAAA,OAAO,IAAI,CAAC;KACf;EAIJ;AAfYA,uBAAe,GAAA,UAAA,CAAA;IAD3B,OAAO;AACK,CAAA,EAAAA,uBAAe,CAe3B;;MCRqB,SAAS,CAAA;AAA/B,IAAA,WAAA,GAAA;;;QA8Fc,IAAQ,CAAA,QAAA,GAAY,KAAK,CAAC;KAuKvC;IAvPG,IAAI,KAAK,CAAC,KAAe,EAAA;AAErB,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;KACvB;AACD,IAAA,IAAI,KAAK,GAAA;QAEL,OAAO,IAAI,CAAC,MAAM,CAAC;KACtB;IAED,OAAO,GAAA;;;AAIH,QAAA,IAAI,CAAC,GAAG,GAAG,SAAS,CAAC;QACrB,IAAI,IAAI,CAAC,QAAQ;YACb,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,SAAS,CAAC;KACxC;;IAGD,OAAO,GAAA;QAEH,IAAI,CAAC,OAAO,EAAE,CAAC;AACf,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;KACpB;AAED;;;AAGE;IAEF,YAAY,GAAA;KAEX;AAID,IAAA,IAAI,EAAE,GAAA;QAEF,OAAO,IAAI,CAAC,GAAG,CAAC;KACnB;;AAGD,IAAA,YAAY,CAAC,EAAY,EAAA;QAErB,IAAI,CAAC,IAAI,CAAC,GAAG;AACT,YAAA,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC;;AAEd,YAAA,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;AAEpC,QAAA,OAAO,IAAI,CAAC;KACf;;;;AAKD,IAAA,gBAAgB,CAAC,EAAY,EAAA;AAEzB,QAAA,IAAI,CAAC,IAAI,CAAC,GAAG,EACb;AACI,YAAA,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC;AACd,YAAA,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC,UAAU,EAAoB,CAAC;AAClD,YAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC;AAC/B,SAAA;;AAEG,YAAA,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;AAEnC,QAAA,OAAO,IAAI,CAAC;KACf;AAED;;AAEG;AACH,IAAA,WAAW,CAAC,EAAY,EAAA;AAEpB,QAAA,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC;KACjB;AAMD,IAAA,IAAI,OAAO,GAAA;QAEP,OAAO,IAAI,CAAC,QAAQ,CAAC;KACxB;IACD,KAAK,CAAC,UAAmB,IAAI,EAAA;AAEzB,QAAA,IAAI,OAAO,KAAK,IAAI,CAAC,QAAQ;YACzB,OAAO;AACX,QAAA,IAAI,QAAQ,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;AACjC,QAAA,IAAI,QAAQ;AACR,YAAA,QAAQ,CAAC,kBAAkB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AAC/C,QAAA,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;KAC3B;AAQD,IAAA,IAAI,EAAE,GAAA;QAEF,OAAO,IAAI,CAAC,QAAQ,CAAC;KACxB;;;;;AAQD,IAAA,QAAQ,CAAC,IAAc,EAAA;AAEnB,QAAA,IAAI,GAAG,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;AACtB,QAAA,IAAI,EAAE,GAAG,IAAI,CAAC,YAAY,EAAoB,CAAC;AAC/C,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,EAAE;AACxB,SAAA;AACI,YAAA,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;AACnB,YAAA,EAAE,CAAC,MAAM,GAAG,IAAI,CAAC;AACpB,SAAA;AACD,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAC5B,IAAI,GAAG,GAAG,CAAC;AAAE,YAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;KAClD;;AAED,IAAA,SAAS,CAAC,IAAc,EAAA;AAEpB,QAAA,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACd,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAClC,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC1B,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;KACnC;;AAED,IAAA,gBAAgB,CAAC,QAAoB,EAAA;QAEjC,IAAI,QAAQ,YAAYD,qBAAa,EACrC;YACI,QAAQ,CAAC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC;AAClC,YAAA,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;AACtB,YAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AAChC,SAAA;aACI,IAAI,QAAQ,YAAYC,uBAAe,EAC5C;AACI,YAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;AAChC,SAAA;KACJ;;IAGD,UAAU,GAAA;AAEN,QAAA,IAAI,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,QAAQ;AACzB,YAAA,OAAO,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC;KACnC;;IAED,oBAAoB,GAAA;AAEhB,QAAA,IAAI,QAAQ,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;AACjC,QAAA,IAAI,QAAQ,EACZ;AACI,YAAA,QAAQ,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC;AACpC,YAAA,OAAO,IAAI,CAAC;AACf,SAAA;AACD,QAAA,OAAO,KAAK,CAAC;KAChB;;IAGD,KAAK,GAAA;AAED,QAAA,IAAI,SAAS,GAAG,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAS,CAAC;;AAGvE,QAAA,IAAI,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC;AAC1B,QAAA,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC;AAE1B,QAAA,IAAI,IAAI,GAAG,IAAI,QAAQ,EAAE,CAAC;AAC1B,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC;AACzB,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QACrB,IAAI,CAAC,KAAK,EAAE,CAAC;AACb,QAAA,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AAEzB,QAAA,SAAS,CAAC,QAAQ,GAAG,SAAS,CAAC;AAC/B,QAAA,SAAS,CAAC,GAAG,GAAG,SAAS,CAAC;AAE1B,QAAA,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;AACtB,QAAA,OAAO,SAAS,CAAC;KACpB;IAED,SAAS,CACL,WAAsB,EACtB,WAAsB,EACtB,WAAkC,SAAS,EAC3C,SAAS,GAAG,IAAI,EAAA;AAGhB,QAAA,OAAO,IAAI,CAAC;KACf;;AAGD,IAAA,QAAQ,CAAC,GAAc,EAAA;AAEnB,QAAA,IAAI,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC;AAC1B,QAAA,IAAI,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC;QAC3B,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAC5B,QAAA,IAAI,CAAC,GAAG,IAAI,QAAQ,EAAE,CAAC;QACvB,CAAC,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC;AACtB,QAAA,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AACjB,QAAA,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AACjB,QAAA,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;AACtB,QAAA,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC;KAC1B;;;AAKD;;;;;;AAMG;AACO,IAAA,gBAAgB,CAAC,WAA6B,EAAA;AAEpD,QAAA,OAAO,IAAI,KAAK,CAAC,EAAE,EAAE;YACjB,GAAG,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,QAAQ,KAAI;AAElC,gBAAA,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,EAAE,QAAQ,CAAC,KAAK,KAAK,EAChD;oBACI,IAAI,CAAC,oBAAoB,EAAE,CAAC;oBAC5B,WAAW,CAAC,KAAK,CAAC,CAAC;AACtB,iBAAA;AACD,gBAAA,OAAO,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;aACpD;YACD,GAAG,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,QAAQ,KAAI;gBAE3B,IAAI,GAAG,KAAK,UAAU;AAClB,oBAAA,OAAO,IAAI,CAAC;;gBAEhB,IAAI,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,KAAK,IAAI,GAAG,KAAK,OAAO,EACxD;oBACI,IAAI,CAAC,oBAAoB,EAAE,CAAC;oBAC5B,WAAW,CAAC,SAAS,CAAC,CAAC;AAC1B,iBAAA;gBACD,OAAO,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC;aAC7C;AACJ,SAAA,CAAC,CAAC;KACN;AACJ,CAAA;AAzNG,UAAA,CAAA;IADCC,SAAI;AAGJ,CAAA,EAAA,SAAA,CAAA,SAAA,EAAA,cAAA,EAAA,IAAA,CAAA;;ACrDL;;AAEG;AAEUC,sBAAc,GAA3B,MAAa,cAAc,CAAA;;;;AAYvB,IAAA,QAAQ,CAAC,IAAc,EAAA;AAEnB,QAAU,IAAI,CAAC,IAAI,GAAG;AACtB,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;AAClC,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;AAClC,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;KACrC;;AAED,IAAA,SAAS,CAAC,IAAc,EAAA;AAEpB,QAAA,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACd,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAChC,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAChC,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;KACnC;EAEJ;AA5BYA,sBAAc,GAAA,UAAA,CAAA;IAD1B,OAAO;AACK,CAAA,EAAAA,sBAAc,CA4B1B;;ACnCM,MAAM,YAAY,GAAG,cAAc,CAAC;AACpC,MAAM,WAAW,GAAG,SAAS,CAAC;AAC9B,MAAM,WAAW,GAAG,SAAS,CAAC;AAE9B,MAAM,YAAY,GAAG,UAAU,CAAC;AAChC,MAAM,YAAY,GAAG,UAAU,CAAC;AAEhC,MAAM,UAAU,GAAG,QAAQ;;ACH5B,MAAO,iBAAkB,SAAQ,SAAS,CAAA;AAAhD,IAAA,WAAA,GAAA;;QAEc,IAAI,CAAA,IAAA,GAAW,EAAE,CAAC;KAqC/B;AApCG,IAAA,IAAI,IAAI,GAAA;QAEJ,OAAO,IAAI,CAAC,IAAI,CAAC;KACpB;IACD,IAAI,IAAI,CAAC,IAAY,EAAA;AAEjB,QAAA,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI;YAAE,OAAO;QAC/B,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC5B,IAAI,IAAI,CAAC,KAAK,EACd;AACI,YAAA,IAAI,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,MAAqB,CAAC;YACnD,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,IAAI,EAAE,IAAI,CAAC;gBACzC,OAAO;AACd,SAAA;AACD,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;KACpB;AAED,IAAA,GAAG,CAAC,GAAc,EAAE,oBAAoB,GAAG,IAAI,EAAA;QAE3C,OAAOR,cAAM,CAAC,KAAK,CAAC;KACvB;AAED,IAAA,SAAS,CAAC,IAAc,EAAA;AAEpB,QAAA,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;AACtB,QAAA,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACd,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KACzB;AAED,IAAA,QAAQ,CAAC,IAAc,EAAA;AAEnB,QAAA,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACrB,IAAI,CAAC,IAAI,EAAE,CAAC;AACZ,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;KAC3B;AAEJ;;ACxCYS,2BAAmB,GAAhC,MAAa,mBAAoB,SAAQ,iBAAiB,CAAA;EAEzD;AAFYA,2BAAmB,GAAA,UAAA,CAAA;IAD/B,OAAO;AACK,CAAA,EAAAA,2BAAmB,CAE/B;;ACaWC,wBAIX;AAJD,CAAA,UAAY,MAAM,EAAA;AAEd,IAAA,MAAA,CAAA,MAAA,CAAA,SAAA,CAAA,GAAA,CAAA,CAAA,GAAA,SAAW,CAAA;AACX,IAAA,MAAA,CAAA,MAAA,CAAA,SAAA,CAAA,GAAA,CAAA,CAAA,GAAA,SAAW,CAAA;AACf,CAAC,EAJWA,cAAM,KAANA,cAAM,GAIjB,EAAA,CAAA,CAAA,CAAA;AAGD;AAGaC,8BAAsB,GAAnC,MAAa,sBAAuB,SAAQF,2BAAmB,CAAA;AAA/D,IAAA,WAAA,GAAA;;QAEgB,IAAI,CAAA,IAAA,GAAiB,IAAI,CAAC;AAC1B,QAAA,IAAA,CAAA,GAAG,GAAW,EAAE,CAAC;;AAGjB,QAAA,IAAA,CAAA,KAAK,GAAW,SAAS,CAAC;;AAE1B,QAAA,IAAA,CAAA,kBAAkB,GAAG,CAAC,CAAC;AACvB,QAAA,IAAA,CAAA,mBAAmB,GAAG,IAAIG,WAAK,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AAC/C,QAAA,IAAA,CAAA,kBAAkB,GAAG,IAAIA,WAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AACxC,QAAA,IAAA,CAAA,qBAAqB,GAAG,CAAC,CAAC;;;AAI1B,QAAA,IAAA,CAAA,WAAW,GAAY,KAAK,CAAC;AAC7B,QAAA,IAAA,CAAA,OAAO,GAAW,CAAC,CAAC;;AAEpB,QAAA,IAAA,CAAA,eAAe,GAAG,CAAC,CAAC;AACpB,QAAA,IAAA,CAAA,aAAa,GAAG,CAAC,CAAC;AAClB,QAAA,IAAA,CAAA,cAAc,GAAG,CAAC,CAAC;AACnB,QAAA,IAAA,CAAA,cAAc,GAAG,GAAG,CAAC;;;AAIrB,QAAA,IAAA,CAAA,UAAU,GAAG,CAAC,CAAC;AAEf,QAAA,IAAA,CAAA,SAAS,GAAW,CAAC,CAAC;AACtB,QAAA,IAAA,CAAA,SAAS,GAAW,CAAC,CAAC;AACtB,QAAA,IAAA,CAAA,SAAS,GAAW,GAAG,CAAC;AACxB,QAAA,IAAA,CAAA,QAAQ,GAAW,CAAC,CAAC;AACrB,QAAA,IAAA,CAAA,YAAY,GAAW,CAAC,CAAC;QAEzB,IAAM,CAAA,MAAA,GAAY,IAAI,CAAC;;QAGvB,IAAU,CAAA,UAAA,GAAY,IAAI,CAAC;QAE3B,IAAe,CAAA,eAAA,GAAY,IAAI,CAAC;;AAIhC,QAAA,IAAA,CAAA,MAAM,GAAY,KAAK,CAAC;AACxB,QAAA,IAAA,CAAA,IAAI,GAASC,eAAS,CAAC;AAEvB,QAAA,IAAA,CAAA,MAAM,GAAGH,cAAM,CAAC,OAAO,CAAC;;AAIxB,QAAA,IAAA,CAAA,SAAS,GAAG,CAAC,CAAC;AACd,QAAA,IAAA,CAAA,SAAS,GAAG,CAAC,CAAC;AACd,QAAA,IAAA,CAAA,gBAAgB,GAAG,CAAC,CAAC;AACrB,QAAA,IAAA,CAAA,iBAAiB,GAAG,IAAIE,WAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AACvC,QAAA,IAAA,CAAA,gBAAgB,GAAG,IAAIA,WAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;;AAGtC,QAAA,IAAA,CAAA,OAAO,GAAG,CAAC,CAAC;QAKZ,IAAS,CAAA,SAAA,GAAG,CAAC,CAAC;QACd,IAAS,CAAA,SAAA,GAAG,CAAC,CAAC;QACd,IAAQ,CAAA,QAAA,GAAG,CAAC,CAAC;QACb,IAAU,CAAA,UAAA,GAAG,CAAC,CAAC;QACf,IAAU,CAAA,UAAA,GAAG,CAAC,CAAC;AAEf,QAAA,IAAA,CAAA,SAAS,GAAY,IAAI,CAAC;AAE9B,QAAA,IAAA,CAAA,UAAU,GAAe;AAC7B,YAAA,IAAI,EAAE,EAAE;AACR,YAAA,KAAK,EAAE,EAAE;AACT,YAAA,QAAQ,EAAE,EAAE;SACf,CAAC;AACM,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAIE,0BAAoB,CAAC,EAAE,CAAC,CAAC;;KAkSnD;AAlTG,IAAA,IAAI,UAAU,GAAA,EAAK,OAAO,IAAI,CAAC,MAAM,KAAKJ,cAAM,CAAC,OAAO,CAAC,EAAE;IAC3D,IAAI,UAAU,CAAC,CAAU,EAAA,EAAI,IAAI,CAAC,MAAM,GAAG,CAAC,GAAGA,cAAM,CAAC,OAAO,GAAGA,cAAM,CAAC,OAAO,CAAC,EAAE;AAgBjF,IAAA,MAAM,MAAM,GAAA;QAER,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC;AAC9C,QAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,EAC/B;YACI,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC;YAC5C,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC;YAE5C,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC;YAE1C,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC;YAC9C,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC;AACjD,SAAA;AAED,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK;AACpB,YAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,GAAG,IAAIE,WAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;;YAE5C,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAExC,IAAI,CAAC,QAAQ,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;AAE7C,QAAA,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,EACtB;AACI,YAAA,IAAI,CAAC,QAAQ,CAAC,SAAS,GAAG,GAAG,CAAC;AAC9B,YAAA,IAAI,CAAC,QAAQ,CAAC,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AAC1D,SAAA;;YACG,IAAI,CAAC,QAAQ,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;QAE7C,IAAI,CAAC,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;AAE/B,QAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QACpD,IAAI,CAAC,QAAQ,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;QACzC,IAAI,CAAC,QAAQ,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;QACzC,IAAI,CAAC,QAAQ,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;AAGzC,QAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,GAAG,GAAG;YAC7B,uBAAuB,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC,GAAG,IAAG;AAE9C,gBAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,GAAG,CAAC;AAC3B,gBAAA,IAAI,CAAC,QAAQ,CAAC,WAAW,GAAG,IAAI,CAAC;AACrC,aAAC,CAAC,CAAC;;YAEH,uBAAuB,CAAC,cAAc,EAAE,CAAC,IAAI,CAAC,GAAG,IAAG;AAEhD,gBAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,GAAG,CAAC;AAC3B,gBAAA,IAAI,CAAC,QAAQ,CAAC,WAAW,GAAG,IAAI,CAAC;AACrC,aAAC,CAAC,CAAC;AAEP,QAAA,IAAI,CAAC,QAAQ,CAAC,WAAW,GAAG,IAAI,CAAC;AACjC,QAAA,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,EAChD;AACI,YAAA,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,MAA4B,CAAC;AAChD,YAAA,IAAI,OAAO,GAAG,GAAG,CAAC,eAAe,EAAE,CAAC;AACpC,YAAA,MAAM,GAAG,CAAC,UAAU,EAAE,CAAC;AACvB,YAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,GAAG,OAAO,CAAC;AAC5B,YAAA,IAAI,CAAC,QAAQ,CAAC,WAAW,GAAG,IAAI,CAAC;AACpC,SAAA;;AAEG,YAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,GAAG,SAAS,CAAC;AAElC,QAAA,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,EACvB;YACI,IAAI,CAAC,QAAQ,CAAC,iBAAiB,GAAG,IAAI,CAAC,YAAY,CAAC;AACpD,YAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YACjD,IAAI,CAAC,QAAQ,CAAC,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;AACjD,SAAA;AAED,aAAA;AACI,YAAA,IAAI,CAAC,QAAQ,CAAC,iBAAiB,GAAG,CAAC,CAAC;AACpC,YAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AACvC,YAAA,IAAI,CAAC,QAAQ,CAAC,WAAW,GAAG,SAAS,CAAC;AACzC,SAAA;AAED,QAAA,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAC3E;AACI,YAAA,IAAI,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,MAA4B,CAAC;AACpD,YAAA,IAAI,OAAO,GAAG,GAAG,CAAC,eAAe,EAAE,CAAC;AACpC,YAAA,MAAM,GAAG,CAAC,UAAU,EAAE,CAAC;AACvB,YAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,GAAG,OAAO,CAAC;AAChC,YAAA,IAAI,CAAC,QAAQ,CAAC,WAAW,GAAG,IAAI,CAAC;AACpC,SAAA;;AAEG,YAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,GAAG,SAAS,CAAC;AAEtC,QAAA,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,YAAY,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,EACvF;AACI,YAAA,IAAI,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,MAA4B,CAAC;AACzD,YAAA,IAAI,OAAO,GAAG,GAAG,CAAC,eAAe,EAAE,CAAC;AACpC,YAAA,MAAM,GAAG,CAAC,UAAU,EAAE,CAAC;AACvB,YAAA,IAAI,CAAC,QAAQ,CAAC,YAAY,GAAG,OAAO,CAAC;AACrC,YAAA,IAAI,CAAC,QAAQ,CAAC,WAAW,GAAG,IAAI,CAAC;AACpC,SAAA;;AAEG,YAAA,IAAI,CAAC,QAAQ,CAAC,YAAY,GAAG,SAAS,CAAC;AAE3C,QAAA,IAAI,CAAC,QAAQ,CAAC,WAAW,GAAG,IAAI,CAAC;QAEjC,IAAI,CAAC,YAAY,EAAE,CAAC;KACvB;AACD,IAAA,IAAI,QAAQ,GAAA;QAER,OAAO,IAAI,CAAC,QAAQ,CAAC;KACxB;AACD,IAAA,IAAI,SAAS,GAAA;QAET,OAAO,IAAI,CAAC,UAAU,CAAC;KAC1B;IACD,IAAI,SAAS,CAAC,IAAgB,EAAA;QAE1B,IAAI,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,UAAU,CAAC,KAAK;AACjC,eAAA,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC,UAAU,CAAC,QAAQ;AAC1C,eAAA,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,UAAU,CAAC,IAAI;YAErC,OAAO;QAEX,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC5B,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;KACxC;;AAED,IAAA,QAAQ,CAAC,IAAc,EAAA;AAEnB,QAAA,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AACrB,QAAA,IAAI,GAAG,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QACtB,IAAI,GAAG,KAAK,CAAC;AACT,YAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;AAC5B,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;AACzB,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;AAC/B,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;AAC7B,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;AAC3B,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;AAC7B,QAAA,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;AAC/B,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;AACnC,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;AAC7B,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;AACxC,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;AAC7B,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;AAC1B,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;AAC9B,QAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QACnC,IAAI,GAAG,IAAI,CAAC;YACR,IAAI,CAAC,IAAI,EAAE,CAAC;QAChB,IAAI,GAAG,GAAG,CAAC,EACX;YACI,IAAI,CAAC,UAAU,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YACnC,IAAI,CAAC,UAAU,CAAC,QAAQ,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YACvC,IAAI,CAAC,UAAU,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;AACvC,SAAA;QAED,IAAI,GAAG,GAAG,CAAC;AACP,YAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAE9B,IAAI,GAAG,GAAG,CAAC,EACX;AACI,YAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YACtC,IAAI,CAAC,mBAAmB,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YACzC,IAAI,CAAC,mBAAmB,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YACzC,IAAI,CAAC,mBAAmB,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YAEzC,IAAI,CAAC,kBAAkB,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YACxC,IAAI,CAAC,kBAAkB,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YACxC,IAAI,CAAC,kBAAkB,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;AAExC,YAAA,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;AAEzC,YAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;AACnC,YAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;AACjC,YAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;AAClC,YAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;AAElC,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;AAC5B,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;AAEhC,YAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;AAC7B,YAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;AAC7B,YAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YAEpC,IAAI,CAAC,iBAAiB,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YACvC,IAAI,CAAC,iBAAiB,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YACvC,IAAI,CAAC,iBAAiB,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YAEvC,IAAI,CAAC,gBAAgB,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YACtC,IAAI,CAAC,gBAAgB,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YACtC,IAAI,CAAC,gBAAgB,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;AAEtC,YAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YAE3B,IAAI,GAAG,GAAG,CAAC;AACP,gBAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YAE9B,IAAI,GAAG,GAAG,CAAC;AACP,gBAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YAC5B,IAAI,GAAG,GAAG,CAAC;AACP,gBAAA,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YAE3B,IAAI,GAAG,GAAG,CAAC,EACX;AACI,gBAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;AAC7B,gBAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;AAC7B,gBAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;AAC5B,gBAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;AAC9B,gBAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;AACjC,aAAA;YACD,IAAI,GAAG,GAAG,CAAC,EACX;AACI,gBAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;AAC9B,gBAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;AAC3B,aAAA;AACJ,SAAA;QAED,IAAI,CAAC,MAAM,EAAE,CAAC;KACjB;;AAED,IAAA,SAAS,CAAC,IAAc,EAAA;AAEpB,QAAA,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;AACtB,QAAA,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;AACf,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACvB,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;AAC7B,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AAC3B,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACzB,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AAC3B,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACjC,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACrC,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AAC3B,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;AAC1C,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AAC3B,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACxB,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AAC5B,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QACjC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QACjC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QACrC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;AAClC,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;;AAGxB,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QACpC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC;QACvC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC;QACvC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC;QAEvC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC;QACtC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC;QACtC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC;AAEtC,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;AAEvC,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;AACjC,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;AAC/B,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;AAChC,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;AAEhC,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC1B,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;AAE9B,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AAC3B,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AAC3B,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAElC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC;QACrC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC;QACrC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC;QAErC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;QACpC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;QACpC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;AAEpC,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;;AAGzB,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;;AAGxB,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;;AAGtB,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;;AAGrB,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AAC3B,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AAC3B,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC1B,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AAC5B,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;;AAG5B,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AAC5B,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KACzB;EAEJ;AA1We,UAAA,CAAA;IAAX,UAAU;AAA2B,CAAA,EAAAD,8BAAA,CAAA,SAAA,EAAA,MAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AAC1B,UAAA,CAAA;IAAX,UAAU;AAAkB,CAAA,EAAAA,8BAAA,CAAA,SAAA,EAAA,KAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AAGjB,UAAA,CAAA;IAAX,UAAU;AAA2B,CAAA,EAAAA,8BAAA,CAAA,SAAA,EAAA,OAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AAE1B,UAAA,CAAA;IAAX,UAAU;AAAwB,CAAA,EAAAA,8BAAA,CAAA,SAAA,EAAA,oBAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AACvB,UAAA,CAAA;IAAX,UAAU;AAAgD,CAAA,EAAAA,8BAAA,CAAA,SAAA,EAAA,qBAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AAC/C,UAAA,CAAA;IAAX,UAAU;AAAyC,CAAA,EAAAA,8BAAA,CAAA,SAAA,EAAA,oBAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AACxC,UAAA,CAAA;IAAX,UAAU;AAA2B,CAAA,EAAAA,8BAAA,CAAA,SAAA,EAAA,uBAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AAI1B,UAAA,CAAA;IAAX,UAAU;AAA8B,CAAA,EAAAA,8BAAA,CAAA,SAAA,EAAA,aAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AAC7B,UAAA,CAAA;IAAX,UAAU;AAAqB,CAAA,EAAAA,8BAAA,CAAA,SAAA,EAAA,SAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AAEpB,UAAA,CAAA;IAAX,UAAU;AAAqB,CAAA,EAAAA,8BAAA,CAAA,SAAA,EAAA,iBAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AACpB,UAAA,CAAA;IAAX,UAAU;AAAmB,CAAA,EAAAA,8BAAA,CAAA,SAAA,EAAA,eAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AAClB,UAAA,CAAA;IAAX,UAAU;AAAoB,CAAA,EAAAA,8BAAA,CAAA,SAAA,EAAA,gBAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AACnB,UAAA,CAAA;IAAX,UAAU;AAAsB,CAAA,EAAAA,8BAAA,CAAA,SAAA,EAAA,gBAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AAIrB,UAAA,CAAA;IAAX,UAAU;AAAgB,CAAA,EAAAA,8BAAA,CAAA,SAAA,EAAA,YAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AAEf,UAAA,CAAA;IAAX,UAAU;AAAuB,CAAA,EAAAA,8BAAA,CAAA,SAAA,EAAA,WAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AACtB,UAAA,CAAA;IAAX,UAAU;AAAuB,CAAA,EAAAA,8BAAA,CAAA,SAAA,EAAA,WAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AACtB,UAAA,CAAA;IAAX,UAAU;AAAyB,CAAA,EAAAA,8BAAA,CAAA,SAAA,EAAA,WAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AACxB,UAAA,CAAA;IAAX,UAAU;AAAsB,CAAA,EAAAA,8BAAA,CAAA,SAAA,EAAA,UAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AACrB,UAAA,CAAA;IAAX,UAAU;AAA0B,CAAA,EAAAA,8BAAA,CAAA,SAAA,EAAA,cAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AAEzB,UAAA,CAAA;IAAX,UAAU;AAAwB,CAAA,EAAAA,8BAAA,CAAA,SAAA,EAAA,QAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AACvB,UAAA,CAAA;IAAX,UAAU;AAAe,CAAA,EAAAA,8BAAA,CAAA,SAAA,EAAA,KAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AAEd,UAAA,CAAA;IAAX,UAAU;AAA4B,CAAA,EAAAA,8BAAA,CAAA,SAAA,EAAA,YAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AAC3B,UAAA,CAAA;IAAX,UAAU;AAAmB,CAAA,EAAAA,8BAAA,CAAA,SAAA,EAAA,SAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AAClB,UAAA,CAAA;IAAX,UAAU;AAAiC,CAAA,EAAAA,8BAAA,CAAA,SAAA,EAAA,iBAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AAChC,UAAA,CAAA;IAAX,UAAU;AAAwB,CAAA,EAAAA,8BAAA,CAAA,SAAA,EAAA,cAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AAGvB,UAAA,CAAA;IAAX,UAAU;AAAyB,CAAA,EAAAA,8BAAA,CAAA,SAAA,EAAA,QAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AACxB,UAAA,CAAA;IAAX,UAAU;AAAwB,CAAA,EAAAA,8BAAA,CAAA,SAAA,EAAA,MAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AAEvB,UAAA,CAAA;IAAX,UAAU;AAAyB,CAAA,EAAAA,8BAAA,CAAA,SAAA,EAAA,QAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AAIxB,UAAA,CAAA;IAAX,UAAU;AAAe,CAAA,EAAAA,8BAAA,CAAA,SAAA,EAAA,WAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AACd,UAAA,CAAA;IAAX,UAAU;AAAe,CAAA,EAAAA,8BAAA,CAAA,SAAA,EAAA,WAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AACd,UAAA,CAAA;IAAX,UAAU;AAAsB,CAAA,EAAAA,8BAAA,CAAA,SAAA,EAAA,kBAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AACrB,UAAA,CAAA;IAAX,UAAU;AAAwC,CAAA,EAAAA,8BAAA,CAAA,SAAA,EAAA,mBAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AACvC,UAAA,CAAA;IAAX,UAAU;AAAuC,CAAA,EAAAA,8BAAA,CAAA,SAAA,EAAA,kBAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AAGtC,UAAA,CAAA;IAAX,UAAU;AAAa,CAAA,EAAAA,8BAAA,CAAA,SAAA,EAAA,SAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AAKZ,UAAA,CAAA;IAAX,UAAU;AAAe,CAAA,EAAAA,8BAAA,CAAA,SAAA,EAAA,WAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AACd,UAAA,CAAA;IAAX,UAAU;AAAe,CAAA,EAAAA,8BAAA,CAAA,SAAA,EAAA,WAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AACd,UAAA,CAAA;IAAX,UAAU;AAAc,CAAA,EAAAA,8BAAA,CAAA,SAAA,EAAA,UAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AACb,UAAA,CAAA;IAAX,UAAU;AAAgB,CAAA,EAAAA,8BAAA,CAAA,SAAA,EAAA,YAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AACf,UAAA,CAAA;IAAX,UAAU;AAAgB,CAAA,EAAAA,8BAAA,CAAA,SAAA,EAAA,YAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AAEf,UAAA,CAAA;IAAX,UAAU;AAA2B,CAAA,EAAAA,8BAAA,CAAA,SAAA,EAAA,WAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AAnE7BA,8BAAsB,GAAA,UAAA,CAAA;IADlC,OAAO;AACK,CAAA,EAAAA,8BAAsB,CA4WlC;;;ACpXD;;AAEG;AAEUP,cAAM,GAAA,QAAA,GAAnB,MAAa,MAAO,SAAQ,SAAS,CAAA;AAArC,IAAA,WAAA,GAAA;;QAGI,IAAa,CAAA,aAAA,GAAG,KAAK,CAAC;AAEtB;;AAEG;QACO,IAAc,CAAA,cAAA,GAAG,KAAK,CAAC;AACvB,QAAA,IAAA,CAAA,iBAAiB,GAAG,KAAK,CAAC;AAC1B,QAAA,IAAA,CAAA,sBAAsB,GAAG,KAAK,CAAC;AAE/B,QAAA,IAAA,CAAA,gBAAgB,GAAG,IAAI,GAAG,EAAwB,CAAC;QAGnD,IAAM,CAAA,MAAA,GAAW,CAAC,CAAC;;AAGnB,QAAA,IAAA,CAAA,OAAO,GAAG,IAAIN,aAAO,EAAE,CAAC;;AAGxB,QAAA,IAAA,CAAA,SAAS,GAAY,IAAIA,aAAO,EAAE,CAAC;QAoBnC,IAAQ,CAAA,QAAA,GAAG,IAAI,CAAC;;QAKd,IAAmB,CAAA,mBAAA,GAAe,EAAE,CAAC;AAEjD;;;AAGG;AACH,QAAA,IAAA,CAAA,cAAc,GAAeG,kBAAU,CAAC,IAAI,CAAC;QAC7C,IAAU,CAAA,UAAA,GAAG,IAAI,CAAC;;QAwVlB,IAAiB,CAAA,iBAAA,GAAG,CAAC,CAAC;;KAqWzB;IA5tBG,IAAI,eAAe,KAAK,OAAO,IAAI,CAAC,gBAAgB,CAAC,EAAE;IAEvD,IAAI,cAAc,KAAK,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE;AAC/C,IAAA,IAAI,QAAQ,GAAA;AAER,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;KACjC;IAED,IAAI,QAAQ,CAAC,CAAU,EAAA;QAEnB,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAC5B,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;KAC1B;AAED,IAAA,IAAI,WAAW,GAAA;QAEX,OAAO,IAAIH,aAAO,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;KACnD;IAgBD,IAAI,QAAQ,CAAC,UAAoB,EAAA;AAE7B,QAAA,IAAI,UAAU,KAAK,IAAI,CAAC,WAAW;YAAE,OAAO;QAE5C,IAAI,IAAI,CAAC,GAAG,IAAI,UAAU,EAAE,MAAM;AAClC,SAAA;AACI,YAAA,IAAI,EAAE,UAAU,CAAC,MAAM,YAAYa,8BAAsB,CAAC;AACtD,gBAAA,MAAM,uBAAuB,CAAC;YAElC,IAAI,UAAU,CAAC,MAAM,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE;AAChC,gBAAA,MAAM,uBAAuB,CAAC;AACrC,SAAA;QAED,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAC5B,QAAA,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;QAC9B,KAAK,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC,gBAAgB;AACzC,YAAA,IAAI,CAAC,wBAAwB,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;KAChD;AAED,IAAA,IAAI,QAAQ,GAAA;QAER,OAAO,IAAI,CAAC,WAAW,CAAC;KAC3B;IAED,IAAI,UAAU,CAAC,KAAa,EAAA;AAExB,QAAA,IAAI,KAAK,KAAK,IAAI,CAAC,MAAM,EACzB;AACI,YAAA,IAAI,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;AAChC,YAAA,IAAI,OAAO,EACX;AACI,gBAAA,IAAI,MAAM,GAAG,IAAIH,sBAAc,EAAE,CAAC;gBAClC,MAAM,CAAC,QAAQ,GAAG,IAAIO,gCAAwB,CAAC,KAAK,CAAC,CAAC;gBACtD,MAAM,CAAC,QAAQ,GAAG,IAAIA,gCAAwB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC5D,gBAAA,OAAO,CAAC,sBAAsB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AAChD,aAAA;AAED,YAAA,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;AACpB,YAAA,IAAI,CAAC,MAAM,CAACd,kBAAU,CAAC,QAAQ,CAAC,CAAC;AACpC,SAAA;KACJ;AACD,IAAA,IAAI,UAAU,GAAA;QAEV,OAAO,IAAI,CAAC,MAAM,CAAC;KACtB;AACD;;AAEG;AACH,IAAA,OAAO,GAAe,EAAA,OAAO,EAAE,CAAC,EAAE;AAElC;;AAEG;AACH,IAAA,IAAI,WAAW,GAAA;QAEX,KAAK,IAAI,GAAG,GAAG,CAAC,IAAI,IAAI,CAAC,gBAAgB;AACrC,YAAA,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC;AACvB,QAAA,OAAO,MAAM,CAAC,IAAI,CAAC,2BAA2B,EAAE,CAAC,CAAC;KACrD;AAED;;AAEG;AACH,IAAA,IAAI,gBAAgB,GAAA;AAEhB,QAAA,IAAI,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC;AAC1B,QAAA,IAAI,CAAC,OAAO,GAAG,YAAY,CAAC;AAC5B,QAAA,IAAI,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC;AAC3B,QAAA,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,OAAO,IAAI,OAAO,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;KAClC;AAED,IAAA,mBAAmB,CAAC,GAAY,EAAA;AAE5B,QAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;KACxE;AAED,IAAA,IAAI,oBAAoB,GAAA;QAEpB,OAAO,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;KACrD;AAED,IAAA,IAAI,GAAG,GAAA;AAEH,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;KAC/B;AAED,IAAA,IAAI,UAAU,GAAA;QAEV,OAAO,IAAI,CAAC,OAAO,CAAC;KACvB;;IAGD,IAAI,GAAG,CAAC,IAAa,EAAA;AAEjB,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KAC3B;AACD,IAAA,IAAI,MAAM,GAAA;AAEN,QAAA,OAAO,IAAIJ,aAAO,EAAE,CAAC,mBAAmB,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;KAC7D;AACD,IAAA,IAAI,QAAQ,GAAA;QAER,OAAO,IAAIA,aAAO,EAAE,CAAC,qBAAqB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;KAC5D;AAED,IAAA,IAAI,CAAC,CAAO,EAAA;QAER,IAAImB,QAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAIA,QAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAIA,QAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YAAE,OAAO;QAE/D,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAE5B,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACjC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACjC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAEjC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACnC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACnC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACnC,QAAA,IAAI,CAAC,MAAM,CAACf,kBAAU,CAAC,MAAM,CAAC,CAAC;AAC/B,QAAA,OAAO,IAAI,CAAC;KACf;IAED,IAAI,QAAQ,CAAC,EAAW,EAAA;AAEpB,QAAA,IAAI,KAAK,GAAG,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AAC7C,QAAA,IAAI,KAAK,GAAG,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AAC7C,QAAA,IAAI,KAAK,GAAG,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QAE7C,IAAI,KAAK,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC;YAAE,OAAO;QAEtD,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAC5B,QAAA,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;QAC7B,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,KAAK,CAAC;QACrC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,KAAK,CAAC;QACrC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,KAAK,CAAC;AACrC,QAAA,IAAI,CAAC,MAAM,CAACA,kBAAU,CAAC,MAAM,CAAC,CAAC;KAClC;AAED,IAAA,IAAI,CAAC,GAAA,EAAK,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,EAAE;IAC7C,IAAI,CAAC,CAAC,CAAS,EAAA;AAEX,QAAA,IAAIe,QAAM,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;YAAE,OAAO;QAC9B,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;KAC5C;;IAGD,EAAE,GAAA;QAEE,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,KAAK,CAAC;AAAE,YAAA,OAAO,IAAI,CAAC;QAEjD,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC5B,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;AACtC,QAAA,OAAO,IAAI,CAAC;KACf;;IAGD,iBAAiB,GAAA;QAEb,IAAI,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AAClC,QAAA,IAAIA,QAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,EAChC;YACI,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAC5B,YAAA,iBAAiB,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;AAC1C,SAAA;AACD,QAAA,OAAO,IAAI,CAAC;KACf;AAED,IAAA,IAAI,MAAM,GAAA;QAEN,OAAO,IAAIlB,aAAO,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;KACjD;AAED;;AAEE;AACF,IAAA,WAAW,CAAC,CAAS,EAAA;AAEjB,QAAA,OAAO,eAAe,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;KACrD;AAED;;AAEG;AACH,IAAA,wBAAwB,CAAC,EAAU,EAAA;AAE/B,QAAA,IAAI,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC;AAC3B,QAAA,IAAI,IAAI,GAAG,EAAE,CAAC,WAAW,CAAC;QAC1B,OAAO,GAAG,IAAI,IAAI,IAAI,GAAG,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;KACjD;;IAID,SAAS,GAAA;QAEL,IAAI,IAAI,CAAC,WAAW,EACpB;AACI,YAAA,eAAe,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;AAClC,YAAA,IAAI,CAAC,WAAW,GAAG,SAAS,CAAC;AAChC,SAAA;QAED,KAAK,IAAI,GAAG,GAAG,CAAC,IAAI,IAAI,CAAC,gBAAgB;YACrC,eAAe,CAAC,GAAG,CAAC,CAAC;AACzB,QAAA,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAC;AAC9B,QAAA,OAAO,IAAI,CAAC;KACf;IACD,cAAc,GAAA;AAEV,QAAA,IAAI,GAAG,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAACC,kBAAU,CAAC,GAAG,CAAC,CAAC;AACpD,QAAA,IAAI,GAAG;YACH,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAACA,kBAAU,CAAC,GAAG,CAAC,CAAC;QACjD,KAAK,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC,gBAAgB;YACzC,eAAe,CAAC,GAAG,CAAC,CAAC;AACzB,QAAA,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAC;AAC9B,QAAA,IAAI,GAAG;YACH,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAACA,kBAAU,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;KACtD;AAED,IAAA,IAAI,YAAY,GAAA;QAEZ,OAAO,IAAI,CAAC,cAAc,CAAC;KAC9B;AAED,IAAA,IAAc,UAAU,GAAA;QAEpB,IAAI,CAAC,IAAI,CAAC,YAAY;AAAE,YAAA,OAAO,IAAI,CAAC;AACpC,QAAA,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,WAAW,IAAI,IAAI,CAAC,YAAY,CAAC,OAAO,KAAK,CAAC,CAAC;KAC5E;AAED,IAAA,IAAc,aAAa,GAAA;QAEvB,OAAO,IAAI,CAAC,UAAU,CAAC;KAC1B;AAID,IAAA,IAAI,UAAU,GAAA;QAEV,IAAI,IAAI,CAAC,WAAW;YAChB,OAAO,IAAI,CAAC,WAAW,CAAC;AAE5B,QAAA,IAAI,CAAC,WAAW,GAAG,IAAIkB,cAAQ,EAAE,CAAC;QAClC,IAAI,CAAC,IAAI,CAAC,aAAa;YACnB,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC;QAC5C,IAAI,IAAI,CAAC,SAAS,EAClB;AACI,YAAA,IAAI,CAAC,cAAc,GAAG,uBAAuB,CAAC,WAAW,CAAC;YAC1D,IAAI,GAAG,GAAG,IAAI,CAAC,2BAA2B,CAAC,uBAAuB,CAAC,WAAW,CAAC,CAAC;AAChF,YAAA,IAAI,GAAG;AAAE,gBAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACtC,SAAA;;AAEG,YAAA,IAAI,CAAC,WAAW,CAAC,OAAO,GAAG,KAAK,CAAC;QACrC,OAAO,IAAI,CAAC,WAAW,CAAC;KAC3B;AAED,IAAA,IAAI,SAAS,GAAA;QAET,IAAI,GAAG,GAAG,IAAI,CAAC,2BAA2B,CAAClB,kBAAU,CAAC,GAAG,CAAC,CAAC;AAC3D,QAAA,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa;AAC1B,YAAA,GAAG,CAAC,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC;AAC/B,QAAA,OAAO,GAAG,CAAC;KACd;IAED,gBAAgB,GAAA;AAEZ,QAAA,IAAI,GAAG,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAACA,kBAAU,CAAC,GAAG,CAAC,CAAC;AACpD,QAAA,IAAI,GAAG,EACP;YACI,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAACA,kBAAU,CAAC,GAAG,CAAC,CAAC;YAC7C,eAAe,CAAC,GAAG,CAAC,CAAC;YACrB,IAAI,GAAG,CAAC,MAAM;AACV,gBAAA,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AAC9B,SAAA;KACJ;AAID,IAAA,gBAAgB,CAAC,IAAgB,EAAA;AAE7B,QAAA,IAAI,IAAI,CAAC,cAAc,KAAK,IAAI,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,EACzE;AACI,YAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;AAC3B,YAAA,IAAI,CAAC,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ;gBAAE,OAAO;AAC3F,YAAA,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YACnC,IAAI,GAAG,GAAG,IAAI,CAAC,2BAA2B,CAAC,IAAI,CAAC,CAAC;AACjD,YAAA,IAAI,GAAG;AAAE,gBAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACrC,SAAA;KACJ;AAED,IAAA,2BAA2B,CAAC,UAAA,GAAyBA,kBAAU,CAAC,SAAS,EAAA;QAErE,IAAI,IAAI,CAAC,cAAc,EACvB;AACI,YAAA,IAAI,UAAU,KAAKA,kBAAU,CAAC,GAAG;gBAC7B,OAAO;YACX,IAAI,UAAU,GAAG,GAAG;AAChB,gBAAA,UAAU,GAAGA,kBAAU,CAAC,SAAS,CAAC;;AAElC,gBAAA,UAAU,GAAGA,kBAAU,CAAC,cAAc,CAAC;AAC9C,SAAA;QACD,IAAI,UAAU,KAAKA,kBAAU,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,iBAAiB;AACzD,YAAA,UAAU,GAAGA,kBAAU,CAAC,UAAU,CAAC;QACvC,IAAI,UAAU,KAAKA,kBAAU,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,sBAAsB;AACnE,YAAA,UAAU,GAAGA,kBAAU,CAAC,SAAS,CAAC;QAEtC,IAAI,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,UAAU,CAAC,EACzC;YACI,OAAO,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;AAChD,SAAA;AAED,aAAA;YACI,IAAI,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;YAC9C,IAAI,OAAO,KAAK,SAAS,EACzB;AACI,gBAAA,IAAI,UAAU,GAAG,GAAG;oBAChB,OAAO,IAAI,CAAC,2BAA2B,CAAC,UAAU,GAAG,GAAG,CAAC,CAAC;gBAC9D,OAAO;AACV,aAAA;;AAGD,YAAA,OAAO,CAAC,gBAAgB,GAAG,KAAK,CAAC;AACjC,YAAA,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC;AAC9B,YAAA,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;AAChC,YAAA,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAC;YAEvC,IAAI,CAAC,IAAI,CAAC,aAAa;AACnB,gBAAA,OAAO,CAAC,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC;YAEnC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;AAC/C,YAAA,OAAO,OAAO,CAAC;AAClB,SAAA;KACJ;AAED;;AAEG;AACO,IAAA,cAAc,CAAC,UAAA,GAAyBA,kBAAU,CAAC,SAAS,EAAA;AAElE,QAAA,OAAO,SAAS,CAAC;KACpB;AAKD;;AAEG;AAEH,IAAA,MAAM,CAAC,IAAI,GAAGE,kBAAU,CAAC,GAAG,EAAA;QAExB,IAAI,CAAC,iBAAiB,EAAE,CAAC;AACzB,QAAA,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC;QAC5B,IAAI,IAAI,CAAC,UAAU,EACnB;YACI,IAAI,CAAC,WAAW,EAAE,CAAC;;;AAGtB,SAAA;KACJ;;;AAID,IAAA,kBAAkB,MAAM;IAExB,WAAW,GAAA;AAEP,QAAA,IAAI,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC;QAC/B,IAAI,IAAI,KAAK,CAAC;YAAE,OAAO;AAEvB,QAAA,IAAI,IAAI,GAAGA,kBAAU,CAAC,QAAQ,IAAI,IAAI,CAAC,gBAAgB,CAAC,IAAI,GAAG,CAAC;YAC5D,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAE9B,IAAI,CAAC,aAAa,EAAE,CAAC;AAErB,QAAA,IAAI,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAACF,kBAAU,CAAC,GAAG,CAAC,CAAC;QACzD,KAAK,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC,gBAAgB,EAC7C;AACI,YAAA,IAAI,QAAQ,IAAI,IAAI,KAAKA,kBAAU,CAAC,GAAG;gBACnC,SAAS;AAEb,YAAA,IAAI,IAAI,GAAGE,kBAAU,CAAC,QAAQ,EAC9B;AACI,gBAAA,IAAI,GAAG,CAAC,QAAQ,CAAC,OAAO,EACxB;AACI,oBAAA,IAAI,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC;oBACxB,eAAe,CAAC,GAAG,CAAC,CAAC;AACrB,oBAAA,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;oBACnC,IAAI,MAAM,GAAG,IAAI,CAAC,2BAA2B,CAAC,IAAI,CAAC,CAAC;AACpD,oBAAA,IAAI,MAAM,EACV;AACI,wBAAA,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AACnB,wBAAA,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AACtB,qBAAA;oBACD,GAAG,GAAG,MAAM,CAAC;AAChB,iBAAA;;AAEG,oBAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;AACxC,aAAA;AAED,YAAA,IAAI,IAAI,GAAGA,kBAAU,CAAC,QAAQ;AAC1B,gBAAA,IAAI,CAAC,wBAAwB,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;YAE7C,IAAI,IAAI,GAAGA,kBAAU,CAAC,MAAM,IAAI,IAAI,GAAGA,kBAAU,CAAC,QAAQ,EAC1D;AACI,gBAAA,GAAG,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;;AAE5B,gBAAA,GAAG,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAC;AACtC,aAAA;AAEJ,SAAA;AACD,QAAA,IAAI,CAAC,cAAc,GAAGA,kBAAU,CAAC,IAAI,CAAC;KACzC;AAED;;AAEG;IACH,gBAAgB,CAAC,IAAgB,EAAE,EAAY,EAAA;KAG9C;AAED;;AAEG;AACH,IAAA,wBAAwB,CAAC,IAAgB,EAAE,GAAa,EAAE,QAAmB,EAAA;KAG5E;AAED,IAAA,IAAc,YAAY,GAAA;QAEtB,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM;AAC3C,YAAA,OAAgC,IAAI,CAAC,WAAW,CAAC,MAAO,CAAC,QAAgC,CAAC;QAC9F,OAAO,uBAAuB,CAAC,mBAAmB,CAAC;KACtD;AAED;;AAEG;IACH,iBAAiB,CAAC,KAAK,GAAG,CAAC,EAAA;KAE1B;IACD,kBAAkB,GAAA;QAEd,KAAK,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,IAAI,CAAC,gBAAgB;AACxC,YAAA,IAAI,CAAC,wBAAwB,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;KAC/C;AACD,IAAA,IAAI,OAAO,GAAA;QAEP,OAAO,IAAI,CAAC,QAAQ,CAAC;KACxB;IACD,IAAI,OAAO,CAAC,CAAU,EAAA;AAElB,QAAA,IAAI,CAAC,KAAK,IAAI,CAAC,QAAQ,EACvB;YACI,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAC5B,YAAA,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;YAClB,IAAI,CAAC,aAAa,EAAE,CAAC;AACxB,SAAA;KACJ;AAED,IAAA,IAAY,SAAS,GAAA;QAEjB,OAAO,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC;KAC1C;IAED,aAAa,GAAA;QAET,IAAI,IAAI,CAAC,WAAW,EACpB;YACI,IAAI,CAAC,WAAW,CAAC,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC;YAC1C,IAAI,IAAI,CAAC,SAAS;AACd,gBAAA,IAAI,CAAC,gBAAgB,CAAC,uBAAuB,CAAC,WAAW,CAAC,CAAC;AAClE,SAAA;KACJ;;IAID,OAAO,GAAA;QAEH,KAAK,CAAC,OAAO,EAAE,CAAC;QAChB,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM;YAC3C,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACrD,IAAI,CAAC,SAAS,EAAE,CAAC;KACpB;IAED,KAAK,CAAC,UAAmB,IAAI,EAAA;AAEzB,QAAA,IAAI,OAAO,KAAK,IAAI,CAAC,QAAQ;YACzB,OAAO;QACX,IAAI,CAAC,iBAAiB,EAAE,CAAC;AACzB,QAAA,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACrB,IAAI,CAAC,aAAa,EAAE,CAAC;AACrB,QAAA,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;KAC5B;AAGD,IAAA,UAAU,CAAC,OAAgB,EAAA;KAG1B;AAKD;;;AAGI;AACJ,IAAA,WAAW,CAAC,CAAU,EAAA;QAElB,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAE5B,QAAA,CAAC,CAAC,YAAY,CAAC,QAAM,CAAC,GAAG,EAAE,QAAM,CAAC,GAAG,EAAE,QAAM,CAAC,GAAG,CAAC,CAAC;AACnD,QAAA,IACIe,QAAM,CAAC,QAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC;YACtCA,QAAM,CAAC,QAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC;AACtC,YAAAA,QAAM,CAAC,QAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,EAE1C;YACI,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;YAC/C,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;YACnD,IAAI,CAAC,OAAO,CAAC,QAAM,CAAC,GAAG,CAAC,KAAK,CAAC,QAAM,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,QAAM,CAAC,GAAG,CAAC;AAC9D,gBAAA,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC;AACjC,SAAA;;AAEG,YAAA,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;AAC7B,QAAA,IAAI,CAAC,MAAM,CAACf,kBAAU,CAAC,MAAM,CAAC,CAAC;AAC/B,QAAA,OAAO,IAAI,CAAC;KACf;AAES,IAAA,gBAAgB,CAAC,CAAU,EAAA;AAEjC,QAAA,OAAO,IAAI,CAAC;KACf;AACS,IAAA,iBAAiB,CAAC,CAAU,EAAA;AAElC,QAAA,OAAO,IAAI,CAAC;KACf;AAED;;;;;;;AAOE;AACF,IAAA,mBAAmB,CACf,QAAwB,EACxB,SAAkB,EAClB,SAAkB,EAClB,SAAmB,EAAA;AAGnB,QAAA,OAAO,EAAE,CAAC;KACb;IAED,aAAa,GAAA;AAET,QAAA,OAAO,EAAE,CAAC;KACb;IAED,cAAc,CAAC,SAAmB,EAAE,GAAY,EAAA;KAG/C;IAED,gBAAgB,GAAA;AAEZ,QAAA,OAAO,EAAE,CAAC;KACb;AAED;;;;AAIG;IACH,iBAAiB,CAAC,SAAwB,EAAE,GAAY,EAAA;KAGvD;AACD,IAAA,aAAa,CAAC,KAAa,EAAE,OAAwB,EAAe,EAAA,OAAO,EAAE;;IAIpE,KAAK,GAAA;AAEV,QAAA,IAAI,GAAG,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC;AACxB,QAAA,GAAG,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC;AACzC,QAAA,GAAG,CAAC,QAAQ,GAAG,SAAS,CAAC;AACzB,QAAA,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;AAC1B,QAAA,OAAO,GAAG,CAAC;KACd;AAED,IAAA,eAAe,CAAC,IAAU,EAAA;QAEtB,KAAK,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC,gBAAgB,EAC7C;AACI,YAAA,IAAI,YAAY,GAAG,GAAG,CAAC,QAAQ,CAAC;AAChC,YAAA,GAAG,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,GAAG,EAAE,CAAC,CAAC;AACnC,YAAA,IAAI,MAAM,GAAG,GAAG,CAAC,KAAK,EAAE,CAAC;AACzB,YAAA,GAAG,CAAC,QAAQ,GAAG,YAAY,CAAC;AAC5B,YAAA,GAAG,CAAC,QAAQ,CAAC,OAAO,GAAG,IAAI,CAAC;AAE5B,YAAA,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC;YAC7B,MAAM,CAAC,QAAQ,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;AACnC,YAAA,MAAM,CAAC,QAAQ,CAAC,OAAO,GAAG,IAAI,CAAC;YAC/B,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AAC3C,SAAA;AACD,QAAA,IAAI,CAAC,cAAc,GAAGA,kBAAU,CAAC,IAAI,CAAC;KACzC;AAKD,IAAA,IAAI,WAAW,GAAA;AAEX,QAAA,OAAO,IAAI,CAAC,eAAe,IAAI,QAAM,CAAC,eAAe,CAAC;KACzD;AAED;;AAEG;AACH,IAAA,QAAQ,CAAC,IAAc,EAAA;AAEnB,QAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;AAC5B,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;AACrB,QAAA,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;QAC7B,IAAI,CAAC,MAAM,EAAE,CAAC;KACjB;;AAGS,IAAA,SAAS,CAAC,IAAc,EAAA;AAE9B,QAAA,IAAI,GAAG,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;AACtB,QAAA,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AACrB,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;AAC1B,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAC3C,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QAEpC,IAAI,GAAG,KAAK,CAAC;AACT,YAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QAErC,IAAI,GAAG,GAAG,CAAC;AACP,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QAExC,IAAI,GAAG,GAAG,CAAC;AACP,YAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAE3C,IAAI,GAAG,GAAG,CAAC;AACP,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAChC,IAAI,GAAG,GAAG,CAAC;YACP,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QAC1C,IAAI,GAAG,GAAG,CAAC,EACX;AACI,YAAA,IAAI,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;AACxB,YAAA,IAAI,CAAC,mBAAmB,CAAC,MAAM,GAAG,CAAC,CAAC;YACpC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAC9B;AACI,gBAAA,IAAI,EAAE,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;AACjC,gBAAA,IAAI,EAAE;AAAE,oBAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAC7C,aAAA;AACJ,SAAA;KACJ;;AAED,IAAA,SAAS,CAAC,IAAc,EAAA;AAEpB,QAAA,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACd,QAAA,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;AACtB,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACxB,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACzC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;AACnC,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAClC,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACrC,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC1B,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,CAAC;QAErC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC;AAC5C,QAAA,KAAK,IAAI,EAAE,IAAI,IAAI,CAAC,mBAAmB;AACnC,YAAA,IAAI,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC;KAClC;;AAED,IAAA,gBAAgB,CAAC,QAAmB,EAAA;AAEhC,QAAA,KAAK,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;QACjC,IAAI,QAAQ,YAAYc,gCAAwB;AAC5C,YAAA,IAAI,CAAC,UAAU,GAAG,QAAQ,CAAC,KAAK,CAAC;KACxC;AAEQ,IAAA,QAAQ,CAAC,GAAc,EAAA;AAE5B,QAAA,IAAI,aAAa,GAAG,IAAI,CAAC,QAAQ,CAAC;AAClC,QAAA,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QACpB,IAAI,CAAC,MAAM,EAAE,CAAC;AACd,QAAA,IAAI,CAAC,QAAQ,GAAG,aAAa,CAAC;KACjC;EAGJ;AArMUX,cAAG,CAAA,GAAA,GAAG,IAAIP,aAAO,CAAC;AAClBO,cAAG,CAAA,GAAA,GAAG,IAAIP,aAAO,CAAC;AAClBO,cAAG,CAAA,GAAA,GAAG,IAAIP,aAAO,CAAC;AApgBb,UAAA,CAAA;IAAX,UAAU;AAAmB,CAAA,EAAAO,cAAA,CAAA,SAAA,EAAA,SAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AAClB,UAAA,CAAA;IAAX,UAAU;AAAoB,CAAA,EAAAA,cAAA,CAAA,SAAA,EAAA,UAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AAEnB,UAAA,CAAA;IAAX,UAAU;AAAsC,CAAA,EAAAA,cAAA,CAAA,SAAA,EAAA,qBAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AAqWjD,UAAA,CAAA;IADCG,SAAI;AAWJ,CAAA,EAAAH,cAAA,CAAA,SAAA,EAAA,QAAA,EAAA,IAAA,CAAA,CAAA;AA2ID,UAAA,CAAA;IADCG,SAAI;AAIJ,CAAA,EAAAH,cAAA,CAAA,SAAA,EAAA,YAAA,EAAA,IAAA,CAAA,CAAA;AA3iBQA,cAAM,GAAA,QAAA,GAAA,UAAA,CAAA;IADlB,OAAO;AACK,CAAA,EAAAA,cAAM,CAkvBlB,CAAA;AAGYW,gCAAwB,GAArC,MAAa,wBAAwB,CAAA;AAEjC,IAAA,WAAA,CAAmB,KAAa,EAAA;QAAb,IAAK,CAAA,KAAA,GAAL,KAAK,CAAQ;KAAK;AACrC,IAAA,QAAQ,CAAC,IAAc,EAAA;AAEnB,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;AACzB,QAAA,OAAO,IAAI,CAAC;KACf;AACD,IAAA,SAAS,CAAC,IAAc,EAAA;AAEpB,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACvB,QAAA,OAAO,IAAI,CAAC;KACf;EACJ;AAbYA,gCAAwB,GAAA,UAAA,CAAA;IADpC,OAAO;AACK,CAAA,EAAAA,gCAAwB,CAapC;;AC1uBD,IAAI,SAAS,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;AAE9C;;;;;;AAMG;SACa,KAAK,CAAC,IAAY,EAAE,MAAW,EAAE,YAAqB,EAAA;IAElE,IAAI,IAAI,GAAG,EAAE,CAAC;AACd,IAAA,IAAI,MAAM;QACN,KAAK,IAAI,IAAI,IAAI,MAAM;YACnB,IAAI,IAAI,OAAO,IAAI,CAAA,GAAA,EAAM,MAAM,CAAC,IAAI,CAAC,CAAA,CAAA,CAAG,CAAC;AAEjD,IAAA,IAAI,YAAY,EAChB;AACI,QAAA,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;AACvB,QAAA,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACjC,YAAA,IAAI,GAAG,YAAY,GAAG,IAAI,CAAC;AAClC,KAAA;IAED,IAAI,IAAI,IAAI,CAAC;AAEb,IAAA,IAAI,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;IAExB,IAAI,OAAO,MAAM,KAAK,UAAU;QAC5B,OAAO,MAAM,EAAE,CAAC;AAEpB,IAAA,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC;AAC1B,CAAC;SAEe,QAAQ,CAAC,IAAY,EAAE,MAAW,EAAE,YAAqB,EAAA;IAErE,IACA;QACI,OAAO,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC;AAC5C,KAAA;AACD,IAAA,OAAO,KAAK,EACZ;AACI,QAAA,OAAO,GAAG,CAAC;AACd,KAAA;AACL,CAAC;AAgBD,MAAM,QAAQ,GAAG,aAAa,CAAC;AAC/B;AACgB,SAAA,SAAS,CAAC,IAAY,EAAE,MAAW,EAAA;IAE/C,IAAI,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;AAChC,IAAA,IAAI,CAAC,IAAI;AAAE,QAAA,OAAO,IAAI,CAAC;IACvB,KAAK,IAAI,GAAG,IAAI,IAAI;QAChB,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAClF,IAAA,OAAO,IAAI,CAAC;AAChB;;ACrHA,IAAY,YAmBX,CAAA;AAnBD,CAAA,UAAY,YAAY,EAAA;AAEpB,IAAA,YAAA,CAAA,SAAA,CAAA,GAAA,SAAmB,CAAA;AACnB,IAAA,YAAA,CAAA,aAAA,CAAA,GAAA,aAA2B,CAAA;AAC3B,IAAA,YAAA,CAAA,WAAA,CAAA,GAAA,WAAuB,CAAA;AACvB,IAAA,YAAA,CAAA,UAAA,CAAA,GAAA,UAAqB,CAAA;AACrB,IAAA,YAAA,CAAA,WAAA,CAAA,GAAA,WAAuB,CAAA;AACvB,IAAA,YAAA,CAAA,YAAA,CAAA,GAAA,YAAyB,CAAA;AACzB,IAAA,YAAA,CAAA,YAAA,CAAA,GAAA,gBAA6B,CAAA;AAC7B,IAAA,YAAA,CAAA,YAAA,CAAA,GAAA,aAA0B,CAAA;AAC1B,IAAA,YAAA,CAAA,UAAA,CAAA,GAAA,UAAqB,CAAA;AACrB,IAAA,YAAA,CAAA,UAAA,CAAA,GAAA,UAAqB,CAAA;AACrB,IAAA,YAAA,CAAA,gBAAA,CAAA,GAAA,SAA0B,CAAA;AAC1B,IAAA,YAAA,CAAA,KAAA,CAAA,GAAA,KAAW,CAAA;AACX,IAAA,YAAA,CAAA,OAAA,CAAA,GAAA,QAAgB,CAAA;AAChB,IAAA,YAAA,CAAA,WAAA,CAAA,GAAA,YAAwB,CAAA;AACxB,IAAA,YAAA,CAAA,cAAA,CAAA,GAAA,eAA8B,CAAA;AAC9B,IAAA,YAAA,CAAA,WAAA,CAAA,GAAA,KAAiB,CAAA;AACjB,IAAA,YAAA,CAAA,WAAA,CAAA,GAAA,WAAuB,CAAA;AAC3B,CAAC,EAnBW,YAAY,KAAZ,YAAY,GAmBvB,EAAA,CAAA,CAAA;;ACHD;AACO,MAAM,SAAS,GAAG,IAAI,CAAC;SAoBd,KAAK,CAAC,KAAa,EAAE,GAAW,EAAE,GAAW,EAAA;AAEzD,IAAA,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;AAC/C,CAAC;AAEe,SAAAG,UAAQ,CAAC,KAAa,EAAE,GAAwB,EAAA;AAE5D,IAAA,IAAI,KAAK,GAAG,CAAC,GAAG,YAAY,KAAK,IAAI,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC;IACtD,IAAI,KAAK,GAAG,CAAC;QACT,OAAO,KAAK,GAAG,KAAK,CAAC;SACpB,IAAI,KAAK,IAAI,KAAK;QACnB,OAAO,KAAK,GAAG,KAAK,CAAC;;AAErB,QAAA,OAAO,KAAK,CAAC;AACrB,CAAC;AA6BD;AACM,SAAU,aAAa,CAAC,EAAU,EAAE,EAAU,EAAE,CAAS,EAAE,IAAI,GAAG,IAAI,EAAA;IAExE,IAAI,EAAE,GAAG,EAAE;QAAE,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;AACjC,IAAA,OAAOF,QAAM,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;AAC7C,CAAC;AA8CD;SACgB,YAAY,CAAC,CAAkB,EAAE,iBAAyB,CAAC,EAAA;IAEvE,IAAI,OAAO,CAAC,KAAK,QAAQ;AACrB,QAAA,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;IACtB,IAAI,KAAK,CAAC,CAAC,CAAC;AAAE,QAAA,OAAO,EAAE,CAAC;AACxB,IAAA,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,cAAc,CAAC,GAAG,IAAI;AAAE,QAAA,OAAO,GAAG,CAAC;AACnE,IAAA,IAAI,CAAC,cAAc;AACf,QAAA,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;;AAEpB,QAAA,OAAO,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;AAChE,CAAC;AAED;;;;;AAKG;SACa,OAAO,CAAC,CAAS,EAAE,iBAAyB,CAAC,EAAA;AAEzD,IAAA,IAAIA,QAAM,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;AAAE,QAAA,OAAO,GAAG,CAAC;AAC5D,IAAA,OAAO,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;AACrC,CAAC;AAEK,SAAU,SAAS,CAAC,GAAa,EAAA;AAEnC,IAAA,OAAO,GAAG,EACV;AACI,QAAA,IAAI,GAAG,CAAC,QAAQ,CAAC,MAAM;AACnB,YAAA,OAAO,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC;AAE/B,QAAA,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC;AACpB,KAAA;AACL,CAAC;AAEK,SAAU,QAAQ,CAAC,GAAa,EAAA;AAElC,IAAA,OAAO,SAAS,CAAC,GAAG,CAAC,YAAYZ,cAAM,CAAC;AAC5C;;ACtKO,MAAM,YAAY,GAAG,IAAIN,aAAO,EAAE,CAAC;AACnC,MAAM,OAAO,GAAG,IAAID,aAAO,EAAE,CAAC;AAC9B,MAAM,KAAK,GAAG,IAAIA,aAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AACnC,MAAM,MAAM,GAAG,IAAIA,aAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AACrC,MAAM,KAAK,GAAG,IAAIA,aAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AACnC,MAAM,MAAM,GAAG,IAAIA,aAAO,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACrC,MAAM,KAAK,GAAG,IAAIA,aAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AACnC,MAAM,MAAM,GAAG,IAAIA,aAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAGtC,SAAU,SAAS,CAAC,CAA4B,EAAA;IAElD,OAAO,IAAIsB,aAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AACjC,CAAC;AACK,SAAU,SAAS,CAAC,CAAwC,EAAA;AAE9D,IAAA,OAAO,IAAItB,aAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AACtC,CAAC;AAED;;AAEG;AACa,SAAA,WAAW,CAAC,IAAY,EAAE,IAAY,EAAE,IAAY,EAAE,IAAY,EAAE,GAAG,GAAG,CAAC,EAAA;AAEvF,IAAA,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,GAAG,CAAC;AAC7D,CAAC;AAEe,SAAA,YAAY,CAAC,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,GAAG,GAAG,CAAC,EAAA;IAEhF,IAAI,EAAE,GAAG,EAAE;QAAE,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;IACjC,IAAI,EAAE,GAAG,EAAE;QAAE,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;AACjC,IAAA,OAAO,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC;AACrD,CAAC;AAED;;;;;AAKG;AACa,SAAA,WAAW,CAAC,CAAU,EAAE,CAAS,EAAA;IAE7C,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACpB,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAEpB,IAAA,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AAC1B,IAAA,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AAE1B,IAAA,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AACR,IAAA,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AACR,IAAA,OAAO,CAAC,CAAC;AACb,CAAC;AAEK,SAAUmB,QAAM,CAAC,EAAU,EAAE,EAAU,EAAE,IAAI,GAAG,IAAI,EAAA;IAEtD,OAAO,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,IAAI,IAAI,CAAC;AACrC,CAAC;AAgBK,SAAU,OAAO,CAAC,EAAQ,EAAE,EAAQ,EAAE,IAAI,GAAG,IAAI,EAAA;AAEnD,IAAA,OAAOA,QAAM,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,IAAIA,QAAM,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,IAAIA,QAAM,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;AAC5F,CAAC;AACK,SAAU,OAAO,CAAC,EAAM,EAAE,EAAM,EAAE,IAAI,GAAG,IAAI,EAAA;IAE/C,OAAOA,QAAM,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,IAAIA,QAAM,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;AAChE,CAAC;AAED;;;;;;AAMG;SACa,KAAK,CAA8B,CAAI,EAAE,EAAU,EAAE,GAAW,EAAA;IAE5E,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;IAC1B,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;AAC1B,IAAA,OAAO,CAAC,CAAC;AACb,CAAC;AAEK,SAAU,KAAK,CAAC,CAAoB,EAAA;AAEtC,IAAA,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AACjC,IAAA,IAAIA,QAAM,CAAC,KAAK,EAAE,CAAC,EAAE,IAAI,CAAC;AAAE,QAAA,OAAO,CAAC,CAAC;IACrC,IAAI,KAAK,GAAG,CAAC;AAAE,QAAA,KAAK,IAAI,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;AACpC,IAAA,OAAO,KAAK,CAAC;AACjB,CAAC;AAED;;;;;AAKG;AACG,SAAU,OAAO,CAAC,EAAW,EAAE,EAAW,EAAE,MAAe,KAAK,EAAA;AAElE,IAAA,IAAI,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC;AACxC,QAAA,OAAO,CAAC,CAAC;AAEb,IAAA,EAAE,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC;AAChB,IAAA,EAAE,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC;IAEhB,IAAI,GAAG,KAAK,KAAK,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,EACvC;AACI,QAAA,GAAG,GAAG,GAAG,CAAC,KAAK,EAAE,CAAC;;AAElB,QAAA,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;AACvB,QAAA,IAAI,EAAE,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;AAC7B,QAAA,IAAI,MAAM,GAAG,IAAIlB,aAAO,EAAE,CAAC;QAC3B,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;QAChC,IAAI,SAAS,GAAG,IAAIA,aAAO,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;AACjD,QAAA,EAAE,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;AAC3B,QAAA,EAAE,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;AAC3B,QAAA,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;AACT,QAAA,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;AACZ,KAAA;AAED,IAAA,IAAI,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC;AACxC,QAAA,OAAO,CAAC,CAAC;;AAGb,IAAA,IAAI,EAAE,GAAG,IAAID,aAAO,EAAE,CAAC,YAAY,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;AAC5C,IAAA,IAAI,OAAO,CAAC,EAAE,EAAE,OAAO,CAAC;AACpB,QAAA,OAAO,CAAC,CAAC;IAEb,EAAE,CAAC,SAAS,EAAE,CAAC;AACf,IAAA,OAAOmB,QAAM,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;AACpE,CAAC;AAEK,SAAU,cAAc,CAAC,GAAY,EAAA;AAEvC,IAAA,IAAI,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,EACvB;QACI,OAAO,aAAa,EAAE;AACzB,KAAA;IACD,IAAI,IAAI,GAAG,GAAG,CAAC,KAAK,EAAE,CAAC,SAAS,EAAE,CAAC;AACnC,IAAA,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EACtB;QACI,OAAO,IAAInB,aAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAC/B,KAAA;AACI,SAAA,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,CAAC,EAC5C;QACI,OAAO,IAAIA,aAAO,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAChC,KAAA;AAED,SAAA;AACI,QAAA,IAAI,EAAE,GAAY,IAAIA,aAAO,EAAE,CAAC;AAChC,QAAA,EAAE,CAAC,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AAE7B,QAAA,IAAI,EAAE,GAAG,IAAIA,aAAO,EAAE,CAAC;AACvB,QAAA,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;AAC1B,QAAA,OAAO,EAAE,CAAC;AACb,KAAA;AACL,CAAC;AAUD;;AAEG;AACG,SAAU,YAAY,CAAC,EAAW,EAAE,EAAW,EAAE,IAAI,GAAG,IAAI,EAAA;AAE9D,IAAA,OAAO,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC;AAClD,CAAC;AAED;;AAEG;AACG,SAAU,oBAAoB,CAAC,EAAW,EAAE,EAAW,EAAE,IAAI,GAAG,IAAI,EAAA;AAEtE,IAAA,OAAOmB,QAAM,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;AACvC,CAAC;AAOe,SAAA,QAAQ,CAAC,EAAW,EAAE,EAAW,EAAA;AAE7C,IAAA,OAAO,EAAE,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;AAClD,CAAC;AAMD,IAAI,OAAO,GAAG,IAAIb,UAAI,EAAE,CAAC;AACzB;;;;;AAKG;SACa,MAAM,CAAC,GAAa,EAAE,YAAY,GAAG,KAAK,EAAA;AAEtD,IAAA,IAAI,GAAG,GAAG,IAAIA,UAAI,EAAE,CAAC;AACrB,IAAA,IAAI,YAAY;AAAE,QAAA,GAAG,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;IAC/C,IAAI,CAAC,GAAG,CAAC,OAAO;AAAE,QAAA,OAAO,GAAG,CAAC;AAE7B,IAAA,GAAG,CAAC,eAAe,CAAC,CAAC,IAAG;;AAGpB,QAAA,IAAI,GAAG,GAAG,CAAC,CAAC,QAA0B,CAAC;AACvC,QAAA,IAAI,GAAG,EACP;YACI,IAAI,CAAC,GAAG,CAAC,WAAW;gBAChB,GAAG,CAAC,kBAAkB,EAAE,CAAC;AAC7B,YAAA,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;AAC1D,YAAA,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AACtB,SAAA;AACL,KAAC,CAAC,CAAC;AACH,IAAA,OAAO,GAAG,CAAC;AACf,CAAC;AAcK,SAAU,UAAU,CAAC,CAAU,EAAA;IAEjC,OAAO,IAAIL,aAAO,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;AACxC,CAAC;AA2BK,SAAU,SAAS,CAAC,CAAoB,EAAA;IAE1C,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;AACpD,CAAC;AAED;;AAEG;AACG,SAAU,QAAQ,CAAC,EAAU,EAAA;IAE/B,EAAE,GAAG,EAAE,IAAI,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;IACxB,IAAI,EAAE,GAAG,CAAC;AAAE,QAAA,EAAE,IAAI,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;AAC9B,IAAA,OAAO,EAAE,CAAC;AACd,CAAC;AAEe,SAAA,cAAc,CAAC,CAAc,EAAE,QAAmC,EAAA;AAE9E,IAAA,IAAI,GAAG,GAAG,CAAC,CAAC,QAAoB,CAAC;IACjC,GAAG,CAAC,OAAO,EAAE,CAAC;AACd,IAAA,CAAC,CAAC,QAAQ,GAAG,QAAQ,CAAC;IACtB,QAAQ,CAAC,qBAAqB,EAAE,CAAC;AACrC,CAAC;AAEK,SAAU,oBAAoB,CAAC,GAAa,EAAA;;AAG9C,IAAA,IAAI,GAAG,GAAG,GAAG,CAAC,QAAoB,CAAC;AACnC,IAAA,IAAI,GAAG,EACP;QACI,GAAG,CAAC,qBAAqB,EAAE,CAAC;AAC5B,QAAA,GAAG,CAAC,kBAAkB,EAAE,CAAC;AAC5B,KAAA;AACL,CAAC;AAKD,MAAM,iBAAiB,GAAiC,IAAI,GAAG,EAAE,CAAC;AAElE;;;;;;;;;;;;;;;AAeG;AACG,SAAU,sBAAsB,CAAC,OAAe,EAAA;AAElD,IAAA,IAAI,iBAAiB,CAAC,GAAG,CAAC,OAAO,CAAC;AAC9B,QAAA,OAAO,iBAAiB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAE1C,IAAI,SAAS,GAAG,EAAE,CAAC;AAEnB,IAAA,MAAM,IAAI,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AAC5C,IAAA,KAAK,IAAI,IAAI,IAAI,OAAO,EACxB;QACI,IAAI,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAE/B,QAAA,IAAI,EAAE,GAAG,KAAK,GAAG,CAAC,CAAC;QACnB,IAAI,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACxB,SAAS,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1C,KAAA;AAED,IAAA,IAAI,eAAe,GAAG,CAAC,EAAU,EAAE,EAAU,KAAY;AAErD,QAAA,IAAI,CAAC,EAAE;YAAE,OAAO,CAAC,CAAC,CAAC;AACnB,QAAA,IAAI,CAAC,EAAE;AAAE,YAAA,OAAO,CAAC,CAAC;AAClB,QAAA,KAAK,IAAI,CAAC,IAAI,SAAS,EACvB;YACI,IAAI,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAChC,IAAI,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAChC,YAAA,IAAIkB,QAAM,CAAC,GAAG,EAAE,GAAG,CAAC;gBAAE,SAAS;YAC/B,IAAI,GAAG,GAAG,GAAG;AAAE,gBAAA,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;;AACtB,gBAAA,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACrB,SAAA;AACD,QAAA,OAAO,CAAC,CAAC;AACb,KAAC,CAAC;AAEF,IAAA,iBAAiB,CAAC,GAAG,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC;AAChD,IAAA,OAAO,eAAe,CAAC;AAC3B,CAAC;AA6Be,SAAA,WAAW,CAAC,GAAc,EAAE,KAAc,EAAA;AAEtD,IAAA,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAClB;QACI,IAAI,KAAK,GAAG,KAAK,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5C,IAAI,KAAK,GAAG,KAAK,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAC5C,QAAA,OAAO,KAAK,IAAI,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;AAC3C,KAAA;AACD,IAAA,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED;AACgB,SAAA,YAAY,CAAC,CAAS,EAAE,CAAS,EAAE,CAAS,EAAE,IAAI,GAAG,CAAC,IAAI,EAAA;IAEtE,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;AACxC,CAAC;AAED;AACM,SAAU,kBAAkB,CAAC,GAAY,EAAA;IAE3C,OAAO,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;AAClK;;ACjaA;;;;;AAKG;SACa,YAAY,CAAC,GAAY,EAAE,GAAW,EAAE,CAAU,EAAA;AAE9D,IAAA,IAAI,KAAK,GAAG,GAAG,GAAG,CAAC,CAAC;IACpB,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAC1B,GAAG,CAAC,QAAQ,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAC9B,GAAG,CAAC,QAAQ,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAClC,CAAC;AAED;;;;;AAKG;AACa,SAAA,mBAAmB,CAAC,UAAmB,EAAE,QAAiB,EAAA;AAEtE,IAAA,OAAO,IAAIlB,aAAO,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;AACnE,CAAC;AAED;;;;;AAKG;AACG,SAAU,eAAe,CAAC,UAAmB,EAAE,QAAiB,EAAE,IAAI,GAAG,IAAI,EAAA;AAE/E,IAAA,IAAI,IAAI,GAAG,IAAID,aAAO,EAAE,CAAC,mBAAmB,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;AAC5D,IAAA,IAAI,IAAI,GAAG,IAAIA,aAAO,EAAE,CAAC,mBAAmB,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;;AAG1D,IAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC;AACzB,QAAA,OAAO,KAAK,CAAC;;IAGjB,IAAI,EAAE,GAAG,IAAIA,aAAO,EAAE,CAAC,qBAAqB,CAAC,QAAQ,CAAC,CAAC;;AAEvD,IAAA,EAAE,CAAC,YAAY,CAAC,IAAIC,aAAO,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC;IAEtD,OAAOkB,QAAM,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;AACjC,CAAC;AAkBD;;AAEG;SACa,iBAAiB,CAAC,GAAY,EAAE,IAAa,EAAE,EAAU,EAAA;IAErE,IAAI,GAAG,GAAG,IAAInB,aAAO,EAAE,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAAC;AACnD,IAAA,GAAG,CAAC,gBAAgB,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;AAC/B,IAAA,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;AACrB,IAAA,OAAO,GAAG,CAAC;AACf,CAAC;AAED;;AAEG;SACa,kBAAkB,CAAC,GAAY,EAAE,KAAK,GAAG,CAAC,EAAA;IAEtD,IAAI,EAAE,GAAG,IAAI,gBAAgB,EAAE,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;IAClD,IAAI,KAAK,KAAK,CAAC;AACX,QAAA,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;SACjB,IAAI,KAAK,KAAK,CAAC;AAChB,QAAA,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;;AAElB,QAAA,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;AAEtB,IAAA,OAAO,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;AAC9B,CAAC;AAED,IAAI,QAAiB,CAAC;AACN,SAAA,mBAAmB,CAAC,GAAY,EAAE,GAAY,EAAA;AAE1D,IAAA,IAAI,CAAC,QAAQ;AAAE,QAAA,QAAQ,GAAG,IAAIA,aAAO,EAAE,CAAC;AAExC,IAAA,QAAQ,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;AACnB,IAAA,QAAQ,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;AACnB,IAAA,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC;AAEf,IAAA,QAAQ,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;AAE3B,IAAA,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC;AACnB,IAAA,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC;AACvB,CAAC;AAEe,SAAA,aAAa,CAAC,WAAoB,EAAE,GAAa,EAAA;AAE7D,IAAA,IAAI,SAAS,GAAG,IAAIC,aAAO,EAAE,CAAC;AAC9B,IAAA,IAAI,KAAK,GAAG,IAAID,aAAO,CAAC,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;AAC5H,IAAA,IAAI,KAAK,GAAG,IAAIA,aAAO,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;AAC5H,IAAA,IAAI,KAAK,GAAG,IAAIA,aAAO,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IAC5H,SAAS,CAAC,SAAS,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;AAEzC,IAAA,IAAI,GAAG;QACH,SAAS,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;AAEjF,IAAA,OAAO,SAAS,CAAC;AACrB,CAAC;AAED;;;;;AAKG;AACa,SAAA,eAAe,CAAiD,GAAM,EAAE,CAAU,EAAA;IAE9F,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,GAAG,CAAC;AACtB,IAAA,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC;IACnB,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IACvC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IACvC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;AACxC,IAAA,OAAO,GAAG,CAAC;AACf,CAAC;AASD;;AAEG;SACa,iBAAiB,CAAC,GAAY,EAAE,EAAE,GAAG,IAAI,EAAA;AAErD,IAAA,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AACpB,IAAA,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AACpB,IAAA,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AACpB,IAAA,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AACpB,IAAA,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;AAE/C,IAAA,IAAI,EAAE;AACF,QAAA,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;AAEzB,IAAA,OAAO,GAAG,CAAC;AACf,CAAC;AAEO,IAAIA,cAAQ;AACZ,IAAIA,cAAQ;AACZ,IAAIuB,iBAAW;AAuBhB,MAAM,WAAW,GAAG,IAAItB,aAAO,CAAC;AAEhC,MAAM,aAAa,GAAG,aAAa,CAAC,IAAID,aAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;;AC9LhE;;AAEG;AACH,IAAY,cAmBX,CAAA;AAnBD,CAAA,UAAY,cAAc,EAAA;AAEtB,IAAA,cAAA,CAAA,cAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAQ,CAAA;AACR,IAAA,cAAA,CAAA,cAAA,CAAA,KAAA,CAAA,GAAA,CAAA,CAAA,GAAA,KAAO,CAAA;AACP,IAAA,cAAA,CAAA,cAAA,CAAA,KAAA,CAAA,GAAA,CAAA,CAAA,GAAA,KAAO,CAAA;AACP,IAAA,cAAA,CAAA,cAAA,CAAA,KAAA,CAAA,GAAA,CAAA,CAAA,GAAA,KAAO,CAAA;AACP,IAAA,cAAA,CAAA,cAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAQ,CAAA;AACR,IAAA,cAAA,CAAA,cAAA,CAAA,KAAA,CAAA,GAAA,EAAA,CAAA,GAAA,KAAQ,CAAA;AACR,IAAA,cAAA,CAAA,cAAA,CAAA,KAAA,CAAA,GAAA,EAAA,CAAA,GAAA,KAAQ,CAAA;AACR,IAAA,cAAA,CAAA,cAAA,CAAA,KAAA,CAAA,GAAA,EAAA,CAAA,GAAA,KAAQ,CAAA;AACR,IAAA,cAAA,CAAA,cAAA,CAAA,KAAA,CAAA,GAAA,GAAA,CAAA,GAAA,KAAS,CAAA;AACT,IAAA,cAAA,CAAA,cAAA,CAAA,KAAA,CAAA,GAAA,GAAA,CAAA,GAAA,KAAS,CAAA;AACT,IAAA,cAAA,CAAA,cAAA,CAAA,KAAA,CAAA,GAAA,GAAA,CAAA,GAAA,KAAS,CAAA;AACT,IAAA,cAAA,CAAA,cAAA,CAAA,eAAA,CAAA,GAAA,IAAA,CAAA,GAAA,eAAoB,CAAA;AACpB,IAAA,cAAA,CAAA,cAAA,CAAA,KAAA,CAAA,GAAA,IAAA,CAAA,GAAA,KAAU,CAAA;AACV,IAAA,cAAA,CAAA,cAAA,CAAA,KAAA,CAAA,GAAA,IAAA,CAAA,GAAA,KAAU,CAAA;AACV,IAAA,cAAA,CAAA,cAAA,CAAA,KAAA,CAAA,GAAA,IAAA,CAAA,GAAA,KAAU,CAAA;AACV,IAAA,cAAA,CAAA,cAAA,CAAA,MAAA,CAAA,GAAA,KAAA,CAAA,GAAA,MAAY,CAAA;AACZ,IAAA,cAAA,CAAA,cAAA,CAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,KAAwB,CAAA;AAC5B,CAAC,EAnBW,cAAc,KAAd,cAAc,GAmBzB,EAAA,CAAA,CAAA;;ACpBD;;;AAGG;MACU,KAAK,CAAA;AAAlB,IAAA,WAAA,GAAA;;AAGY,QAAA,IAAA,CAAA,GAAG,GAAW,CAAC,CAAC;;AAGxB,QAAA,IAAA,CAAA,KAAK,GAAW,CAAC,CAAC;KA6DrB;AA3DG,IAAA,IAAI,GAAG,GAAA;QAEH,OAAO,IAAI,CAAC,GAAG,CAAC;KACnB;IACD,IAAI,GAAG,CAAC,CAAC,EAAA;QAEL,IAAI,CAAC,GAAG,GAAGwB,eAAS,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC;KAClE;AAED;;;;AAIG;AACH,IAAA,eAAe,CAAC,YAAY,GAAG,IAAIxB,aAAO,EAAE,EAAA;QAExC,YAAY,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;;AAEpC,QAAA,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAErC,QAAA,YAAY,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AAC1C,QAAA,YAAY,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AAE1C,QAAA,OAAO,YAAY,CAAC;KACvB;AAED;;;AAGG;AACH,IAAA,gBAAgB,CAAC,GAAY,EAAA;QAEzB,GAAG,CAAC,SAAS,EAAE,CAAC;QAChB,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAC5B,QAAA,IAAImB,QAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,IAAIA,QAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;AACpC,YAAA,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC;gBACT,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC;;gBAE5B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,CAAC;;AAE/B,YAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;KAC7C;AAED;;;AAGG;AACH,IAAA,OAAO,iBAAiB,CAAC,CAAU,EAAE,EAAA,GAAc,IAAInB,aAAO,EAAE,EAAE,EAAc,GAAA,IAAIA,aAAO,EAAE,EAAA;QAEzF,CAAC,CAAC,SAAS,EAAE,CAAC;QACd,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,QAAQ,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,QAAQ;AACpD,YAAA,EAAE,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;;AAE1B,YAAA,EAAE,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;AAC9B,QAAA,EAAE,CAAC,YAAY,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACvB,EAAE,CAAC,SAAS,EAAE,CAAC;QACf,EAAE,CAAC,SAAS,EAAE,CAAC;AACf,QAAA,OAAO,EAAE,CAAC;KACb;AACJ;;AC1ED;;;;AAIG;AAiBa,SAAA,eAAe,CAAI,GAAa,EAAE,EAAK,EAAA;IAEnD,IAAI,KAAK,GAAG,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC5B,IAAI,KAAK,KAAK,CAAC,CAAC;AACZ,QAAA,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;AACzB,IAAA,OAAO,GAAG,CAAC;AACf,CAAC;AAED;;;AAGG;AACa,SAAA,aAAa,CAAI,GAAa,EAAE,YAA+B,EAAA;IAE3E,IAAI,CAAC,GAAG,CAAC,CAAC;AACV,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAC1C;QACI,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EACzB;YACI,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;AACrB,SAAA;AACJ,KAAA;AACD,IAAA,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC;AAEf,IAAA,OAAO,GAAG,CAAC;AACf,CAAC;AAOK,SAAU,SAAS,CAAI,GAA0C,EAAA;IAEnE,OAAO,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AAC/B,CAAC;AAUD;;;;AAIG;AACG,SAAU,iBAAiB,CAAI,GAAa,EAAA;AAE9C,IAAA,GAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;AAC5B,IAAA,OAAO,GAAG,CAAC;AACf,CAAC;AAED;;;;AAIG;SACa,0BAA0B,CAAI,GAAa,EAAE,eAA0C,UAAU,EAAA;AAE7G,IAAA,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC;AAAE,QAAA,OAAO,GAAG,CAAC;IAC/B,IAAI,CAAC,GAAG,CAAC,CAAC;AACV,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;AACtC,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;YACjC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;AAC1B,IAAA,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC;AACf,IAAA,OAAO,GAAG,CAAC;AACf,CAAC;AAmCD,SAAS,iBAAiB,CAAC,EAAO,EAAE,EAAO,EAAA;IAEvC,OAAO,EAAE,GAAG,EAAE,CAAC;AACnB,CAAC;AAED,SAAS,UAAU,CAAC,EAAO,EAAE,EAAO,EAAA;IAEhC,OAAO,EAAE,KAAK,EAAE,CAAC;AACrB,CAAC;AAED;;;;AAIG;AACa,SAAA,qBAAqB,CAAI,GAAQ,EAAE,KAAa,EAAA;IAE5D,GAAG,CAAC,OAAO,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;AAClC,IAAA,OAAO,GAAG,CAAC;AACf,CAAC;AAEK,SAAU,UAAU,CAAI,CAAM,EAAE,CAAM,EAAE,MAAM,GAAG,UAAU,EAAA;IAE7D,IAAI,CAAC,KAAK,CAAC;AAAE,QAAA,OAAO,IAAI,CAAC;AACzB,IAAA,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM;AAAE,QAAA,OAAO,KAAK,CAAC;AACxC,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC;AAC7B,QAAA,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AAAE,YAAA,OAAO,KAAK,CAAC;AAC1C,IAAA,OAAO,IAAI,CAAC;AAChB,CAAC;AAEK,SAAU,UAAU,CAAI,GAAQ,EAAA;AAElC,IAAA,OAAO,GAAG,CAAC,KAAK,EAAE,CAAC;AACvB,CAAC;AAED;AACgB,SAAA,cAAc,CAAI,IAAS,EAAE,IAAS,EAAA;AAElD,IAAA,IAAI,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC;AAC7B,IAAA,IAAI,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC;AAC7B,IAAA,IAAI,CAAC,MAAM,GAAG,UAAU,GAAG,UAAU,CAAC;IACtC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE;QAC/B,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;AAEnC,IAAA,OAAO,IAAI,CAAC;AAChB,CAAC;AAEK,SAAU,QAAQ,CAAC,GAAa,EAAA;IAElC,IAAI,GAAG,GAAG,CAAC,CAAC;IACZ,KAAK,IAAI,CAAC,IAAI,GAAG;QAAE,GAAG,IAAI,CAAC,CAAC;AAC5B,IAAA,OAAO,GAAG,CAAC;AACf;;AC7KA,IAAI,OAAY,CAAC;AACX,MAAO,MAAO,SAAQyB,WAAK,CAAA;AAE7B,IAAA,SAAS,CAAC,SAAoB,GAAA,EAAE,EAAE,WAAW,GAAG,IAAI,EAAA;AAEhD,QAAA,IAAI,MAAM,GAAG,EAAE,EAAE,IAAa,CAAC;AAC/B,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAC5D;AACI,YAAA,IAAI,KAAK,GAAG,MAAM,CAAC,CAAC,CAAiB,CAAC;YACtC,IAAI,UAAU,GAAG,SAAS,CAAC;;AAG3B,YAAA,IAAI,KAAK,IAAI,KAAK,CAAC,cAAc,EACjC;AACI,gBAAA,IAAI,WAAW,EACf;AACI,oBAAA,IAAI,CAAC,OAAO;wBAAE,OAAO,GAAG,IAAIC,WAAG,CAAC;;wBAC3B,OAAO,CAAC,SAAS,EAAE,CAAC;AAEzB,oBAAA,OAAO,CAAC,WAAW,GAAG,KAAK,CAAC,UAAU,CAAC;AACvC,oBAAA,OAAO,CAAC,UAAU,GAAG,KAAK,CAAC,WAAW,CAAC;AACvC,oBAAA,OAAO,CAAC,QAAQ,GAAG,KAAK,CAAC,SAAS,CAAC;oBACnC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;;AAGzC,oBAAA,IAAI,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,QAAQ,IAAI,IAAI,CAAC,EAAE,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;AAEvF,oBAAA,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;AACjE,iBAAA;;AAEG,oBAAA,UAAU,GAAG,SAAS,GAAG,CAAC,CAAC;AAClC,aAAA;AAED,iBAAA;;AAEI,gBAAA,UAAU,GAAG,CAAC,KAAK,KAAK,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC;;AAEjE,sBAAE,CAAC,KAAK,IAAI,KAAK,CAAC,aAAa,IAAI,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM;0BAC5D,SAAS,CAAC;AACvB,aAAA;YAED,IAAI,GAAG,GAAG,KAAK,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;AAEtC,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EACnC;AACI,gBAAA,IAAI,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;gBACnB,IAAI,IAAI,IAAI,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC;AAClC,oBAAA,SAAS;AAEb,gBAAA,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBACnB,IAAI,GAAG,KAAK,CAAC;AAEb,gBAAA,IAAI,CAAC,KAAK,GAAG,CAAC,MAAM,GAAG,CAAC;AACpB,oBAAA,KAAK,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC;AAC9B,aAAA;AACJ,SAAA;QACD,IAAI,IAAI,CAAC,SAAS;eACX,MAAM,CAAC,MAAM,GAAG,CAAC;AACjB,eAAA,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EACnD;YACI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1B,SAAA;AACD,QAAA,OAAO,MAAM,CAAC;KACjB;AAGD,IAAA,UAAU,CAAC,EAAU,EAAE,EAAU,EAAE,OAAe,EAAE,OAAe,EAAE,WAAmB,EAAE,SAAiB,EAAE,UAAmB,EAAE,SAAiB,EAAA;QAE/I,IAAI,KAAK,GAAG,IAAIC,kBAAY,CAAC,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;AAEtG;;;;;;;;;;AAUE;AAEF,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAExB,IAAI,SAAS,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AAClC,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AAElC,QAAA,OAAO,IAAI,CAAC;KACf;AACJ;;AC1FD;AACA,MAAM,KAAK,CAAA;AAMP,IAAA,WAAA,CAAY,EAAW,EAAE,EAAW,EAAE,GAAW,EAAA;AAE7C,QAAA,EAAE,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC;AAChB,QAAA,EAAE,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC;;QAGhB,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;;AAE3B,QAAA,IAAI,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;;AAE5C,QAAA,IAAI,CAAC,GAAG,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAE1E,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAE3B,QAAA,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACjC,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAE/B,QAAA,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC;KACpB;AACJ,CAAA;AAED;AACgB,SAAA,kBAAkB,CAAC,GAAc,EAAE,IAAc,EAAA;AAE7D,IAAA,IAAI,KAAK,GAAG,IAAI,MAAM,EAAE,CAAC;AACzB,IAAA,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC;AAAE,QAAA,OAAO,KAAK,CAAC;AACnC,IAAA,IAAI,OAAO,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;IAErB,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;AACnC,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EACvC;AACI,QAAA,IAAI,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;QACnB,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACxB,IAAIR,QAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,IAAI,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAC5D;YACI,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;AACpC,SAAA;AAED,aAAA;;;;AAII,YAAA,IAAI,IAAI,GAAG,IAAI,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AAC7C,YAAA,IAAI,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC;AACvB,YAAA,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AACrF,SAAA;AACJ,KAAA;AACD,IAAA,OAAO,KAAK,CAAC;AACjB;;ACvCM,SAAU,mBAAmB,CAAC,KAAA,GAAiB,IAAInB,aAAO,EAAE,IAAI,GAAGgB,eAAS,EAAA;IAE9E,OAAO;AACH,QAAA,QAAQ,EAAE;AACN,YAAA,cAAc,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE;AACnC,SAAA;QAED,IAAI;AACJ,QAAA,aAAa,EAAE,IAAI;AACnB,QAAA,mBAAmB,EAAE,CAAC;AACtB,QAAA,kBAAkB,EAAE,CAAC;KACxB,CAAC;AACN;;AC3BA,MAAM,YAAY,GAAG;AACjB,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;;AAEZ,IAAA,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC;;AAEhB,IAAA,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;AAClB,IAAA,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;AAChB,IAAA,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AAClB,IAAA,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;AAChB,IAAA,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;;;;AAIlB,IAAA,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACpB,IAAA,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACpB,IAAA,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACpB,IAAA,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC;AAChB,IAAA,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACpB,IAAA,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC;AAChB,IAAA,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;AAClB,IAAA,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC;AAChB,IAAA,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;AAClB,IAAA,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC;AACf,IAAA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;AACjB,IAAA,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC;AACf,IAAA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;AACjB,IAAA,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;AACjB,IAAA,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACpB,IAAA,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;AACjB,IAAA,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;AACnB,IAAA,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;AACjB,IAAA,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;AAClB,IAAA,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;AAChB,IAAA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;AACjB,IAAA,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC;AACf,IAAA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;AACjB,IAAA,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;AAClB,IAAA,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACpB,IAAA,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;AACjB,IAAA,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;AACnB,IAAA,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;AACjB,IAAA,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;AAClB,IAAA,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;AAChB,IAAA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;AACjB,IAAA,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;AAChB,IAAA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;AACjB,IAAA,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;AAClB,IAAA,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACpB,IAAA,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;AAClB,IAAA,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;AACnB,IAAA,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;AACjB,IAAA,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;AACnB,IAAA,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;AAChB,IAAA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;AACjB,IAAA,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;AAChB,IAAA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;AACjB,IAAA,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;AAClB,IAAA,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACpB,IAAA,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;AAClB,IAAA,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;AACnB,IAAA,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;AAClB,IAAA,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;AACnB,IAAA,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;AAChB,IAAA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;AACjB,IAAA,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;AAChB,IAAA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;AACjB,IAAA,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;AAClB,IAAA,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACpB,IAAA,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;AAClB,IAAA,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;AACnB,IAAA,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;AACjB,IAAA,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;AACnB,IAAA,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;AAChB,IAAA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;AACjB,IAAA,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;AAChB,IAAA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;AACjB,IAAA,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;AAClB,IAAA,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACpB,IAAA,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;AACjB,IAAA,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;AACnB,IAAA,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;AACjB,IAAA,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;AAClB,IAAA,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;AAChB,IAAA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;AACjB,IAAA,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;AAChB,IAAA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;AACjB,IAAA,CAAC,EAAE,EAAE,G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AE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACnB,IAAA,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;AACjB,IAAA,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACnB,IAAA,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;AAChB,IAAA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;AACjB,IAAA,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;AAChB,IAAA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;AACjB,IAAA,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AAClB,IAAA,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACpB,IAAA,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AAClB,IAAA,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACnB,IAAA,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AAClB,IAAA,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACnB,IAAA,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;AAChB,IAAA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;AACjB,IAAA,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;AAChB,IAAA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;AACjB,IAAA,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AAClB,IAAA,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACpB,IAAA,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AAClB,IAAA,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACnB,IAAA,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;AACjB,IAAA,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACnB,IAAA,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;AAChB,IAAA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;AACjB,IAAA,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;AAChB,IAAA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;AACjB,IAAA,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AAClB,IAAA,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACpB,IAAA,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;AACjB,IAAA,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACnB,IAAA,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;AACjB,IAAA,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;AAClB,IAAA,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;AAChB,IAAA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;AACjB,IAAA,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;AAChB,IAAA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;AACjB,IAAA,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;AACjB,IAAA,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACpB,IAAA,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;AACjB,IAAA,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACnB,IAAA,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;AACjB,IAAA,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;AAClB,IAAA,CAAC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CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;AACjB,IAAA,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;AAClB,IAAA,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACpB,IAAA,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;AAClB,IAAA,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;AACnB,IAAA,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;AAClB,IAAA,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;AACnB,IAAA,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;AAChB,IAAA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;AACjB,IAAA,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;AAChB,IAAA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;AACjB,IAAA,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;AAClB,IAAA,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACpB,IAAA,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;AAClB,IAAA,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;AACnB,IAAA,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;AACjB,IAAA,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;AACnB,IAAA,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;AAChB,IAAA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;AACjB,IAAA,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;AAChB,IAAA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;AACjB,IAAA,CAAC,GAAG,EAAE,CAAC,EAAE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"} \ No newline at end of file diff --git a/api.esm.js b/api.esm.js index 9189782..5caf6f9 100644 --- a/api.esm.js +++ b/api.esm.js @@ -424,6 +424,8 @@ const ISPROXYKEY = "_isProxy"; * 如果属性是数组,那么自动添加`Proxy`. * 可以使用`ISPROXYKEY`覆盖这个函数的代理行为(使用CADObject.CreateProxyArray快速覆盖) * + * ! 仅在{数组}或者{值}类型上使用,如果是Object,请使用AutoRecordObject + * * @param target * @param property * @param [descriptor] @@ -457,6 +459,57 @@ function AutoRecord(target, property, descriptor) { let arr = this[privateKey]; arr.length = 0; arr.push(...value); + // 可能的优化,没有启用这个代码 + // arr.length = value.length; + // for (let i = 0; i < value.length; i++) + // arr[i] = value[i]; + } + } + else { + let oldv = this[privateKey]; + if (oldv !== value) { + this.WriteAllObjectRecord(); + this[privateKey] = value; + } + } + }, + get: function () { + return this[privateKey]; + }, + enumerable: true, + configurable: true + }); +} +function AutoRecordObject(target, property, descriptor) { + let privateKey = '__' + property; + Object.defineProperty(target, property, { + set: function (value) { + if (value instanceof Object) { + if (!this[privateKey]) { + if (value[ISPROXYKEY]) + this[privateKey] = value; + else + this[privateKey] = new Proxy(value, { + set: (target, key, value, receiver) => { + if (Reflect.get(target, key, receiver) !== value) + this.WriteAllObjectRecord(); + return Reflect.set(target, key, value, receiver); + }, + get: (target, key, receiver) => { + if (key === ISPROXYKEY) + return true; + return Reflect.get(target, key, receiver); + } + }); + } + else { + let obj = this[privateKey]; + for (let key in value) { + if (obj[key] !== value[key]) { + this.WriteAllObjectRecord(); + obj[key] = value[key]; + } + } } } else { @@ -1425,16 +1478,17 @@ let Entity = Entity_1 = class Entity extends CADObject { //#endregion } get CacheDrawObject() { return this._CacheDrawObject; } + get SpaceCSNoClone() { return this._SpaceOCS; } get SpaceOCS() { return this._SpaceOCS.clone(); } - get SpaceOCSInv() { - return new Matrix4().getInverse(this._SpaceOCS); - } set SpaceOCS(m) { this.WriteAllObjectRecord(); this._SpaceOCS.copy(m); } + get SpaceOCSInv() { + return new Matrix4().getInverse(this._SpaceOCS); + } set Material(materialId) { if (materialId === this._MaterialId) return; @@ -11287,16 +11341,18 @@ function InitRectBoardHoleOption(br, option) { for (let i = 0; i < cus.length; i++) { let c = cus[i]; let derv = c.GetFistDeriv(0).multiplyScalar(dir); - let an = angle(derv); - an = clampRad(an); - if (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]; + if (Math.abs(derv.x) > Math.abs(derv.y)) { + if (derv.x > 0) + option.down = hightDrill[i]; + else + option.up = hightDrill[i]; + } + else { + if (derv.y > 0) + option.right = hightDrill[i]; + else + option.left = hightDrill[i]; + } } } function ExtureHoleInBoard(holes, board, ocs) { @@ -11322,16 +11378,18 @@ function SetRectHighHole(br, option) { for (let i = 0; i < cus.length; i++) { let c = cus[i]; let derv = c.GetFistDeriv(0).multiplyScalar(dir); - let an = angle(derv); - an = clampRad(an); - if (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); + if (Math.abs(derv.x) > Math.abs(derv.y)) { + if (derv.x > 0) + highDrill.push(option.down); + else + highDrill.push(option.up); + } + else { + if (derv.y > 0) + highDrill.push(option.right); + else + highDrill.push(option.left); + } } let types = new Set(highDrill); if (types.size === 1 && highDrill[0] !== DrillType.None) @@ -13413,7 +13471,7 @@ let HardwareTopline = class HardwareTopline extends SweepSolid { } }; __decorate([ - AutoRecord + AutoRecordObject ], HardwareTopline.prototype, "HardwareOption", void 0); __decorate([ AutoRecord @@ -17482,7 +17540,7 @@ let HardwareCompositeEntity = HardwareCompositeEntity_1 = class HardwareComposit } }; __decorate([ - AutoRecord + AutoRecordObject ], HardwareCompositeEntity.prototype, "HardwareOption", void 0); __decorate([ AutoRecord @@ -17801,7 +17859,7 @@ function MatrixIsCoplane2(matrixFrom, matrixTo, zFuzz) { let nor1 = new Vector3().setFromMatrixColumn(matrixFrom, 2); let nor2 = new Vector3().setFromMatrixColumn(matrixTo, 2); //法线共面 - if (!equalv3(nor1, nor2.negate(), 1e-5)) + if (!equalv3(nor1, nor2.negate(), 1e-4)) return false; //高共面 let pt = new Vector3().setFromMatrixPosition(matrixTo); @@ -19530,16 +19588,18 @@ function GetBoardHighSeal(br, sealcus) { let dir = Math.sign(br.ContourCurve.Area2); for (let c of sealcus) { let derv = c.GetFistDeriv(0).multiplyScalar(dir); - let an = angle(derv); - an = clampRad(an); - if ((an < Math.PI / 4 + 1e-8) || (an > Math.PI * 7 / 4)) - highSeals.push({ size: sealDown }); - else if (an > Math.PI / 4 && an < Math.PI * 3 / 4 + 1e-8) - highSeals.push({ size: sealRight }); - else if (an > Math.PI * 3 / 4 && an < Math.PI * 5 / 4 + 1e-8) - highSeals.push({ size: sealUp }); - else - highSeals.push({ size: sealLeft }); + if (Math.abs(derv.x) > Math.abs(derv.y)) { + if (derv.x > 0) + highSeals.push({ size: sealDown }); + else + highSeals.push({ size: sealUp }); + } + else { + if (derv.y > 0) + highSeals.push({ size: sealRight }); + else + highSeals.push({ size: sealLeft }); + } } } return highSeals; @@ -20071,8 +20131,8 @@ let Board = Board_1 = class Board extends ExtrudeSolid { else //填充默认类型就好了 br._BoardProcessOption.highDrill = Array(br.contourCurve.EndParam).fill(br._BoardProcessOption.drillType); //如果是矩形板,关联切割后的板件,用上下左右封边重新填充高级封边,避免近乎矩形的板件封边看上去不对 #I2AQ9R - if (this.isRect) - br._BoardProcessOption.highSealed.length = 0; + // if (this.isRect) 由于异形也会被破坏,导致封边结果错误,对于异形也退化到矩形封边 + br._BoardProcessOption.highSealed.length = 0; } } return brs; @@ -22050,10 +22110,14 @@ let RoomWallArc = class RoomWallArc extends RoomWallBase { let geo = this._MeshGeometry; let normal = this.Normal; let normaln = normal.clone().negate(); - let center = this.Center; + this.Center; let inv = this.OCSInv; let thisParam = new GetArcParam(this); const BuildLeftFace = (curve) => { + let materialIndex = 0; + if (curve[CURVE_FACE_TYPE_KEY] === WallFaceType.Outside) { + materialIndex = 1; + } if (curve instanceof Line) { let tapes = [new Tape(0, 1, 0, this._Height)]; let curveParam = new GetLineParam(curve); @@ -22082,7 +22146,7 @@ let RoomWallArc = class RoomWallArc extends RoomWallBase { let endX = curveParam.Length * 1e-3 * tape.end; let startZ = tape.bottom * 1e-3; let endZ = tape.top * 1e-3; - geo.faces.push(new Face3(startIndex, startIndex + 2, startIndex + 1, curveParam.LeftDir), new Face3(startIndex + 1, startIndex + 2, startIndex + 3, curveParam.LeftDir)); + geo.faces.push(new Face3(startIndex, startIndex + 2, startIndex + 1, curveParam.LeftDir, undefined, materialIndex), new Face3(startIndex + 1, startIndex + 2, startIndex + 3, curveParam.LeftDir, undefined, materialIndex)); geo.faceVertexUvs[0].push([new Vector2$1(startX, startZ), new Vector2$1(startX, endZ), new Vector2$1(endX, startZ)], [new Vector2$1(endX, startZ), new Vector2$1(startX, endZ), new Vector2$1(endX, endZ)]); } } @@ -22131,8 +22195,8 @@ let RoomWallArc = class RoomWallArc extends RoomWallBase { let endX = length * 1e-3 * tape.end; let startZ = tape.bottom * 1e-3; let endZ = tape.top * 1e-3; - let dir = arc.GetPointAtParam((tape.start + tape.end) * 0.5).applyMatrix4(inv).sub(center).subScalar(arc.Radius); - geo.faces.push(new Face3(p1Index, p3Index, p2Index, dir), new Face3(p2Index, p3Index, p4Index, dir)); + let dir = arc.GetPointAtParam((tape.start + tape.end) * 0.5).applyMatrix4(inv).divideScalar(arc.Radius); + geo.faces.push(new Face3(p1Index, p3Index, p2Index, dir, undefined, materialIndex), new Face3(p2Index, p3Index, p4Index, dir, undefined, materialIndex)); geo.faceVertexUvs[0].push([new Vector2$1(startX, startZ), new Vector2$1(startX, endZ), new Vector2$1(endX, startZ)], [new Vector2$1(endX, startZ), new Vector2$1(startX, endZ), new Vector2$1(endX, endZ)]); } } @@ -22150,14 +22214,18 @@ let RoomWallArc = class RoomWallArc extends RoomWallBase { let pre = i - 1; let preX = pre * divLength; let nowX = i * divLength; - let dir = pts[i].clone().add(pts[pre]).multiplyScalar(0.5).sub(center).subScalar(arc.Radius); - geo.faces.push(new Face3(startIndex + i, startIndex + pre, startIndex + pre + count, dir), new Face3(startIndex + i + count, startIndex + i, startIndex + pre + count, dir)); + let dir = pts[i].clone().add(pts[pre]).multiplyScalar(0.5).divideScalar(arc.Radius); + geo.faces.push(new Face3(startIndex + i, startIndex + pre, startIndex + pre + count, dir, undefined, materialIndex), new Face3(startIndex + i + count, startIndex + i, startIndex + pre + count, dir, undefined, materialIndex)); geo.faceVertexUvs[0].push([new Vector2$1(nowX, 0), new Vector2$1(preX, 0), new Vector2$1(preX, this._Height * 1e-3)], [new Vector2$1(nowX, this._Height * 1e-3), new Vector2$1(nowX, 0), new Vector2$1(preX, this._Height * 1e-3)]); } } } }; const BuildRightFace = (curve) => { + let materialIndex = 0; + if (curve[CURVE_FACE_TYPE_KEY] === WallFaceType.Outside) { + materialIndex = 1; + } if (curve instanceof Line) { let tapes = [new Tape(0, 1, 0, this._Height)]; let curveParam = new GetLineParam(curve); @@ -22186,7 +22254,7 @@ let RoomWallArc = class RoomWallArc extends RoomWallBase { let endX = curveParam.Length * 1e-3 * tape.end; let startZ = tape.bottom * 1e-3; let endZ = tape.top * 1e-3; - geo.faces.push(new Face3(startIndex, startIndex + 1, startIndex + 2, curveParam.RightDir), new Face3(startIndex + 1, startIndex + 3, startIndex + 2, curveParam.RightDir)); + geo.faces.push(new Face3(startIndex, startIndex + 1, startIndex + 2, curveParam.RightDir, undefined, materialIndex), new Face3(startIndex + 1, startIndex + 3, startIndex + 2, curveParam.RightDir, undefined, materialIndex)); geo.faceVertexUvs[0].push([new Vector2$1(startX, startZ), new Vector2$1(endX, startZ), new Vector2$1(startX, endZ)], [new Vector2$1(endX, startZ), new Vector2$1(endX, endZ), new Vector2$1(startX, endZ)]); } } @@ -22231,8 +22299,8 @@ let RoomWallArc = class RoomWallArc extends RoomWallBase { let endX = length * 1e-3 * tape.end; let startZ = tape.bottom * 1e-3; let endZ = tape.top * 1e-3; - let dir = arc.GetPointAtParam((tape.start + tape.end) * 0.5).applyMatrix4(inv).sub(center).subScalar(arc.Radius).negate(); - geo.faces.push(new Face3(p1Index, p2Index, p3Index, dir), new Face3(p2Index, p4Index, p3Index, dir)); + let dir = arc.GetPointAtParam((tape.start + tape.end) * 0.5).applyMatrix4(inv).divideScalar(-arc.Radius); + geo.faces.push(new Face3(p1Index, p2Index, p3Index, dir, undefined, materialIndex), new Face3(p2Index, p4Index, p3Index, dir, undefined, materialIndex)); geo.faceVertexUvs[0].push([new Vector2$1(startX, startZ), new Vector2$1(endX, startZ), new Vector2$1(startX, endZ)], [new Vector2$1(endX, startZ), new Vector2$1(endX, endZ), new Vector2$1(startX, endZ)]); } } @@ -22251,8 +22319,8 @@ let RoomWallArc = class RoomWallArc extends RoomWallBase { let pre = i - 1; let preX = pre * divLength; let nowX = i * divLength; - let dir = pts[i].clone().add(pts[pre]).multiplyScalar(0.5).sub(center).subScalar(arc.Radius); - geo.faces.push(new Face3(startIndex + pre, startIndex + i, startIndex + pre + count, dir), new Face3(startIndex + i, startIndex + i + count, startIndex + pre + count, dir)); + let dir = pts[i].clone().add(pts[pre]).multiplyScalar(0.5).divideScalar(-arc.Radius); + geo.faces.push(new Face3(startIndex + pre, startIndex + i, startIndex + pre + count, dir, undefined, materialIndex), new Face3(startIndex + i, startIndex + i + count, startIndex + pre + count, dir, undefined, materialIndex)); geo.faceVertexUvs[0].push([new Vector2$1(preX, 0), new Vector2$1(nowX, 0), new Vector2$1(preX, this._Height * 1e-3)], [new Vector2$1(nowX, 0), new Vector2$1(nowX, this._Height * 1e-3), new Vector2$1(preX, this._Height * 1e-3)]); } } @@ -24630,6 +24698,4277 @@ GroupRecord = __decorate([ Factory ], GroupRecord); +function BuildLayerBoards(opt, space, grooveOption) { + let spaceBox = space.SpaceBox; + let spaceOCS = space.SpaceOCS; + let size = spaceBox.getSize(new Vector3()); + const params = { L: size.x, W: size.y, H: size.z, BH: opt.thickness }; + let width; + if (opt.isTotalLength) + width = size.y; + else { + width = safeEval(opt.calcHeight, params); + } + let count = opt.count; + let type = opt.boardRelative; + let spaceSize = safeEval(opt.calcSpaceSize, params); + let frontShrink = safeEval(opt.calcFrontShrink, params); + width -= frontShrink; + if (width <= 0) { + Log("宽度无效,可能前缩过大,请修正"); + return []; + } + let leftShrink = safeEval(opt.calcLeftShrink, params); + let rightShrink = safeEval(opt.calcRightShrink, params); + let thickness = opt.thickness; + let len = size.x - leftShrink - rightShrink; + if (len <= 0) { + Log("长度无效,可能左缩右缩过大,请修正"); + return []; + } + let board = Board.CreateBoard(len, width, thickness, BoardType.Layer); + if (grooveOption) { + board.KnifeRadius = safeEval(grooveOption.knifeRadius); + board.GroovesAddDepth = safeEval(grooveOption.grooveAddDepth); + board.GroovesAddWidth = safeEval(grooveOption.grooveAddWidth); + board.GroovesAddLength = safeEval(grooveOption.grooveAddLength); + } + opt.height = len; + opt.width = width; + //等分单层空间大小 + let singleSize = (size.z - (thickness * count)) / (count + 1); + let brs = []; + for (let i = 1; i <= count; i++) { + let b = board.Clone(); + b.Name = opt.name; + if (type === BrRelativePos.Top) + b.ApplyMatrix(MoveMatrix(spaceBox.min.clone().add(new Vector3(size.x - rightShrink, frontShrink, size.z - (spaceSize + thickness) * i)))); + else if (type === BrRelativePos.Bottom) + b.ApplyMatrix(MoveMatrix(spaceBox.min.clone().add(new Vector3(size.x - rightShrink, frontShrink, spaceSize * i + (i - 1) * thickness)))); + else { + b.ApplyMatrix(MoveMatrix(spaceBox.min.clone().add(new Vector3(size.x - rightShrink, frontShrink, singleSize * i + (i - 1) * thickness)))); + } + b.ApplyMatrix(spaceOCS); + brs.push(b); + } + return brs; +} +function BuildVerticalBoards(opt, space, grooveOption) { + const spaceBox = space.SpaceBox; + const spaceOCS = space.SpaceOCS; + let size = spaceBox.getSize(new Vector3()); + const params = { L: size.x, W: size.y, H: size.z, BH: opt.thickness }; + let frontShrink = safeEval(opt.calcFrontShrink, params); + let bottomShink = safeEval(opt.calcBottomShrink, params); + let width; + if (opt.isTotalWidth) + width = size.y - frontShrink; + else { + width = safeEval(opt.calcWidth, params); + } + if (width <= 0) { + Log("宽度无效,可能前缩过大,请修正"); + return []; + } + let length; + if (opt.isTotalLength) + length = size.z - bottomShink; + else { + length = safeEval(opt.calcHeight, params); + } + let count = opt.count; + let type = opt.boardRelative; + let spaceSize = safeEval(opt.calcSpaceSize, params); + let thickness = opt.thickness; + let board = Board.CreateBoard(length, width, thickness, BoardType.Vertical); + if (grooveOption) { + board.KnifeRadius = safeEval(grooveOption.knifeRadius); + board.GroovesAddDepth = safeEval(grooveOption.grooveAddDepth); + board.GroovesAddWidth = safeEval(grooveOption.grooveAddWidth); + board.GroovesAddLength = safeEval(grooveOption.grooveAddLength); + } + opt.height = length; + opt.width = width; + //等分单层空间大小 + let singleSize = (size.x - (thickness * count)) / (count + 1); + let brs = []; + for (let i = 1; i <= count; i++) { + let b = board.Clone(); + b.Name = opt.name; + if (type === BrRelativePos.Left) + b.ApplyMatrix(MoveMatrix(spaceBox.min.clone().add(new Vector3(spaceSize * i + (i - 1) * thickness, frontShrink, bottomShink)))); + else if (type === BrRelativePos.Right) + b.ApplyMatrix(MoveMatrix(spaceBox.min.clone().add(new Vector3(size.x - (spaceSize + thickness) * i, frontShrink, bottomShink)))); + else + b.ApplyMatrix(MoveMatrix(spaceBox.min.clone().add(new Vector3(singleSize * i + (i - 1) * thickness, frontShrink, bottomShink)))); + b.ApplyMatrix(spaceOCS); + brs.push(b); + } + return brs; +} +function BuildBehindBoards(opt, space, grooveOption) { + let newBox = space.SpaceBox.clone(); + let spaceOcs = space.SpaceOCS; + //判断延伸 + let leftExt = opt.leftExt; + let rightExt = opt.rightExt; + let topExt = opt.topExt; + let bottomExt = opt.bottomExt; + newBox.max.add(new Vector3(leftExt + rightExt, 0, topExt + bottomExt)); + newBox.translate(new Vector3(-leftExt, 0, -bottomExt)); + //获取背板高度 + let size = newBox.getSize(new Vector3()); + const params = { L: size.x, W: size.y, H: size.z, BH: opt.thickness }; + let height; + if (opt.boardPosition === BehindHeightPositon.AllHeight) + height = size.z; + else + height = safeEval(opt.calcHeight, params); + let moveDist = safeEval(opt.calcMoveDist, params); + //判断背板位置,更新背板高度 + switch (opt.boardPosition) { + case BehindHeightPositon.ForTop: + newBox.min.add(new Vector3(0, 0, size.z - height)); + newBox.translate(new Vector3(0, 0, moveDist)); + break; + case BehindHeightPositon.ForBottom: + newBox.max.add(new Vector3(0, 0, height)); + newBox.translate(new Vector3(0, 0, -moveDist)); + break; + } + let count = opt.count; + //相对位置 + let relPos = opt.boardRelative; + //单层空间宽度 + let spaceSize = safeEval(opt.calcSpaceSize, params); + let thickness = opt.thickness; + let board = Board.CreateBoard(height, size.x, thickness, BoardType.Behind); + if (grooveOption) { + board.KnifeRadius = safeEval(grooveOption.knifeRadius); + board.GroovesAddDepth = safeEval(grooveOption.grooveAddDepth); + board.GroovesAddWidth = safeEval(grooveOption.grooveAddWidth); + board.GroovesAddLength = safeEval(grooveOption.grooveAddLength); + } + opt.height = height; + opt.width = size.x; + //等分单层空间大小 + let singleSize = (size.y - (thickness * count)) / (count + 1); + let brs = []; + //构建板件 + for (let i = 1; i <= count; i++) { + let b = board.Clone(); + b.Name = opt.name; + if (relPos === BrRelativePos.Front) + b.ApplyMatrix(MoveMatrix(newBox.min.clone().add(new Vector3(0, spaceSize * i + thickness * i, 0)))); + else if (relPos === BrRelativePos.Back) + b.ApplyMatrix(MoveMatrix(newBox.min.clone().add(new Vector3(0, size.y - spaceSize * i - (i - 1) * thickness, 0)))); + else + b.ApplyMatrix(MoveMatrix(newBox.min.clone().add(new Vector3(0, (singleSize + thickness) * i, 0)))); + b.ApplyMatrix(spaceOcs); + brs.push(b); + } + return brs; +} +function ExtendsBoardThickness(temp, thickness) { + let bhPar = temp.GetParam("BH"); + if (bhPar) { + bhPar.expr = thickness; + if (temp.Parent) { + let rootBh = safeEval(temp.Root.GetParam("BH")?.value); + bhPar.expr = rootBh === thickness ? "$BH" : thickness; + } + } +} + +class DrawLatticeDrawerTool extends Singleton { + constructor() { + super(...arguments); + this.haveTopBr = false; + } + get Config() { + return this._config; + } + Draw(space, config) { + this._config = config; + this.space = space; + this.ParseSpaceBrs(); + this.HandleSpace(); + let size = space.Size; + if (config.arrayType === ELatticeArrayType.ByWidth) { + config.widthCount = Math.floor((size.x + config.thickness) / (config.gripWidth + config.thickness)); + config.depthCount = Math.floor((size.y + config.thickness) / (config.gripDepth + config.thickness)); + } + if (config.widthCount <= 0 || config.depthCount <= 0) { + this.End(); + return []; + } + let gripWidth = (size.x - ((config.widthCount - 1) * config.thickness)) / config.widthCount; + let gripDepth = (size.y - (config.depthCount - 1) * config.thickness) / config.depthCount; + config.gripWidth = gripWidth; + config.gripDepth = gripDepth; + let position = space.SpaceBox.min.clone(); + let verBr = Board.CreateBoard(size.z, size.y, config.thickness, BoardType.Vertical); + //分析切角圆弧的结果 + let res = this.ParseArcLenOrObliuqeAng(verBr); + if (!res) { + this.End(); + return []; + } + //左右侧板跟随 + this.ChangeLeftRightBr(verBr); + this.ParseBrTooth(verBr); + this.ParseHighSealing(verBr, config.leftSealed, config.rightSealed, config.upSealed, config.downSealed, false); + this.WriteBoardProcessOption(verBr); + let lattices = []; + for (let i = 1; i < config.widthCount; i++) { + let br = verBr.Clone(); + br.Name = "竖板" + i; + let pos = position.clone(); + pos.add(new Vector3(gripWidth * i + (i - 1) * config.thickness)); + br.Position = pos; + br.ApplyMatrix(space.SpaceOCS); + lattices.push(br); + } + let beBr = Board.CreateBoard(size.z, size.x, config.thickness, BoardType.Behind); + this.ParseBrTooth(beBr); + this.ParseHighSealing(beBr, config.leftSealed, config.rightSealed, config.upSealed, config.downSealed, true); + this.WriteBoardProcessOption(beBr); + for (let i = 1; i < config.depthCount; i++) { + let br = beBr.Clone(); + br.Name = "横板" + i; + let pos = position.clone(); + pos.add(new Vector3(0, (gripDepth + config.thickness) * i)); + br.Position = pos; + br.ApplyMatrix(space.SpaceOCS); + lattices.push(br); + } + this.End(); + return lattices; + } + HandleSpace() { + const config = this.Config; + let box = this.space.SpaceBox; + box.max.add(new Vector3(0, 0, -this.Config.downDist)); + //处理间隙 + box.min.add(new Vector3(config.space, config.space)); + box.max.add(new Vector3(-config.space, -config.space)); + if (this.frontBr && this.backBr) { + let backPos = this.backBr.Position.applyMatrix4(this.frontBr.OCSInv); + let addH = backPos.y + this.backBr.Height - this.frontBr.Height; + if (addH > 0) { + this.space.SpaceBox.max.add(new Vector3(0, 0, addH)); + if (config.isAuto) + config.arcLen = addH; + } + else + Log("挡板高度大于等于格子抽板高度,无法自动识别弧度!"); + } + if (this.haveTopBr) { + Log("顶板不为空,绘制格子抽可能错误!"); + } + } + ChangeLeftRightBr(refBr) { + const config = this.Config; + if (this.leftBr && this.rightBr) { + if (config.isChange) { + let lWidth = this.leftBr.Width; + let lHeight = this.leftBr.Height; + let lgrooves = this.leftBr.Grooves.slice(); + let rgrooves = this.rightBr.Grooves.slice(); + let rWidth = this.rightBr.Width; + let rHeight = this.rightBr.Height; + this.leftBr.ContourCurve = refBr.ContourCurve.Clone(); + this.rightBr.ContourCurve = refBr.ContourCurve.Clone(); + this.leftBr.Width = lWidth; + this.leftBr.Height = lHeight; + this.rightBr.Width = rWidth; + this.rightBr.Height = rHeight; + if (this.leftBr.Grooves.length !== lgrooves.length) + this.leftBr.AppendGrooves(lgrooves); + if (this.rightBr.Grooves.length !== rgrooves.length) + this.rightBr.AppendGrooves(rgrooves); + } + } + } + ParseBrTooth(br) { + const config = this.Config; + let grooveLenAdd = config.knifeRad; + let initPts = []; + if (br.BoardType === BoardType.Behind) { + let addWidth = (config.grooveAddWidth - 2 * config.upSealed) / 2; + let p1 = new Vector3(br.Width - config.gripWidth + addWidth, br.Height); + let p2 = new Vector3(br.Width - config.gripWidth + addWidth, br.Height / 2 - grooveLenAdd); + let p3 = new Vector3(br.Width - config.gripWidth - br.Thickness - addWidth, br.Height / 2 - grooveLenAdd); + let p4 = new Vector3(br.Width - config.gripWidth - br.Thickness - addWidth, br.Height); + initPts.push(p1, p2, p3, p4); + for (let i = 2; i < config.widthCount; i++) { + initPts.push(...[p1, p2, p3, p4].map(p => p.clone().add(new Vector3(-(config.gripWidth + br.Thickness) * (i - 1))))); + } + let cu = br.ContourCurve; + cu.AddVertexAt(cu.EndParam - 1, initPts.map(p => AsVector2(p))); + br.ContourCurve = cu; + } + else { + let addWidth = (config.grooveAddWidth - 2 * config.downSealed) / 2; + let p1 = new Vector3(config.gripDepth - addWidth, 0); + let p2 = new Vector3(config.gripDepth - addWidth, br.Height / 2 + grooveLenAdd); + let p3 = new Vector3(config.gripDepth + br.Thickness + addWidth, br.Height / 2 + grooveLenAdd); + let p4 = new Vector3(config.gripDepth + br.Thickness + addWidth, 0); + initPts.push(p1, p2, p3, p4); + for (let i = 2; i < config.depthCount; i++) { + initPts.push(...[p1, p2, p3, p4].map(p => p.clone().add(new Vector3((config.gripDepth + br.Thickness) * (i - 1))))); + } + let cu = br.ContourCurve; + cu.AddVertexAt(1, initPts.map(p => AsVector2(p))); + br.ContourCurve = cu; + } + } + ParseSpaceBrs() { + let vertBrs = this.space.BoardMap.get(BoardType.Vertical); + if (vertBrs && vertBrs.length > 1) { + vertBrs.sort((br1, br2) => { + return br1.Position.applyMatrix4(this.space.SpaceOCSInv).x - br2.Position.applyMatrix4(this.space.SpaceOCSInv).x; + }); + this.leftBr = vertBrs[0]; + this.rightBr = arrayLast(vertBrs); + } + let behindBrs = this.space.BoardMap.get(BoardType.Behind); + if (behindBrs && behindBrs.length > 1) { + behindBrs.sort((br1, br2) => { + return br1.Position.applyMatrix4(this.space.SpaceOCSInv).y - br2.Position.applyMatrix4(this.space.SpaceOCSInv).y; + }); + this.backBr = arrayLast(behindBrs); + this.frontBr = behindBrs[0]; + } + let lyBrs = this.space.BoardMap.get(BoardType.Layer); + this.haveTopBr = lyBrs && lyBrs.length > 1; + } + ParseArcLenOrObliuqeAng(br) { + const config = this.Config; + const size = this.space.Size; + if (config.isOpenCut) { + if (config.upCut > size.z || config.downCut > size.z) + return true; + if (config.upCut < 1 || config.downCut < 1) + return true; + let cu = br.ContourCurve; + cu.AddVertexAt(3, new Vector2$1(config.upCut, br.Height)); + cu.SetPointAt(4, new Vector2$1(0, br.Height - config.downCut)); + } + else { + if (config.arcLen > size.z || config.arcLen > size.y) { + Log("圆弧角过大"); + return false; + } + let cu = br.ContourCurve; + if (config.arcLen === 0) { + Log("圆弧角为0"); + return true; + } + cu.AddVertexAt(3, new Vector2$1(config.arcLen, br.Height)); + cu.SetBulgeAt(3, Math.tan(Math.PI / 8)); + cu.SetPointAt(4, new Vector2$1(0, br.Height - config.arcLen)); + } + return true; + } + WriteBoardProcessOption(br) { + const config = this.Config; + br.KnifeRadius = config.knifeRad; + br.BoardProcessOption.sealedUp = config.upSealed.toString(); + br.BoardProcessOption.sealedDown = config.downSealed.toString(); + br.BoardProcessOption.sealedLeft = config.leftSealed.toString(); + br.BoardProcessOption.sealedRight = config.rightSealed.toString(); + br.BoardProcessOption.drillType = DrillType.None; + br.BoardProcessOption.highDrill.fill(DrillType.None); + br.BoardProcessOption[EBoardKeyList.Lines] = LinesType.Reverse; //生成的板设置为反纹 + } + ParseHighSealing(br, leftSealed, rightSealed, topSealed, downSealed, isHor) { + let cu = br.ContourCurve; + br.BoardProcessOption.sealedLeft = leftSealed.toString(); + br.BoardProcessOption.sealedRight = rightSealed.toString(); + br.BoardProcessOption.sealedUp = topSealed.toString(); + br.BoardProcessOption.sealedDown = downSealed.toString(); + let highSeals = []; + let sizes = [...new Set([downSealed, rightSealed, topSealed, leftSealed])]; + let downSeal = { + size: downSealed, color: sizes.indexOf(downSealed) + 1 + }; + let rigthSeal = { + size: rightSealed, color: sizes.indexOf(rightSealed) + 1 + }; + let topSeal = { size: topSealed, color: sizes.indexOf(topSealed) + 1 }; + let leftSeal = { size: leftSealed, color: sizes.indexOf(leftSealed) + 1 }; + if (isHor) { + highSeals.push(downSeal, rigthSeal); + for (let i = 1; i <= cu.EndParam - 3; i++) { + highSeals.push(topSeal); + } + highSeals.push(leftSeal); + } + else { + let count = (this._config.depthCount - 1) * 3 + this._config.depthCount; + for (let i = 0; i < count; i++) { + highSeals.push(downSeal); + } + for (let i = count; i < cu.EndParam; i++) { + let c = cu.GetCurveAtIndex(i); + if (c instanceof Arc) + break; + let derv = c.GetFistDeriv(0).normalize(); + if (equalv3(derv, YAxis)) + highSeals.push(rigthSeal); + else if (isParallelTo(derv, XAxis)) + highSeals.push(topSeal); + else if (equalv3(derv, YAxis.clone().negate())) + highSeals.push(leftSeal); + else + highSeals.push(topSeal); + } + } + br.BoardProcessOption.highSealed = highSeals; + } + End() { + this._config = null; + this.leftBr = null; + this.rightBr = null; + this.backBr = null; + this.frontBr = null; + this.haveTopBr = false; + } +} + +class ISpaceParse { + /** + * # 构造后请手动调用Parse()方法. + * @param boards 板件列表 + * @param [spaceOCS] 默认空间矩阵,如果不设置将使用第一块板作为空间矩阵 + */ + constructor(boards, spaceOCS) { + /** + * 解析空间成功 + */ + this.ParseOK = false; + /** + * 板件映射表 + */ + this.BoardMap = new Map(); + /** + * 动态中,禁止执行二次操作 + */ + this.IsDynamic = false; + this.Rotation = { x: 0, y: 0, z: 0 }; + this.Boards = boards; + if (spaceOCS) + this.SpaceOCS = spaceOCS; + else if (boards && boards.length > 0) + this.SpaceOCS = boards[0].SpaceOCS; + else + this.SpaceOCS = new Matrix4(); + this.SpaceOCSInv = new Matrix4().getInverse(this.SpaceOCS); + this.GeneralBoardMap(); + } + async Parse() { + } + get Size() { + if (this.SpaceBox) + return this.SpaceBox.getSize(new Vector3()); + return new Vector3(); + } + get DrawCS() { + if (!this.ParseOK) + return new Matrix4(); + let scs = this.SpaceOCS.clone(); + let p = this.SpaceBox.min.clone().applyMatrix4(scs); + scs.setPosition(p); + return scs; + } + GetBoardInSpaceType(br) { + //使用板件向量判断类型,而不是板件类型 + let normal = br.Normal.transformDirection(this.SpaceOCSInv); + let type; + if (isParallelTo(XAxis, normal, 1e-3)) + type = BoardType.Vertical; + else if (isParallelTo(YAxis, normal, 1e-3)) + type = BoardType.Behind; + else if (isParallelTo(ZAxis, normal, 1e-3)) + type = BoardType.Layer; + return type; + } + /** + * 构造板件类型Map + */ + GeneralBoardMap() { + if (this.Boards && this.Boards.length > 0) { + this.BoardMap.clear(); + for (let br of this.Boards) { + let type = this.GetBoardInSpaceType(br); + if (type === undefined) + continue; + let brs = this.BoardMap.get(type); + if (brs) + brs.push(br); + else + this.BoardMap.set(type, [br]); + } + } + } + /** + * 解析板件的盒子,并且(排序,归并) + * @param boardCol + * @param splitType + */ + ParseBoardBox(boardCol, splitType) { + let boxCol = boardCol.map(b => b.GetBoundingBoxInMtx(this.SpaceOCSInv)); + //查找最左的板和最右的板 + if (splitType === SplitType.X) { + let minX = Infinity; + let leftIndex = 0; + let maxX = -Infinity; + let rightIndex = 0; + for (let i = 0; i < boxCol.length; i++) { + let box = boxCol[i]; + if (box.min.x < minX) { + minX = box.min.x; + leftIndex = i; + } + if (box.max.x > maxX) { + maxX = box.max.x; + rightIndex = i; + } + } + this.LeftBoard = boardCol[leftIndex]; + this.RightBoard = boardCol[rightIndex]; + } + //根据分割类型排序 + boxCol.sort((b1, b2) => { + return b1.min.getComponent(splitType) - b2.min.getComponent(splitType); + }); + //归并盒子 + arrayRemoveDuplicateBySort(boxCol, (b1, b2) => { + if ( + //对齐 + equaln$1(b1.min.getComponent(splitType), b2.min.getComponent(splitType), 1e-3) + && + //厚度相等 + equaln$1(b1.getSize(new Vector3()).getComponent(splitType), b2.getSize(new Vector3()).getComponent(splitType), 1e-3)) { + b1.union(b2); + return true; + } + return false; + }); + return boxCol; + } +} + +/** + * 模版动作 + */ +let TemplateAction = class TemplateAction { + constructor() { + this.Name = "动作"; + } + WriteAllObjectRecord() { + if (this.parent) + this.parent.WriteAllObjectRecord(); + } + Update(paramDiff, newValue) { + if (this.Expr) { + let varDefines = {}; + varDefines[this.parent.name] = newValue; + newValue = safeEval(this.Expr, varDefines) || newValue; + varDefines[this.parent.name] = paramDiff; + paramDiff = safeEval(this.Expr, varDefines) || paramDiff; + } + this._Update(paramDiff, newValue); + } + /** + * @重载 + */ + _Update(paramDiff, newValue) { + } + //#region -------------------------File------------------------- + //对象应该实现dataIn和DataOut的方法,为了对象的序列化和反序列化 + //对象从文件中读取数据,初始化自身 + ReadFile(file) { + let ver = file.Read(); + this.Name = file.Read(); + if (ver > 2) { + this.Expr = file.Read(); + this.Description = file.Read(); + } + } + //对象将自身数据写入到文件. + WriteFile(file) { + file.Write(3); + file.Write(this.Name); + file.Write(this.Expr); + file.Write(this.Description); + } +}; +__decorate([ + AutoRecord +], TemplateAction.prototype, "Name", void 0); +__decorate([ + AutoRecord +], TemplateAction.prototype, "Expr", void 0); +__decorate([ + AutoRecord +], TemplateAction.prototype, "Description", void 0); +TemplateAction = __decorate([ + Factory +], TemplateAction); + +var PromptStatus; +(function (PromptStatus) { + PromptStatus[PromptStatus["None"] = 0] = "None"; + PromptStatus[PromptStatus["Cancel"] = -1] = "Cancel"; + PromptStatus[PromptStatus["OK"] = 1] = "OK"; + PromptStatus[PromptStatus["Keyword"] = 2] = "Keyword"; + PromptStatus[PromptStatus["Other"] = 4] = "Other"; + PromptStatus[PromptStatus["String"] = 8] = "String"; + PromptStatus[PromptStatus["Error"] = -2] = "Error"; +})(PromptStatus || (PromptStatus = {})); +// export enum Errno 未来某一天我们可能需要这个东西 +// { +// Space = 0, +// Enter = 1, +// Esc = 2, +// Left = 3, +// Right = 4, +// } +class PromptResult { + constructor() { + this.Status = PromptStatus.None; + //是否为子级菜单 + this.isChild = false; + //当用户选择失败的时候,提供当前选择失败的原因 + // Errno?: Errno; + } +} +class PromptDistendResult extends PromptResult { + get Distance() { + return this._value; + } + set Distance(v) { + this._value = v; + } +} +class PromptEntityResult extends PromptResult { + constructor( + //选择到的图形 + Entity, + //点取的点 + Point, Object, IsCircle) { + super(); + this.Entity = Entity; + this.Point = Point; + this.Object = Object; + this.IsCircle = IsCircle; + } +} + +function Encode(res, enMap) { + if (res.Entity instanceof Line || res.Entity.constructor.name === "RoomWallLine") { + enMap[0].push(res); + return 1; + } + else if (res.Entity instanceof Arc || res.constructor.name === "RoomWallArc") { + enMap[1].push(res); + return 2; + } + else if (res.Entity instanceof Polyline) { + enMap[2].push(res); + return 4; + } + else if (res.Entity instanceof Spline) { + enMap[3].push(res); + return 8; + } + else if (res.Entity instanceof Ellipse) { + enMap[4].push(res); + return 16; + } +} +//把圆转换成圆弧,避免圆参与计算. +function CircleEnResToArc(enRes) { + if (enRes.Entity instanceof Circle) { + let an = angle(enRes.Point.clone().applyMatrix4(enRes.Entity.OCSInv)) + Math.PI; + let arc = new Arc(new Vector3(), enRes.Entity.Radius, an, an + 0.1); + arc.ApplyMatrix(enRes.Entity.OCS); + arc.Center = enRes.Entity.Center; + enRes.Entity = arc; + enRes.IsCircle = true; + } +} +function GetFilletCurve(enRes) { + if (enRes.Entity instanceof Polyline) { + let pl = enRes.Entity; + let param = pl.GetParamAtPoint(pl.GetClosestPointTo(enRes.Point, false)); + let paramF = Math.floor(param); + return [pl.GetCurveAtParam(param), paramF]; + } + else + return [enRes.Entity, NaN]; +} +var ExtendType; +(function (ExtendType) { + ExtendType[ExtendType["Start"] = 1] = "Start"; + ExtendType[ExtendType["End"] = 2] = "End"; +})(ExtendType || (ExtendType = {})); +class FilletUtils { + Fillet(enRes1, enRes2) { + CircleEnResToArc(enRes1); + CircleEnResToArc(enRes2); + let { enType, enMap } = this.EnCode(enRes1, enRes2); + if (enType === 4 && enRes1.Entity === enRes2.Entity) + return this.FilletPolyLineSelf(enRes1, enRes2); + else if (enType >= 4 && enType < 8) + return this.FilletPolylineAndCurve(enRes1, enRes2); + let interPts = this.GetIntersectAndSort(enRes1, enRes2, enType, enMap); + if (interPts.length === 0 + || (interPts.length === 1 && (enType & 2))) //圆弧相切 + { + if (enType === 1) + return this.FilletParallelLine(enRes1, enRes2); + else if (enType === 3) + return this.FilletLineAndArc(enMap, enRes1); + else if (enType === 2) + return this.FilletArcAndArc(enRes1, enRes2); + return; + } + return this.FilletLineOrArc(enRes1, enRes2, interPts); + } + FilletLineOrArc(enRes1, enRes2, interPts) { + let iPt = interPts[0]; + //裁剪延伸,使两条线组成一个尖角 + let splitedCu1 = this.SplitCurve(enRes1, iPt, interPts); + let splitedCu2 = this.SplitCurve(enRes2, iPt, interPts); + let fRadius = this.FilletRadius; + let res = { cu1: splitedCu1.Curve, cu2: splitedCu2.Curve, arc: undefined }; + if (fRadius > 0) { + //角平分线向量. + let bisectorVec = new Vector3(); + let c1Derv = this.ComputerDerv(splitedCu1, bisectorVec); + let c2Derv = this.ComputerDerv(splitedCu2, bisectorVec); + //方向相反 + if (equalv3(bisectorVec, new Vector3())) + return; + //相切 + if (equalv3(c2Derv, c1Derv)) { + bisectorVec.set(0, 0, 0); + c1Derv = this.ComputerDerv2(splitedCu1, bisectorVec); + c2Derv = this.ComputerDerv2(splitedCu2, bisectorVec); + } + let cu1RoOcsInv = new Matrix4().extractRotation(splitedCu1.Curve.OCSInv); + [c1Derv, c2Derv, bisectorVec].forEach(v => v.applyMatrix4(cu1RoOcsInv)); + let offCu1 = splitedCu1.Curve.GetOffsetCurves(fRadius * -Math.sign(c1Derv.cross(bisectorVec).z))[0]; + let offCu2 = splitedCu2.Curve.GetOffsetCurves(fRadius * -Math.sign(c2Derv.cross(bisectorVec).z))[0]; + if (!offCu1 || !offCu2) + return; + // JigUtils.Draw(new Line(iPt, iPt.clone().add(c1Derv.clone().multiplyScalar(10)))).ColorIndex = 1; + // JigUtils.Draw(new Line(iPt, iPt.clone().add(c2Derv.clone().multiplyScalar(10)))).ColorIndex = 2; + // JigUtils.Draw(new Line(iPt, iPt.clone().add(bisectorVec))).ColorIndex = 3; + // offCu1.ColorIndex = 6; + // offCu2.ColorIndex = 6; + // JigUtils.Draw(offCu1.Clone()); + // JigUtils.Draw(offCu2.Clone()); + let center = offCu1.IntersectWith(offCu2, IntersectOption.ExtendNone) + .sort((p1, p2) => { + return p1.distanceToSquared(iPt) - p2.distanceToSquared(iPt); + })[0]; + if (!center) + return; + let arcP1 = splitedCu1.Curve.GetClosestPointTo(center, true); + let arcP2 = splitedCu2.Curve.GetClosestPointTo(center, true); + if (!splitedCu1.Curve.PtOnCurve(arcP1) || !splitedCu2.Curve.PtOnCurve(arcP2)) + return; + //时针校验 + let v1 = arcP1.clone().sub(center).applyMatrix4(cu1RoOcsInv); + let v2 = arcP2.clone().sub(center).applyMatrix4(cu1RoOcsInv); + //绘制圆弧 + let arc = new Arc(new Vector3(), this.FilletRadius, angle(v1), angle(v2), v1.cross(v2).z < 0); + arc.ApplyMatrix(splitedCu1.Curve.OCS); + arc.Center = center; + res.arc = arc; + //延伸或者裁剪到圆弧点 + this.ExtendPt(splitedCu1, arcP1); + this.ExtendPt(splitedCu2, arcP2); + } + res.cu1Extend = splitedCu1.ExtType; + res.cu2Extend = splitedCu2.ExtType; + return res; + } + FilletPolyLineSelf(enRes1, enRes2) { + let pl = enRes1.Entity; + let param1 = pl.GetParamAtPoint(pl.GetClosestPointTo(enRes1.Point, false)); + let param2 = pl.GetParamAtPoint(pl.GetClosestPointTo(enRes2.Point, false)); + if (param1 > param2) { + [param1, param2] = [param2, param1]; + [enRes1, enRes2] = [enRes2, enRes1]; + } + let parF1 = Math.floor(param1); + let parF2 = Math.floor(param2); + //共线 + if (parF1 === parF2) + return; + let c1 = pl.GetCurveAtParam(param1); + let c2 = pl.GetCurveAtParam(param2); + if (equalv3(c1.GetFistDeriv(1).normalize(), c2.GetFistDeriv(0).normalize())) + return; + let es1 = new PromptEntityResult(); + es1.Entity = c1; + es1.Point = enRes1.Point; + let es2 = new PromptEntityResult(); + es2.Entity = c2; + es2.Point = enRes2.Point; + let fres = this.Fillet(es1, es2); + if (!fres) + return; + let pln = pl.Clone(); + if (fres.cu1 instanceof Arc) + pln.SetBulgeAt(parF1, fres.cu1.Bul); + if (fres.cu2 instanceof Arc) + pln.SetBulgeAt(parF2, fres.cu2.Bul); + let splitType1 = fres.cu1Extend; + let splitType2 = fres.cu2Extend; + if (splitType1 === splitType2) + return; + if (!fres.arc) { + if (splitType1 === ExtendType.End) { + let ep = AsVector2(fres.cu1.EndPoint.applyMatrix4(pln.OCSInv)); + pln.SetPointAt(parF1 + 1, ep); + let sp = AsVector2(fres.cu2.StartPoint.applyMatrix4(pln.OCSInv)); + pln.SetPointAt(parF2, sp); + //移除多余的点 + pln.LineData.splice(parF1 + 1, parF2 - parF1 - 1); + pln.Update(); + return { cu1: pln }; + } + else { + let ep = AsVector2(fres.cu1.StartPoint.applyMatrix4(pln.OCSInv)); + pln.SetPointAt(parF1, ep); + let sp = AsVector2(fres.cu2.EndPoint.applyMatrix4(pln.OCSInv)); + pln.SetPointAt(parF2 + 1, sp); + pln.LineData.splice(parF2 + 2); + pln.LineData.splice(0, parF1); + pln.Update(); + return { cu1: pln }; + } + } + if (splitType1 === ExtendType.End) //没有经过起点 + { + let sp = AsVector2(fres.cu1.EndPoint.applyMatrix4(pln.OCSInv)); + if (parF2 - parF1 === 1) { + pln.AddVertexAt(parF1 + 1, sp); + parF2++; + } + else + pln.SetPointAt(parF1 + 1, sp); + pln.SetBulgeAt(parF1 + 1, fres.arc.Bul); + let ep = AsVector2(fres.cu2.StartPoint.applyMatrix4(pln.OCSInv)); + pln.SetPointAt(parF2, ep); + //移除多余的点 + pln.LineData.splice(parF1 + 2, parF2 - parF1 - 2); + pln.Update(); + return { cu1: pln }; + } + else //经过起点 + { + let sp = AsVector2(fres.arc.EndPoint.applyMatrix4(pln.OCSInv)); + let keepF1 = 0; + if (parF2 + 1 <= pln.LineData.length) { + if (parF1 === 0 || equaln$1(pln.GetBulgeAt(parF1 - 1), 0)) + pln.AddVertexAt(parF2 + 1, sp); + else { + pln.SetPointAt(parF1 - 1, sp); + keepF1 = -1; //保留圆弧位 + } + } + else + pln.SetPointAt(parF2 + 1, sp); + if (keepF1 === 0) + pln.SetBulgeAt(parF2 + 1, -fres.arc.Bul); + else + pln.SetBulgeAt(parF1 - 1, -fres.arc.Bul); + let ep = AsVector2(fres.cu1.StartPoint.applyMatrix4(pln.OCSInv)); + pln.SetPointAt(parF1, ep); + pln.CloseMark = true; + pln.LineData.splice(parF2 + 2 + keepF1); + pln.LineData.splice(0, parF1 + keepF1); + pln.Update(); + return { cu1: pln }; + } + } + FilletPolylineAndCurve(enRes1, enRes2) { + let arr1 = GetFilletCurve(enRes1); + let arr2 = GetFilletCurve(enRes2); + let [cu1, paramF1] = arr1; + let [cu2, paramF2] = arr2; + let es1 = new PromptEntityResult(); + es1.Entity = cu1; + es1.Point = enRes1.Point; + let es2 = new PromptEntityResult(); + es2.Entity = cu2; + es2.Point = enRes2.Point; + let fres = this.Fillet(es1, es2); + if (fres) { + let cus = []; + let isFirst = false; + if (fres.cu1) { + if (enRes1.Entity instanceof Polyline) { + isFirst = true; + let pln = enRes1.Entity.Clone(); + pln.DigestionCloseMark(); + if (fres.cu1 instanceof Arc) + pln.SetBulgeAt(paramF1, fres.cu1.Bul); + if (fres.cu1Extend === ExtendType.End) { + pln.LineData.splice(paramF1 + 2); + let ep = AsVector2(fres.cu1.EndPoint.applyMatrix4(pln.OCSInv)); + pln.SetPointAt(paramF1 + 1, ep); + } + else { + pln.LineData.splice(0, paramF1); + let sp = AsVector2(fres.cu1.StartPoint.applyMatrix4(pln.OCSInv)); + pln.SetPointAt(0, sp); + } + cus.push(pln); + } + else if (!enRes1.IsCircle) + cus.push(fres.cu1); + } + if (fres.arc) + cus.push(fres.arc); + if (fres.cu2) { + if (enRes2.Entity instanceof Polyline) { + let pln = enRes2.Entity.Clone(); + pln.DigestionCloseMark(); + if (fres.cu2 instanceof Arc) + pln.SetBulgeAt(paramF2, fres.cu2.Bul); + if (fres.cu2Extend === ExtendType.End) { + pln.LineData.splice(paramF2 + 2); + let ep = AsVector2(fres.cu2.EndPoint.applyMatrix4(pln.OCSInv)); + pln.SetPointAt(paramF2 + 1, ep); + } + else { + pln.LineData.splice(0, paramF2); + let sp = AsVector2(fres.cu2.StartPoint.applyMatrix4(pln.OCSInv)); + pln.SetPointAt(0, sp); + } + cus.push(pln); + cus.reverse(); + } + else if (!enRes2.IsCircle) + cus.push(fres.cu2); + } + if (cus.length > 0) { + let pl = cus[0]; + if (!(pl instanceof Polyline)) + return; + for (let i = 1; i < cus.length; i++) + pl.Join(cus[i]); + if (isFirst) + return { cu1: pl }; + else + return { cu2: pl }; + } + } + return undefined; + } + FilletPolyLineAllAngular(enRes1) { + let pl = enRes1.Entity; + let cus = pl.Explode(); + let count = cus.length; + if (pl.IsClose) + cus.push(cus[0]); + let ncus = []; + for (let i = 0; i < count; i++) { + let c1 = cus[i]; + let c2 = cus[i + 1]; + ncus.push(c1); + if (!c2) + break; + if (equalv3(c1.GetFistDeriv(1).normalize(), c2.GetFistDeriv(0).normalize())) + continue; + let es1 = new PromptEntityResult(); + es1.Entity = c1; + es1.Point = c1.EndPoint; + let es2 = new PromptEntityResult(); + es2.Entity = c2; + es2.Point = c2.StartPoint; + let fres = this.Fillet(es1, es2); + if (fres) { + if (fres.cu1) + c1.CopyFrom(fres.cu1); + if (fres.cu2) + c2.CopyFrom(fres.cu2); + if (fres.arc) + ncus.push(fres.arc); + } + } + let pln = pl.Clone(); + pln.LineData = []; + pln.ApplyMatrix(pln.OCSInv); + pln.CloseMark = false; + for (let cu of ncus) + pln.Join(cu); + pln.CloseMark = pl.CloseMark; + return { + cu1: pln, + cu2: undefined, + arc: undefined + }; + } + FindNearestPt(pts, target) { + let res = pts[0]; + let dis = Infinity; + for (let p of pts) { + let d = p.distanceTo(target); + if (d < dis) { + res = p; + dis = d; + } + } + return res; + } + FilletBoard(brRes, ptRes) { + let br = brRes.Entity; + let brContour = br.ContourCurve.Clone(); + //------1.求交 + let brResPt = brRes.Point.clone().applyMatrix4(br.OCSInv).setZ(0); + let ptResPt = ptRes.Point.clone().applyMatrix4(br.OCSInv).setZ(0); + let l = new Line(brResPt, ptResPt); + let ipts = l.IntersectWith(brContour, IntersectOption.ExtendThis); + if (ipts.length > 2) //超过2个则有可能有多余交点 + //找最近点 + ipts = [this.FindNearestPt(ipts, brResPt), this.FindNearestPt(ipts, ptResPt)]; + if (ipts.length !== 2) + return "倒角失败!交点个数异常."; + //------2.倒角 + let es1 = new PromptEntityResult(brContour, ipts[0]); + let es2 = new PromptEntityResult(brContour, ipts[1]); + let res = this.FilletPolyLineSelf(es1, es2); + if (res && res.cu1) + return res.cu1; + else + return "倒角失败"; + } + /** + * 平行线倒角 + */ + FilletParallelLine(enRes1, enRes2) { + let l1 = enRes1.Entity; + let l2 = enRes2.Entity; + let l1Derv = l1.GetFistDeriv(0); + if (!isParallelTo(l1Derv, l2.GetFistDeriv(0))) + return; + let vec = l2.StartPoint.sub(l1.StartPoint); + if (isParallelTo(vec, l1Derv)) + return; + let par1 = l2.GetClosestAtPoint(l1.StartPoint, true).param; + let par2 = l2.GetClosestAtPoint(l1.EndPoint, true).param; + if (!isIntersect2(0, 1, par1, par2)) + return; + let lineClone1 = l1.Clone(); + let lineClone2 = l2.Clone(); + let par = l1.GetClosestAtPoint(enRes1.Point, true).param; + let parFix = Math.round(par); + let ptFix = lineClone1.GetPointAtParam(parFix); + let ptL2Fix = lineClone2.GetClosestAtPoint(ptFix, true).closestPt; + let cu1Extend = parFix === 0 ? ExtendType.Start : ExtendType.End; + let cu2Extend; + if ((par1 > par2) === (parFix === 1)) { + lineClone2.StartPoint = ptL2Fix; + cu2Extend = ExtendType.Start; + } + else { + lineClone2.EndPoint = ptL2Fix; + cu2Extend = ExtendType.End; + } + let radius = ptFix.distanceTo(ptL2Fix) / 2; + if (radius < 1e-3) + return; + let arcCenter = midPoint(ptFix, ptL2Fix); + let sv = ptFix.sub(arcCenter); + let ev = ptL2Fix.sub(arcCenter); + if (parFix === 0) + l1Derv.negate(); + //平面矩阵 + let xVec = new Vector3(); + let yVec = new Vector3(); + let zVec = vec.cross(l1Derv).normalize(); + let l1Normal = l1.Normal; + if (isParallelTo(zVec, l1Normal)) + zVec = l1Normal; + Orbit.ComputUpDirection(zVec, yVec, xVec); + let mtx = new Matrix4().makeBasis(xVec, yVec, zVec); + let mtxInv = new Matrix4().getInverse(mtx); + //变换 + sv.applyMatrix4(mtxInv); + ev.applyMatrix4(mtxInv); + l1Derv.applyMatrix4(mtxInv); + let sa = angle(sv); + let ea = angle(ev); + let clockwise = ev.cross(l1Derv).z > 0; + let arc = new Arc(new Vector3(), radius, sa, ea, clockwise); + arc.ApplyMatrix(mtx); + arc.Center = arcCenter; + return { + cu1: lineClone1, + cu1Extend, + cu2: lineClone2, + cu2Extend, + arc, + }; + } + /** + * 计算圆弧与圆弧没有交点的情况下倒角结果. + * @param enRes1 + * @param enRes2 + * @returns arc and arc + */ + FilletArcAndArc(enRes1, enRes2) { + let a1 = enRes1.Entity; + let a2 = enRes2.Entity; + let arcO1 = a1.GetOffsetCurves(this.FilletRadius * (a1.IsClockWise ? -1 : 1))[0]; + let arcO2 = a2.GetOffsetCurves(this.FilletRadius * (a2.IsClockWise ? -1 : 1))[0]; + // arcO1.ColorIndex = 6; + // arcO2.ColorIndex = 6; + // JigUtils.Draw(arcO1); + // JigUtils.Draw(arcO2); + //求交 + let intPts = arcO1.IntersectWith(arcO2, IntersectOption.ExtendBoth); + if (intPts.length === 0) + return; //无交点无法倒角 + //两选择点的中点 + let clickMidp = midPoint(enRes1.Point, enRes2.Point); //用来选择合适的交点 + //选择合适的交点 + intPts.sort((p1, p2) => { + return p1.distanceToSquared(clickMidp) - p2.distanceToSquared(clickMidp); + }); + //圆弧圆心 + let narcCenter = intPts[0]; + let narcP1 = a1.GetClosestPointTo(narcCenter, true); //两圆弧和相切弧的交点 + let narcP2 = a2.GetClosestPointTo(narcCenter, true); + let tempCircle = new Circle(narcCenter, this.FilletRadius); + tempCircle.OCSNoClone.copy(a1.OCSNoClone).setPosition(narcCenter); + let closestPt = a1.GetClosestPointTo(a2.Center, true); //两曲线距离对方圆心最近的点 + let narcMP = tempCircle.GetClosestPointTo(closestPt, false); //相切圆距离closestPt最近的点 + //构造圆弧 + let narc = new Arc().ApplyMatrix(a1.OCS).FromThreePoint(narcP1, narcMP, narcP2); + let a1Clone = a1.Clone(); + let a2Clone = a2.Clone(); + let a1Param = a1.GetParamAtPoint(narcP1); + let a2Param = a2.GetParamAtPoint(narcP2); + let a1Derv = a1.GetFistDeriv(a1Param).normalize(); + let a2Derv = a2.GetFistDeriv(a2Param).normalize(); + let narcDerv0 = narc.GetFistDeriv(0).normalize(); + let narcDerv1 = narc.GetFistDeriv(1).normalize(); + //裁剪圆弧 + if (equalv3(a1Derv, narcDerv0)) + a1Clone.EndPoint = narcP1; + else + a1Clone.StartPoint = narcP1; + if (equalv3(a2Derv, narcDerv1)) + a2Clone.StartPoint = narcP2; + else + a2Clone.EndPoint = narcP2; + return { + cu1: a1Clone, + cu2: a2Clone, + arc: narc + }; + } + /** + * 计算直线与圆弧没有交点(或相切)的情况下倒角结果 + * @param enRes1 + * @param enRes2 + * @returns line and cir + */ + FilletLineAndArc(enMap, enRes1) { + let lineRes = enMap[0][0]; + let arcRes = enMap[1][0]; + let line = lineRes.Entity; + let arc = arcRes.Entity; + let dir = GetPointAtCurveDir(line, arc.Center); + let lineO = line.GetOffsetCurves(this.FilletRadius * dir)[0]; + let arcO = arc.GetOffsetCurves(this.FilletRadius * (arc.IsClockWise ? -1 : 1))[0]; // tip:面积逆时针为正, 顺时针为负. + // lineO.ColorIndex = 6; + // arcO.ColorIndex = 6; + // JigUtils.Draw(lineO); + // JigUtils.Draw(arcO); + //求交 + let intPts = lineO.IntersectWith(arcO, IntersectOption.ExtendBoth); + if (intPts.length === 0) + return; //无交点无法倒角 + //两选择点的中点 + let clickMidp = midPoint(lineRes.Point, arcRes.Point); + //选择适合的交点。 + intPts.sort((p1, p2) => { + return p1.distanceToSquared(clickMidp) - p2.distanceToSquared(clickMidp); + }); + //圆弧圆心 + let arcCenter = intPts[0]; + let arcP1 = line.GetClosestPointTo(arcCenter, true); //直线与相切圆的交点 + let arcP2 = arc.GetClosestPointTo(arcCenter, true); //圆弧与相切圆的交点 + let tempCircle = new Circle(arcCenter, this.FilletRadius); + tempCircle.OCSNoClone.copy(arc.OCSNoClone).setPosition(arcCenter); + let { closestPt, param } = line.GetClosestAtPoint(arc.Center, true); + let arcMP = tempCircle.GetClosestPointTo(closestPt, false); + //构造圆弧 + let narc = new Arc().ApplyMatrix(arc.OCS).FromThreePoint(arcP1, arcMP, arcP2); + //裁剪线 + let lineClone = line.Clone(); + let arcClone = arc.Clone(); + let lineExtend; + let p1Param = line.GetParamAtPoint(arcP1); + if (p1Param > param) { + lineClone.StartPoint = arcP1; + lineExtend = ExtendType.Start; + } + else { + lineClone.EndPoint = arcP1; + lineExtend = ExtendType.End; + } + //裁剪圆弧 + let arcParam = arc.GetParamAtPoint(arcP2); + let arcDerv = arc.GetFistDeriv(arcParam).normalize(); + let narcDerv = narc.GetFistDeriv(1).normalize(); + let arcExtend; + if (equalv3(arcDerv, narcDerv)) { + arcClone.StartPoint = arcP2; + arcExtend = ExtendType.Start; + } + else { + arcClone.EndPoint = arcP2; + arcExtend = ExtendType.End; + } + //先选直线为真 + if (enRes1.Entity === line) + return { + cu1: lineClone, + cu1Extend: lineExtend, + cu2: arcClone, + cu2Extend: arcExtend, + arc: narc + }; + else + return { + cu1: arcClone, + cu1Extend: arcExtend, + cu2: lineClone, + cu2Extend: lineExtend, + arc: narc.Reverse() //#I3BWIA 避免起点和终点方向相反导致的多段线连接错误 + }; + } + //获得两曲线的交点,并且排序交点. + GetIntersectAndSort(enRes, enRes2, enType, enMap) { + let interPts = enRes.Entity.IntersectWith(enRes2.Entity, IntersectOption.ExtendBoth); + if (interPts.length > 1) { + let baseP; + if (enType & 1) //如果有直线,那么用直线 + baseP = enMap[0][0].Point; + else if (enType === 2) //如果都是圆弧,那么取中点 + baseP = midPoint(enMap[1][0].Point, enMap[1][1].Point); + interPts.sort((p1, p2) => p1.distanceToSquared(baseP) - p2.distanceToSquared(baseP)); + } + return interPts; + } + /** + * 对图元列表进行按位编码,类型映射如下: + * # 1:line 2:arc 4:polyline + * @param enRes + * @param enRes2 + * @returns + */ + EnCode(enRes, enRes2) { + let enMap = [[], [], [], [], []]; + let enType = 0; + enType |= Encode(enRes, enMap); + enType |= Encode(enRes2, enMap); + return { enType, enMap }; + } + //计算曲线在相交处的切线,取真实的切线 + ComputerDerv(cuRes, dervSum) { + let derv; + let cu = cuRes.Curve; + if (cuRes.ExtType === ExtendType.Start) { + derv = cu.GetFistDeriv(0).normalize(); + dervSum.add(derv); + } + else { + derv = cu.GetFistDeriv(cu.EndParam).normalize(); + dervSum.add(derv.clone().negate()); + } + return derv; + } + // 计算曲线在相交处的切线,取起点到终点的切线.(当曲线相切时调用此方法.) + ComputerDerv2(cuRes, dervSum) { + let cu = cuRes.Curve; + let derv = cu.EndPoint.sub(cu.StartPoint); + if (cuRes.ExtType === ExtendType.Start) + dervSum.add(derv); + else + dervSum.add(derv.clone().negate()); + return derv; + } + // 延伸或者裁剪到指定的圆弧的点. + ExtendPt(cu, newP) { + if (cu.ExtType === ExtendType.Start) + cu.Curve.StartPoint = newP; + else + cu.Curve.EndPoint = newP; + } + /** + * 切割或者延伸曲线,尖角化 + * + * @param cu 处理的曲线 + * @param interPt 原先的相交点 + * @param pickPoint 鼠标点击点 + * @returns 返回新的曲线 + */ + SplitCurve(enRes, interPt, interPts) { + let cu = enRes.Entity; + let pickPoint = enRes.Point; + let cp = cu.GetClosestPointTo(pickPoint, false); + let cus = cu.GetSplitCurvesByPts([interPt]); + if (cus.length === 0) + cus.push(cu.Clone()); + else if (cus.length === 2) + cus.sort((c1, c2) => { + return c1.GetClosestPointTo(cp, false).distanceTo(cp) + < c2.GetClosestPointTo(cp, false).distanceTo(cp) ? -1 : 1; + }); + let exType = undefined; + let newCu = cus[0]; + if (newCu instanceof Line || newCu.constructor.name === "RoomWallLine") + newCu.Extend(newCu.GetParamAtPoint(interPt)); //延伸到需要的长度 + else if (newCu instanceof Arc || newCu.constructor.name === "RoomWallArc") { + let arc = newCu; + if (cus.length === 1) + if (!cu.PtOnCurve(interPt)) { + if (cu.PtOnCurve(interPts[1])) { + //交点参数 + let iparam = arc.GetParamAtPoint(interPts[1]); + let pickParam = arc.GetParamAtAngle(arc.GetAngleAtPoint(pickPoint)); + if (pickParam > iparam) { + arc.EndAngle = arc.GetAngleAtPoint(interPt); + exType = ExtendType.End; + } + else { + arc.StartAngle = arc.GetAngleAtPoint(interPt); + exType = ExtendType.Start; + } + } + else { + //终点,起点 + interPts = interPts.sort((p1, p2) => { + return arc.ComputeAnlge(arc.GetAngleAtPoint(p1)) - arc.ComputeAnlge(arc.GetAngleAtPoint(p2)); + }); + if (interPt === interPts[0]) { + arc.EndAngle = arc.GetAngleAtPoint(interPt); + exType = ExtendType.End; + } + else { + arc.StartAngle = arc.GetAngleAtPoint(interPt); + exType = ExtendType.Start; + } + } + } + } + if (exType === undefined) { + //使用equalv3时由于精度误差导致的判断错误 + if (interPt.manhattanDistanceTo(newCu.StartPoint) < interPt.manhattanDistanceTo(newCu.EndPoint)) + exType = ExtendType.Start; + else + exType = ExtendType.End; + } + return { Curve: newCu, ExtType: exType }; + } +} + +let TemplateFilletAction = class TemplateFilletAction extends TemplateAction { + constructor() { + super(); + this.FilletDatas = []; + } + _Update(paramDiff, newValue) { + for (let d of this.FilletDatas) { + if (d.Entity?.IsErase !== false) + continue; + let br = d.Entity.Object; + let update_bak = br.AutoUpdate; + br.AutoUpdate = false; + if (d.ArcParams.length > 0) + this.Fillet(br, newValue, d); + if (br.Grooves.length > 0 && d.Grooves?.length) { + for (let data of d.Grooves) { + const groove = br.Grooves[data.Index]; + if (groove) + this.Fillet(groove, newValue, data); + } + } + const path2d = br.Modeling2D; + if (path2d.length > 0 && d.Path2D?.length) { + for (let data of d.Path2D) { + let vm = path2d[data.Index]; + if (vm) { + this.Fillet(vm, newValue, data); + } + } + br._2D3DPathObject = null; + } + br.AutoUpdate = update_bak; + br.Update(UpdateDraw.Geometry); + } + } + Fillet(br, newValue, d) { + let cu = br instanceof ExtrudeSolid ? br.ContourCurve : br.path; + if (cu instanceof Circle) + return; + let fillet = new FilletUtils(); + fillet.FilletRadius = Math.max(newValue, 0.1); + let cuOld = cu; + for (let arcParam of d.ArcParams) { + let param1 = FixIndex$1(arcParam - 1, cu.EndParam); + let param2 = FixIndex$1(arcParam + 1, cu.EndParam); + let p1 = cu.GetPointAtParam(param1); + let p2 = cu.GetPointAtParam(param2); + let res1 = new PromptEntityResult(cu, p1); + let res2 = new PromptEntityResult(cu, p2); + let fres = fillet.FilletPolyLineSelf(res1, res2); + if (fres) + cu = fres.cu1; + } + if (br instanceof ExtrudeSolid) { + if (cu !== cuOld) + br.ContourCurve = cu; + } + else { + if (cu !== cuOld) + br.path = cu; + } + } + //#region -------------------------File------------------------- + //对象应该实现dataIn和DataOut的方法,为了对象的序列化和反序列化 + //对象从文件中读取数据,初始化自身 + ReadFile(file) { + let ver = file.Read(); + super.ReadFile(file); + this.FilletDatas.length = 0; + if (ver === 1) { + let id = file.ReadObjectId(); + let param1 = file.Read(); + let param2 = file.Read(); + let arcParam = param2 !== 0 ? param2 - 1 : param1 + 1; + this.FilletDatas.push({ Entity: id, ArcParams: [arcParam] }); + } + else { + let count = file.Read(); + for (let i = 0; i < count; i++) { + let id = file.ReadObjectId(); + let params = []; + let parCount = file.Read(); + for (let i = 0; i < parCount; i++) + params.push(file.Read()); + const groove = []; + const path2d = []; + if (ver >= 3) { + const grooveCount = file.Read(); + for (let i = 0; i < grooveCount; i++) { + let data = { + Index: undefined, + ArcParams: [], + }; + data.Index = file.Read(); + let parCount = file.Read(); + for (let j = 0; j < parCount; j++) + data.ArcParams.push(file.Read()); + groove.push(data); + } + const path2DCount = file.Read(); + for (let i = 0; i < path2DCount; i++) { + let data = { + Index: undefined, + ArcParams: [], + }; + data.Index = file.Read(); + let parCount = file.Read(); + for (let j = 0; j < parCount; j++) + data.ArcParams.push(file.Read()); + path2d.push(data); + } + } + if (id) + this.FilletDatas.push({ Entity: id, ArcParams: params, Grooves: groove, Path2D: path2d }); + } + } + } + //对象将自身数据写入到文件. + WriteFile(file) { + file.Write(3); + super.WriteFile(file); + file.Write(this.FilletDatas.length); + for (let d of this.FilletDatas) { + file.WriteObjectId(d.Entity); + file.Write(d.ArcParams.length); + for (let param of d.ArcParams) + file.Write(param); + file.Write(d.Grooves ? d.Grooves.length : 0); + for (let data of (d.Grooves ?? [])) { + file.Write(data.Index); + file.Write(data.ArcParams.length); + for (let par of data.ArcParams) + file.Write(par); + } + file.Write(d.Path2D ? d.Path2D.length : 0); + for (let data of (d.Path2D ?? [])) { + file.Write(data.Index); + file.Write(data.ArcParams.length); + for (let par of data.ArcParams) + file.Write(par); + } + } + } +}; +TemplateFilletAction = __decorate([ + Factory +], TemplateFilletAction); + +function ApplyGoodInfo(en, material) { + en.BoardProcessOption[EBoardKeyList.BrMat] = material.GoodsInfo.name; + en.BoardProcessOption[EBoardKeyList.Color] = material.GoodsInfo.color; + en.BoardProcessOption[EBoardKeyList.Mat] = material.GoodsInfo.material; +} + +let TemplateMaterialAction = class TemplateMaterialAction extends TemplateAction { + constructor(Entitys = [], CompositeEntitys = [], ApplyGoodInfo = true) { + super(); + this.Entitys = Entitys; + this.CompositeEntitys = CompositeEntitys; + this.ApplyGoodInfo = ApplyGoodInfo; + } + _Update(paramDiff) { + if (!this.parent.MaterialValue) + return; + for (let id of this.Entitys) { + if (!(id?.Object) || id.IsErase) + continue; + let en = id.Object; + if (this.ApplyGoodInfo && en instanceof Board) + ApplyGoodInfo(en, this.parent.MaterialValue); + en.Material = this.parent.MaterialValue.Id; + } + for (let [id, indexs] of this.CompositeEntitys) { + if (!(id?.Object) || id.IsErase) + continue; + let en = id.Object; + let allEntitys = []; + const GetAllEntitys = (hard) => { + for (let e of hard.Entitys) { + if (e instanceof HardwareCompositeEntity) + GetAllEntitys(e); + else + allEntitys.push(e); + } + }; + GetAllEntitys(en); + for (let index of indexs) { + let subE = allEntitys[index]; + if (!subE) + continue; + if (this.ApplyGoodInfo && subE instanceof Board) + ApplyGoodInfo(subE, this.parent.MaterialValue); + subE.Material = this.parent.MaterialValue.Id; + } + } + } + //#region -------------------------File------------------------- + //对象应该实现dataIn和DataOut的方法,为了对象的序列化和反序列化 + //对象从文件中读取数据,初始化自身 + ReadFile(file) { + let ver = file.Read(); + super.ReadFile(file); + this.ApplyGoodInfo = file.Read() === 1; + this.Entitys.length = 0; + let count = file.Read(); + for (let i = 0; i < count; i++) { + let id = file.ReadObjectId(); + if (id) + this.Entitys.push(id); + } + if (ver > 1) { + count = file.Read(); + this.CompositeEntitys.length = 0; + for (let i = 0; i < count; i++) { + let id = file.ReadObjectId(); + let indexs = file.Read(); + this.CompositeEntitys.push([id, indexs]); + } + } + } + //对象将自身数据写入到文件. + WriteFile(file) { + file.Write(2); + super.WriteFile(file); + file.Write(this.ApplyGoodInfo ? 1 : 0); + file.Write(this.Entitys.length); + for (let ent of this.Entitys) + file.WriteObjectId(ent); + file.Write(this.CompositeEntitys.length); + for (let [id, indexs] of this.CompositeEntitys) { + file.WriteObjectId(id); + file.Write(indexs.concat()); + } + } +}; +TemplateMaterialAction = __decorate([ + Factory +], TemplateMaterialAction); + +/** + * 模版参数类型 + */ +var TemplateParamType; +(function (TemplateParamType) { + TemplateParamType[TemplateParamType["String"] = 0] = "String"; + TemplateParamType[TemplateParamType["Float"] = 1] = "Float"; + TemplateParamType[TemplateParamType["Int"] = 2] = "Int"; + TemplateParamType[TemplateParamType["Enum"] = 3] = "Enum"; + TemplateParamType[TemplateParamType["Material"] = 4] = "Material"; +})(TemplateParamType || (TemplateParamType = {})); + +/** + * 模版参数 + */ +let TemplateParam = class TemplateParam { + constructor() { + /** 表达式 使用js引起求值(暂时) */ + this.expr = ""; + this.type = TemplateParamType.Float; + this.isLock = false; + //监听 + this.actions = new Proxy([], { + set: (target, key, value, receiver) => { + if (Reflect.get(target, key, receiver) !== value) { + this.WriteAllObjectRecord(); + if (value instanceof TemplateAction) + value.parent = this; + } + return Reflect.set(target, key, value, receiver); + }, + get: (target, key, receiver) => { + if (key === ISPROXYKEY) + return true; + else + return Reflect.get(target, key, receiver); + } + }); + } + WriteAllObjectRecord() { + if (this.parent) + this.parent.WriteAllObjectRecord(); + } + /** + * private:仅供内部调用. + * 更新参数值,并且触发动作. + */ + UpdateParam(value) { + switch (this.type) { + case TemplateParamType.String: + break; + case TemplateParamType.Float: + let oldV = this.value; + let newV = value; + if (!equaln$1(oldV, newV)) { + this.WriteAllObjectRecord(); + this.value = newV; + let diff = newV - oldV; + for (let a of this.actions) + a.Update(diff, newV); + } + else { + for (let a of this.actions) { + if (a instanceof TemplateFilletAction) + a.Update(0, newV); + } + } + break; + case TemplateParamType.Int: + break; + case TemplateParamType.Enum: + break; + case TemplateParamType.Material: + { + if (this.MaterialValue) { + for (let a of this.actions) + a.Update(0, 0); + } + this.MaterialValue = undefined; + break; + } + } + } + /** + * 计算表达式的值并更新 + * @param vardefines 变量定义列表 + * @param paramMap 所有的参数列表.(可能我们需要依赖更新它) + */ + EvalUpdate(vardefines, paramMap, evaled, update = true) { + if (this.type === TemplateParamType.Material) { + if (update && this.MaterialValue) { + for (let a of this.actions) { + if (a instanceof TemplateMaterialAction) + a.Update(0, this.value); + } + this.MaterialValue = undefined; + } + return 0; + } + if (this.expr === "") { + if (update) { + for (let a of this.actions) { + if (a instanceof TemplateFilletAction) + a.Update(0, this.value); + } + } + return this.value; + } + if (evaled.has(this)) + return this.value; + if (update) + evaled.add(this); + let value = parseFloat(this.expr); + if (isNaN(this.expr)) { + //依赖收集 提前更新 + let keywords = this.expr.split(/[\s(){}=+-/*/,%;]/).filter(s => s.length > 0); + for (let key of keywords) { + if (key !== this.name && paramMap.has(key)) + vardefines[key] = paramMap.get(key).EvalUpdate(vardefines, paramMap, evaled, update); + } + try { + value = eval2(this.expr, vardefines); + } + catch (error) { + console.log("更新失败:", error); + return this.value; + } + } + else if (update) + this.expr = ""; + vardefines[this.name] = value; + if (update) + this.UpdateParam(value); + return value; + } + //#region -------------------------File------------------------- + //对象应该实现dataIn和DataOut的方法,为了对象的序列化和反序列化 + //对象从文件中读取数据,初始化自身 + ReadFile(file) { + let ver = file.Read(); + this.name = file.Read(); + this.expr = file.Read(); + this.value = file.Read(); + this.default = file.Read(); + this.description = file.Read(); + this.type = file.Read(); + this.min = file.Read(); + this.max = file.Read(); + this.option = file.Read(); + let count = file.Read(); + this.actions.length = 0; + for (let i = 0; i < count; i++) + this.actions.push(file.ReadObject()); + if (ver > 1) + this.isLock = file.Read(); + } + //对象将自身数据写入到文件. + WriteFile(file) { + file.Write(2); + file.Write(this.name); + file.Write(this.expr); + file.Write(this.value); + file.Write(this.default); + file.Write(this.description); + file.Write(this.type); + file.Write(this.min); + file.Write(this.max); + file.Write(this.option); + file.Write(this.actions.length); + for (let action of this.actions) + file.WriteObject(action); + file.Write(this.isLock); + } +}; +__decorate([ + AutoRecord +], TemplateParam.prototype, "name", void 0); +__decorate([ + AutoRecord +], TemplateParam.prototype, "expr", void 0); +__decorate([ + AutoRecord +], TemplateParam.prototype, "value", void 0); +__decorate([ + AutoRecord +], TemplateParam.prototype, "default", void 0); +__decorate([ + AutoRecord +], TemplateParam.prototype, "description", void 0); +__decorate([ + AutoRecord +], TemplateParam.prototype, "type", void 0); +__decorate([ + AutoRecord +], TemplateParam.prototype, "min", void 0); +__decorate([ + AutoRecord +], TemplateParam.prototype, "max", void 0); +__decorate([ + AutoRecord +], TemplateParam.prototype, "option", void 0); +__decorate([ + AutoRecord +], TemplateParam.prototype, "actions", void 0); +__decorate([ + AutoRecord +], TemplateParam.prototype, "parent", void 0); +__decorate([ + AutoRecord +], TemplateParam.prototype, "isLock", void 0); +TemplateParam = __decorate([ + Factory +], TemplateParam); + +/** + * 夹层空间分析 + */ +class ClampSpaceParse extends ISpaceParse { + constructor() { + super(...arguments); + this.SelectBoxRecord = new Map(); + } + async Parse() { + if (this.Boards.length === 1) { + await this.ParseSignalBoard(); + return; + } + //夹层空间 + let clampBoxs = []; + //单层空间(用于切割) + let spliteBoxs = new Map(); + for (let [boardType, boards] of this.BoardMap) { + let splitType = ConverBoardTypeToSpaceType(boardType); + let boardBoxCol = this.ParseBoardBox(boards, splitType); + //#IWFYY + if (boardType === BoardType.Behind && this.BoardMap.size > 1 && boardBoxCol.length > 1) { + let clampBox = boardBoxCol[0].clampSpace(boardBoxCol[1], splitType); + let size = clampBox.getSize(new Vector3()); + if (size.y > 2440) + boardBoxCol = [arrayLast(boardBoxCol)]; + } + if (boardBoxCol.length > 1) { + let clampBox = boardBoxCol[0].clampSpace(arrayLast(boardBoxCol), splitType); + if (clampBox.isSolid()) + clampBoxs.push(clampBox); + } + else if (boardBoxCol.length === 1) { + spliteBoxs.set(splitType, boardBoxCol[0]); + } + } + //归并盒子 + let allSpaceBox; + if (clampBoxs.length === 0) //如果不存在盒子,拿所有的盒子当空间 + { + allSpaceBox = new Box3Ext(); + spliteBoxs.forEach((box) => { allSpaceBox.union(box); }); + } + else //夹层空间合并 + { + allSpaceBox = clampBoxs[0]; + for (let i = 1, len = clampBoxs.length; i < len; i++) + allSpaceBox.intersect(clampBoxs[i]); + } + //切割并选择合适的空间 + await this.SpliteBoxsAndSelect(allSpaceBox, spliteBoxs); + if (this.SpaceBox && this.SpaceBox.isSolid()) { + //空间延伸到背板 + let behindBox = spliteBoxs.get(SplitType.Y); + if (behindBox && behindBox.min.y > this.SpaceBox.min.y) + this.SpaceBox.max.setY(behindBox.min.y); + this.ParseOK = true; + } + } + /** + * 单板延伸空间的时候的延伸距离 + */ + get SignalDist() { + return this._signalDist; + } + async ParseSignalBoard() { + let res = await this.GetSignalDist(); + if (res.Status === PromptStatus.OK && res.Distance > 0) { + let dist = res.Distance; + this._signalDist = dist; + let br = this.Boards[0]; + let box = br.GetBoundingBoxInMtx(this.SpaceOCSInv); + let type = this.GetBoardInSpaceType(br); + if (type === undefined) //暂时不支持斜空间 + { + //暂时不支持 + this.ParseOK = false; + return; + } + let splitType = ConverBoardTypeToSpaceType(type); + let p1 = box.min.clone().setComponent(splitType, box.min.getComponent(splitType) - dist); + let p2 = box.max.clone().setComponent(splitType, box.min.getComponent(splitType)); + let p3 = box.min.clone().setComponent(splitType, box.max.getComponent(splitType)); + let p4 = box.max.clone().setComponent(splitType, box.max.getComponent(splitType) + dist); + let boxs = [new Box3Ext().setFromPoints([p1, p2]), new Box3Ext().setFromPoints([p3, p4])]; + this.SpaceBox = await this.WrapSelectBox(boxs, ConverBoardTypeToSpaceType(br.BoardType)); + if (this.SpaceBox) + this.ParseOK = true; + } + else + this.ParseOK = false; + } + //virtual (请重载) 指定用户选择单块板的延伸空间 + async GetSignalDist() { + let res = new PromptDistendResult(); + res.Distance = 300; + res.Status = PromptStatus.OK; + return res; + } + SetRay(ray) { + } + async WrapSelectBox(splitBoxs, splitType) { + let box = await this.SelectBox(splitBoxs, splitType); + this.SelectBoxRecord.set(splitType, splitBoxs.indexOf(box)); + return box; + } + /** + * virtual (请重载) 当盒子空间被切割时,选择合适的空间 + * @param splitBoxs 切割后的盒子(2个) + * @param splitType 切割类型 + * @returns box 盒子 + */ + async SelectBox(splitBoxs, splitType) { + return splitBoxs[0]; + } + /** + *用单块板包围盒切割空间 + */ + async SpliteBoxsAndSelect(orgBox, spliteBoxes) { + this.SpaceBox = undefined; + if (spliteBoxes.size === 0) { + this.SpaceBox = orgBox; + return; + } + for (let [splitType, spBox] of spliteBoxes) { + let remBoxs = orgBox.substract(spBox, splitType); + if (remBoxs.length === 0) + return undefined; + else if (remBoxs.length === 1) { + //#IZE2N + if (splitType === SplitType.Y && remBoxs[0].min.y === orgBox.min.y) + continue; + orgBox = remBoxs[0]; + } + else + orgBox = await this.WrapSelectBox(remBoxs, splitType); + if (!orgBox) + return; + //Left Or Right Board + if (splitType === SplitType.X) { + if (spBox.min.x < orgBox.min.x) + this.LeftBoard = this.BoardMap.get(BoardType.Vertical)[0]; + else + this.RightBoard = this.BoardMap.get(BoardType.Vertical)[0]; + } + } + this.SpaceBox = orgBox; + } +} + +class ClampSpaceParseFix extends ClampSpaceParse { + set SignalDist(v) { + this._signalDist = v; + } + get SignalDist() { + return this._signalDist; + } + //virtual (请重载) 指定用户选择单块板的延伸空间 + async GetSignalDist() { + let res = new PromptDistendResult(); + res.Distance = this._signalDist; + res.Status = PromptStatus.OK; + return res; + } + async SelectBox(splitBoxs, splitType) { + let index = this.SelectBoxRecord.get(splitType); + return splitBoxs[index]; + } +} + +/** + * 模版定位信息(基类) + */ +let Positioning = class Positioning { + /** + * 定位 (更新 SpaceCS SpaceBox SpaceSize) + */ + async Positioning(param) { + } + WriteAllObjectRecord() { + if (this.parent) + this.parent.WriteAllObjectRecord(); + } + ReadFile(file) { + } + WriteFile(file) { + } +}; +Positioning = __decorate([ + Factory +], Positioning); + +let PositioningClampSpace = class PositioningClampSpace extends Positioning { + constructor() { + super(...arguments); + this.Objects = []; + //按照 SplitType进行排序 0X 1Y 2Z + this.SelectBoxIndex = [0, 0, 0]; //左右下 + this.SignalDist = 100; //默认为100 防止空 + //#endregion + } + FromSpaceParse(parse) { + this.SignalDist = parse.SignalDist || 100; + this.Objects = parse.Boards.map(br => br.Id); + for (let [splitType, index] of parse.SelectBoxRecord) + this.SelectBoxIndex[splitType] = index; + } + /** + * 定位 + */ + async Positioning(param) { + let brs = this.Objects.filter(id => !id.IsErase).map(id => id.Object); + this._SpaceParse = new ClampSpaceParseFix(brs); + for (let i = 0; i < 3; i++) + this._SpaceParse.SelectBoxRecord.set(i, this.SelectBoxIndex[i]); + this._SpaceParse.SignalDist = this.SignalDist; + await this._SpaceParse.Parse(); + if (this._SpaceParse.ParseOK) { + this.SpaceCS = this._SpaceParse.DrawCS; + this.SpaceSize = this._SpaceParse.Size; + } + else { + this.SpaceCS = undefined; + this.SpaceSize = undefined; + // Log("模块定位错误!"); + } + } + //#region File + ReadFile(file) { + file.Read(); + let count = file.Read(); + this.Objects.length = 0; + for (let i = 0; i < count; i++) { + let id = file.ReadObjectId(); + if (id) + this.Objects.push(id); + } + this.SelectBoxIndex = file.Read(); + this.SignalDist = file.Read(); + } + WriteFile(file) { + file.Write(1); + file.Write(this.Objects.length); + for (let id of this.Objects) + file.WriteObjectId(id); + file.Write(arrayClone(this.SelectBoxIndex)); + file.Write(this.SignalDist); + } +}; +__decorate([ + AutoRecord +], PositioningClampSpace.prototype, "Objects", void 0); +__decorate([ + AutoRecord +], PositioningClampSpace.prototype, "SelectBoxIndex", void 0); +__decorate([ + AutoRecord +], PositioningClampSpace.prototype, "SignalDist", void 0); +PositioningClampSpace = __decorate([ + Factory +], PositioningClampSpace); + +/** + * 临时定位 + * 在首次绘制时使用2点3点空间时通常不能使用定位,使用临时定位设置给模块后,模块在第一次使用后清空定位. + */ +let PositioningTemporary = class PositioningTemporary extends Positioning { +}; +PositioningTemporary = __decorate([ + Factory +], PositioningTemporary); + +/** + * 模版类型 + */ +var TemplateType; +(function (TemplateType) { + //普通模板 + TemplateType[TemplateType["Usual"] = 0] = "Usual"; + //酒格 使用程序 + TemplateType[TemplateType["Grid"] = 1] = "Grid"; + //阵列模版 + TemplateType[TemplateType["Array"] = 2] = "Array"; + //没有实体的 + TemplateType[TemplateType["Clear"] = 4] = "Clear"; + //展开的 + TemplateType[TemplateType["Expanded"] = 8] = "Expanded"; + //隐藏的 + TemplateType[TemplateType["Hidden"] = 16] = "Hidden"; + TemplateType[TemplateType["HiddenChildren"] = 32] = "HiddenChildren"; + //标记 + TemplateType[TemplateType["Sign"] = 64] = "Sign"; + //以下未启用 + TemplateType[TemplateType["Door"] = 128] = "Door"; + TemplateType[TemplateType["Drawer"] = 256] = "Drawer"; + TemplateType[TemplateType["Handle"] = 512] = "Handle"; + TemplateType[TemplateType["Hinge"] = 1024] = "Hinge"; +})(TemplateType || (TemplateType = {})); +//以下未启用 +var TemplateType2; +(function (TemplateType2) { + TemplateType2[TemplateType2["Usual"] = 0] = "Usual"; + TemplateType2[TemplateType2["Door"] = 1] = "Door"; + TemplateType2[TemplateType2["Drawer"] = 2] = "Drawer"; + TemplateType2[TemplateType2["Handle"] = 3] = "Handle"; + TemplateType2[TemplateType2["Hinge"] = 4] = "Hinge"; + TemplateType2[TemplateType2["WineRack"] = 5] = "WineRack"; + TemplateType2[TemplateType2["Grid"] = 6] = "Grid"; +})(TemplateType2 || (TemplateType2 = {})); +var TemplateSplitType; +(function (TemplateSplitType) { + TemplateSplitType[TemplateSplitType["None"] = -1] = "None"; + TemplateSplitType[TemplateSplitType["X"] = 0] = "X"; + TemplateSplitType[TemplateSplitType["Y"] = 1] = "Y"; + TemplateSplitType[TemplateSplitType["Z"] = 2] = "Z"; +})(TemplateSplitType || (TemplateSplitType = {})); + +var TemplateRecord_1; +const TemplateDefaultParams = ["L", "W", "H", "PX", "PY", "PZ", "RX", "RY", "RZ", "BH"]; +const TempateDefaultParamCount = TemplateDefaultParams.length; +/** + * ### 模板记录 + * 模版与实体总是互相关联的,所以添加实体进入模版的时候,应该保证这个记录已经加入到数据库 + * + * 保留参数名称列表: L W H RX RY RZ X Y Z + * 保留参数前缀: _ $ + * + * #### 批量修改参数值. + * 程序应该只传入expr的值,(禁止直接编辑value).传入后,交由模版进行计算更新. + * 模版内部消化,决定是否保留expr.(当纯数字将被直接计算成value而不保存expr). + * + * 由于`DIV`变量的计算机制,`LWH`变量将不能依赖同层变量,(这可能会导致一些错误) + * + * 当模块节点处于切割空间内时,如果想重新绑定空间,那么空间树的位置将发生变更(实际上不管是不是在切割空间内,空间位置都可能发生变更) + * + */ +let TemplateRecord = TemplateRecord_1 = class TemplateRecord extends SymbolTableRecord { + constructor() { + super(); + this.Type = TemplateType.Usual; + this.SplitType = TemplateSplitType.None; + //展开的 这是UI数据我们暂时不序列化它(默认不展开有比较好的显示效果) + this.isExpanded = false; + //监听 + this.Params = this.CreateProxyArray(value => { + if (value instanceof TemplateParam) + value.parent = this; + }); + this.Objects = this.CreateProxyArray(value => { + if (value instanceof ObjectId && value.Object instanceof Entity) { + if (!this.Id) + console.warn("请先将模版添加到Database后在进行操作!"); + value.Object.Template = this.Id; + } + }); + this.Children = this.CreateProxyArray(value => { + if (value instanceof ObjectId && value.Object instanceof TemplateRecord_1) { + if (!this.Id) + console.warn("请先将模版添加到Database后在进行操作!"); + value.Object.Parent = this.Id; + } + }); + } + get Name() { + return this.name; + } + set Name(name) { + if (name !== this.name) { + this.WriteAllObjectRecord(); + this.name = name; + } + } + get Parent() { + return this._Parent; + } + set Parent(id) { + if (id !== this._Parent) { + this.WriteAllObjectRecord(); + if (this?._Parent?.Object) + arrayRemoveOnce((this.Parent.Object).Children, this.Id); + this._Parent = id; + } + } + get Root() { + return this.Parent?.Object?.Root ?? this; + } + get IsRoot() { + return this._Parent === undefined; + } + get Entitys() { + return this.Objects.map(o => o.Object); + } + get AllEntitys() { + let entitys = []; + this.Traverse((t) => { + for (let o of t.Objects) { + if (!o.IsErase) + entitys.push(o.Object); + } + }); + return entitys; + } + GetProperty(p) { return (this.Type & p) !== 0; } + SetProperty(p, v) { + if (this.GetProperty(p) === v) + return; + if (v) + this.Type |= p; + else + this.Type &= ~p; + } + get IsClear() { return this.GetProperty(TemplateType.Clear); } + set IsClear(isClear) { this.SetProperty(TemplateType.Clear, isClear); } + get IsSign() { return this.GetProperty(TemplateType.Sign); } + set IsSign(isSign) { this.SetProperty(TemplateType.Sign, isSign); } + get IsHidden() { return this.GetProperty(TemplateType.Hidden); } + set IsHidden(isHidden) { this.SetProperty(TemplateType.Hidden, isHidden); } + get IsHiddenChildren() { return this.GetProperty(TemplateType.HiddenChildren); } + set IsHiddenChildren(isHidden) { this.SetProperty(TemplateType.HiddenChildren, isHidden); } + Purge() { + this.Children = this.Children.filter(rc => rc && !rc.IsErase && rc.Object instanceof TemplateRecord_1); + this.Objects = this.Objects.filter(id => id?.IsErase === false); + } + Traverse(callback) { + callback(this); + for (let c of this.Children) { + if (c && c.Object) { + if (c.Object instanceof TemplateRecord_1) { + let template = c.Object; + template.Traverse(callback); + } + else { + Toaster({ + message: "模块子实体有个错误,程序已经暂时先忽略了这个错误!", + timeout: 8000, + intent: Intent.DANGER, + }); + } + } + } + } + async TraverseAsync(callback) { + await callback(this); + for (let c of this.Children) { + if (c && c.Object) { + let template = c.Object; + await template.TraverseAsync(callback); + } + } + } + /** 节点深度,根节点=0 */ + get NodeDepth() { + if (this._NodeDepthCache !== undefined) + return this._NodeDepthCache; + if (!this.Parent?.Object) + return 0; + let parentTemplate = this.Parent.Object; + this._NodeDepthCache = parentTemplate.NodeDepth + 1; + return this._NodeDepthCache; + } + /** 模版定位 */ + get Positioning() { + if (this._Positioning) + return this._Positioning; + let spaceCS = this.GetTemplateRealitySpaceCS(); + let positioning = new PositioningTemporary(); + positioning.SpaceCS = spaceCS; + positioning.SpaceSize = new Vector3(this.LParam.value, this.WParam.value, this.HParam.value); + return positioning; + } + /** + * 当存在夹层空间定位时,辅助定位表达式将使用夹层空间作为相对空间. + */ + set Positioning(p) { + this.WriteAllObjectRecord(); + if (p) + p.parent = this; + this._Positioning = p; + } + //#region param + /** 初始化基础参数 */ + InitBaseParams() { + for (let paramName of TemplateDefaultParams) { + let value = 0; + let param = new TemplateParam(); + param.name = paramName; + param.type = TemplateParamType.Float; + param.value = value; + this.Params.push(param); + } + this.LParam.description = "宽"; + this.WParam.description = "深"; + this.HParam.description = "高"; + this.Params[9].description = "板厚"; + this.Params[9].value = 18; + return this; + } + get LParam() { return this.Params[0]; } + get WParam() { return this.Params[1]; } + get HParam() { return this.Params[2]; } + get PXParam() { return this.Params[3]; } + get PYParam() { return this.Params[4]; } + get PZParam() { return this.Params[5]; } + get RXParam() { return this.Params[6]; } + get RYParam() { return this.Params[7]; } + get RZParam() { return this.Params[8]; } + GetParam(paramName) { + return this.Params.find(param => param.name === paramName); + } + SetParamExpr(paramName, expr) { + let param = this.GetParam(paramName); + if (param) + param.expr = expr; + } + DeleteParam(paramName) { + let index = this.Params.findIndex(p => p.name === paramName); + if (index !== -1 && index >= TempateDefaultParamCount) //LWH P R 禁止删除 + this.Params.splice(index, 1); + return this; + } + //#endregion param + /** + * 通常UI操作的时候,都需要更新整个树,所以隐藏这个API. + * see `UpdateTemplateTree` + * + * 更新当前节点 + * + * ### 定位 (大小,方位) + * + * - (放弃)如果当前节点是更新树的最高层(但当前节点不是根节点) + * 那么当存在夹层空间定位的时候,可以不重复进行夹层空间定位,因为此时该空间不会发生变化. + * 补充:如果夹层空间的板件都在上层,那么可以做这个优化,如果定位的板件没在模块中,那么不能进行这个优化. + * + * - [更新优先]在没有实现变量依赖收集(类似mobx)时,我们认为`positioning`的优先级最高. + * 所以`positioning`会被优先更新. `LWH`,`XYZ`. + * + * - 在使用变量定位时,需要传入上层的坐标系,以便进行相对定位. + * 使用空间分析时,已经不需要上层坐标系. + * + * - 辅助定位:帮助空间坐标系进行旋转 + * 辅助定位的参数变量将暴露出来.{RX RY RZ} + * 辅助定位作为参数变量时,用户使用值时很难正确的计算值,应~加入交互选择.(辅助计算) + * + * ### 变量表达式计算 + * + * - `LWH`将被`positioning`替代,但变量定义仍然正常存在. + * + * - 变量大部分时候都是被批量更新,(同时传入许多参数). + * + */ + async Update() { + this._CacheParamVars = this.GetParameterDefinition(false); + let ens = this.Objects.filter(id => !id.IsErase).map(id => id.Object); + let evaled = new Set(); + this._CacheSpaceCS = this.GetTemplateSpaceCS(false); + let paramMap = new Map(); + for (let param of this.Params) + paramMap.set(param.name, param); + if (this._Positioning) { + await this._Positioning.Positioning(); + if (!this._Positioning.SpaceCS) { + //退化成个体坐标系 + if (ens.length) { + this._Positioning.SpaceCS = ens[0].SpaceOCS; + this._Positioning.SpaceSize = new Vector3(this.LParam.value, this.WParam.value, this.HParam.value); + } + else { + Log(`模块:(${this.name})定位错误!`); + return; //出事故 + } + } + } + for (let en of ens) { + en.ApplyMatrix(en.SpaceOCSInv); + if (en instanceof Board) + en.IsLazyGrooveCheck = true; + } + //#region 1.定位(坐标系和大小) + /** + * LWH在存在定位空间和继承空间时的表达式行为不一致. + * - 在存在定位空间的时候,LWH是修改定位空间旋转后的值. + * - 不存在定位空间的时候,修改的是空间旋转前的值,因为此时已经没有空间尺寸可供旋转了, + * 只能先提供空间尺寸,然后才进行旋转. + */ + if (this._Positioning) { + this._CacheSpaceCS = this._Positioning.SpaceCS; + this._CacheSpaceSize = this._Positioning.SpaceSize; + this.RotateSpaceCS(paramMap, evaled); + if (this.LParam.expr) + this._CacheSpaceSize.x = this.LParam.EvalUpdate(this._CacheParamVars, paramMap, evaled, false); + if (this.WParam.expr) + this._CacheSpaceSize.y = this.WParam.EvalUpdate(this._CacheParamVars, paramMap, evaled, false); + if (this.HParam.expr) + this._CacheSpaceSize.z = this.HParam.EvalUpdate(this._CacheParamVars, paramMap, evaled, false); + if (this._Positioning instanceof PositioningTemporary) + this._Positioning = undefined; + } + else { + let l = this.LParam.EvalUpdate(this._CacheParamVars, paramMap, evaled, false); + let w = this.WParam.EvalUpdate(this._CacheParamVars, paramMap, evaled, false); + let h = this.HParam.EvalUpdate(this._CacheParamVars, paramMap, evaled, false); + this._CacheSpaceSize = new Vector3(l, w, h); + this.RotateSpaceCS(paramMap, evaled); + if (!this.Parent) { + this.PXParam.value = 0; + this.PYParam.value = 0; + this.PZParam.value = 0; + this.PXParam.expr = ""; + this.PYParam.expr = ""; + this.PZParam.expr = ""; + this.RXParam.value = 0; + this.RYParam.value = 0; + this.RZParam.value = 0; + this.RXParam.expr = ""; + this.RYParam.expr = ""; + this.RZParam.expr = ""; + } + } + //相对定位. use PX PY PZ + this.UpdatePosition(paramMap, evaled); + //更新LWH(通过定位空间) + this.LParam.UpdateParam(this._CacheSpaceSize.x); + this.WParam.UpdateParam(this._CacheSpaceSize.y); + this.HParam.UpdateParam(this._CacheSpaceSize.z); + evaled.add(this.LParam); + evaled.add(this.WParam); + evaled.add(this.HParam); + //#endregion + //更新其他参数变量 Eval local params + for (const param of this.Params) { + param.EvalUpdate(this._CacheParamVars, paramMap, evaled); + } + //删除材质变量(材质变量仅在KJL导入中使用,重新出现在右侧列表中是不明智的?) (但是用户可能编辑更新了它?) + // arrayRemoveIf(this.Params, p => p.type === TemplateParamType.Material); + //变换到新的模版空间 + for (let en of ens) { + en.ApplyMatrix(this._CacheSpaceCS); + if (en instanceof Board) + en.LazyGrooveCheckAll(); + } + //更新顶层变量值 + if (!this.Parent) { + for (const param of this.Params) + this._CacheParamVars[`$${param.name}`] = param.value; + } + else { + for (let param of this._CatchRootParam) + this._CacheParamVars[`$${param.name}`] = param.value; + } + //保持SpaceCS + for (let ent of ens) { + ent.SpaceOCS = this._CacheSpaceCS; + } + } + /** + * 使用PXPYPZ更新空间位置 + */ + UpdatePosition(paramMap, evaled) { + let x = this.PXParam.EvalUpdate(this._CacheParamVars, paramMap, evaled, false); + let y = this.PYParam.EvalUpdate(this._CacheParamVars, paramMap, evaled, false); + let z = this.PZParam.EvalUpdate(this._CacheParamVars, paramMap, evaled, false); + if (x !== 0 || y !== 0 || z !== 0) { + this.PXParam.value = x; + this.PYParam.value = y; + this.PZParam.value = z; + let baseP = new Vector3(x, y, z); + baseP.applyMatrix4(this._CacheSpaceCS); + this._CacheSpaceCS.setPosition(baseP); + } + } + /** + * 旋转空间定位,如果旋转成功,那么SpaceSize和SpaceCS都可能被更新 + */ + RotateSpaceCS(paramMap, evaled) { + this.RXParam.EvalUpdate(this._CacheParamVars, paramMap, evaled); + this.RYParam.EvalUpdate(this._CacheParamVars, paramMap, evaled); + this.RZParam.EvalUpdate(this._CacheParamVars, paramMap, evaled); + //use RX RY RZ + let rx = MathUtils.degToRad(this.RXParam.value); + let ry = MathUtils.degToRad(this.RYParam.value); + let rz = MathUtils.degToRad(this.RZParam.value); + if (rx !== 0 || ry !== 0 || rz !== 0) { + let mrx = new Matrix4().makeRotationX(rx); + let mry = new Matrix4().makeRotationY(ry); + let mrz = new Matrix4().makeRotationZ(rz); + let mro = mrz.multiply(mry.multiply(mrx)); + let roSpace = mro.multiplyMatrices(this._CacheSpaceCS, mro); + let roSpaceInv = mrx.getInverse(roSpace); //变量复用 + let transfromToRoSpace = roSpaceInv.multiply(this._CacheSpaceCS); + let box = new Box3(new Vector3(), this._CacheSpaceSize.clone()); + box.applyMatrix4(transfromToRoSpace); + box.getSize(this._CacheSpaceSize); + let baseP = box.min.clone().applyMatrix4(roSpace); + roSpace.setPosition(baseP); + //更新LWH(通过定位空间) + this.LParam.UpdateParam(this._CacheSpaceSize.x); + this.WParam.UpdateParam(this._CacheSpaceSize.y); + this.HParam.UpdateParam(this._CacheSpaceSize.z); + this._CacheSpaceCS = roSpace; + } + this._CacheParamVars["L"] = this._CacheSpaceSize.x; + this._CacheParamVars["W"] = this._CacheSpaceSize.y; + this._CacheParamVars["H"] = this._CacheSpaceSize.z; + } + /** 以广度搜索优先更新节点树 */ + async UpdateTemplateTree() { + if (this.Parent && !this.Parent.IsErase) { + let parent = this.Parent.Object; + if (parent.SplitType !== TemplateSplitType.None || this.NeedUpdateParent) + return await parent.UpdateTemplateTree(); + } + let stack = [this]; + await this.Update(); + while (stack.length > 0) { + let template = stack.shift(); + //清理历史记录时,子对象会被清理,为了防止被清理掉,清除不需要的id + template.Children = template.Children.filter(id => id && !id.IsErase); + //计算DIV(给子空间使用) + if (template.Children.length > 0 && template.SplitType !== TemplateSplitType.None) { + let sum = 0; //除去div时,总共占用的空间 + for (let c of template.Children) { + let ctemplate = c.Object; + let vardefines = ctemplate.GetParameterDefinition(false); + vardefines._DIV = 0; + let param = ctemplate.Params[template.SplitType]; + sum += param.EvalUpdate(vardefines, new Map(), new Set(), false); + } + let sumDiv = 0; //div=1时占用的空间 + for (let c of template.Children) { + let ctemplate = c.Object; + let vardefines = ctemplate.GetParameterDefinition(false); + vardefines._DIV = 1; + let param = ctemplate.Params[template.SplitType]; + sumDiv += param.EvalUpdate(vardefines, new Map(), new Set(), false); + } + let divCount = sumDiv - sum; + if (divCount > 0) { + //div可用总空间 + let divSum = (template.Params[template.SplitType].value - sum); + if (divSum > 0) + template._CacheParamVars.DIV = divSum / divCount; + else + template._CacheParamVars.DIV = 0; + } + template._CacheParamVars.POS = 0; + } + for (let c of template.Children) { + let ctemplate = c.Object; + stack.push(ctemplate); + await ctemplate.Update(); + if (template._CacheParamVars.POS !== undefined) //更新POS + template._CacheParamVars.POS += ctemplate.Params[template.SplitType].value; + } + } + } + /** + * 本节点可用的所有变量定义.(包括变量继承) + * @param [useCache=true] 当更新当前节点的时候,我们不希望使用缓存,(因为父节点的参数可能已经被更新) + * @returns + */ + GetParameterDefinition(useCache = true) { + if (this._CacheParamVars && useCache) + return this._CacheParamVars; + let vars = this.GetParentParams(); + this._CatchRootParam = new Set(); + for (const param of this.Params) { + vars[param.name] = param.value; + let rootParamName = "$" + param.name; + if (!this.Parent) + vars[rootParamName] = param.value; //root + else if (!(rootParamName in vars)) { + this._CatchRootParam.add(param); + vars[rootParamName] = param.value; //顶层变量捕获 root + } + } + this._CacheParamVars = vars; + return vars; + } + /** + * 变量继承 + * - 每继承一层,前缀增加一个`_` + * - 顶层前缀`$` + * + * @returns 继承于父空间的变量定义列表 + */ + GetParentParams() { + if (!this.Parent?.Object) + return {}; + let parent = this.Parent.Object; + let params = parent.GetParameterDefinition(); + let newParams = {}; + for (let key in params) { + if (key[0] !== "$") + newParams["_" + key] = params[key]; + else + newParams[key] = params[key]; + } + if (newParams._DIV === undefined && parent.SplitType !== TemplateSplitType.None) + newParams._DIV = 1; + if (newParams._POS === undefined) + newParams._POS = 0; + return newParams; + } + get SpaceParse() { + let spaceParse; + if (this._Positioning && this._Positioning instanceof PositioningClampSpace) + spaceParse = this._Positioning._SpaceParse; + else + spaceParse = new ISpaceParse(); + spaceParse.SpaceOCS = this._CacheSpaceCS; + spaceParse.ParseOK = true; + spaceParse.SpaceBox = new Box3Ext(new Vector3(), this._CacheSpaceSize); + return spaceParse; + } + /** + * 获得当前的模版空间的相对坐标系 + * - 存在父节点的时候使用父节点的模版空间坐标系 + * - 不存在父节点的时候使用自身的模版空间坐标系 + * + * - 空间坐标系将被定位更新 + * + * @param [useCache=true] 当更新当前节点的时候,我们不希望使用缓存,(因为父节点的参数可能已经被更新) + */ + GetTemplateSpaceCS(useCache = true) { + if (useCache && this._CacheSpaceCS) + return this._CacheSpaceCS.clone(); + if (this.Parent?.Object) { + let template = this.Parent.Object; + return template.GetTemplateSpaceCS(); + } + for (let brId of this.Objects) { + if (brId.Object && !brId.IsErase) { + let br = brId.Object; + return br.SpaceOCS; + } + } + return new Matrix4(); + } + /** + * 获得当前模块的实际位置坐标系. + * 使用 GetTemplateSpaceCS 可能会得到不准确的位置.(得到Parent或者已经缓存的位置) + */ + GetTemplateRealitySpaceCS() { + for (let brId of this.Objects) { + if (brId.Object && !brId.IsErase) { + let br = brId.Object; + return br.SpaceOCS; + } + } + return this.GetTemplateSpaceCS(true); //此时已经可能不准确 + } + get NeedUpdateParent() { + if (this._Positioning) + return false; //存在自我定位时,不需要更新父层 + if (this.Parent) { + let template = this.Parent.Object; + return template._CacheSpaceCS === undefined; //父层已更新时,不需要更新父层 + } + return false; //没有父层时,不需要更新父层 + } + get PositioningSupportBoards() { + let brs = []; + if (this._Positioning && this._Positioning instanceof PositioningClampSpace) { + for (let id of this._Positioning.Objects) + if (!id.IsErase && id.Object instanceof Board) + brs.push(id.Object); + } + if (brs.length === 0) { + //可视化空间使用周围板件数据 + let parentTemplate = this.Parent?.Object; + while (parentTemplate) { + for (let e of parentTemplate.AllEntitys) + if (e instanceof Board) { + brs.push(e); + break; + } + if (brs.length) + break; + parentTemplate = parentTemplate.Parent?.Object; + } + if (brs.length === 0) + brs.push(new Board()); + } + return brs; + } + //#region -------------------------File------------------------- + //对象应该实现dataIn和DataOut的方法,为了对象的序列化和反序列化 + //对象从文件中读取数据,初始化自身 + ReadFile(file) { + this._Version = file.Read(); + super.ReadFile(file); + this.Type = file.Read(); + this._Parent = file.ReadHardObjectId(); + let count = file.Read(); + this.Children.length = 0; + for (let i = 0; i < count; i++) { + let id = file.ReadHardObjectId(); + if (id) + this.Children.push(id); + } + count = file.Read(); + this.Params.length = 0; + for (let i = 0; i < count; i++) + this.Params.push(file.ReadObject()); + count = file.Read(); + this.Objects.length = 0; + for (let i = 0; i < count; i++) { + let id = file.ReadObjectId(); + if (id) + this.Objects.push(id); + } + this._Positioning = file.ReadObject(); + if (this._Version > 1) + this.SplitType = file.Read() ?? this.SplitType; + //清空缓存,因为我们回滚了模块(BUG:修改参数->撤销->替换模块(此时读取了缓存的数据) + this._CacheParamVars = undefined; + this._CacheSpaceCS = undefined; + this._CacheSpaceSize = undefined; + this._CatchRootParam = undefined; + this._NodeDepthCache = undefined; + } + //对象将自身数据写入到文件. + WriteFile(file) { + file.Write(3); + super.WriteFile(file); + let type = this.Type; + //我们在保存文件的时候,才会去序列化它,否则我们不会自动添加历史记录(被动式) + if (this.isExpanded) + type |= TemplateType.Expanded; + else + type &= ~TemplateType.Expanded; + file.Write(type); + file.WriteHardObjectId(this._Parent); + file.Write(this.Children.length); + for (let id of this.Children) + file.WriteHardObjectId(id); + file.Write(this.Params.length); + for (let param of this.Params) + file.WriteObject(param); + file.Write(this.Objects.length); + for (let id of this.Objects) + file.WriteHardObjectId(id); + file.WriteObject(this._Positioning); + file.Write(this.SplitType); + } +}; +__decorate([ + AutoRecord +], TemplateRecord.prototype, "Type", void 0); +__decorate([ + AutoRecord +], TemplateRecord.prototype, "SplitType", void 0); +__decorate([ + AutoRecord +], TemplateRecord.prototype, "Children", void 0); +__decorate([ + AutoRecord +], TemplateRecord.prototype, "Params", void 0); +__decorate([ + AutoRecord +], TemplateRecord.prototype, "Objects", void 0); +TemplateRecord = TemplateRecord_1 = __decorate([ + Factory +], TemplateRecord); + +let TemplateLatticeRecord = class TemplateLatticeRecord extends TemplateRecord { + constructor() { + super(); + this.option = { ...DefaultLatticeConfig }; + this.name = "格子抽(自动)"; + } + get Option() { + return Object.assign({}, this.option); + } + set Option(option) { + this.WriteAllObjectRecord(); + Object.assign(this.option, option); + ExtendsBoardThickness(this, option.thickness); + } + // InitBaseParams() + // { + // super.InitBaseParams(); + // return this; + // } + async Update() { + await super.Update(); + let thickness = this.GetParam("BH")?.value; + if (thickness) + this.option.thickness = thickness; + let tool = DrawLatticeDrawerTool.GetInstance(); + let sbrs = this.PositioningSupportBoards; + let space = new ISpaceParse(sbrs, this._CacheSpaceCS); + space.ParseOK = true; + space.SpaceBox = new Box3Ext(new Vector3(), this._CacheSpaceSize); + let nbrs = tool.Draw(space, this.Option); + if (sbrs.length > 0) { + for (let br of nbrs) { + br.BoardProcessOption[EBoardKeyList.CabinetName] = sbrs[0].BoardProcessOption[EBoardKeyList.CabinetName]; + br.BoardProcessOption[EBoardKeyList.RoomName] = sbrs[0].BoardProcessOption[EBoardKeyList.RoomName]; + } + } + for (let i = nbrs.length; i < this.Objects.length; i++) + this.Objects[i].Object.Erase(); + for (let i = 0; i < nbrs.length; i++) { + if (i < this.Objects.length) { + let br = this.Objects[i].Object; + br.Erase(false); + br.CopyFrom(nbrs[i]); + br.SpaceOCS = this._CacheSpaceCS; + } + else { + nbrs[i].SpaceOCS = this._CacheSpaceCS; + this._db.ModelSpace.Append(nbrs[i]); + this.Objects.push(nbrs[i].Id); + } + } + } + //#region -------------------------File------------------------- + //对象应该实现dataIn和DataOut的方法,为了对象的序列化和反序列化 + //对象从文件中读取数据,初始化自身 + ReadFile(file) { + file.Read(); + super.ReadFile(file); + this.option.arrayType = file.Read(); + this.option.gripWidth = file.Read(); + this.option.gripDepth = file.Read(); + this.option.widthCount = file.Read(); + this.option.depthCount = file.Read(); + this.option.knifeRad = file.Read(); + this.option.thickness = file.Read(); + this.option.arcLen = file.Read(); + this.option.downDist = file.Read(); + this.option.space = file.Read(); + this.option.grooveAddWidth = file.Read(); + this.option.upSealed = file.Read(); + this.option.downSealed = file.Read(); + this.option.leftSealed = file.Read(); + this.option.rightSealed = file.Read(); + this.option.isAuto = file.Read(); + this.option.isChange = file.Read(); + this.option.isOpenCut = file.Read(); + this.option.upCut = file.Read(); + this.option.downCut = file.Read(); + } + //对象将自身数据写入到文件. + WriteFile(file) { + file.Write(1); + super.WriteFile(file); + file.Write(this.option.arrayType); + file.Write(this.option.gripWidth); + file.Write(this.option.gripDepth); + file.Write(this.option.widthCount); + file.Write(this.option.depthCount); + file.Write(this.option.knifeRad); + file.Write(this.option.thickness); + file.Write(this.option.arcLen); + file.Write(this.option.downDist); + file.Write(this.option.space); + file.Write(this.option.grooveAddWidth); + file.Write(this.option.upSealed); + file.Write(this.option.downSealed); + file.Write(this.option.leftSealed); + file.Write(this.option.rightSealed); + file.Write(this.option.isAuto); + file.Write(this.option.isChange); + file.Write(this.option.isOpenCut); + file.Write(this.option.upCut); + file.Write(this.option.downCut); + } +}; +TemplateLatticeRecord = __decorate([ + Factory +], TemplateLatticeRecord); + +function BuildTopBottomBoards(topOpt, bottomOpt, space) { + let brs = []; + if (topOpt.isDraw) { + let basePt = GetTopBoardBasePt(topOpt, space); + brs.push(GetTopOrDownBoard(space, topOpt, basePt, true)); + } + if (bottomOpt.isDraw) { + let basePt = GetBottomBoardBasePt(bottomOpt, space); + brs.push(GetTopOrDownBoard(space, bottomOpt, basePt, false)); + let size = space.Size; + let refSize = size.y; + const thickness = bottomOpt.footThickness; + if (bottomOpt.offset > 0 && !bottomOpt.isWrapSide) { + //绘制前地脚 + if (bottomOpt.isDrawFooter) { + brs.push(GetFootBoard(bottomOpt, space, false)); + refSize -= thickness + bottomOpt.footBehindShrink; + } + //绘制后地脚 + if (bottomOpt.isDrawBackFooter) { + brs.push(GetFootBoard(bottomOpt, space, true)); + refSize -= thickness + bottomOpt.footerOffset; + } + //绘制加强条 + if (bottomOpt.isDrawStrengthenStrip) + brs.push(...GetStrengthenStrips(bottomOpt, space, refSize - bottomOpt.frontDist - bottomOpt.behindDistance)); + } + } + return brs; +} +function GetTopOrDownBoard(spaceParse, opt, basePt, isTop = true) { + //前后距 + let frontDist = -opt.frontDist; + let backDist = -opt.behindDistance; + //左右延伸 + let leftExt = opt.leftExt; + let rightExt = opt.rightExt; + //大小 + let size = spaceParse.Size; + let length = size.x; + let width = size.y + frontDist + backDist; + let thickness = opt.thickness; + if (opt.isWrapSide) { + let leftBoardThickness = spaceParse.LeftBoard ? spaceParse.LeftBoard.Thickness : opt.thickness; + let rightBoardThickness = spaceParse.RightBoard ? spaceParse.RightBoard.Thickness : opt.thickness; + length += leftBoardThickness + rightBoardThickness + leftExt + rightExt; + } + else { + leftExt = 0; + rightExt = 0; + } + let board = Board.CreateBoard(length, width, thickness, BoardType.Layer); + board.Name = "顶板"; + if (!isTop) { + board.Name = "底板"; + } + //移动右缩和前距的距离 + basePt.add(new Vector3(rightExt, -frontDist)); + board.ApplyMatrix(MoveMatrix(basePt)); + board.ApplyMatrix(spaceParse.SpaceOCS); + return board; +} +function GetTopBoardBasePt(opt, spc) { + let box = spc.SpaceBox; + let min = box.min; + let max = box.max; + let basePoint = new Vector3(); + if (opt.isWrapSide) { + let rightBoardThickness = spc.RightBoard ? spc.RightBoard.Thickness : opt.thickness; + basePoint.set(max.x + rightBoardThickness, min.y, max.z); + } + else { + basePoint.set(max.x, min.y, max.z - (opt.thickness + parseFloat(opt.offset))); + } + return basePoint; +} +function GetBottomBoardBasePt(opt, spc) { + let box = spc.SpaceBox; + let min = box.min; + let max = box.max; + let basePoint = new Vector3(); + if (opt.isWrapSide) { + let rightBoardThickness = spc.RightBoard ? spc.RightBoard.Thickness : opt.thickness; + basePoint.set(max.x + rightBoardThickness, min.y, min.z - opt.thickness); + } + else { + basePoint.set(max.x, min.y, min.z + opt.offset); + } + return basePoint; +} +function GetFootBoard(opt, spaceParse, isBack) { + let offset = opt.offset; + let thickness = opt.footThickness; + let footBoard = Board.CreateBoard(offset, spaceParse.Size.x, opt.footThickness, BoardType.Behind); + footBoard.Name = isBack ? "后地脚" : "地脚线"; + let moveDist = isBack ? spaceParse.Size.y - opt.footerOffset - opt.behindDistance : thickness + opt.footBehindShrink + opt.frontDist; + footBoard.ApplyMatrix(MoveMatrix(spaceParse.SpaceBox.min.clone().add(new Vector3(0, moveDist)))) + .ApplyMatrix(spaceParse.SpaceOCS); + return footBoard; +} +function GetStrengthenStrips(opt, spaceParse, width) { + let brs = []; + const thickness = opt.footThickness; + let count = opt.divCount; + if (count === 0) + return brs; + let spaceSize = (spaceParse.Size.x - count * thickness) / (count + 1); + let br = Board.CreateBoard(opt.offset, width, thickness, BoardType.Vertical); + let yDist = opt.frontDist; + if (opt.isDrawFooter) + yDist += (opt.footBehindShrink + thickness); + for (let i = 1; i <= count; i++) { + let b = br.Clone(); + b.Name = "加强条" + i; + b.ApplyMatrix(MoveMatrix(spaceParse.SpaceBox.min.clone().add(new Vector3(spaceSize * i + (i - 1) * thickness, yDist)))) + .ApplyMatrix(spaceParse.SpaceOCS); + brs.push(b); + } + return brs; +} + +/**顶底板模板 */ +let TemplateTopBottomBoard = class TemplateTopBottomBoard extends TemplateRecord { + constructor() { + super(); + this._topOption = { ...DefaultTopBoardOption }; + this._bottomOption = { ...DefaultBottomBoardOption }; + this.UseBoardProcessOption = false; + this.DrawCounts = [1, 1, 1]; + this.name = "顶底板"; + } + get TopOption() { + return Object.assign({}, this._topOption); + } + set TopOption(option) { + this.WriteAllObjectRecord(); + Object.assign(this._topOption, option); + ExtendsBoardThickness(this, option.thickness); + } + get BottomOption() { + return Object.assign({}, this._bottomOption); + } + set BottomOption(option) { + this.WriteAllObjectRecord(); + Object.assign(this._bottomOption, option); + } + // InitBaseParams() + // { + // super.InitBaseParams(); + // return this; + // } + async Update() { + await super.Update(); + let thickness = this.GetParam("BH")?.value; + if (thickness) { + this._topOption.thickness = thickness; + this._bottomOption.thickness = thickness; + this._bottomOption.footThickness = thickness; + } + let spaceParse = this.SpaceParse; + let nbrs = BuildTopBottomBoards(this._topOption, this._bottomOption, spaceParse); + let sbrs = this.PositioningSupportBoards; + if (this.BoardProcessOption) { + let minSealed = GetMinSealed(this.BoardProcessOption); + for (let br of nbrs) { + br.BoardProcessOption = this.BoardProcessOption; + this.SetBoardProcess(br, minSealed); + } + this.BoardProcessOption = undefined; + } + if (this.UseBoardProcessOption && sbrs.length > 0) { + let cname = sbrs[0].BoardProcessOption[EBoardKeyList.CabinetName]; + let rname = sbrs[0].BoardProcessOption[EBoardKeyList.RoomName]; + for (let br of nbrs) { + br.BoardProcessOption[EBoardKeyList.CabinetName] = cname; + br.BoardProcessOption[EBoardKeyList.RoomName] = rname; + } + this.UseBoardProcessOption = false; + } + let oldBrss = [[], [], []]; + let refBr; + let minSealed; + for (let id of this.Objects) { + let b = id.Object; + if (!refBr) + refBr = b; + oldBrss[b.BoardType].push(b); + } + if (refBr) + minSealed = GetMinSealed(refBr.BoardProcessOption); + let newBrss = [[], [], []]; + for (let b of nbrs) { + newBrss[b.BoardType].push(b); + } + for (let i = 0; i < oldBrss.length; i++) { + let oldBrs = oldBrss[i]; + let newBrs = newBrss[i]; + let oldLen = oldBrs.length; + for (let j = newBrs.length; j < oldLen; j++) + oldBrs[j].Erase(); + for (let j = 0; j < newBrs.length; j++) { + if (j < oldLen) { + if (j >= this.DrawCounts[i]) { + oldBrs[j].Erase(false); + } + oldBrs[j].Name = newBrs[j].Name; + oldBrs[j].Position = newBrs[j].Position; + oldBrs[j].Width = newBrs[j].Width; + oldBrs[j].Height = newBrs[j].Height; + oldBrs[j].Thickness = newBrs[j].Thickness; + } + else { + if (refBr) { + newBrs[j].BoardProcessOption = refBr.BoardProcessOption; + this.SetBoardProcess(newBrs[j], minSealed); + } + this._db.ModelSpace.Append(newBrs[j]); + this.Objects.push(newBrs[j].Id); + } + } + this.DrawCounts[i] = newBrs.length; + } + //保持SpaceCS + for (let id of this.Objects) { + if (id && !id.IsErase) + id.Object.SpaceOCS = this._CacheSpaceCS; + } + } + SetBoardProcess(br, minSealed) { + if (br.Name === "底板") { + br.BoardProcessOption[EBoardKeyList.BigHole] = FaceDirection.Back; + } + else if (br.Name.includes("地脚") || br.Name.includes("加强条")) { + // br.BoardProcessOption.composingFace = ComposingType.Reverse; + br.BoardProcessOption.bigHoleDir = FaceDirection.Back; + br.BoardProcessOption.lines = LinesType.Reverse; + //用薄封边 + br.BoardProcessOption.sealedUp = minSealed; + br.BoardProcessOption.sealedDown = minSealed; + br.BoardProcessOption.sealedLeft = minSealed; + br.BoardProcessOption.sealedRight = minSealed; + } + } + ReadFile(file) { + let ver = file.Read(); + super.ReadFile(file); + this.DrawCounts[0] = file.Read(); + this.DrawCounts[1] = file.Read(); + this.DrawCounts[2] = file.Read(); + this._topOption.type = file.Read(); + this._topOption.name = file.Read(); + this._topOption.isDraw = file.Read(); + this._topOption.thickness = file.Read(); + this._topOption.frontDist = file.Read(); + this._topOption.behindDistance = file.Read(); + this._topOption.isWrapSide = file.Read(); + this._topOption.useLFData = file.Read(); + this._topOption.leftExt = file.Read(); + this._topOption.rightExt = file.Read(); + this._topOption.offset = file.Read(); + if (ver === 1 && typeof this._topOption.offset === "string") + this._topOption.offset = parseFloat(this._topOption.offset) ?? 0; + this._bottomOption.type = file.Read(); + this._bottomOption.name = file.Read(); + this._bottomOption.isDraw = file.Read(); + this._bottomOption.thickness = file.Read(); + this._bottomOption.frontDist = file.Read(); + this._bottomOption.behindDistance = file.Read(); + this._bottomOption.isWrapSide = file.Read(); + this._bottomOption.useLFData = file.Read(); + this._bottomOption.leftExt = file.Read(); + this._bottomOption.rightExt = file.Read(); + this._bottomOption.offset = file.Read(); + this._bottomOption.footThickness = file.Read(); + this._bottomOption.isDrawFooter = file.Read(); + this._bottomOption.footBehindShrink = file.Read(); + this._bottomOption.isDrawBackFooter = file.Read(); + this._bottomOption.isDrawStrengthenStrip = file.Read(); + this._bottomOption.footerOffset = file.Read(); + this._bottomOption.divCount = file.Read(); + } + WriteFile(file) { + file.Write(2); + super.WriteFile(file); + file.Write(this.DrawCounts[0]); + file.Write(this.DrawCounts[1]); + file.Write(this.DrawCounts[2]); + file.Write(this._topOption.type); + file.Write(this._topOption.name); + file.Write(this._topOption.isDraw); + file.Write(this._topOption.thickness); + file.Write(this._topOption.frontDist); + file.Write(this._topOption.behindDistance); + file.Write(this._topOption.isWrapSide); + file.Write(this._topOption.useLFData); + file.Write(this._topOption.leftExt); + file.Write(this._topOption.rightExt); + file.Write(this._topOption.offset); + file.Write(this._bottomOption.type); + file.Write(this._bottomOption.name); + file.Write(this._bottomOption.isDraw); + file.Write(this._bottomOption.thickness); + file.Write(this._bottomOption.frontDist); + file.Write(this._bottomOption.behindDistance); + file.Write(this._bottomOption.isWrapSide); + file.Write(this._bottomOption.useLFData); + file.Write(this._bottomOption.leftExt); + file.Write(this._bottomOption.rightExt); + file.Write(this._bottomOption.offset); + file.Write(this._bottomOption.footThickness); + file.Write(this._bottomOption.isDrawFooter); + file.Write(this._bottomOption.footBehindShrink); + file.Write(this._bottomOption.isDrawBackFooter); + file.Write(this._bottomOption.isDrawStrengthenStrip); + file.Write(this._bottomOption.footerOffset); + file.Write(this._bottomOption.divCount); + } +}; +__decorate([ + AutoRecord +], TemplateTopBottomBoard.prototype, "DrawCounts", void 0); +TemplateTopBottomBoard = __decorate([ + Factory +], TemplateTopBottomBoard); +//获得最薄的封边 +function GetMinSealed(opt) { + return Math.max(0, Math.min(parseFloat(opt.sealedDown) || 0, parseFloat(opt.sealedLeft) || 0, parseFloat(opt.sealedRight) || 0, parseFloat(opt.sealedUp) || 0)).toString(); +} + +const SIN45 = Math.sin(Math.PI / 4); +class DrawWineRackTool extends Singleton { + constructor() { + super(...arguments); + this.boardlist = []; + } + get Config() { + return this._config; + } + Parse(space, config) { + this._config = config; + this.boardlist.length = 0; + this.space = space; + //处理格子深 + if (!config.isTotalDepth) { + let depth = safeEval(config.calcDepth, { L: space.Size.x, W: space.Size.y, H: space.Size.z }); + if (!isNaN(depth)) { + space.SpaceBox.max.setY(space.SpaceBox.min.y + depth); + } + } + //处理前缩 + space.SpaceBox.min.add(new Vector3(0, config.frontCut)); + //左右缩 + space.SpaceBox.min.add(new Vector3(config.leftCut)); + space.SpaceBox.max.add(new Vector3(-config.rightCut)); + //上缩 + space.SpaceBox.max.add(new Vector3(0, 0, -config.topCut)); + } + /** 拾取空间周围的板件柜名房名等信息*/ + GetBoardProcessOption(br) { + //获取空间周围的板件数据 + if (this.space.Boards.length > 0) { + let refProcessData = this.space.Boards[0].BoardProcessOption; + br.BoardProcessOption[EBoardKeyList.RoomName] = refProcessData[EBoardKeyList.RoomName]; + br.BoardProcessOption[EBoardKeyList.CabinetName] = refProcessData[EBoardKeyList.CabinetName]; + } + } + /**分析高级封边数据 */ + ParseHighSealing(br, leftSealed, rightSealed, topSealed, downSealed, isLeft) { + this.GetBoardProcessOption(br); + let cu = br.ContourCurve; + br.BoardProcessOption.sealedLeft = leftSealed.toString(); + br.BoardProcessOption.sealedRight = rightSealed.toString(); + br.BoardProcessOption.sealedUp = topSealed.toString(); + br.BoardProcessOption.sealedDown = downSealed.toString(); + let sizes = [...new Set([downSealed, rightSealed, topSealed, leftSealed])]; + let downSeal = { + size: downSealed, color: sizes.indexOf(downSealed) + 1 + }; + let rigthSeal = { + size: rightSealed, color: sizes.indexOf(rightSealed) + 1 + }; + let topSeal = { size: topSealed, color: sizes.indexOf(topSealed) + 1 }; + let leftSeal = { size: leftSealed, color: sizes.indexOf(leftSealed) + 1 }; + let highSeals = [downSeal]; + if (isLeft) { + highSeals.push(rigthSeal, topSeal); + for (let i = 3; i <= cu.EndParam - 1; i++) { + highSeals.push(leftSeal); + } + } + else { + for (let i = 1; i <= cu.EndParam - 3; i++) { + highSeals.push(rigthSeal); + } + highSeals.push(topSeal, leftSeal); + } + br.BoardProcessOption.highSealed = highSeals; + br.BoardProcessOption.drillType = DrillType.None; + br.BoardProcessOption.highDrill.fill(DrillType.None); + } + /**补板 */ + AddLayerOrVerticalBoard(actWidth, actHeight) { + const config = this.Config; + const size = this.space.Size; + let isDrawLy = false; + //是否补层板 + if (config.isDrawLy && (config.arrayType === EWRackArrayType.Fixed || config.fullType === EFullType.ByWidth)) { + isDrawLy = true; + let length = actWidth; + let width = size.y + config.frontCut; + let position = this.space.SpaceBox.min.clone(); + if (config.arrayType === EWRackArrayType.Fixed) { + if (config.fullDir === EFullDir.Right) { + length += config.rightCut; + position.add(new Vector3(size.x + config.rightCut, -config.frontCut, actHeight + config.topCut)); + } + else { + length += config.leftCut; + position.add(new Vector3(actWidth, -config.frontCut, actHeight + config.topCut)); + } + } + else { + length += (config.leftCut + config.rightCut); + position.add(new Vector3(actWidth + config.rightCut, -config.frontCut, actHeight + config.topCut)); + } + //补板跟随 + if (config.followNarrow) { + //处理前缩 + position.add(new Vector3(0, config.frontCut)); + width -= config.frontCut; + } + let br = Board.CreateBoard(length, width, config.brThick2); + this.GetBoardProcessOption(br); + br.BoardProcessOption.bigHoleDir = FaceDirection.Back; + br.Position = position; + br.ApplyMatrix(this.space.SpaceOCS); + this.boardlist.push(br); + } + if (config.isDrawVer && (config.arrayType === EWRackArrayType.Fixed || config.fullType === EFullType.ByHeight)) { + let len = actHeight + config.topCut; + if (isDrawLy) + len += config.brThick2; + let br = Board.CreateBoard(len, size.y + config.frontCut, config.brThick2, BoardType.Vertical); + let position = this.space.SpaceBox.min.clone(); + if (config.fullDir === EFullDir.Right) + position.x += size.x - actWidth - config.brThick2; + else { + br.BoardProcessOption.bigHoleDir = FaceDirection.Back; + position.x += actWidth; + } + //补板跟随 + if (config.followNarrow) { + br.WriteAllObjectRecord(); + position.y += config.frontCut; + br.Width -= config.frontCut; + } + //这里要跟外面平 + position.y -= config.frontCut; + this.GetBoardProcessOption(br); + br.Position = position; + br.ApplyMatrix(this.space.SpaceOCS); + this.boardlist.push(br); + } + } +} + +const R2WRTolerance = 1e-3; +/** + * 斜酒格 + */ +class DrawObliqueWineRackTool extends DrawWineRackTool { + Parse(space, config) { + super.Parse(space, config); + const size = space.Size; + const spaceHeight = size.z; + const spaceWidth = size.x; + const ptMid = new Vector3(0.5 * size.x, size.z / 2, 0); + let mirrorMtx; + if (config.fullType === EFullType.ByWidth) + mirrorMtx = MakeMirrorMtx(YAxis, ptMid); + else + mirrorMtx = MakeMirrorMtx(XAxis, ptMid); + ptMid.set(0.5 * size.x, size.z / 2, 0); + polar(ptMid, Math.PI * 0.75, -config.boardThick); + if (config.isFull && config.arrayType !== EWRackArrayType.Fixed) { + switch (config.fullType) { + case EFullType.ByHeight: + this.CalGridWidth(spaceHeight); + break; + case EFullType.ByWidth: + this.CalGridWidth(spaceWidth); + break; + case EFullType.Symmetry: + this.CalGridWidth(spaceHeight); + this.CalGridWidth(spaceWidth); + } + let rectPl = new Polyline().Rectangle(spaceWidth, spaceHeight); + let gripWidth = config.boardThick + config.gripWidth; + let retPls = []; + let pls1 = this.CalculationRectPolylineArr(ptMid, rectPl, gripWidth); + polar(ptMid, Math.PI * 0.75, -gripWidth); + let pls2 = this.CalculationRectPolylineArr(ptMid, rectPl, -gripWidth); + retPls.push(...pls1, ...pls2); + for (let pl of [...pls1, ...pls2]) { + let plClone = pl.Clone(); + plClone.ApplyMatrix(mirrorMtx); + retPls.push(plClone); + } + this.DrawBoardFormPolyLine(retPls); + } + else { + let lWRData = []; + let rWRData = []; + let res; + switch (config.arrayType) { + case EWRackArrayType.ByWidth: + res = this.CalcWineRackDataByWidth(lWRData, rWRData); + break; + case EWRackArrayType.ByCount: + res = this.CalcWineRackDataByCount(lWRData, rWRData); + break; + case EWRackArrayType.Fixed: + res = this.CalcWineRackDataByFixed(lWRData, rWRData); + } + let pls = []; + for (let data of lWRData) { + pls.push(this.CreatePolylineByWineData(data)); + } + rWRData.sort((d1, d2) => { + if (equaln$1(d1.basePt.x, d2.basePt.x)) { + return d1.basePt.y - d2.basePt.y; + } + else + return d2.basePt.x - d1.basePt.x; + }); + for (let data of rWRData) { + pls.push(this.CreatePolylineByWineData(data, false)); + } + //补板 + this.AddLayerOrVerticalBoard(res.width, res.height); + this.DrawBoardFormPolyLine(pls, res.width); + } + } + CalGridWidth(length) { + const count = (length - this.Config.boardThick * 2 / SIN45) / ((this.Config.boardThick + this.Config.gripWidth) * Math.sqrt(2)); + this.Config.gripWidth = ((length - this.Config.boardThick / SIN45) / Math.floor(count)) / Math.sqrt(2) - this.Config.boardThick; + } + /**获取矩形多段线的4个对角点并判断是否有效 */ + GetRect4Pts(xline, rectPl, p1, p2, p3, p4) { + let res1 = this.GetRect2Pts(xline, rectPl, p1, p2); + let vec = polar(new Vector3(), Math.PI * 0.75, this.Config.boardThick); + xline.ApplyMatrix(MoveMatrix(vec)); + let res2 = this.GetRect2Pts(xline, rectPl, p3, p4); + return res1 && res2 && p1.distanceTo(p2) > this.Config.gripWidth; + } + /**获取矩形一边的点 */ + GetRect2Pts(xline, rectPl, p1, p2) { + let intPts = xline.IntersectWith(rectPl, IntersectOption.ExtendBoth); + if (intPts.length === 2) { + p1.copy(intPts[0]); + p2.copy(intPts[1]); + if (p1.x > p2.x) { + let tmpPt = p2.clone(); + p2.copy(p1); + p1.copy(tmpPt); + } + return true; + } + return false; + } + /**按格子宽获取酒格数据 */ + CalcWineRackDataByWidth(lWRDataList, rWRDataList) { + let size = this.space.Size; + let Config = this.Config; + let widthCount = 0, heightCount = 0, gripWidth = 0; + let width = size.x - 2 * Config.boardThick * SIN45; + let height = size.z - 2 * Config.boardThick * SIN45; + if (Config.fullType === EFullType.ByWidth) { + widthCount = Math.floor(width / ((Config.gripWidth + Config.boardThick) * SIN45)); + gripWidth = width / widthCount; + //处理锁定个数 + if (!Config.isLock) { + heightCount = Math.floor(height / gripWidth); + } + else { + heightCount = Math.floor(Config.heightCount * 2); + } + height = heightCount * gripWidth + 2 * Config.boardThick * SIN45; + width = size.x; + } + else { + heightCount = Math.floor(height / ((Config.gripWidth + Config.boardThick) * SIN45)); + gripWidth = height / heightCount; + //处理锁定个数 + if (!Config.isLock) { + widthCount = Math.floor(width / gripWidth); + } + else { + widthCount = Math.floor(Config.widthCount * 2); + } + width = widthCount * gripWidth + 2 * Config.boardThick * SIN45; + height = size.z; + } + this.GetWineRackData(width, height, gripWidth, Config.boardThick, widthCount, heightCount, lWRDataList, rWRDataList); + return { + width: width, height: height + }; + } + CalcWineRackDataByCount(lWRDataList, rWRDataList) { + const config = this.Config; + const size = this.space.Size; + let widthCount = Math.floor(config.widthCount * 2); + let heightCount = Math.floor(config.heightCount * 2); + let gripWidth = (size.x - 2 * config.boardThick * SIN45) / widthCount; + let width = 0; + let height = 0; + if (config.fullType === EFullType.ByWidth) { + gripWidth = (size.x - 2 * config.boardThick * SIN45) / widthCount; + width = size.x; + if (!config.isLock) //如果没锁定个数 + { + heightCount = Math.floor((size.z - 2 * config.boardThick * SIN45) / gripWidth + 1e-3); + } + height = heightCount * gripWidth + 2 * config.boardThick * SIN45; + } + else { + gripWidth = (size.z - 2 * config.boardThick * SIN45) / heightCount; + if (!config.isLock) //如果没有锁定个数 + { + widthCount = Math.floor((size.x - 2 * config.boardThick * SIN45) / gripWidth); + } + width = widthCount * gripWidth + 2 * config.boardThick * SIN45; + height = size.z; + } + this.GetWineRackData(width, height, gripWidth, config.boardThick, widthCount, heightCount, lWRDataList, rWRDataList); + return { + width: width, height: height + }; + } + CalcWineRackDataByFixed(lWRDataList, rWRDataList) { + const config = this.Config; + let widthCount = Math.floor(config.widthCount * 2); + let heightCount = Math.floor(config.heightCount * 2); + let gripWidth = config.gripWidth * SIN45; + let width = widthCount * gripWidth + 2 * config.boardThick * SIN45; + let height = heightCount * gripWidth + 2 * config.boardThick * SIN45; + this.GetWineRackData(width, height, gripWidth, config.boardThick, widthCount, heightCount, lWRDataList, rWRDataList); + return { + width: width, height: height + }; + } + /**构建酒格正面多段线组*/ + CalculationRectPolylineArr(ptMid, rectPl, gripWidth) { + let pls = []; + let pt = ptMid.clone(); + while (true) { + let pl = this.CalculationRectPolyline(pt, rectPl); + if (!pl) + break; + polar(pt, Math.PI * 0.75, gripWidth); + pls.push(pl); + } + return pls; + } + /**构建酒格正面多段线*/ + CalculationRectPolyline(pt, rectPl) { + const xline = new Line(pt, pt.clone().add(new Vector3(1, 1))); + const p1 = new Vector3(); + const p2 = new Vector3(); + const p3 = new Vector3(); + const p4 = new Vector3(); + if (!this.GetRect4Pts(xline, rectPl, p1, p2, p3, p4)) { + return null; + } + let minDis = this.Config.boardThick / Math.sqrt(2); + //如果左边停靠 + if (p1.x < minDis) { + p1.copy(polar(p3.clone(), Math.PI * -0.25, this.Config.boardThick)); + } + else { + p3.copy(polar(p1.clone(), Math.PI * 0.75, this.Config.boardThick)); + } + //右边点 上面停靠 + let size = this.space.Size; + if (p2.y > size.z - minDis) { + p2.copy(polar(p4.clone(), -Math.PI * 0.25, this.Config.boardThick)); + } + else { + p4.copy(polar(p2.clone(), Math.PI * 0.75, this.Config.boardThick)); + } + if (p1.distanceTo(p2) < (this.Config.gripWidth + this.Config.boardThick * 1.8) && p1.y > this.Config.boardThick * 2) + return null; + let lineData = [p1, p2, p4, p3].map(p => { + return { + pt: AsVector2(p), + bul: 0 + }; + }); + let pl = new Polyline(lineData); + pl.CloseMark = true; + return pl; + } + //获取酒格数据 + GetWineRackData(width, height, gripWidth, brThick, widthCount, heightCount, lWRDataList, rWRDataList) { + let data; + for (let i = 0; i < Math.floor(widthCount / 2); i++) { + let p1 = gripWidth + brThick * SIN45 + gripWidth * i * 2; + data = { + basePt: new Vector3(p1, 0, 0), + brLength: 0 + }; + if (width - p1 > height - brThick * SIN45) { + data.brLength = (height - brThick * SIN45) / SIN45; + } + else { + data.brLength = (width - p1) / SIN45; + } + rWRDataList.push(data); + } + for (let i = 0; i < Math.floor(heightCount / 2); i++) { + let p1 = gripWidth + brThick * SIN45 + i * gripWidth * 2; + data = { + basePt: new Vector3(brThick * SIN45, p1 - brThick * SIN45, 0), + brLength: 0 + }; + if (height - p1 > width - brThick * SIN45) { + data.brLength = (width - brThick * SIN45) / SIN45; + } + else { + data.brLength = (height - p1) / SIN45; + } + rWRDataList.push(data); + } + for (let i = 0; i < Math.floor(widthCount / 2); i++) { + let p1 = gripWidth + i * gripWidth * 2; + data = { + basePt: new Vector3(p1 + brThick * SIN45, 2 * brThick * SIN45, 0), + brLength: 0 + }; + if (equaln$1(p1, height - brThick * SIN45 * 2)) { + data.brLength = (height - brThick * SIN45 * 2) / SIN45; + } + else if (p1 > height - brThick * SIN45 * 3) { + data.brLength = (height - brThick * SIN45 * 3) / SIN45; + } + else { + data.brLength = (p1 - brThick * SIN45) / SIN45; + } + lWRDataList.push(data); + } + if (widthCount % 2 === 0) { + for (let i = 0; i < Math.floor(heightCount / 2); i++) { + let p1 = gripWidth + 2 * brThick * SIN45 + i * gripWidth * 2; + data = { + basePt: new Vector3(width - brThick * SIN45, p1, 0), + brLength: 0 + }; + if (equaln$1(height - p1, width - 2 * brThick * SIN45)) { + data.brLength = (height - p1) / SIN45; + } + else if (height - p1 - brThick * SIN45 > width - 2 * brThick * SIN45) { + data.brLength = (width - brThick * SIN45 * 3) / SIN45; + } + else { + data.brLength = (height - p1 - brThick * SIN45) / SIN45; + } + lWRDataList.push(data); + } + } + else { + for (let i = 0; i < Math.floor(heightCount / 2) + 1; i++) { + let p1 = 0; + if (i == 0) { + p1 = brThick * SIN45; + data = { + basePt: new Vector3(width, p1, 0), + brLength: 0 + }; + if (equaln$1(height, width, 1e-3)) { + data.brLength = (width - brThick * SIN45) / SIN45; + } + else if (height - p1 > width - 2 * brThick * SIN45) { + data.brLength = (width - brThick * SIN45 * 2) / SIN45; + } + else { + data.brLength = (height - p1 - brThick * SIN45) / SIN45; + } + } + else { + p1 = 2 * brThick * SIN45 + i * gripWidth * 2; + data = { + basePt: new Vector3(width - brThick * SIN45, p1, 0), + brLength: 0 + }; + if (height - p1 > brThick) { + if (equaln$1(height - p1, width - 2 * brThick * SIN45, 1e-3)) { + data.brLength = (height - p1) / SIN45; + } + else if (height - p1 > width - brThick * SIN45) { + data.brLength = (width - brThick * SIN45 * 3) / SIN45; + } + else { + data.brLength = (height - p1 - brThick * SIN45) / SIN45; + } + } + else { + continue; //这里需要跳出. + } + } + lWRDataList.push(data); + } + } + } + /**根据酒格数据获取多段线 */ + CreatePolylineByWineData(data, isLeft = true) { + let thick = this.Config.boardThick; + let lineData = [ + { + pt: new Vector2$1(), + bul: 0 + }, + { + pt: new Vector2$1(thick, 0), + bul: 0 + }, + { + pt: new Vector2$1(thick, data.brLength), + bul: 0 + }, + { + pt: new Vector2$1(0, data.brLength), + bul: 0 + }, + ]; + let pl = new Polyline(lineData); + pl.CloseMark = true; + let mat = MoveMatrix(new Vector3(thick)) + .multiply(new Matrix4().makeRotationZ(0.25 * Math.PI * (isLeft ? 1 : -1))) + .multiply(MoveMatrix(new Vector3(-thick))); + pl.ApplyMatrix(mat) + .ApplyMatrix(MoveMatrix(data.basePt.add(new Vector3(-thick)))); + return pl; + } + /**根据多段线组构建酒格 */ + DrawBoardFormPolyLine(pls, actualWidth, config) { + const leftData = []; + const rightData = []; + for (let pl of pls) { + let data = this.ParsePolyLine(pl); + if (!data.isOk) + continue; + if (data.isLeft) + leftData.push(data); + else + rightData.push(data); + } + this.CreateBoard(leftData, rightData, actualWidth, config); + this.CreateBoard(rightData, leftData, actualWidth, config); + } + ParsePolyLine(pl) { + if (pl.IsClose) { + if (pl.EndParam !== 4) { + return { + isOk: false + }; + } + let pts = pl.GetStretchPoints(); + if (equalv3(pts[0], arrayLast(pts))) + pts.pop(); + /*****统一初始形状 + * **** h + * * * + * 0 **** t + */ + pts.sort((a, b) => { + if (equaln$1(a.y, b.y)) + return a.x - b.x; + else + return a.y - b.y; + }); + let pts1 = pts.splice(0, 2); + pts1.sort((a, b) => a.x - b.x); + pts.sort((a, b) => a.distanceTo(pts1[1]) - b.distanceTo(pts1[1])); + pts.unshift(...pts1); + const area = pl.Area; + let v1 = pts[1].clone().clone().sub(pts[0]); + let v2 = arrayLast(pts).clone().sub(pts[0]); + let [vecY, vecX] = v1.length() > v2.length() ? [v1, v2] : [v2, v1]; + let length = vecY.length(); + let thick = vecX.length(); + let mat = new Matrix4().makeBasis(vecX.normalize(), vecY.normalize(), ZAxis).setPosition(pts[0]); + let matInv = new Matrix4().getInverse(mat); + let bp = pts[0].clone().negate(); + if (equaln$1(length * thick, area, 5)) { + let an = vecY.angleTo(XAxis); + if (equaln$1(an, Math.PI / 4, R2WRTolerance)) { + pts.sort((p1, p2) => p2.x - p1.x); + return { + isOk: true, + isLeft: true, + pl, + length, + matInv, + basePt: new Vector3(pts[0].x, 0, pts[0].y), + thickness: thick, + isRo: true, + }; + } + else if (equaln$1(an, 3 * Math.PI / 4, R2WRTolerance)) { + pts.sort((p1, p2) => p1.y - p2.y); + return { + isOk: true, + isLeft: false, + pl, + length, + matInv, + basePt: new Vector3(pts[0].x, 0, pts[0].y), + thickness: thick, + isRo: true, + }; + } + else if (isParallelTo(vecX, XAxis, R2WRTolerance)) { + return { + isOk: true, + isLeft: false, + pl, + length, + matInv: new Matrix4().setPosition(bp), + basePt: new Vector3(pts[0].x, 0, pts[0].y), + thickness: thick, + isVer: true, + isRo: false, + }; + } + else if (isParallelTo(vecX, YAxis, R2WRTolerance)) { + return { + isOk: true, + isLeft: true, + pl, + length, + matInv: new Matrix4().setPosition(bp), + basePt: new Vector3(pts[1].x, 0, pts[1].y), + thickness: thick, + isRo: false, + }; + } + else { + return { + isOk: false + }; + } + } + } + return { + isOk: false + }; + } + /**绘制酒格 */ + CreateBoard(lData, rData, actualWidth, cof) { + if (!lData.length) + return; + let leftSeal, rightSeal, upSeal, downSeal, knifeRad; + let config; + if (cof) { + leftSeal = cof.sealedLeft; + rightSeal = cof.sealedRight; + upSeal = cof.sealedUp; + downSeal = cof.sealedDown; + knifeRad = cof.knifeRadius; + } + else { + config = this.Config; + leftSeal = config.leftEdge; + rightSeal = config.leftEdge; + upSeal = config.leftEdge; + downSeal = config.leftEdge; + knifeRad = config.grooveLengthAdd; + } + for (let i = 0; i < lData.length; i++) { + let d = lData[i]; + let dists = []; + for (let d2 of rData) { + let intPts = d.pl.IntersectWith(d2.pl, IntersectOption.ExtendNone); + if (intPts.length === 4) { + dists.push(...intPts.map(p => { + let p1 = p.applyMatrix4(d.matInv); + if (!d.isRo && !d.isVer) + return Math.abs(p1.x); + return Math.abs(p1.y); + })); + } + } + arraySortByNumber(dists); + arrayRemoveDuplicateBySort(dists, (n1, n2) => equaln$1(n1, n2, R2WRTolerance)); + let pl = this.GetPolyline(d, dists, cof); + if (pl) { + let br = Board.CreateBoard(1, 1, d.thickness ?? config.boardThick, d.isVer ? BoardType.Vertical : BoardType.Layer); + if (d.isLeft) + br.Name = "右板" + (lData.length - i); + else + br.Name = "左板" + (i + 1); + br.ContourCurve = pl; + this.ParseHighSealing(br, leftSeal, rightSeal, upSeal, downSeal, d.isLeft); + br.KnifeRadius = knifeRad; + if (d.isRo) + br.RotateBoard(0, Math.PI / 4 * (d.isLeft ? -1 : 1), 0); + br.ApplyMatrix(MoveMatrix(this.space.SpaceBox.min)); + br.ApplyMatrix(MoveMatrix(d.basePt)); + if (config && (config.fullType === EFullType.ByHeight || config.arrayType === EWRackArrayType.Fixed) + && config.fullDir === EFullDir.Right) { + br.ApplyMatrix(MoveMatrix(new Vector3(this.space.Size.x - (actualWidth ?? 0)))); + } + br.ApplyMatrix(this.space.SpaceOCS); + this.boardlist.push(br); + } + } + } + /**构建酒格形状,加入齿 */ + GetPolyline(data, dists, cof) { + let len = data.length; + let isLeft = data.isLeft; + const size = this.space.Size; + let pl = new Polyline(); + pl.Rectangle(size.y, len); + let addWidth; + let leftEdge; + let rightEdge; + let knifeRad; + if (cof) { + addWidth = cof.addLen; + leftEdge = cof.sealedLeft; + rightEdge = cof.sealedRight; + knifeRad = cof.knifeRadius; + } + else { + const config = this.Config; + addWidth = config.grooveWidthAdd; + leftEdge = config.leftEdge; + rightEdge = config.rightEdge; + knifeRad = config.grooveLengthAdd; + } + if (isLeft) { + if (!data.isVer) { + let newDist = dists.map(d => len - d); + dists.length = 0; + dists.push(...newDist); + } + addWidth = (addWidth - 2 * leftEdge) / 2; + } + else + addWidth = (addWidth - 2 * rightEdge) / 2; + if (dists.length % 2 === 0 && dists.length > 1) { + let pts = []; + for (let i = 0; i < dists.length; i++) { + if (i % 2 === 0) { + if (isLeft) { + pts.push(new Vector2$1(0, dists[i] + addWidth)); + pts.push(new Vector2$1(size.y / 2 + knifeRad, dists[i] + addWidth)); + } + else { + pts.push(new Vector2$1(size.y, dists[i] - addWidth)); + pts.push(new Vector2$1(size.y / 2 - knifeRad, dists[i] - addWidth)); + } + } + else { + if (isLeft) { + pts.push(new Vector2$1(size.y / 2 + knifeRad, dists[i] - addWidth)); + pts.push(new Vector2$1(0, dists[i] - addWidth)); + } + else { + pts.push(new Vector2$1(size.y / 2 - knifeRad, dists[i] + addWidth)); + pts.push(new Vector2$1(size.y, dists[i] + addWidth)); + } + } + } + pl.AddVertexAt(isLeft ? pl.NumberOfVertices : 2, pts); + } + return pl; + } +} + +/** + * 正酒格 + */ +class DrawUprightWineRackTool extends DrawWineRackTool { + Parse(space, config) { + super.Parse(space, config); + let size = space.Size; + let gripWidth = config.gripWidth; + let brThick = config.boardThick; + let spaceHeight = size.z; + let spaceWidth = size.x; + let gripHeight = gripWidth; + let actualHeight = spaceHeight; + let actualWidth = spaceWidth; + switch (config.arrayType) { + case EWRackArrayType.ByWidth: + // let tempWidthCount = 0; + // let tempHeightCount = 0; + // if (widCount > 0 || heightCount > 0) + // { + // tempWidthCount = Math.floor(spaceWidth / (gripWidth + brThick)); + // tempHeightCount = Math.floor(spaceHeight / (gripWidth + brThick)); + // gripWidth = (spaceWidth - (tempWidthCount - 1) * brThick) / tempWidthCount; + // gripHeight = (spaceHeight - (tempHeightCount - 1) * brThick) / tempHeightCount; + // if (widCount > 0) + // { + // heightCount = tempHeightCount; + // actualWidth = gripWidth * widCount + brThick * (widCount - 1); + // } + // else if (heightCount > 0) + // { + // widCount = tempWidthCount; + // actualWidth = gripWidth * widCount + brThick * (widCount - 1); + // } + // } + config.widthCount = Math.floor(spaceWidth / (gripWidth + brThick)); + config.heightCount = Math.floor(spaceHeight / (gripWidth + brThick)); + config.gripWidth = (spaceWidth - (config.widthCount - 1) * brThick) / config.widthCount; + gripHeight = (spaceHeight - (config.heightCount - 1) * brThick) / config.heightCount; + break; + case EWRackArrayType.ByCount: + if (config.widthCount > 0) { + config.widthCount = Math.floor(config.widthCount); + } + else { + let gk = (spaceHeight - 2 * brThick) / config.heightCount; + config.widthCount = Math.floor((spaceWidth - 2 * brThick) / gk + 1e-6); + } + if (config.heightCount > 0) { + config.heightCount = Math.floor(config.heightCount); + } + else { + let gk = (spaceWidth - 2 * config.heightCount) / config.heightCount; + config.heightCount = Math.floor((spaceHeight - 2 * brThick) / gk + 1e-6); + } + config.gripWidth = (spaceWidth - (config.widthCount - 1) * brThick) / config.widthCount; + gripHeight = (spaceHeight - (config.heightCount - 1) * brThick) / config.heightCount; + break; + case EWRackArrayType.Fixed: + config.widthCount = Math.floor(config.widthCount); + config.heightCount = Math.floor(config.heightCount); + actualWidth = gripWidth * config.widthCount + brThick * (config.widthCount - 1); + actualHeight = gripWidth * config.heightCount + brThick * (config.heightCount - 1); + } + if (config.widthCount <= 0 || config.heightCount <= 0) + throw `绘制酒格失败,酒格个数异常! 宽个数:${config.widthCount} 高个数:${config.heightCount}`; + config.widthCount--; + config.heightCount--; + this.BuildBoard(gripHeight, actualWidth, actualHeight, space); + // this.AddLayerOrVerticalBoard(actualWidth, actualHeight); + } + BuildBoard(gripHeight, spaceWidth, spaceHeight, space) { + const config = this.Config; + let min = space.SpaceBox.min; + let size = space.Size; + let brThick = config.boardThick; + let verBr = Board.CreateBoard(spaceHeight, size.y, brThick, BoardType.Vertical); + this.ParseBrTooth(verBr, gripHeight); + for (let i = 1; i <= config.widthCount; i++) { + let br = verBr.Clone(); + br.Name = "右板" + i; + br.ApplyMatrix(MoveMatrix(min.clone().add(new Vector3(config.gripWidth * i + (i - 1) * brThick)))).ApplyMatrix(space.SpaceOCS); + this.boardlist.push(br); + } + let lyBr = Board.CreateBoard(spaceWidth, size.y, brThick); + this.ParseBrTooth(lyBr); + for (let i = 1; i <= config.heightCount; i++) { + let br = lyBr.Clone(); + br.Name = "左板" + i; + br.ApplyMatrix(MoveMatrix(min.clone().add(new Vector3(spaceWidth, 0, gripHeight * i + (i - 1) * brThick)))) + .ApplyMatrix(space.SpaceOCS); + this.boardlist.push(br); + } + } + ParseBrTooth(br, gripHeight) { + const config = this.Config; + let initPts = []; + let addWidth = config.grooveWidthAdd; + let topEdge = config.topEdge; + let bottomEdge = config.bottomEdge; + let leftEdge = config.leftEdge; + let rightEdge = config.rightEdge; + let grooveLenAdd = config.grooveLengthAdd; + br.BoardProcessOption.sealedUp = topEdge.toString(); + br.BoardProcessOption.sealedDown = bottomEdge.toString(); + br.BoardProcessOption.sealedLeft = leftEdge.toString(); + br.BoardProcessOption.sealedRight = rightEdge.toString(); + if (br.BoardType === BoardType.Layer) { + addWidth = (addWidth - 2 * leftEdge) / 2; + let p1 = new Vector3(0, config.gripWidth - addWidth); + let p2 = new Vector3(br.Width / 2 + grooveLenAdd, config.gripWidth - addWidth); + let p3 = new Vector3(br.Width / 2 + grooveLenAdd, config.gripWidth + br.Thickness + addWidth); + let p4 = new Vector3(0, config.gripWidth + br.Thickness + addWidth); + initPts.push(p1, p2, p3, p4); + for (let i = 2; i <= config.widthCount; i++) { + initPts.push(...[p1, p2, p3, p4].map(p => p.clone().add(new Vector3(0, (config.gripWidth + br.Thickness) * (i - 1))))); + } + initPts.reverse(); + let cu = br.ContourCurve; + cu.AddVertexAt(cu.EndParam, initPts.map(p => AsVector2(p))); + br.ContourCurve = cu; + } + else { + addWidth = (addWidth - 2 * rightEdge) / 2; + let p1 = new Vector3(br.Width, gripHeight - addWidth); + let p2 = new Vector3(br.Width / 2 - grooveLenAdd, gripHeight - addWidth); + let p3 = new Vector3(br.Width / 2 - grooveLenAdd, gripHeight + br.Thickness + addWidth); + let p4 = new Vector3(br.Width, gripHeight + br.Thickness + addWidth); + initPts.push(p1, p2, p3, p4); + for (let i = 2; i <= config.heightCount; i++) { + initPts.push(...[p1, p2, p3, p4].map(p => p.clone().add(new Vector3(0, (gripHeight + br.Thickness) * (i - 1))))); + } + let cu = br.ContourCurve; + cu.AddVertexAt(2, initPts.map(p => AsVector2(p))); + br.ContourCurve = cu; + } + this.ParseHighSealing(br, config.leftEdge, config.rightEdge, config.topEdge, config.bottomEdge, br.BoardType === BoardType.Layer); + } +} + +let TemplateWineRackRecord = class TemplateWineRackRecord extends TemplateRecord { + constructor() { + super(); + this.option = { ...DefaultWineRackConfig }; + this.name = "酒格(自动)"; + } + get Option() { + return Object.assign({}, this.option); + } + set Option(option) { + this.WriteAllObjectRecord(); + Object.assign(this.option, option); + ExtendsBoardThickness(this, option.boardThick); + } + async Update() { + await super.Update(); + let bh = this.GetParam("BH")?.value; + if (bh) + this.option.boardThick = bh; + let bh2 = this.GetParam("BH2")?.value; + if (bh2) + this.option.brThick2 = bh2; + let wineRack; + if (this.option.type === EWineRackType.Oblique) + wineRack = DrawObliqueWineRackTool.GetInstance(); + else + wineRack = DrawUprightWineRackTool.GetInstance(); + let sbrs = this.PositioningSupportBoards; + let space = new ISpaceParse(sbrs, this._CacheSpaceCS); + space.ParseOK = true; + space.SpaceBox = new Box3Ext(new Vector3(), this._CacheSpaceSize); + wineRack.Parse(space, this.Option); + let nbrs = wineRack.boardlist; + for (let i = nbrs.length; i < this.Objects.length; i++) + this.Objects[i].Object.Erase(); + for (let i = 0; i < nbrs.length; i++) { + if (i < this.Objects.length) { + let br = this.Objects[i].Object; + br.Erase(false); + br.CopyFrom(nbrs[i]); + br.SpaceOCS = this._CacheSpaceCS; + } + else { + this._db.ModelSpace.Append(nbrs[i]); + this.Objects.push(nbrs[i].Id); + nbrs[i].SpaceOCS = this._CacheSpaceCS; + } + } + } + //#region -------------------------File------------------------- + //对象应该实现dataIn和DataOut的方法,为了对象的序列化和反序列化 + //对象从文件中读取数据,初始化自身 + ReadFile(file) { + let ver = file.Read(); + super.ReadFile(file); + this.option.type = file.Read(); + this.option.arrayType = file.Read(); + this.option.fullType = file.Read(); + this.option.isFull = file.Read(); + this.option.fullDir = file.Read(); + this.option.isLock = file.Read(); + this.option.heightCount = file.Read(); + this.option.widthCount = file.Read(); + this.option.isTotalDepth = file.Read(); + this.option.depth = file.Read(); + this.option.calcDepth = file.Read(); + this.option.gripWidth = file.Read(); + this.option.boardThick = file.Read(); + this.option.grooveWidthAdd = file.Read(); + this.option.leftEdge = file.Read(); + this.option.rightEdge = file.Read(); + this.option.topEdge = file.Read(); + this.option.bottomEdge = file.Read(); + this.option.frontCut = file.Read(); + this.option.leftCut = file.Read(); + this.option.rightCut = file.Read(); + this.option.topCut = file.Read(); + this.option.grooveLengthAdd = file.Read(); + this.option.isDrawLy = file.Read(); + this.option.isDrawVer = file.Read(); + this.option.brThick2 = file.Read(); + if (ver > 1) + this.option.followNarrow = file.Read(); + } + //对象将自身数据写入到文件. + WriteFile(file) { + file.Write(2); + super.WriteFile(file); + file.Write(this.option.type); + file.Write(this.option.arrayType); + file.Write(this.option.fullType); + file.Write(this.option.isFull); + file.Write(this.option.fullDir); + file.Write(this.option.isLock); + file.Write(this.option.heightCount); + file.Write(this.option.widthCount); + file.Write(this.option.isTotalDepth); + file.Write(this.option.depth); + file.Write(this.option.calcDepth); + file.Write(this.option.gripWidth); + file.Write(this.option.boardThick); + file.Write(this.option.grooveWidthAdd); + file.Write(this.option.leftEdge); + file.Write(this.option.rightEdge); + file.Write(this.option.topEdge); + file.Write(this.option.bottomEdge); + file.Write(this.option.frontCut); + file.Write(this.option.leftCut); + file.Write(this.option.rightCut); + file.Write(this.option.topCut); + file.Write(this.option.grooveLengthAdd); + file.Write(this.option.isDrawLy); + file.Write(this.option.isDrawVer); + file.Write(this.option.brThick2); + file.Write(this.option.followNarrow); + } +}; +TemplateWineRackRecord = __decorate([ + Factory +], TemplateWineRackRecord); + +function IsHinge(en) { + if (en instanceof HardwareCompositeEntity) { + if (en.Template) { + let temp = en.Template.Object; + if (temp?.Parent?.Object?.Name === "铰链空间") + return true; + } + // else //有时候 模块会被破坏,所以模块检测不是唯一标准 + { + return en.HardwareOption.name.includes("铰链"); + } + } +} + var TextAligen; (function (TextAligen) { TextAligen[TextAligen["LeftTop"] = 3] = "LeftTop"; @@ -25588,7 +29927,8 @@ let ViewportEntity = ViewportEntity_1 = class ViewportEntity extends Entity { if (!this._ShowObjectIds.has(en.Id) || this._HideObjectIds.has(en.Id)) return false; } - if (en instanceof HardwareCompositeEntity && en.HardwareOption.name.includes("铰链")) + // if (en instanceof HardwareCompositeEntity && en.HardwareOption.name.includes("铰链")) + if (IsHinge(en)) return false; return true; } @@ -27503,6 +31843,30 @@ let BoxSolid = class BoxSolid extends Entity { this.OnlyRenderType = true; this._opacity = 0.5; } + get Length() { return this._length; } + get Width() { return this._width; } + get Height() { return this._height; } + set Length(v) { + if (!equaln$1(v, this._length, 1e-5)) { + this.WriteAllObjectRecord(); + this._length = v; + this.Update(); + } + } + set Width(v) { + if (!equaln$1(v, this._width, 1e-5)) { + this.WriteAllObjectRecord(); + this._width = v; + this.Update(); + } + } + set Height(v) { + if (!equaln$1(v, this._height, 1e-5)) { + this.WriteAllObjectRecord(); + this._height = v; + this.Update(); + } + } set Opacity(o) { if (o !== this._opacity) { this.WriteAllObjectRecord(); @@ -27524,6 +31888,12 @@ let BoxSolid = class BoxSolid extends Entity { obj.children[0].position.copy(new Vector3(this._length / 2, this._width / 2, this._height / 2)); obj.children[0].updateMatrix(); } + get BoundingBoxInOCS() { + return new Box3Ext(new Vector3, new Vector3(this._length, this._width, this._height)); + } + get BoundingBox() { + return this.BoundingBoxInOCS.applyMatrix4(this.OCSNoClone); + } }; BoxSolid = __decorate([ Factory @@ -29122,2342 +33492,6 @@ RoomHoleLine = __decorate([ ], RoomHoleLine); applyMixins(RoomHoleLine, Line); -class ISpaceParse { - /** - * # 构造后请手动调用Parse()方法. - * @param boards 板件列表 - * @param [spaceOCS] 默认空间矩阵,如果不设置将使用第一块板作为空间矩阵 - */ - constructor(boards, spaceOCS) { - /** - * 解析空间成功 - */ - this.ParseOK = false; - /** - * 板件映射表 - */ - this.BoardMap = new Map(); - /** - * 动态中,禁止执行二次操作 - */ - this.IsDynamic = false; - this.Rotation = { x: 0, y: 0, z: 0 }; - this.Boards = boards; - if (spaceOCS) - this.SpaceOCS = spaceOCS; - else if (boards && boards.length > 0) - this.SpaceOCS = boards[0].SpaceOCS; - else - this.SpaceOCS = new Matrix4(); - this.SpaceOCSInv = new Matrix4().getInverse(this.SpaceOCS); - this.GeneralBoardMap(); - } - async Parse() { - } - get Size() { - if (this.SpaceBox) - return this.SpaceBox.getSize(new Vector3()); - return new Vector3(); - } - get DrawCS() { - if (!this.ParseOK) - return new Matrix4(); - let scs = this.SpaceOCS.clone(); - let p = this.SpaceBox.min.clone().applyMatrix4(scs); - scs.setPosition(p); - return scs; - } - GetBoardInSpaceType(br) { - //使用板件向量判断类型,而不是板件类型 - let normal = br.Normal.transformDirection(this.SpaceOCSInv); - let type; - if (isParallelTo(XAxis, normal, 1e-3)) - type = BoardType.Vertical; - else if (isParallelTo(YAxis, normal, 1e-3)) - type = BoardType.Behind; - else if (isParallelTo(ZAxis, normal, 1e-3)) - type = BoardType.Layer; - return type; - } - /** - * 构造板件类型Map - */ - GeneralBoardMap() { - if (this.Boards && this.Boards.length > 0) { - this.BoardMap.clear(); - for (let br of this.Boards) { - let type = this.GetBoardInSpaceType(br); - if (type === undefined) - continue; - let brs = this.BoardMap.get(type); - if (brs) - brs.push(br); - else - this.BoardMap.set(type, [br]); - } - } - } - /** - * 解析板件的盒子,并且(排序,归并) - * @param boardCol - * @param splitType - */ - ParseBoardBox(boardCol, splitType) { - let boxCol = boardCol.map(b => b.GetBoundingBoxInMtx(this.SpaceOCSInv)); - //查找最左的板和最右的板 - if (splitType === SplitType.X) { - let minX = Infinity; - let leftIndex = 0; - let maxX = -Infinity; - let rightIndex = 0; - for (let i = 0; i < boxCol.length; i++) { - let box = boxCol[i]; - if (box.min.x < minX) { - minX = box.min.x; - leftIndex = i; - } - if (box.max.x > maxX) { - maxX = box.max.x; - rightIndex = i; - } - } - this.LeftBoard = boardCol[leftIndex]; - this.RightBoard = boardCol[rightIndex]; - } - //根据分割类型排序 - boxCol.sort((b1, b2) => { - return b1.min.getComponent(splitType) - b2.min.getComponent(splitType); - }); - //归并盒子 - arrayRemoveDuplicateBySort(boxCol, (b1, b2) => { - if ( - //对齐 - equaln$1(b1.min.getComponent(splitType), b2.min.getComponent(splitType), 1e-3) - && - //厚度相等 - equaln$1(b1.getSize(new Vector3()).getComponent(splitType), b2.getSize(new Vector3()).getComponent(splitType), 1e-3)) { - b1.union(b2); - return true; - } - return false; - }); - return boxCol; - } -} - -/** - * 模版动作 - */ -let TemplateAction = class TemplateAction { - constructor() { - this.Name = "动作"; - } - WriteAllObjectRecord() { - if (this.parent) - this.parent.WriteAllObjectRecord(); - } - Update(paramDiff, newValue) { - if (this.Expr) { - let varDefines = {}; - varDefines[this.parent.name] = newValue; - newValue = safeEval(this.Expr, varDefines) || newValue; - varDefines[this.parent.name] = paramDiff; - paramDiff = safeEval(this.Expr, varDefines) || paramDiff; - } - this._Update(paramDiff, newValue); - } - /** - * @重载 - */ - _Update(paramDiff, newValue) { - } - //#region -------------------------File------------------------- - //对象应该实现dataIn和DataOut的方法,为了对象的序列化和反序列化 - //对象从文件中读取数据,初始化自身 - ReadFile(file) { - let ver = file.Read(); - this.Name = file.Read(); - if (ver > 2) { - this.Expr = file.Read(); - this.Description = file.Read(); - } - } - //对象将自身数据写入到文件. - WriteFile(file) { - file.Write(3); - file.Write(this.Name); - file.Write(this.Expr); - file.Write(this.Description); - } -}; -__decorate([ - AutoRecord -], TemplateAction.prototype, "Name", void 0); -__decorate([ - AutoRecord -], TemplateAction.prototype, "Expr", void 0); -__decorate([ - AutoRecord -], TemplateAction.prototype, "Description", void 0); -TemplateAction = __decorate([ - Factory -], TemplateAction); - -var PromptStatus; -(function (PromptStatus) { - PromptStatus[PromptStatus["None"] = 0] = "None"; - PromptStatus[PromptStatus["Cancel"] = -1] = "Cancel"; - PromptStatus[PromptStatus["OK"] = 1] = "OK"; - PromptStatus[PromptStatus["Keyword"] = 2] = "Keyword"; - PromptStatus[PromptStatus["Other"] = 4] = "Other"; - PromptStatus[PromptStatus["String"] = 8] = "String"; - PromptStatus[PromptStatus["Error"] = -2] = "Error"; -})(PromptStatus || (PromptStatus = {})); -// export enum Errno 未来某一天我们可能需要这个东西 -// { -// Space = 0, -// Enter = 1, -// Esc = 2, -// Left = 3, -// Right = 4, -// } -class PromptResult { - constructor() { - this.Status = PromptStatus.None; - //是否为子级菜单 - this.isChild = false; - //当用户选择失败的时候,提供当前选择失败的原因 - // Errno?: Errno; - } -} -class PromptDistendResult extends PromptResult { - get Distance() { - return this._value; - } - set Distance(v) { - this._value = v; - } -} -class PromptEntityResult extends PromptResult { - constructor( - //选择到的图形 - Entity, - //点取的点 - Point, Object, IsCircle) { - super(); - this.Entity = Entity; - this.Point = Point; - this.Object = Object; - this.IsCircle = IsCircle; - } -} - -function Encode(res, enMap) { - if (res.Entity instanceof Line || res.Entity.constructor.name === "RoomWallLine") { - enMap[0].push(res); - return 1; - } - else if (res.Entity instanceof Arc || res.constructor.name === "RoomWallArc") { - enMap[1].push(res); - return 2; - } - else if (res.Entity instanceof Polyline) { - enMap[2].push(res); - return 4; - } - else if (res.Entity instanceof Spline) { - enMap[3].push(res); - return 8; - } - else if (res.Entity instanceof Ellipse) { - enMap[4].push(res); - return 16; - } -} -//把圆转换成圆弧,避免圆参与计算. -function CircleEnResToArc(enRes) { - if (enRes.Entity instanceof Circle) { - let an = angle(enRes.Point.clone().applyMatrix4(enRes.Entity.OCSInv)) + Math.PI; - let arc = new Arc(new Vector3(), enRes.Entity.Radius, an, an + 0.1); - arc.ApplyMatrix(enRes.Entity.OCS); - arc.Center = enRes.Entity.Center; - enRes.Entity = arc; - enRes.IsCircle = true; - } -} -function GetFilletCurve(enRes) { - if (enRes.Entity instanceof Polyline) { - let pl = enRes.Entity; - let param = pl.GetParamAtPoint(pl.GetClosestPointTo(enRes.Point, false)); - let paramF = Math.floor(param); - return [pl.GetCurveAtParam(param), paramF]; - } - else - return [enRes.Entity, NaN]; -} -var ExtendType; -(function (ExtendType) { - ExtendType[ExtendType["Start"] = 1] = "Start"; - ExtendType[ExtendType["End"] = 2] = "End"; -})(ExtendType || (ExtendType = {})); -class FilletUtils { - Fillet(enRes1, enRes2) { - CircleEnResToArc(enRes1); - CircleEnResToArc(enRes2); - let { enType, enMap } = this.EnCode(enRes1, enRes2); - if (enType === 4 && enRes1.Entity === enRes2.Entity) - return this.FilletPolyLineSelf(enRes1, enRes2); - else if (enType >= 4 && enType < 8) - return this.FilletPolylineAndCurve(enRes1, enRes2); - let interPts = this.GetIntersectAndSort(enRes1, enRes2, enType, enMap); - if (interPts.length === 0 - || (interPts.length === 1 && (enType & 2))) //圆弧相切 - { - if (enType === 1) - return this.FilletParallelLine(enRes1, enRes2); - else if (enType === 3) - return this.FilletLineAndArc(enMap, enRes1); - else if (enType === 2) - return this.FilletArcAndArc(enRes1, enRes2); - return; - } - return this.FilletLineOrArc(enRes1, enRes2, interPts); - } - FilletLineOrArc(enRes1, enRes2, interPts) { - let iPt = interPts[0]; - //裁剪延伸,使两条线组成一个尖角 - let splitedCu1 = this.SplitCurve(enRes1, iPt, interPts); - let splitedCu2 = this.SplitCurve(enRes2, iPt, interPts); - let fRadius = this.FilletRadius; - let res = { cu1: splitedCu1.Curve, cu2: splitedCu2.Curve, arc: undefined }; - if (fRadius > 0) { - //角平分线向量. - let bisectorVec = new Vector3(); - let c1Derv = this.ComputerDerv(splitedCu1, bisectorVec); - let c2Derv = this.ComputerDerv(splitedCu2, bisectorVec); - //方向相反 - if (equalv3(bisectorVec, new Vector3())) - return; - //相切 - if (equalv3(c2Derv, c1Derv)) { - bisectorVec.set(0, 0, 0); - c1Derv = this.ComputerDerv2(splitedCu1, bisectorVec); - c2Derv = this.ComputerDerv2(splitedCu2, bisectorVec); - } - let cu1RoOcsInv = new Matrix4().extractRotation(splitedCu1.Curve.OCSInv); - [c1Derv, c2Derv, bisectorVec].forEach(v => v.applyMatrix4(cu1RoOcsInv)); - let offCu1 = splitedCu1.Curve.GetOffsetCurves(fRadius * -Math.sign(c1Derv.cross(bisectorVec).z))[0]; - let offCu2 = splitedCu2.Curve.GetOffsetCurves(fRadius * -Math.sign(c2Derv.cross(bisectorVec).z))[0]; - if (!offCu1 || !offCu2) - return; - // JigUtils.Draw(new Line(iPt, iPt.clone().add(c1Derv.clone().multiplyScalar(10)))).ColorIndex = 1; - // JigUtils.Draw(new Line(iPt, iPt.clone().add(c2Derv.clone().multiplyScalar(10)))).ColorIndex = 2; - // JigUtils.Draw(new Line(iPt, iPt.clone().add(bisectorVec))).ColorIndex = 3; - // offCu1.ColorIndex = 6; - // offCu2.ColorIndex = 6; - // JigUtils.Draw(offCu1.Clone()); - // JigUtils.Draw(offCu2.Clone()); - let center = offCu1.IntersectWith(offCu2, IntersectOption.ExtendNone) - .sort((p1, p2) => { - return p1.distanceToSquared(iPt) - p2.distanceToSquared(iPt); - })[0]; - if (!center) - return; - let arcP1 = splitedCu1.Curve.GetClosestPointTo(center, true); - let arcP2 = splitedCu2.Curve.GetClosestPointTo(center, true); - if (!splitedCu1.Curve.PtOnCurve(arcP1) || !splitedCu2.Curve.PtOnCurve(arcP2)) - return; - //时针校验 - let v1 = arcP1.clone().sub(center).applyMatrix4(cu1RoOcsInv); - let v2 = arcP2.clone().sub(center).applyMatrix4(cu1RoOcsInv); - //绘制圆弧 - let arc = new Arc(new Vector3(), this.FilletRadius, angle(v1), angle(v2), v1.cross(v2).z < 0); - arc.ApplyMatrix(splitedCu1.Curve.OCS); - arc.Center = center; - res.arc = arc; - //延伸或者裁剪到圆弧点 - this.ExtendPt(splitedCu1, arcP1); - this.ExtendPt(splitedCu2, arcP2); - } - res.cu1Extend = splitedCu1.ExtType; - res.cu2Extend = splitedCu2.ExtType; - return res; - } - FilletPolyLineSelf(enRes1, enRes2) { - let pl = enRes1.Entity; - let param1 = pl.GetParamAtPoint(pl.GetClosestPointTo(enRes1.Point, false)); - let param2 = pl.GetParamAtPoint(pl.GetClosestPointTo(enRes2.Point, false)); - if (param1 > param2) { - [param1, param2] = [param2, param1]; - [enRes1, enRes2] = [enRes2, enRes1]; - } - let parF1 = Math.floor(param1); - let parF2 = Math.floor(param2); - //共线 - if (parF1 === parF2) - return; - let c1 = pl.GetCurveAtParam(param1); - let c2 = pl.GetCurveAtParam(param2); - if (equalv3(c1.GetFistDeriv(1).normalize(), c2.GetFistDeriv(0).normalize())) - return; - let es1 = new PromptEntityResult(); - es1.Entity = c1; - es1.Point = enRes1.Point; - let es2 = new PromptEntityResult(); - es2.Entity = c2; - es2.Point = enRes2.Point; - let fres = this.Fillet(es1, es2); - if (!fres) - return; - let pln = pl.Clone(); - if (fres.cu1 instanceof Arc) - pln.SetBulgeAt(parF1, fres.cu1.Bul); - if (fres.cu2 instanceof Arc) - pln.SetBulgeAt(parF2, fres.cu2.Bul); - let splitType1 = fres.cu1Extend; - let splitType2 = fres.cu2Extend; - if (splitType1 === splitType2) - return; - if (!fres.arc) { - if (splitType1 === ExtendType.End) { - let ep = AsVector2(fres.cu1.EndPoint.applyMatrix4(pln.OCSInv)); - pln.SetPointAt(parF1 + 1, ep); - let sp = AsVector2(fres.cu2.StartPoint.applyMatrix4(pln.OCSInv)); - pln.SetPointAt(parF2, sp); - //移除多余的点 - pln.LineData.splice(parF1 + 1, parF2 - parF1 - 1); - pln.Update(); - return { cu1: pln }; - } - else { - let ep = AsVector2(fres.cu1.StartPoint.applyMatrix4(pln.OCSInv)); - pln.SetPointAt(parF1, ep); - let sp = AsVector2(fres.cu2.EndPoint.applyMatrix4(pln.OCSInv)); - pln.SetPointAt(parF2 + 1, sp); - pln.LineData.splice(parF2 + 2); - pln.LineData.splice(0, parF1); - pln.Update(); - return { cu1: pln }; - } - } - if (splitType1 === ExtendType.End) //没有经过起点 - { - let sp = AsVector2(fres.cu1.EndPoint.applyMatrix4(pln.OCSInv)); - if (parF2 - parF1 === 1) { - pln.AddVertexAt(parF1 + 1, sp); - parF2++; - } - else - pln.SetPointAt(parF1 + 1, sp); - pln.SetBulgeAt(parF1 + 1, fres.arc.Bul); - let ep = AsVector2(fres.cu2.StartPoint.applyMatrix4(pln.OCSInv)); - pln.SetPointAt(parF2, ep); - //移除多余的点 - pln.LineData.splice(parF1 + 2, parF2 - parF1 - 2); - pln.Update(); - return { cu1: pln }; - } - else //经过起点 - { - let sp = AsVector2(fres.arc.EndPoint.applyMatrix4(pln.OCSInv)); - let keepF1 = 0; - if (parF2 + 1 <= pln.LineData.length) { - if (parF1 === 0 || equaln$1(pln.GetBulgeAt(parF1 - 1), 0)) - pln.AddVertexAt(parF2 + 1, sp); - else { - pln.SetPointAt(parF1 - 1, sp); - keepF1 = -1; //保留圆弧位 - } - } - else - pln.SetPointAt(parF2 + 1, sp); - if (keepF1 === 0) - pln.SetBulgeAt(parF2 + 1, -fres.arc.Bul); - else - pln.SetBulgeAt(parF1 - 1, -fres.arc.Bul); - let ep = AsVector2(fres.cu1.StartPoint.applyMatrix4(pln.OCSInv)); - pln.SetPointAt(parF1, ep); - pln.CloseMark = true; - pln.LineData.splice(parF2 + 2 + keepF1); - pln.LineData.splice(0, parF1 + keepF1); - pln.Update(); - return { cu1: pln }; - } - } - FilletPolylineAndCurve(enRes1, enRes2) { - let arr1 = GetFilletCurve(enRes1); - let arr2 = GetFilletCurve(enRes2); - let [cu1, paramF1] = arr1; - let [cu2, paramF2] = arr2; - let es1 = new PromptEntityResult(); - es1.Entity = cu1; - es1.Point = enRes1.Point; - let es2 = new PromptEntityResult(); - es2.Entity = cu2; - es2.Point = enRes2.Point; - let fres = this.Fillet(es1, es2); - if (fres) { - let cus = []; - let isFirst = false; - if (fres.cu1) { - if (enRes1.Entity instanceof Polyline) { - isFirst = true; - let pln = enRes1.Entity.Clone(); - pln.DigestionCloseMark(); - if (fres.cu1 instanceof Arc) - pln.SetBulgeAt(paramF1, fres.cu1.Bul); - if (fres.cu1Extend === ExtendType.End) { - pln.LineData.splice(paramF1 + 2); - let ep = AsVector2(fres.cu1.EndPoint.applyMatrix4(pln.OCSInv)); - pln.SetPointAt(paramF1 + 1, ep); - } - else { - pln.LineData.splice(0, paramF1); - let sp = AsVector2(fres.cu1.StartPoint.applyMatrix4(pln.OCSInv)); - pln.SetPointAt(0, sp); - } - cus.push(pln); - } - else if (!enRes1.IsCircle) - cus.push(fres.cu1); - } - if (fres.arc) - cus.push(fres.arc); - if (fres.cu2) { - if (enRes2.Entity instanceof Polyline) { - let pln = enRes2.Entity.Clone(); - pln.DigestionCloseMark(); - if (fres.cu2 instanceof Arc) - pln.SetBulgeAt(paramF2, fres.cu2.Bul); - if (fres.cu2Extend === ExtendType.End) { - pln.LineData.splice(paramF2 + 2); - let ep = AsVector2(fres.cu2.EndPoint.applyMatrix4(pln.OCSInv)); - pln.SetPointAt(paramF2 + 1, ep); - } - else { - pln.LineData.splice(0, paramF2); - let sp = AsVector2(fres.cu2.StartPoint.applyMatrix4(pln.OCSInv)); - pln.SetPointAt(0, sp); - } - cus.push(pln); - cus.reverse(); - } - else if (!enRes2.IsCircle) - cus.push(fres.cu2); - } - if (cus.length > 0) { - let pl = cus[0]; - if (!(pl instanceof Polyline)) - return; - for (let i = 1; i < cus.length; i++) - pl.Join(cus[i]); - if (isFirst) - return { cu1: pl }; - else - return { cu2: pl }; - } - } - return undefined; - } - FilletPolyLineAllAngular(enRes1) { - let pl = enRes1.Entity; - let cus = pl.Explode(); - let count = cus.length; - if (pl.IsClose) - cus.push(cus[0]); - let ncus = []; - for (let i = 0; i < count; i++) { - let c1 = cus[i]; - let c2 = cus[i + 1]; - ncus.push(c1); - if (!c2) - break; - if (equalv3(c1.GetFistDeriv(1).normalize(), c2.GetFistDeriv(0).normalize())) - continue; - let es1 = new PromptEntityResult(); - es1.Entity = c1; - es1.Point = c1.EndPoint; - let es2 = new PromptEntityResult(); - es2.Entity = c2; - es2.Point = c2.StartPoint; - let fres = this.Fillet(es1, es2); - if (fres) { - if (fres.cu1) - c1.CopyFrom(fres.cu1); - if (fres.cu2) - c2.CopyFrom(fres.cu2); - if (fres.arc) - ncus.push(fres.arc); - } - } - let pln = pl.Clone(); - pln.LineData = []; - pln.ApplyMatrix(pln.OCSInv); - pln.CloseMark = false; - for (let cu of ncus) - pln.Join(cu); - pln.CloseMark = pl.CloseMark; - return { - cu1: pln, - cu2: undefined, - arc: undefined - }; - } - FindNearestPt(pts, target) { - let res = pts[0]; - let dis = Infinity; - for (let p of pts) { - let d = p.distanceTo(target); - if (d < dis) { - res = p; - dis = d; - } - } - return res; - } - FilletBoard(brRes, ptRes) { - let br = brRes.Entity; - let brContour = br.ContourCurve.Clone(); - //------1.求交 - let brResPt = brRes.Point.clone().applyMatrix4(br.OCSInv).setZ(0); - let ptResPt = ptRes.Point.clone().applyMatrix4(br.OCSInv).setZ(0); - let l = new Line(brResPt, ptResPt); - let ipts = l.IntersectWith(brContour, IntersectOption.ExtendThis); - if (ipts.length > 2) //超过2个则有可能有多余交点 - //找最近点 - ipts = [this.FindNearestPt(ipts, brResPt), this.FindNearestPt(ipts, ptResPt)]; - if (ipts.length !== 2) - return "倒角失败!交点个数异常."; - //------2.倒角 - let es1 = new PromptEntityResult(brContour, ipts[0]); - let es2 = new PromptEntityResult(brContour, ipts[1]); - let res = this.FilletPolyLineSelf(es1, es2); - if (res && res.cu1) - return res.cu1; - else - return "倒角失败"; - } - /** - * 平行线倒角 - */ - FilletParallelLine(enRes1, enRes2) { - let l1 = enRes1.Entity; - let l2 = enRes2.Entity; - let l1Derv = l1.GetFistDeriv(0); - if (!isParallelTo(l1Derv, l2.GetFistDeriv(0))) - return; - let vec = l2.StartPoint.sub(l1.StartPoint); - if (isParallelTo(vec, l1Derv)) - return; - let par1 = l2.GetClosestAtPoint(l1.StartPoint, true).param; - let par2 = l2.GetClosestAtPoint(l1.EndPoint, true).param; - if (!isIntersect2(0, 1, par1, par2)) - return; - let lineClone1 = l1.Clone(); - let lineClone2 = l2.Clone(); - let par = l1.GetClosestAtPoint(enRes1.Point, true).param; - let parFix = Math.round(par); - let ptFix = lineClone1.GetPointAtParam(parFix); - let ptL2Fix = lineClone2.GetClosestAtPoint(ptFix, true).closestPt; - let cu1Extend = parFix === 0 ? ExtendType.Start : ExtendType.End; - let cu2Extend; - if ((par1 > par2) === (parFix === 1)) { - lineClone2.StartPoint = ptL2Fix; - cu2Extend = ExtendType.Start; - } - else { - lineClone2.EndPoint = ptL2Fix; - cu2Extend = ExtendType.End; - } - let radius = ptFix.distanceTo(ptL2Fix) / 2; - if (radius < 1e-3) - return; - let arcCenter = midPoint(ptFix, ptL2Fix); - let sv = ptFix.sub(arcCenter); - let ev = ptL2Fix.sub(arcCenter); - if (parFix === 0) - l1Derv.negate(); - //平面矩阵 - let xVec = new Vector3(); - let yVec = new Vector3(); - let zVec = vec.cross(l1Derv).normalize(); - let l1Normal = l1.Normal; - if (isParallelTo(zVec, l1Normal)) - zVec = l1Normal; - Orbit.ComputUpDirection(zVec, yVec, xVec); - let mtx = new Matrix4().makeBasis(xVec, yVec, zVec); - let mtxInv = new Matrix4().getInverse(mtx); - //变换 - sv.applyMatrix4(mtxInv); - ev.applyMatrix4(mtxInv); - l1Derv.applyMatrix4(mtxInv); - let sa = angle(sv); - let ea = angle(ev); - let clockwise = ev.cross(l1Derv).z > 0; - let arc = new Arc(new Vector3(), radius, sa, ea, clockwise); - arc.ApplyMatrix(mtx); - arc.Center = arcCenter; - return { - cu1: lineClone1, - cu1Extend, - cu2: lineClone2, - cu2Extend, - arc, - }; - } - /** - * 计算圆弧与圆弧没有交点的情况下倒角结果. - * @param enRes1 - * @param enRes2 - * @returns arc and arc - */ - FilletArcAndArc(enRes1, enRes2) { - let a1 = enRes1.Entity; - let a2 = enRes2.Entity; - let arcO1 = a1.GetOffsetCurves(this.FilletRadius * (a1.IsClockWise ? -1 : 1))[0]; - let arcO2 = a2.GetOffsetCurves(this.FilletRadius * (a2.IsClockWise ? -1 : 1))[0]; - // arcO1.ColorIndex = 6; - // arcO2.ColorIndex = 6; - // JigUtils.Draw(arcO1); - // JigUtils.Draw(arcO2); - //求交 - let intPts = arcO1.IntersectWith(arcO2, IntersectOption.ExtendBoth); - if (intPts.length === 0) - return; //无交点无法倒角 - //两选择点的中点 - let clickMidp = midPoint(enRes1.Point, enRes2.Point); //用来选择合适的交点 - //选择合适的交点 - intPts.sort((p1, p2) => { - return p1.distanceToSquared(clickMidp) - p2.distanceToSquared(clickMidp); - }); - //圆弧圆心 - let narcCenter = intPts[0]; - let narcP1 = a1.GetClosestPointTo(narcCenter, true); //两圆弧和相切弧的交点 - let narcP2 = a2.GetClosestPointTo(narcCenter, true); - let tempCircle = new Circle(narcCenter, this.FilletRadius); - tempCircle.OCSNoClone.copy(a1.OCSNoClone).setPosition(narcCenter); - let closestPt = a1.GetClosestPointTo(a2.Center, true); //两曲线距离对方圆心最近的点 - let narcMP = tempCircle.GetClosestPointTo(closestPt, false); //相切圆距离closestPt最近的点 - //构造圆弧 - let narc = new Arc().ApplyMatrix(a1.OCS).FromThreePoint(narcP1, narcMP, narcP2); - let a1Clone = a1.Clone(); - let a2Clone = a2.Clone(); - let a1Param = a1.GetParamAtPoint(narcP1); - let a2Param = a2.GetParamAtPoint(narcP2); - let a1Derv = a1.GetFistDeriv(a1Param).normalize(); - let a2Derv = a2.GetFistDeriv(a2Param).normalize(); - let narcDerv0 = narc.GetFistDeriv(0).normalize(); - let narcDerv1 = narc.GetFistDeriv(1).normalize(); - //裁剪圆弧 - if (equalv3(a1Derv, narcDerv0)) - a1Clone.EndPoint = narcP1; - else - a1Clone.StartPoint = narcP1; - if (equalv3(a2Derv, narcDerv1)) - a2Clone.StartPoint = narcP2; - else - a2Clone.EndPoint = narcP2; - return { - cu1: a1Clone, - cu2: a2Clone, - arc: narc - }; - } - /** - * 计算直线与圆弧没有交点(或相切)的情况下倒角结果 - * @param enRes1 - * @param enRes2 - * @returns line and cir - */ - FilletLineAndArc(enMap, enRes1) { - let lineRes = enMap[0][0]; - let arcRes = enMap[1][0]; - let line = lineRes.Entity; - let arc = arcRes.Entity; - let dir = GetPointAtCurveDir(line, arc.Center); - let lineO = line.GetOffsetCurves(this.FilletRadius * dir)[0]; - let arcO = arc.GetOffsetCurves(this.FilletRadius * (arc.IsClockWise ? -1 : 1))[0]; // tip:面积逆时针为正, 顺时针为负. - // lineO.ColorIndex = 6; - // arcO.ColorIndex = 6; - // JigUtils.Draw(lineO); - // JigUtils.Draw(arcO); - //求交 - let intPts = lineO.IntersectWith(arcO, IntersectOption.ExtendBoth); - if (intPts.length === 0) - return; //无交点无法倒角 - //两选择点的中点 - let clickMidp = midPoint(lineRes.Point, arcRes.Point); - //选择适合的交点。 - intPts.sort((p1, p2) => { - return p1.distanceToSquared(clickMidp) - p2.distanceToSquared(clickMidp); - }); - //圆弧圆心 - let arcCenter = intPts[0]; - let arcP1 = line.GetClosestPointTo(arcCenter, true); //直线与相切圆的交点 - let arcP2 = arc.GetClosestPointTo(arcCenter, true); //圆弧与相切圆的交点 - let tempCircle = new Circle(arcCenter, this.FilletRadius); - tempCircle.OCSNoClone.copy(arc.OCSNoClone).setPosition(arcCenter); - let { closestPt, param } = line.GetClosestAtPoint(arc.Center, true); - let arcMP = tempCircle.GetClosestPointTo(closestPt, false); - //构造圆弧 - let narc = new Arc().ApplyMatrix(arc.OCS).FromThreePoint(arcP1, arcMP, arcP2); - //裁剪线 - let lineClone = line.Clone(); - let arcClone = arc.Clone(); - let lineExtend; - let p1Param = line.GetParamAtPoint(arcP1); - if (p1Param > param) { - lineClone.StartPoint = arcP1; - lineExtend = ExtendType.Start; - } - else { - lineClone.EndPoint = arcP1; - lineExtend = ExtendType.End; - } - //裁剪圆弧 - let arcParam = arc.GetParamAtPoint(arcP2); - let arcDerv = arc.GetFistDeriv(arcParam).normalize(); - let narcDerv = narc.GetFistDeriv(1).normalize(); - let arcExtend; - if (equalv3(arcDerv, narcDerv)) { - arcClone.StartPoint = arcP2; - arcExtend = ExtendType.Start; - } - else { - arcClone.EndPoint = arcP2; - arcExtend = ExtendType.End; - } - //先选直线为真 - if (enRes1.Entity === line) - return { - cu1: lineClone, - cu1Extend: lineExtend, - cu2: arcClone, - cu2Extend: arcExtend, - arc: narc - }; - else - return { - cu1: arcClone, - cu1Extend: arcExtend, - cu2: lineClone, - cu2Extend: lineExtend, - arc: narc.Reverse() //#I3BWIA 避免起点和终点方向相反导致的多段线连接错误 - }; - } - //获得两曲线的交点,并且排序交点. - GetIntersectAndSort(enRes, enRes2, enType, enMap) { - let interPts = enRes.Entity.IntersectWith(enRes2.Entity, IntersectOption.ExtendBoth); - if (interPts.length > 1) { - let baseP; - if (enType & 1) //如果有直线,那么用直线 - baseP = enMap[0][0].Point; - else if (enType === 2) //如果都是圆弧,那么取中点 - baseP = midPoint(enMap[1][0].Point, enMap[1][1].Point); - interPts.sort((p1, p2) => p1.distanceToSquared(baseP) - p2.distanceToSquared(baseP)); - } - return interPts; - } - /** - * 对图元列表进行按位编码,类型映射如下: - * # 1:line 2:arc 4:polyline - * @param enRes - * @param enRes2 - * @returns - */ - EnCode(enRes, enRes2) { - let enMap = [[], [], [], [], []]; - let enType = 0; - enType |= Encode(enRes, enMap); - enType |= Encode(enRes2, enMap); - return { enType, enMap }; - } - //计算曲线在相交处的切线,取真实的切线 - ComputerDerv(cuRes, dervSum) { - let derv; - let cu = cuRes.Curve; - if (cuRes.ExtType === ExtendType.Start) { - derv = cu.GetFistDeriv(0).normalize(); - dervSum.add(derv); - } - else { - derv = cu.GetFistDeriv(cu.EndParam).normalize(); - dervSum.add(derv.clone().negate()); - } - return derv; - } - // 计算曲线在相交处的切线,取起点到终点的切线.(当曲线相切时调用此方法.) - ComputerDerv2(cuRes, dervSum) { - let cu = cuRes.Curve; - let derv = cu.EndPoint.sub(cu.StartPoint); - if (cuRes.ExtType === ExtendType.Start) - dervSum.add(derv); - else - dervSum.add(derv.clone().negate()); - return derv; - } - // 延伸或者裁剪到指定的圆弧的点. - ExtendPt(cu, newP) { - if (cu.ExtType === ExtendType.Start) - cu.Curve.StartPoint = newP; - else - cu.Curve.EndPoint = newP; - } - /** - * 切割或者延伸曲线,尖角化 - * - * @param cu 处理的曲线 - * @param interPt 原先的相交点 - * @param pickPoint 鼠标点击点 - * @returns 返回新的曲线 - */ - SplitCurve(enRes, interPt, interPts) { - let cu = enRes.Entity; - let pickPoint = enRes.Point; - let cp = cu.GetClosestPointTo(pickPoint, false); - let cus = cu.GetSplitCurvesByPts([interPt]); - if (cus.length === 0) - cus.push(cu.Clone()); - else if (cus.length === 2) - cus.sort((c1, c2) => { - return c1.GetClosestPointTo(cp, false).distanceTo(cp) - < c2.GetClosestPointTo(cp, false).distanceTo(cp) ? -1 : 1; - }); - let exType = undefined; - let newCu = cus[0]; - if (newCu instanceof Line || newCu.constructor.name === "RoomWallLine") - newCu.Extend(newCu.GetParamAtPoint(interPt)); //延伸到需要的长度 - else if (newCu instanceof Arc || newCu.constructor.name === "RoomWallArc") { - let arc = newCu; - if (cus.length === 1) - if (!cu.PtOnCurve(interPt)) { - if (cu.PtOnCurve(interPts[1])) { - //交点参数 - let iparam = arc.GetParamAtPoint(interPts[1]); - let pickParam = arc.GetParamAtAngle(arc.GetAngleAtPoint(pickPoint)); - if (pickParam > iparam) { - arc.EndAngle = arc.GetAngleAtPoint(interPt); - exType = ExtendType.End; - } - else { - arc.StartAngle = arc.GetAngleAtPoint(interPt); - exType = ExtendType.Start; - } - } - else { - //终点,起点 - interPts = interPts.sort((p1, p2) => { - return arc.ComputeAnlge(arc.GetAngleAtPoint(p1)) - arc.ComputeAnlge(arc.GetAngleAtPoint(p2)); - }); - if (interPt === interPts[0]) { - arc.EndAngle = arc.GetAngleAtPoint(interPt); - exType = ExtendType.End; - } - else { - arc.StartAngle = arc.GetAngleAtPoint(interPt); - exType = ExtendType.Start; - } - } - } - } - if (exType === undefined) { - //使用equalv3时由于精度误差导致的判断错误 - if (interPt.manhattanDistanceTo(newCu.StartPoint) < interPt.manhattanDistanceTo(newCu.EndPoint)) - exType = ExtendType.Start; - else - exType = ExtendType.End; - } - return { Curve: newCu, ExtType: exType }; - } -} - -let TemplateFilletAction = class TemplateFilletAction extends TemplateAction { - constructor() { - super(); - this.FilletDatas = []; - } - _Update(paramDiff, newValue) { - for (let d of this.FilletDatas) { - if (d.Entity?.IsErase !== false) - continue; - let br = d.Entity.Object; - let update_bak = br.AutoUpdate; - br.AutoUpdate = false; - if (d.ArcParams.length > 0) - this.Fillet(br, newValue, d); - if (br.Grooves.length > 0 && d.Grooves?.length) { - for (let data of d.Grooves) { - const groove = br.Grooves[data.Index]; - if (groove) - this.Fillet(groove, newValue, data); - } - } - const path2d = br.Modeling2D; - if (path2d.length > 0 && d.Path2D?.length) { - for (let data of d.Path2D) { - let vm = path2d[data.Index]; - if (vm) { - this.Fillet(vm, newValue, data); - } - } - br._2D3DPathObject = null; - } - br.AutoUpdate = update_bak; - br.Update(UpdateDraw.Geometry); - } - } - Fillet(br, newValue, d) { - let cu = br instanceof ExtrudeSolid ? br.ContourCurve : br.path; - if (cu instanceof Circle) - return; - let fillet = new FilletUtils(); - fillet.FilletRadius = Math.max(newValue, 0.1); - let cuOld = cu; - for (let arcParam of d.ArcParams) { - let param1 = FixIndex$1(arcParam - 1, cu.EndParam); - let param2 = FixIndex$1(arcParam + 1, cu.EndParam); - let p1 = cu.GetPointAtParam(param1); - let p2 = cu.GetPointAtParam(param2); - let res1 = new PromptEntityResult(cu, p1); - let res2 = new PromptEntityResult(cu, p2); - let fres = fillet.FilletPolyLineSelf(res1, res2); - if (fres) - cu = fres.cu1; - } - if (br instanceof ExtrudeSolid) { - if (cu !== cuOld) - br.ContourCurve = cu; - } - else { - if (cu !== cuOld) - br.path = cu; - } - } - //#region -------------------------File------------------------- - //对象应该实现dataIn和DataOut的方法,为了对象的序列化和反序列化 - //对象从文件中读取数据,初始化自身 - ReadFile(file) { - let ver = file.Read(); - super.ReadFile(file); - this.FilletDatas.length = 0; - if (ver === 1) { - let id = file.ReadObjectId(); - let param1 = file.Read(); - let param2 = file.Read(); - let arcParam = param2 !== 0 ? param2 - 1 : param1 + 1; - this.FilletDatas.push({ Entity: id, ArcParams: [arcParam] }); - } - else { - let count = file.Read(); - for (let i = 0; i < count; i++) { - let id = file.ReadObjectId(); - let params = []; - let parCount = file.Read(); - for (let i = 0; i < parCount; i++) - params.push(file.Read()); - const groove = []; - const path2d = []; - if (ver >= 3) { - const grooveCount = file.Read(); - for (let i = 0; i < grooveCount; i++) { - let data = { - Index: undefined, - ArcParams: [], - }; - data.Index = file.Read(); - let parCount = file.Read(); - for (let j = 0; j < parCount; j++) - data.ArcParams.push(file.Read()); - groove.push(data); - } - const path2DCount = file.Read(); - for (let i = 0; i < path2DCount; i++) { - let data = { - Index: undefined, - ArcParams: [], - }; - data.Index = file.Read(); - let parCount = file.Read(); - for (let j = 0; j < parCount; j++) - data.ArcParams.push(file.Read()); - path2d.push(data); - } - } - if (id) - this.FilletDatas.push({ Entity: id, ArcParams: params, Grooves: groove, Path2D: path2d }); - } - } - } - //对象将自身数据写入到文件. - WriteFile(file) { - file.Write(3); - super.WriteFile(file); - file.Write(this.FilletDatas.length); - for (let d of this.FilletDatas) { - file.WriteObjectId(d.Entity); - file.Write(d.ArcParams.length); - for (let param of d.ArcParams) - file.Write(param); - file.Write(d.Grooves ? d.Grooves.length : 0); - for (let data of (d.Grooves ?? [])) { - file.Write(data.Index); - file.Write(data.ArcParams.length); - for (let par of data.ArcParams) - file.Write(par); - } - file.Write(d.Path2D ? d.Path2D.length : 0); - for (let data of (d.Path2D ?? [])) { - file.Write(data.Index); - file.Write(data.ArcParams.length); - for (let par of data.ArcParams) - file.Write(par); - } - } - } -}; -TemplateFilletAction = __decorate([ - Factory -], TemplateFilletAction); - -function ApplyGoodInfo(en, material) { - en.BoardProcessOption[EBoardKeyList.BrMat] = material.GoodsInfo.name; - en.BoardProcessOption[EBoardKeyList.Color] = material.GoodsInfo.color; - en.BoardProcessOption[EBoardKeyList.Mat] = material.GoodsInfo.material; -} - -let TemplateMaterialAction = class TemplateMaterialAction extends TemplateAction { - constructor(Entitys = [], CompositeEntitys = [], ApplyGoodInfo = true) { - super(); - this.Entitys = Entitys; - this.CompositeEntitys = CompositeEntitys; - this.ApplyGoodInfo = ApplyGoodInfo; - } - _Update(paramDiff) { - if (!this.parent.MaterialValue) - return; - for (let id of this.Entitys) { - if (!(id?.Object) || id.IsErase) - continue; - let en = id.Object; - if (this.ApplyGoodInfo && en instanceof Board) - ApplyGoodInfo(en, this.parent.MaterialValue); - en.Material = this.parent.MaterialValue.Id; - } - for (let [id, indexs] of this.CompositeEntitys) { - if (!(id?.Object) || id.IsErase) - continue; - let en = id.Object; - let allEntitys = []; - const GetAllEntitys = (hard) => { - for (let e of hard.Entitys) { - if (e instanceof HardwareCompositeEntity) - GetAllEntitys(e); - else - allEntitys.push(e); - } - }; - GetAllEntitys(en); - for (let index of indexs) { - let subE = allEntitys[index]; - if (!subE) - continue; - if (this.ApplyGoodInfo && subE instanceof Board) - ApplyGoodInfo(subE, this.parent.MaterialValue); - subE.Material = this.parent.MaterialValue.Id; - } - } - } - //#region -------------------------File------------------------- - //对象应该实现dataIn和DataOut的方法,为了对象的序列化和反序列化 - //对象从文件中读取数据,初始化自身 - ReadFile(file) { - let ver = file.Read(); - super.ReadFile(file); - this.ApplyGoodInfo = file.Read() === 1; - this.Entitys.length = 0; - let count = file.Read(); - for (let i = 0; i < count; i++) { - let id = file.ReadObjectId(); - if (id) - this.Entitys.push(id); - } - if (ver > 1) { - count = file.Read(); - this.CompositeEntitys.length = 0; - for (let i = 0; i < count; i++) { - let id = file.ReadObjectId(); - let indexs = file.Read(); - this.CompositeEntitys.push([id, indexs]); - } - } - } - //对象将自身数据写入到文件. - WriteFile(file) { - file.Write(2); - super.WriteFile(file); - file.Write(this.ApplyGoodInfo ? 1 : 0); - file.Write(this.Entitys.length); - for (let ent of this.Entitys) - file.WriteObjectId(ent); - file.Write(this.CompositeEntitys.length); - for (let [id, indexs] of this.CompositeEntitys) { - file.WriteObjectId(id); - file.Write(indexs.concat()); - } - } -}; -TemplateMaterialAction = __decorate([ - Factory -], TemplateMaterialAction); - -/** - * 模版参数类型 - */ -var TemplateParamType; -(function (TemplateParamType) { - TemplateParamType[TemplateParamType["String"] = 0] = "String"; - TemplateParamType[TemplateParamType["Float"] = 1] = "Float"; - TemplateParamType[TemplateParamType["Int"] = 2] = "Int"; - TemplateParamType[TemplateParamType["Enum"] = 3] = "Enum"; - TemplateParamType[TemplateParamType["Material"] = 4] = "Material"; -})(TemplateParamType || (TemplateParamType = {})); - -/** - * 模版参数 - */ -let TemplateParam = class TemplateParam { - constructor() { - /** 表达式 使用js引起求值(暂时) */ - this.expr = ""; - this.type = TemplateParamType.Float; - this.isLock = false; - //监听 - this.actions = new Proxy([], { - set: (target, key, value, receiver) => { - if (Reflect.get(target, key, receiver) !== value) { - this.WriteAllObjectRecord(); - if (value instanceof TemplateAction) - value.parent = this; - } - return Reflect.set(target, key, value, receiver); - }, - get: (target, key, receiver) => { - if (key === ISPROXYKEY) - return true; - else - return Reflect.get(target, key, receiver); - } - }); - } - WriteAllObjectRecord() { - if (this.parent) - this.parent.WriteAllObjectRecord(); - } - /** - * private:仅供内部调用. - * 更新参数值,并且触发动作. - */ - UpdateParam(value) { - switch (this.type) { - case TemplateParamType.String: - break; - case TemplateParamType.Float: - let oldV = this.value; - let newV = value; - if (!equaln$1(oldV, newV)) { - this.WriteAllObjectRecord(); - this.value = newV; - let diff = newV - oldV; - for (let a of this.actions) - a.Update(diff, newV); - } - else { - for (let a of this.actions) { - if (a instanceof TemplateFilletAction) - a.Update(0, newV); - } - } - break; - case TemplateParamType.Int: - break; - case TemplateParamType.Enum: - break; - case TemplateParamType.Material: - { - if (this.MaterialValue) { - for (let a of this.actions) - a.Update(0, 0); - } - this.MaterialValue = undefined; - break; - } - } - } - /** - * 计算表达式的值并更新 - * @param vardefines 变量定义列表 - * @param paramMap 所有的参数列表.(可能我们需要依赖更新它) - */ - EvalUpdate(vardefines, paramMap, evaled, update = true) { - if (this.type === TemplateParamType.Material) { - if (update && this.MaterialValue) { - for (let a of this.actions) { - if (a instanceof TemplateMaterialAction) - a.Update(0, this.value); - } - this.MaterialValue = undefined; - } - return 0; - } - if (this.expr === "") { - if (update) { - for (let a of this.actions) { - if (a instanceof TemplateFilletAction) - a.Update(0, this.value); - } - } - return this.value; - } - if (evaled.has(this)) - return this.value; - if (update) - evaled.add(this); - let value = parseFloat(this.expr); - if (isNaN(this.expr)) { - //依赖收集 提前更新 - let keywords = this.expr.split(/[\s(){}=+-/*/,%;]/).filter(s => s.length > 0); - for (let key of keywords) { - if (key !== this.name && paramMap.has(key)) - vardefines[key] = paramMap.get(key).EvalUpdate(vardefines, paramMap, evaled, update); - } - try { - value = eval2(this.expr, vardefines); - } - catch (error) { - console.log("更新失败:", error); - return this.value; - } - } - else if (update) - this.expr = ""; - vardefines[this.name] = value; - if (update) - this.UpdateParam(value); - return value; - } - //#region -------------------------File------------------------- - //对象应该实现dataIn和DataOut的方法,为了对象的序列化和反序列化 - //对象从文件中读取数据,初始化自身 - ReadFile(file) { - let ver = file.Read(); - this.name = file.Read(); - this.expr = file.Read(); - this.value = file.Read(); - this.default = file.Read(); - this.description = file.Read(); - this.type = file.Read(); - this.min = file.Read(); - this.max = file.Read(); - this.option = file.Read(); - let count = file.Read(); - this.actions.length = 0; - for (let i = 0; i < count; i++) - this.actions.push(file.ReadObject()); - if (ver > 1) - this.isLock = file.Read(); - } - //对象将自身数据写入到文件. - WriteFile(file) { - file.Write(2); - file.Write(this.name); - file.Write(this.expr); - file.Write(this.value); - file.Write(this.default); - file.Write(this.description); - file.Write(this.type); - file.Write(this.min); - file.Write(this.max); - file.Write(this.option); - file.Write(this.actions.length); - for (let action of this.actions) - file.WriteObject(action); - file.Write(this.isLock); - } -}; -__decorate([ - AutoRecord -], TemplateParam.prototype, "name", void 0); -__decorate([ - AutoRecord -], TemplateParam.prototype, "expr", void 0); -__decorate([ - AutoRecord -], TemplateParam.prototype, "value", void 0); -__decorate([ - AutoRecord -], TemplateParam.prototype, "default", void 0); -__decorate([ - AutoRecord -], TemplateParam.prototype, "description", void 0); -__decorate([ - AutoRecord -], TemplateParam.prototype, "type", void 0); -__decorate([ - AutoRecord -], TemplateParam.prototype, "min", void 0); -__decorate([ - AutoRecord -], TemplateParam.prototype, "max", void 0); -__decorate([ - AutoRecord -], TemplateParam.prototype, "option", void 0); -__decorate([ - AutoRecord -], TemplateParam.prototype, "actions", void 0); -__decorate([ - AutoRecord -], TemplateParam.prototype, "parent", void 0); -__decorate([ - AutoRecord -], TemplateParam.prototype, "isLock", void 0); -TemplateParam = __decorate([ - Factory -], TemplateParam); - -/** - * 夹层空间分析 - */ -class ClampSpaceParse extends ISpaceParse { - constructor() { - super(...arguments); - this.SelectBoxRecord = new Map(); - } - async Parse() { - if (this.Boards.length === 1) { - await this.ParseSignalBoard(); - return; - } - //夹层空间 - let clampBoxs = []; - //单层空间(用于切割) - let spliteBoxs = new Map(); - for (let [boardType, boards] of this.BoardMap) { - let splitType = ConverBoardTypeToSpaceType(boardType); - let boardBoxCol = this.ParseBoardBox(boards, splitType); - //#IWFYY - if (boardType === BoardType.Behind && this.BoardMap.size > 1 && boardBoxCol.length > 1) { - let clampBox = boardBoxCol[0].clampSpace(boardBoxCol[1], splitType); - let size = clampBox.getSize(new Vector3()); - if (size.y > 2440) - boardBoxCol = [arrayLast(boardBoxCol)]; - } - if (boardBoxCol.length > 1) { - let clampBox = boardBoxCol[0].clampSpace(arrayLast(boardBoxCol), splitType); - if (clampBox.isSolid()) - clampBoxs.push(clampBox); - } - else if (boardBoxCol.length === 1) { - spliteBoxs.set(splitType, boardBoxCol[0]); - } - } - //归并盒子 - let allSpaceBox; - if (clampBoxs.length === 0) //如果不存在盒子,拿所有的盒子当空间 - { - allSpaceBox = new Box3Ext(); - spliteBoxs.forEach((box) => { allSpaceBox.union(box); }); - } - else //夹层空间合并 - { - allSpaceBox = clampBoxs[0]; - for (let i = 1, len = clampBoxs.length; i < len; i++) - allSpaceBox.intersect(clampBoxs[i]); - } - //切割并选择合适的空间 - await this.SpliteBoxsAndSelect(allSpaceBox, spliteBoxs); - if (this.SpaceBox && this.SpaceBox.isSolid()) { - //空间延伸到背板 - let behindBox = spliteBoxs.get(SplitType.Y); - if (behindBox && behindBox.min.y > this.SpaceBox.min.y) - this.SpaceBox.max.setY(behindBox.min.y); - this.ParseOK = true; - } - } - /** - * 单板延伸空间的时候的延伸距离 - */ - get SignalDist() { - return this._signalDist; - } - async ParseSignalBoard() { - let res = await this.GetSignalDist(); - if (res.Status === PromptStatus.OK && res.Distance > 0) { - let dist = res.Distance; - this._signalDist = dist; - let br = this.Boards[0]; - let box = br.GetBoundingBoxInMtx(this.SpaceOCSInv); - let type = this.GetBoardInSpaceType(br); - if (type === undefined) //暂时不支持斜空间 - { - //暂时不支持 - this.ParseOK = false; - return; - } - let splitType = ConverBoardTypeToSpaceType(type); - let p1 = box.min.clone().setComponent(splitType, box.min.getComponent(splitType) - dist); - let p2 = box.max.clone().setComponent(splitType, box.min.getComponent(splitType)); - let p3 = box.min.clone().setComponent(splitType, box.max.getComponent(splitType)); - let p4 = box.max.clone().setComponent(splitType, box.max.getComponent(splitType) + dist); - let boxs = [new Box3Ext().setFromPoints([p1, p2]), new Box3Ext().setFromPoints([p3, p4])]; - this.SpaceBox = await this.WrapSelectBox(boxs, ConverBoardTypeToSpaceType(br.BoardType)); - if (this.SpaceBox) - this.ParseOK = true; - } - else - this.ParseOK = false; - } - //virtual (请重载) 指定用户选择单块板的延伸空间 - async GetSignalDist() { - let res = new PromptDistendResult(); - res.Distance = 300; - res.Status = PromptStatus.OK; - return res; - } - SetRay(ray) { - } - async WrapSelectBox(splitBoxs, splitType) { - let box = await this.SelectBox(splitBoxs, splitType); - this.SelectBoxRecord.set(splitType, splitBoxs.indexOf(box)); - return box; - } - /** - * virtual (请重载) 当盒子空间被切割时,选择合适的空间 - * @param splitBoxs 切割后的盒子(2个) - * @param splitType 切割类型 - * @returns box 盒子 - */ - async SelectBox(splitBoxs, splitType) { - return splitBoxs[0]; - } - /** - *用单块板包围盒切割空间 - */ - async SpliteBoxsAndSelect(orgBox, spliteBoxes) { - this.SpaceBox = undefined; - if (spliteBoxes.size === 0) { - this.SpaceBox = orgBox; - return; - } - for (let [splitType, spBox] of spliteBoxes) { - let remBoxs = orgBox.substract(spBox, splitType); - if (remBoxs.length === 0) - return undefined; - else if (remBoxs.length === 1) { - //#IZE2N - if (splitType === SplitType.Y && remBoxs[0].min.y === orgBox.min.y) - continue; - orgBox = remBoxs[0]; - } - else - orgBox = await this.WrapSelectBox(remBoxs, splitType); - if (!orgBox) - return; - //Left Or Right Board - if (splitType === SplitType.X) { - if (spBox.min.x < orgBox.min.x) - this.LeftBoard = this.BoardMap.get(BoardType.Vertical)[0]; - else - this.RightBoard = this.BoardMap.get(BoardType.Vertical)[0]; - } - } - this.SpaceBox = orgBox; - } -} - -class ClampSpaceParseFix extends ClampSpaceParse { - set SignalDist(v) { - this._signalDist = v; - } - get SignalDist() { - return this._signalDist; - } - //virtual (请重载) 指定用户选择单块板的延伸空间 - async GetSignalDist() { - let res = new PromptDistendResult(); - res.Distance = this._signalDist; - res.Status = PromptStatus.OK; - return res; - } - async SelectBox(splitBoxs, splitType) { - let index = this.SelectBoxRecord.get(splitType); - return splitBoxs[index]; - } -} - -/** - * 模版定位信息(基类) - */ -let Positioning = class Positioning { - /** - * 定位 (更新 SpaceCS SpaceBox SpaceSize) - */ - async Positioning(param) { - } - WriteAllObjectRecord() { - if (this.parent) - this.parent.WriteAllObjectRecord(); - } - ReadFile(file) { - } - WriteFile(file) { - } -}; -Positioning = __decorate([ - Factory -], Positioning); - -let PositioningClampSpace = class PositioningClampSpace extends Positioning { - constructor() { - super(...arguments); - this.Objects = []; - //按照 SplitType进行排序 0X 1Y 2Z - this.SelectBoxIndex = [0, 0, 0]; //左右下 - this.SignalDist = 100; //默认为100 防止空 - //#endregion - } - FromSpaceParse(parse) { - this.SignalDist = parse.SignalDist || 100; - this.Objects = parse.Boards.map(br => br.Id); - for (let [splitType, index] of parse.SelectBoxRecord) - this.SelectBoxIndex[splitType] = index; - } - /** - * 定位 - */ - async Positioning(param) { - let brs = this.Objects.filter(id => !id.IsErase).map(id => id.Object); - this._SpaceParse = new ClampSpaceParseFix(brs); - for (let i = 0; i < 3; i++) - this._SpaceParse.SelectBoxRecord.set(i, this.SelectBoxIndex[i]); - this._SpaceParse.SignalDist = this.SignalDist; - await this._SpaceParse.Parse(); - if (this._SpaceParse.ParseOK) { - this.SpaceCS = this._SpaceParse.DrawCS; - this.SpaceSize = this._SpaceParse.Size; - } - else { - this.SpaceCS = undefined; - this.SpaceSize = undefined; - Log("模块定位错误!"); - } - } - //#region File - ReadFile(file) { - file.Read(); - let count = file.Read(); - this.Objects.length = 0; - for (let i = 0; i < count; i++) { - let id = file.ReadObjectId(); - if (id) - this.Objects.push(id); - } - this.SelectBoxIndex = file.Read(); - this.SignalDist = file.Read(); - } - WriteFile(file) { - file.Write(1); - file.Write(this.Objects.length); - for (let id of this.Objects) - file.WriteObjectId(id); - file.Write(arrayClone(this.SelectBoxIndex)); - file.Write(this.SignalDist); - } -}; -__decorate([ - AutoRecord -], PositioningClampSpace.prototype, "Objects", void 0); -__decorate([ - AutoRecord -], PositioningClampSpace.prototype, "SelectBoxIndex", void 0); -__decorate([ - AutoRecord -], PositioningClampSpace.prototype, "SignalDist", void 0); -PositioningClampSpace = __decorate([ - Factory -], PositioningClampSpace); - -/** - * 临时定位 - * 在首次绘制时使用2点3点空间时通常不能使用定位,使用临时定位设置给模块后,模块在第一次使用后清空定位. - */ -let PositioningTemporary = class PositioningTemporary extends Positioning { -}; -PositioningTemporary = __decorate([ - Factory -], PositioningTemporary); - -/** - * 模版类型 - */ -var TemplateType; -(function (TemplateType) { - //普通模板 - TemplateType[TemplateType["Usual"] = 0] = "Usual"; - //酒格 使用程序 - TemplateType[TemplateType["Grid"] = 1] = "Grid"; - //阵列模版 - TemplateType[TemplateType["Array"] = 2] = "Array"; - //没有实体的 - TemplateType[TemplateType["Clear"] = 4] = "Clear"; - //展开的 - TemplateType[TemplateType["Expanded"] = 8] = "Expanded"; - //隐藏的 - TemplateType[TemplateType["Hidden"] = 16] = "Hidden"; - TemplateType[TemplateType["HiddenChildren"] = 32] = "HiddenChildren"; - //标记 - TemplateType[TemplateType["Sign"] = 64] = "Sign"; -})(TemplateType || (TemplateType = {})); -var TemplateSplitType; -(function (TemplateSplitType) { - TemplateSplitType[TemplateSplitType["None"] = -1] = "None"; - TemplateSplitType[TemplateSplitType["X"] = 0] = "X"; - TemplateSplitType[TemplateSplitType["Y"] = 1] = "Y"; - TemplateSplitType[TemplateSplitType["Z"] = 2] = "Z"; -})(TemplateSplitType || (TemplateSplitType = {})); - -var TemplateRecord_1; -const TemplateDefaultParams = ["L", "W", "H", "PX", "PY", "PZ", "RX", "RY", "RZ", "BH"]; -const TempateDefaultParamCount = TemplateDefaultParams.length; -/** - * ### 模板记录 - * 模版与实体总是互相关联的,所以添加实体进入模版的时候,应该保证这个记录已经加入到数据库 - * - * 保留参数名称列表: L W H RX RY RZ X Y Z - * 保留参数前缀: _ $ - * - * #### 批量修改参数值. - * 程序应该只传入expr的值,(禁止直接编辑value).传入后,交由模版进行计算更新. - * 模版内部消化,决定是否保留expr.(当纯数字将被直接计算成value而不保存expr). - * - * 由于`DIV`变量的计算机制,`LWH`变量将不能依赖同层变量,(这可能会导致一些错误) - * - * 当模块节点处于切割空间内时,如果想重新绑定空间,那么空间树的位置将发生变更(实际上不管是不是在切割空间内,空间位置都可能发生变更) - * - */ -let TemplateRecord = TemplateRecord_1 = class TemplateRecord extends SymbolTableRecord { - constructor() { - super(); - this.Type = TemplateType.Usual; - this.SplitType = TemplateSplitType.None; - //展开的 这是UI数据我们暂时不序列化它(默认不展开有比较好的显示效果) - this.isExpanded = false; - //监听 - this.Params = this.CreateProxyArray(value => { - if (value instanceof TemplateParam) - value.parent = this; - }); - this.Objects = this.CreateProxyArray(value => { - if (value instanceof ObjectId && value.Object instanceof Entity) { - if (!this.Id) - console.warn("请先将模版添加到Database后在进行操作!"); - value.Object.Template = this.Id; - } - }); - this.Children = this.CreateProxyArray(value => { - if (value instanceof ObjectId && value.Object instanceof TemplateRecord_1) { - if (!this.Id) - console.warn("请先将模版添加到Database后在进行操作!"); - value.Object.Parent = this.Id; - } - }); - } - get Name() { - return this.name; - } - set Name(name) { - if (name !== this.name) { - this.WriteAllObjectRecord(); - this.name = name; - } - } - get Parent() { - return this._Parent; - } - set Parent(id) { - if (id !== this._Parent) { - this.WriteAllObjectRecord(); - if (this?._Parent?.Object) - arrayRemoveOnce((this.Parent.Object).Children, this.Id); - this._Parent = id; - } - } - get Root() { - return this.Parent?.Object?.Root ?? this; - } - get IsRoot() { - return this._Parent === undefined; - } - get Entitys() { - return this.Objects.map(o => o.Object); - } - get AllEntitys() { - let entitys = []; - this.Traverse((t) => { - for (let o of t.Objects) { - if (!o.IsErase) - entitys.push(o.Object); - } - }); - return entitys; - } - GetProperty(p) { return (this.Type & p) !== 0; } - SetProperty(p, v) { - if (this.GetProperty(p) === v) - return; - if (v) - this.Type |= p; - else - this.Type &= ~p; - } - get IsClear() { return this.GetProperty(TemplateType.Clear); } - set IsClear(isClear) { this.SetProperty(TemplateType.Clear, isClear); } - get IsSign() { return this.GetProperty(TemplateType.Sign); } - set IsSign(isSign) { this.SetProperty(TemplateType.Sign, isSign); } - get IsHidden() { return this.GetProperty(TemplateType.Hidden); } - set IsHidden(isHidden) { this.SetProperty(TemplateType.Hidden, isHidden); } - get IsHiddenChildren() { return this.GetProperty(TemplateType.HiddenChildren); } - set IsHiddenChildren(isHidden) { this.SetProperty(TemplateType.HiddenChildren, isHidden); } - Purge() { - this.Children = this.Children.filter(rc => rc && !rc.IsErase && rc.Object instanceof TemplateRecord_1); - this.Objects = this.Objects.filter(id => id?.IsErase === false); - } - Traverse(callback) { - callback(this); - for (let c of this.Children) { - if (c && c.Object) { - if (c.Object instanceof TemplateRecord_1) { - let template = c.Object; - template.Traverse(callback); - } - else { - Toaster({ - message: "模块子实体有个错误,程序已经暂时先忽略了这个错误!", - timeout: 8000, - intent: Intent.DANGER, - }); - } - } - } - } - async TraverseAsync(callback) { - await callback(this); - for (let c of this.Children) { - if (c && c.Object) { - let template = c.Object; - await template.TraverseAsync(callback); - } - } - } - /** 节点深度,根节点=0 */ - get NodeDepth() { - if (this._NodeDepthCache !== undefined) - return this._NodeDepthCache; - if (!this.Parent?.Object) - return 0; - let parentTemplate = this.Parent.Object; - this._NodeDepthCache = parentTemplate.NodeDepth + 1; - return this._NodeDepthCache; - } - /** 模版定位 */ - get Positioning() { - if (this._Positioning) - return this._Positioning; - let spaceCS = this.GetTemplateRealitySpaceCS(); - let positioning = new PositioningTemporary(); - positioning.SpaceCS = spaceCS; - positioning.SpaceSize = new Vector3(this.LParam.value, this.WParam.value, this.HParam.value); - return positioning; - } - /** - * 当存在夹层空间定位时,辅助定位表达式将使用夹层空间作为相对空间. - */ - set Positioning(p) { - this.WriteAllObjectRecord(); - if (p) - p.parent = this; - this._Positioning = p; - } - //#region param - /** 初始化基础参数 */ - InitBaseParams() { - for (let paramName of TemplateDefaultParams) { - let value = 0; - let param = new TemplateParam(); - param.name = paramName; - param.type = TemplateParamType.Float; - param.value = value; - this.Params.push(param); - } - this.LParam.description = "宽"; - this.WParam.description = "深"; - this.HParam.description = "高"; - this.Params[9].description = "板厚"; - this.Params[9].value = 18; - return this; - } - get LParam() { return this.Params[0]; } - get WParam() { return this.Params[1]; } - get HParam() { return this.Params[2]; } - get PXParam() { return this.Params[3]; } - get PYParam() { return this.Params[4]; } - get PZParam() { return this.Params[5]; } - get RXParam() { return this.Params[6]; } - get RYParam() { return this.Params[7]; } - get RZParam() { return this.Params[8]; } - GetParam(paramName) { - return this.Params.find(param => param.name === paramName); - } - SetParamExpr(paramName, expr) { - let param = this.GetParam(paramName); - if (param) - param.expr = expr; - } - DeleteParam(paramName) { - let index = this.Params.findIndex(p => p.name === paramName); - if (index !== -1 && index >= TempateDefaultParamCount) //LWH P R 禁止删除 - this.Params.splice(index, 1); - return this; - } - //#endregion param - /** - * 通常UI操作的时候,都需要更新整个树,所以隐藏这个API. - * see `UpdateTemplateTree` - * - * 更新当前节点 - * - * ### 定位 (大小,方位) - * - * - (放弃)如果当前节点是更新树的最高层(但当前节点不是根节点) - * 那么当存在夹层空间定位的时候,可以不重复进行夹层空间定位,因为此时该空间不会发生变化. - * 补充:如果夹层空间的板件都在上层,那么可以做这个优化,如果定位的板件没在模块中,那么不能进行这个优化. - * - * - [更新优先]在没有实现变量依赖收集(类似mobx)时,我们认为`positioning`的优先级最高. - * 所以`positioning`会被优先更新. `LWH`,`XYZ`. - * - * - 在使用变量定位时,需要传入上层的坐标系,以便进行相对定位. - * 使用空间分析时,已经不需要上层坐标系. - * - * - 辅助定位:帮助空间坐标系进行旋转 - * 辅助定位的参数变量将暴露出来.{RX RY RZ} - * 辅助定位作为参数变量时,用户使用值时很难正确的计算值,应~加入交互选择.(辅助计算) - * - * ### 变量表达式计算 - * - * - `LWH`将被`positioning`替代,但变量定义仍然正常存在. - * - * - 变量大部分时候都是被批量更新,(同时传入许多参数). - * - */ - async Update() { - this._CacheParamVars = this.GetParameterDefinition(false); - let ens = this.Objects.filter(id => !id.IsErase).map(id => id.Object); - let evaled = new Set(); - this._CacheSpaceCS = this.GetTemplateSpaceCS(false); - let paramMap = new Map(); - for (let param of this.Params) - paramMap.set(param.name, param); - if (this._Positioning) { - await this._Positioning.Positioning(); - if (!this._Positioning.SpaceCS) { - //退化成个体坐标系 - if (ens.length) { - this._Positioning.SpaceCS = ens[0].SpaceOCS; - this._Positioning.SpaceSize = new Vector3(this.LParam.value, this.WParam.value, this.HParam.value); - } - else { - Log("模块定位错误!"); - return; //出事故 - } - } - } - for (let en of ens) { - en.ApplyMatrix(en.SpaceOCSInv); - if (en instanceof Board) - en.IsLazyGrooveCheck = true; - } - //#region 1.定位(坐标系和大小) - /** - * LWH在存在定位空间和继承空间时的表达式行为不一致. - * - 在存在定位空间的时候,LWH是修改定位空间旋转后的值. - * - 不存在定位空间的时候,修改的是空间旋转前的值,因为此时已经没有空间尺寸可供旋转了, - * 只能先提供空间尺寸,然后才进行旋转. - */ - if (this._Positioning) { - this._CacheSpaceCS = this._Positioning.SpaceCS; - this._CacheSpaceSize = this._Positioning.SpaceSize; - this.RotateSpaceCS(paramMap, evaled); - if (this.LParam.expr) - this._CacheSpaceSize.x = this.LParam.EvalUpdate(this._CacheParamVars, paramMap, evaled, false); - if (this.WParam.expr) - this._CacheSpaceSize.y = this.WParam.EvalUpdate(this._CacheParamVars, paramMap, evaled, false); - if (this.HParam.expr) - this._CacheSpaceSize.z = this.HParam.EvalUpdate(this._CacheParamVars, paramMap, evaled, false); - if (this._Positioning instanceof PositioningTemporary) - this._Positioning = undefined; - } - else { - let l = this.LParam.EvalUpdate(this._CacheParamVars, paramMap, evaled, false); - let w = this.WParam.EvalUpdate(this._CacheParamVars, paramMap, evaled, false); - let h = this.HParam.EvalUpdate(this._CacheParamVars, paramMap, evaled, false); - this._CacheSpaceSize = new Vector3(l, w, h); - this.RotateSpaceCS(paramMap, evaled); - if (!this.Parent) { - this.PXParam.value = 0; - this.PYParam.value = 0; - this.PZParam.value = 0; - this.PXParam.expr = ""; - this.PYParam.expr = ""; - this.PZParam.expr = ""; - this.RXParam.value = 0; - this.RYParam.value = 0; - this.RZParam.value = 0; - this.RXParam.expr = ""; - this.RYParam.expr = ""; - this.RZParam.expr = ""; - } - } - //相对定位. use PX PY PZ - this.UpdatePosition(paramMap, evaled); - //更新LWH(通过定位空间) - this.LParam.UpdateParam(this._CacheSpaceSize.x); - this.WParam.UpdateParam(this._CacheSpaceSize.y); - this.HParam.UpdateParam(this._CacheSpaceSize.z); - evaled.add(this.LParam); - evaled.add(this.WParam); - evaled.add(this.HParam); - //#endregion - //更新其他参数变量 Eval local params - for (const param of this.Params) { - param.EvalUpdate(this._CacheParamVars, paramMap, evaled); - } - //删除材质变量(材质变量仅在KJL导入中使用,重新出现在右侧列表中是不明智的?) (但是用户可能编辑更新了它?) - // arrayRemoveIf(this.Params, p => p.type === TemplateParamType.Material); - //变换到新的模版空间 - for (let en of ens) { - en.ApplyMatrix(this._CacheSpaceCS); - if (en instanceof Board) - en.LazyGrooveCheckAll(); - } - //更新顶层变量值 - if (!this.Parent) { - for (const param of this.Params) - this._CacheParamVars[`$${param.name}`] = param.value; - } - else { - for (let param of this._CatchRootParam) - this._CacheParamVars[`$${param.name}`] = param.value; - } - //保持SpaceCS - for (let ent of ens) { - ent.SpaceOCS = this._CacheSpaceCS; - } - } - /** - * 使用PXPYPZ更新空间位置 - */ - UpdatePosition(paramMap, evaled) { - let x = this.PXParam.EvalUpdate(this._CacheParamVars, paramMap, evaled, false); - let y = this.PYParam.EvalUpdate(this._CacheParamVars, paramMap, evaled, false); - let z = this.PZParam.EvalUpdate(this._CacheParamVars, paramMap, evaled, false); - if (x !== 0 || y !== 0 || z !== 0) { - this.PXParam.value = x; - this.PYParam.value = y; - this.PZParam.value = z; - let baseP = new Vector3(x, y, z); - baseP.applyMatrix4(this._CacheSpaceCS); - this._CacheSpaceCS.setPosition(baseP); - } - } - /** - * 旋转空间定位,如果旋转成功,那么SpaceSize和SpaceCS都可能被更新 - */ - RotateSpaceCS(paramMap, evaled) { - this.RXParam.EvalUpdate(this._CacheParamVars, paramMap, evaled); - this.RYParam.EvalUpdate(this._CacheParamVars, paramMap, evaled); - this.RZParam.EvalUpdate(this._CacheParamVars, paramMap, evaled); - //use RX RY RZ - let rx = MathUtils.degToRad(this.RXParam.value); - let ry = MathUtils.degToRad(this.RYParam.value); - let rz = MathUtils.degToRad(this.RZParam.value); - if (rx !== 0 || ry !== 0 || rz !== 0) { - let mrx = new Matrix4().makeRotationX(rx); - let mry = new Matrix4().makeRotationY(ry); - let mrz = new Matrix4().makeRotationZ(rz); - let mro = mrz.multiply(mry.multiply(mrx)); - let roSpace = mro.multiplyMatrices(this._CacheSpaceCS, mro); - let roSpaceInv = mrx.getInverse(roSpace); //变量复用 - let transfromToRoSpace = roSpaceInv.multiply(this._CacheSpaceCS); - let box = new Box3(new Vector3(), this._CacheSpaceSize.clone()); - box.applyMatrix4(transfromToRoSpace); - box.getSize(this._CacheSpaceSize); - let baseP = box.min.clone().applyMatrix4(roSpace); - roSpace.setPosition(baseP); - //更新LWH(通过定位空间) - this.LParam.UpdateParam(this._CacheSpaceSize.x); - this.WParam.UpdateParam(this._CacheSpaceSize.y); - this.HParam.UpdateParam(this._CacheSpaceSize.z); - this._CacheSpaceCS = roSpace; - } - this._CacheParamVars["L"] = this._CacheSpaceSize.x; - this._CacheParamVars["W"] = this._CacheSpaceSize.y; - this._CacheParamVars["H"] = this._CacheSpaceSize.z; - } - /** 以广度搜索优先更新节点树 */ - async UpdateTemplateTree() { - if (this.Parent && !this.Parent.IsErase) { - let parent = this.Parent.Object; - if (parent.SplitType !== TemplateSplitType.None || this.NeedUpdateParent) - return await parent.UpdateTemplateTree(); - } - let stack = [this]; - await this.Update(); - while (stack.length > 0) { - let template = stack.shift(); - //清理历史记录时,子对象会被清理,为了防止被清理掉,清除不需要的id - template.Children = template.Children.filter(id => id && !id.IsErase); - //计算DIV(给子空间使用) - if (template.Children.length > 0 && template.SplitType !== TemplateSplitType.None) { - let vardefines = template.Children[0].Object.GetParameterDefinition(false); - vardefines._DIV = 0; - let sum = 0; - for (let c of template.Children) { - let ctemplate = c.Object; - let param = ctemplate.Params[template.SplitType]; - sum += param.EvalUpdate(vardefines, new Map(), new Set(), false); - } - let sumDiv = 0; - vardefines._DIV = 1; - for (let c of template.Children) { - let ctemplate = c.Object; - let param = ctemplate.Params[template.SplitType]; - sumDiv += param.EvalUpdate(vardefines, new Map(), new Set(), false); - } - let divCount = sumDiv - sum; - if (divCount > 0) { - //div可用总空间 - let divSum = (template.Params[template.SplitType].value - sum); - if (divSum > 0) - template._CacheParamVars.DIV = divSum / divCount; - else - template._CacheParamVars.DIV = 0; - } - template._CacheParamVars.POS = 0; - } - for (let c of template.Children) { - let ctemplate = c.Object; - stack.push(ctemplate); - await ctemplate.Update(); - if (template._CacheParamVars.POS !== undefined) //更新POS - template._CacheParamVars.POS += ctemplate.Params[template.SplitType].value; - } - } - } - /** - * 本节点可用的所有变量定义.(包括变量继承) - * @param [useCache=true] 当更新当前节点的时候,我们不希望使用缓存,(因为父节点的参数可能已经被更新) - * @returns - */ - GetParameterDefinition(useCache = true) { - if (this._CacheParamVars && useCache) - return this._CacheParamVars; - let vars = this.GetParentParams(); - this._CatchRootParam = new Set(); - for (const param of this.Params) { - vars[param.name] = param.value; - let rootParamName = "$" + param.name; - if (!this.Parent) - vars[rootParamName] = param.value; //root - else if (!(rootParamName in vars)) { - this._CatchRootParam.add(param); - vars[rootParamName] = param.value; //顶层变量捕获 root - } - } - this._CacheParamVars = vars; - return vars; - } - /** - * 变量继承 - * - 每继承一层,前缀增加一个`_` - * - 顶层前缀`$` - * - * @returns 继承于父空间的变量定义列表 - */ - GetParentParams() { - if (!this.Parent?.Object) - return {}; - let parent = this.Parent.Object; - let params = parent.GetParameterDefinition(); - let newParams = {}; - for (let key in params) { - if (key[0] !== "$") - newParams["_" + key] = params[key]; - else - newParams[key] = params[key]; - } - if (newParams._DIV === undefined && parent.SplitType !== TemplateSplitType.None) - newParams._DIV = 1; - if (newParams._POS === undefined) - newParams._POS = 0; - return newParams; - } - get SpaceParse() { - let spaceParse; - if (this._Positioning && this._Positioning instanceof PositioningClampSpace) - spaceParse = this._Positioning._SpaceParse; - else - spaceParse = new ISpaceParse(); - spaceParse.SpaceOCS = this._CacheSpaceCS; - spaceParse.ParseOK = true; - spaceParse.SpaceBox = new Box3Ext(new Vector3(), this._CacheSpaceSize); - return spaceParse; - } - /** - * 获得当前的模版空间的相对坐标系 - * - 存在父节点的时候使用父节点的模版空间坐标系 - * - 不存在父节点的时候使用自身的模版空间坐标系 - * - * - 空间坐标系将被定位更新 - * - * @param [useCache=true] 当更新当前节点的时候,我们不希望使用缓存,(因为父节点的参数可能已经被更新) - */ - GetTemplateSpaceCS(useCache = true) { - if (useCache && this._CacheSpaceCS) - return this._CacheSpaceCS.clone(); - if (this.Parent?.Object) { - let template = this.Parent.Object; - return template.GetTemplateSpaceCS(); - } - for (let brId of this.Objects) { - if (brId.Object && !brId.IsErase) { - let br = brId.Object; - return br.SpaceOCS; - } - } - return new Matrix4(); - } - /** - * 获得当前模块的实际位置坐标系. - * 使用 GetTemplateSpaceCS 可能会得到不准确的位置.(得到Parent或者已经缓存的位置) - */ - GetTemplateRealitySpaceCS() { - for (let brId of this.Objects) { - if (brId.Object && !brId.IsErase) { - let br = brId.Object; - return br.SpaceOCS; - } - } - return this.GetTemplateSpaceCS(true); //此时已经可能不准确 - } - get NeedUpdateParent() { - if (this._Positioning) - return false; //存在自我定位时,不需要更新父层 - if (this.Parent) { - let template = this.Parent.Object; - return template._CacheSpaceCS === undefined; //父层已更新时,不需要更新父层 - } - return false; //没有父层时,不需要更新父层 - } - get PositioningSupportBoards() { - let brs = []; - if (this._Positioning && this._Positioning instanceof PositioningClampSpace) { - for (let id of this._Positioning.Objects) - if (!id.IsErase && id.Object instanceof Board) - brs.push(id.Object); - } - if (brs.length === 0) - brs.push(new Board()); - return brs; - } - //#region -------------------------File------------------------- - //对象应该实现dataIn和DataOut的方法,为了对象的序列化和反序列化 - //对象从文件中读取数据,初始化自身 - ReadFile(file) { - this._Version = file.Read(); - super.ReadFile(file); - this.Type = file.Read(); - this._Parent = file.ReadHardObjectId(); - let count = file.Read(); - this.Children.length = 0; - for (let i = 0; i < count; i++) { - let id = file.ReadHardObjectId(); - if (id) - this.Children.push(id); - } - count = file.Read(); - this.Params.length = 0; - for (let i = 0; i < count; i++) - this.Params.push(file.ReadObject()); - count = file.Read(); - this.Objects.length = 0; - for (let i = 0; i < count; i++) { - let id = file.ReadObjectId(); - if (id) - this.Objects.push(id); - } - this._Positioning = file.ReadObject(); - if (this._Version > 1) - this.SplitType = file.Read() ?? this.SplitType; - //清空缓存,因为我们回滚了模块(BUG:修改参数->撤销->替换模块(此时读取了缓存的数据) - this._CacheParamVars = undefined; - this._CacheSpaceCS = undefined; - this._CacheSpaceSize = undefined; - this._CatchRootParam = undefined; - this._NodeDepthCache = undefined; - } - //对象将自身数据写入到文件. - WriteFile(file) { - file.Write(3); - super.WriteFile(file); - let type = this.Type; - //我们在保存文件的时候,才会去序列化它,否则我们不会自动添加历史记录(被动式) - if (this.isExpanded) - type |= TemplateType.Expanded; - else - type &= ~TemplateType.Expanded; - file.Write(type); - file.WriteHardObjectId(this._Parent); - file.Write(this.Children.length); - for (let id of this.Children) - file.WriteHardObjectId(id); - file.Write(this.Params.length); - for (let param of this.Params) - file.WriteObject(param); - file.Write(this.Objects.length); - for (let id of this.Objects) - file.WriteHardObjectId(id); - file.WriteObject(this._Positioning); - file.Write(this.SplitType); - } -}; -__decorate([ - AutoRecord -], TemplateRecord.prototype, "Type", void 0); -__decorate([ - AutoRecord -], TemplateRecord.prototype, "SplitType", void 0); -__decorate([ - AutoRecord -], TemplateRecord.prototype, "Children", void 0); -__decorate([ - AutoRecord -], TemplateRecord.prototype, "Params", void 0); -__decorate([ - AutoRecord -], TemplateRecord.prototype, "Objects", void 0); -TemplateRecord = TemplateRecord_1 = __decorate([ - Factory -], TemplateRecord); - var ThicknessDirection; (function (ThicknessDirection) { ThicknessDirection[ThicknessDirection["Center"] = 0] = "Center"; @@ -31780,188 +33814,6 @@ PositioningBoardSpace = __decorate([ Factory ], PositioningBoardSpace); -function BuildLayerBoards(opt, space, grooveOption) { - let spaceBox = space.SpaceBox; - let spaceOCS = space.SpaceOCS; - let size = spaceBox.getSize(new Vector3()); - const params = { L: size.x, W: size.y, H: size.z, BH: opt.thickness }; - let width; - if (opt.isTotalLength) - width = size.y; - else { - width = safeEval(opt.calcHeight, params); - } - let count = opt.count; - let type = opt.boardRelative; - let spaceSize = safeEval(opt.calcSpaceSize, params); - let frontShrink = safeEval(opt.calcFrontShrink, params); - width -= frontShrink; - if (width <= 0) { - Log("宽度无效,可能前缩过大,请修正"); - return []; - } - let leftShrink = safeEval(opt.calcLeftShrink, params); - let rightShrink = safeEval(opt.calcRightShrink, params); - let thickness = opt.thickness; - let len = size.x - leftShrink - rightShrink; - if (len <= 0) { - Log("长度无效,可能左缩右缩过大,请修正"); - return []; - } - let board = Board.CreateBoard(len, width, thickness, BoardType.Layer); - if (grooveOption) { - board.KnifeRadius = safeEval(grooveOption.knifeRadius); - board.GroovesAddDepth = safeEval(grooveOption.grooveAddDepth); - board.GroovesAddWidth = safeEval(grooveOption.grooveAddWidth); - board.GroovesAddLength = safeEval(grooveOption.grooveAddLength); - } - opt.height = len; - opt.width = width; - //等分单层空间大小 - let singleSize = (size.z - (thickness * count)) / (count + 1); - let brs = []; - for (let i = 1; i <= count; i++) { - let b = board.Clone(); - b.Name = opt.name; - if (type === BrRelativePos.Top) - b.ApplyMatrix(MoveMatrix(spaceBox.min.clone().add(new Vector3(size.x - rightShrink, frontShrink, size.z - (spaceSize + thickness) * i)))); - else if (type === BrRelativePos.Bottom) - b.ApplyMatrix(MoveMatrix(spaceBox.min.clone().add(new Vector3(size.x - rightShrink, frontShrink, spaceSize * i + (i - 1) * thickness)))); - else { - b.ApplyMatrix(MoveMatrix(spaceBox.min.clone().add(new Vector3(size.x - rightShrink, frontShrink, singleSize * i + (i - 1) * thickness)))); - } - b.ApplyMatrix(spaceOCS); - brs.push(b); - } - return brs; -} -function BuildVerticalBoards(opt, space, grooveOption) { - const spaceBox = space.SpaceBox; - const spaceOCS = space.SpaceOCS; - let size = spaceBox.getSize(new Vector3()); - const params = { L: size.x, W: size.y, H: size.z, BH: opt.thickness }; - let frontShrink = safeEval(opt.calcFrontShrink, params); - let bottomShink = safeEval(opt.calcBottomShrink, params); - let width; - if (opt.isTotalWidth) - width = size.y - frontShrink; - else { - width = safeEval(opt.calcWidth, params); - } - if (width <= 0) { - Log("宽度无效,可能前缩过大,请修正"); - return []; - } - let length; - if (opt.isTotalLength) - length = size.z - bottomShink; - else { - length = safeEval(opt.calcHeight, params); - } - let count = opt.count; - let type = opt.boardRelative; - let spaceSize = safeEval(opt.calcSpaceSize, params); - let thickness = opt.thickness; - let board = Board.CreateBoard(length, width, thickness, BoardType.Vertical); - if (grooveOption) { - board.KnifeRadius = safeEval(grooveOption.knifeRadius); - board.GroovesAddDepth = safeEval(grooveOption.grooveAddDepth); - board.GroovesAddWidth = safeEval(grooveOption.grooveAddWidth); - board.GroovesAddLength = safeEval(grooveOption.grooveAddLength); - } - opt.height = length; - opt.width = width; - //等分单层空间大小 - let singleSize = (size.x - (thickness * count)) / (count + 1); - let brs = []; - for (let i = 1; i <= count; i++) { - let b = board.Clone(); - b.Name = opt.name; - if (type === BrRelativePos.Left) - b.ApplyMatrix(MoveMatrix(spaceBox.min.clone().add(new Vector3(spaceSize * i + (i - 1) * thickness, frontShrink, bottomShink)))); - else if (type === BrRelativePos.Right) - b.ApplyMatrix(MoveMatrix(spaceBox.min.clone().add(new Vector3(size.x - (spaceSize + thickness) * i, frontShrink, bottomShink)))); - else - b.ApplyMatrix(MoveMatrix(spaceBox.min.clone().add(new Vector3(singleSize * i + (i - 1) * thickness, frontShrink, bottomShink)))); - b.ApplyMatrix(spaceOCS); - brs.push(b); - } - return brs; -} -function BuildBehindBoards(opt, space, grooveOption) { - let newBox = space.SpaceBox.clone(); - let spaceOcs = space.SpaceOCS; - //判断延伸 - let leftExt = opt.leftExt; - let rightExt = opt.rightExt; - let topExt = opt.topExt; - let bottomExt = opt.bottomExt; - newBox.max.add(new Vector3(leftExt + rightExt, 0, topExt + bottomExt)); - newBox.translate(new Vector3(-leftExt, 0, -bottomExt)); - //获取背板高度 - let size = newBox.getSize(new Vector3()); - const params = { L: size.x, W: size.y, H: size.z, BH: opt.thickness }; - let height; - if (opt.boardPosition === BehindHeightPositon.AllHeight) - height = size.z; - else - height = safeEval(opt.calcHeight, params); - let moveDist = safeEval(opt.calcMoveDist, params); - //判断背板位置,更新背板高度 - switch (opt.boardPosition) { - case BehindHeightPositon.ForTop: - newBox.min.add(new Vector3(0, 0, size.z - height)); - newBox.translate(new Vector3(0, 0, moveDist)); - break; - case BehindHeightPositon.ForBottom: - newBox.max.add(new Vector3(0, 0, height)); - newBox.translate(new Vector3(0, 0, -moveDist)); - break; - } - let count = opt.count; - //相对位置 - let relPos = opt.boardRelative; - //单层空间宽度 - let spaceSize = safeEval(opt.calcSpaceSize, params); - let thickness = opt.thickness; - let board = Board.CreateBoard(height, size.x, thickness, BoardType.Behind); - if (grooveOption) { - board.KnifeRadius = safeEval(grooveOption.knifeRadius); - board.GroovesAddDepth = safeEval(grooveOption.grooveAddDepth); - board.GroovesAddWidth = safeEval(grooveOption.grooveAddWidth); - board.GroovesAddLength = safeEval(grooveOption.grooveAddLength); - } - opt.height = height; - opt.width = size.x; - //等分单层空间大小 - let singleSize = (size.y - (thickness * count)) / (count + 1); - let brs = []; - //构建板件 - for (let i = 1; i <= count; i++) { - let b = board.Clone(); - b.Name = opt.name; - if (relPos === BrRelativePos.Front) - b.ApplyMatrix(MoveMatrix(newBox.min.clone().add(new Vector3(0, spaceSize * i + thickness * i, 0)))); - else if (relPos === BrRelativePos.Back) - b.ApplyMatrix(MoveMatrix(newBox.min.clone().add(new Vector3(0, size.y - spaceSize * i - (i - 1) * thickness, 0)))); - else - b.ApplyMatrix(MoveMatrix(newBox.min.clone().add(new Vector3(0, (singleSize + thickness) * i, 0)))); - b.ApplyMatrix(spaceOcs); - brs.push(b); - } - return brs; -} -function ExtendsBoardThickness(temp, thickness) { - let bhPar = temp.GetParam("BH"); - if (bhPar) { - bhPar.expr = thickness; - if (temp.Parent) { - let rootBh = safeEval(temp.Root.GetParam("BH")?.value); - bhPar.expr = rootBh === thickness ? "$BH" : thickness; - } - } -} - /** * 板件模板的基类.(层板,立板,背板) */ @@ -32041,8 +33893,11 @@ let TemplateBoardRecord = class TemplateBoardRecord extends TemplateRecord { } } this.DrawBoardCount = nbrs.length; - let brs = this.Objects.filter(id => !id.IsErase).map(id => id.Object); - brs.map(br => br.SpaceOCS = this._CacheSpaceCS); + //保持SpaceCS + for (let id of this.Objects) { + if (id && !id.IsErase) + id.Object.SpaceOCS = this._CacheSpaceCS; + } } ReadFile(file) { file.Read(); @@ -32141,372 +33996,6 @@ TemplateBehindBoard = __decorate([ Factory ], TemplateBehindBoard); -class DrawLatticeDrawerTool extends Singleton { - constructor() { - super(...arguments); - this.haveTopBr = false; - } - get Config() { - return this._config; - } - Draw(space, config) { - this._config = config; - this.space = space; - this.ParseSpaceBrs(); - this.HandleSpace(); - let size = space.Size; - if (config.arrayType === ELatticeArrayType.ByWidth) { - config.widthCount = Math.floor((size.x + config.thickness) / (config.gripWidth + config.thickness)); - config.depthCount = Math.floor((size.y + config.thickness) / (config.gripDepth + config.thickness)); - } - if (config.widthCount <= 0 || config.depthCount <= 0) { - this.End(); - return []; - } - let gripWidth = (size.x - ((config.widthCount - 1) * config.thickness)) / config.widthCount; - let gripDepth = (size.y - (config.depthCount - 1) * config.thickness) / config.depthCount; - config.gripWidth = gripWidth; - config.gripDepth = gripDepth; - let position = space.SpaceBox.min.clone(); - let verBr = Board.CreateBoard(size.z, size.y, config.thickness, BoardType.Vertical); - //分析切角圆弧的结果 - let res = this.ParseArcLenOrObliuqeAng(verBr); - if (!res) { - this.End(); - return []; - } - //左右侧板跟随 - this.ChangeLeftRightBr(verBr); - this.ParseBrTooth(verBr); - this.ParseHighSealing(verBr, config.leftSealed, config.rightSealed, config.upSealed, config.downSealed, false); - this.WriteBoardProcessOption(verBr); - let lattices = []; - for (let i = 1; i < config.widthCount; i++) { - let br = verBr.Clone(); - br.Name = "竖板" + i; - let pos = position.clone(); - pos.add(new Vector3(gripWidth * i + (i - 1) * config.thickness)); - br.Position = pos; - br.ApplyMatrix(space.SpaceOCS); - lattices.push(br); - } - let beBr = Board.CreateBoard(size.z, size.x, config.thickness, BoardType.Behind); - this.ParseBrTooth(beBr); - this.ParseHighSealing(beBr, config.leftSealed, config.rightSealed, config.upSealed, config.downSealed, true); - this.WriteBoardProcessOption(beBr); - for (let i = 1; i < config.depthCount; i++) { - let br = beBr.Clone(); - br.Name = "横板" + i; - let pos = position.clone(); - pos.add(new Vector3(0, (gripDepth + config.thickness) * i)); - br.Position = pos; - br.ApplyMatrix(space.SpaceOCS); - lattices.push(br); - } - this.End(); - return lattices; - } - HandleSpace() { - const config = this.Config; - let box = this.space.SpaceBox; - box.max.add(new Vector3(0, 0, -this.Config.downDist)); - //处理间隙 - box.min.add(new Vector3(config.space, config.space)); - box.max.add(new Vector3(-config.space, -config.space)); - if (this.frontBr && this.backBr) { - let backPos = this.backBr.Position.applyMatrix4(this.frontBr.OCSInv); - let addH = backPos.y + this.backBr.Height - this.frontBr.Height; - if (addH > 0) { - this.space.SpaceBox.max.add(new Vector3(0, 0, addH)); - if (config.isAuto) - config.arcLen = addH; - } - else - Log("挡板高度大于等于格子抽板高度,无法自动识别弧度!"); - } - if (this.haveTopBr) { - Log("顶板不为空,绘制格子抽可能错误!"); - } - } - ChangeLeftRightBr(refBr) { - const config = this.Config; - if (this.leftBr && this.rightBr) { - if (config.isChange) { - let lWidth = this.leftBr.Width; - let lHeight = this.leftBr.Height; - let lgrooves = this.leftBr.Grooves.slice(); - let rgrooves = this.rightBr.Grooves.slice(); - let rWidth = this.rightBr.Width; - let rHeight = this.rightBr.Height; - this.leftBr.ContourCurve = refBr.ContourCurve.Clone(); - this.rightBr.ContourCurve = refBr.ContourCurve.Clone(); - this.leftBr.Width = lWidth; - this.leftBr.Height = lHeight; - this.rightBr.Width = rWidth; - this.rightBr.Height = rHeight; - if (this.leftBr.Grooves.length !== lgrooves.length) - this.leftBr.AppendGrooves(lgrooves); - if (this.rightBr.Grooves.length !== rgrooves.length) - this.rightBr.AppendGrooves(rgrooves); - } - } - } - ParseBrTooth(br) { - const config = this.Config; - let grooveLenAdd = config.knifeRad; - let initPts = []; - if (br.BoardType === BoardType.Behind) { - let addWidth = (config.grooveAddWidth - 2 * config.upSealed) / 2; - let p1 = new Vector3(br.Width - config.gripWidth + addWidth, br.Height); - let p2 = new Vector3(br.Width - config.gripWidth + addWidth, br.Height / 2 - grooveLenAdd); - let p3 = new Vector3(br.Width - config.gripWidth - br.Thickness - addWidth, br.Height / 2 - grooveLenAdd); - let p4 = new Vector3(br.Width - config.gripWidth - br.Thickness - addWidth, br.Height); - initPts.push(p1, p2, p3, p4); - for (let i = 2; i < config.widthCount; i++) { - initPts.push(...[p1, p2, p3, p4].map(p => p.clone().add(new Vector3(-(config.gripWidth + br.Thickness) * (i - 1))))); - } - let cu = br.ContourCurve; - cu.AddVertexAt(cu.EndParam - 1, initPts.map(p => AsVector2(p))); - br.ContourCurve = cu; - } - else { - let addWidth = (config.grooveAddWidth - 2 * config.downSealed) / 2; - let p1 = new Vector3(config.gripDepth - addWidth, 0); - let p2 = new Vector3(config.gripDepth - addWidth, br.Height / 2 + grooveLenAdd); - let p3 = new Vector3(config.gripDepth + br.Thickness + addWidth, br.Height / 2 + grooveLenAdd); - let p4 = new Vector3(config.gripDepth + br.Thickness + addWidth, 0); - initPts.push(p1, p2, p3, p4); - for (let i = 2; i < config.depthCount; i++) { - initPts.push(...[p1, p2, p3, p4].map(p => p.clone().add(new Vector3((config.gripDepth + br.Thickness) * (i - 1))))); - } - let cu = br.ContourCurve; - cu.AddVertexAt(1, initPts.map(p => AsVector2(p))); - br.ContourCurve = cu; - } - } - ParseSpaceBrs() { - let vertBrs = this.space.BoardMap.get(BoardType.Vertical); - if (vertBrs && vertBrs.length > 1) { - vertBrs.sort((br1, br2) => { - return br1.Position.applyMatrix4(this.space.SpaceOCSInv).x - br2.Position.applyMatrix4(this.space.SpaceOCSInv).x; - }); - this.leftBr = vertBrs[0]; - this.rightBr = arrayLast(vertBrs); - } - let behindBrs = this.space.BoardMap.get(BoardType.Behind); - if (behindBrs && behindBrs.length > 1) { - behindBrs.sort((br1, br2) => { - return br1.Position.applyMatrix4(this.space.SpaceOCSInv).y - br2.Position.applyMatrix4(this.space.SpaceOCSInv).y; - }); - this.backBr = arrayLast(behindBrs); - this.frontBr = behindBrs[0]; - } - let lyBrs = this.space.BoardMap.get(BoardType.Layer); - this.haveTopBr = lyBrs && lyBrs.length > 1; - } - ParseArcLenOrObliuqeAng(br) { - const config = this.Config; - const size = this.space.Size; - if (config.isOpenCut) { - if (config.upCut > size.z || config.downCut > size.z) - return true; - if (config.upCut < 1 || config.downCut < 1) - return true; - let cu = br.ContourCurve; - cu.AddVertexAt(3, new Vector2$1(config.upCut, br.Height)); - cu.SetPointAt(4, new Vector2$1(0, br.Height - config.downCut)); - } - else { - if (config.arcLen > size.z || config.arcLen > size.y) { - Log("圆弧角过大"); - return false; - } - let cu = br.ContourCurve; - if (config.arcLen === 0) { - Log("圆弧角为0"); - return true; - } - cu.AddVertexAt(3, new Vector2$1(config.arcLen, br.Height)); - cu.SetBulgeAt(3, Math.tan(Math.PI / 8)); - cu.SetPointAt(4, new Vector2$1(0, br.Height - config.arcLen)); - } - return true; - } - WriteBoardProcessOption(br) { - const config = this.Config; - br.KnifeRadius = config.knifeRad; - br.BoardProcessOption.sealedUp = config.upSealed.toString(); - br.BoardProcessOption.sealedDown = config.downSealed.toString(); - br.BoardProcessOption.sealedLeft = config.leftSealed.toString(); - br.BoardProcessOption.sealedRight = config.rightSealed.toString(); - br.BoardProcessOption.drillType = DrillType.None; - br.BoardProcessOption.highDrill.fill(DrillType.None); - br.BoardProcessOption[EBoardKeyList.Lines] = LinesType.Reverse; //生成的板设置为反纹 - } - ParseHighSealing(br, leftSealed, rightSealed, topSealed, downSealed, isHor) { - let cu = br.ContourCurve; - br.BoardProcessOption.sealedLeft = leftSealed.toString(); - br.BoardProcessOption.sealedRight = rightSealed.toString(); - br.BoardProcessOption.sealedUp = topSealed.toString(); - br.BoardProcessOption.sealedDown = downSealed.toString(); - let highSeals = []; - let sizes = [...new Set([downSealed, rightSealed, topSealed, leftSealed])]; - let downSeal = { - size: downSealed, color: sizes.indexOf(downSealed) + 1 - }; - let rigthSeal = { - size: rightSealed, color: sizes.indexOf(rightSealed) + 1 - }; - let topSeal = { size: topSealed, color: sizes.indexOf(topSealed) + 1 }; - let leftSeal = { size: leftSealed, color: sizes.indexOf(leftSealed) + 1 }; - if (isHor) { - highSeals.push(downSeal, rigthSeal); - for (let i = 1; i <= cu.EndParam - 3; i++) { - highSeals.push(topSeal); - } - highSeals.push(leftSeal); - } - else { - let count = (this._config.depthCount - 1) * 3 + this._config.depthCount; - for (let i = 0; i < count; i++) { - highSeals.push(downSeal); - } - for (let i = count; i < cu.EndParam; i++) { - let c = cu.GetCurveAtIndex(i); - if (c instanceof Arc) - break; - let derv = c.GetFistDeriv(0).normalize(); - if (equalv3(derv, YAxis)) - highSeals.push(rigthSeal); - else if (isParallelTo(derv, XAxis)) - highSeals.push(topSeal); - else if (equalv3(derv, YAxis.clone().negate())) - highSeals.push(leftSeal); - else - highSeals.push(topSeal); - } - } - br.BoardProcessOption.highSealed = highSeals; - } - End() { - this._config = null; - this.leftBr = null; - this.rightBr = null; - this.backBr = null; - this.frontBr = null; - this.haveTopBr = false; - } -} - -let TemplateLatticeRecord = class TemplateLatticeRecord extends TemplateRecord { - constructor() { - super(); - this.option = { ...DefaultLatticeConfig }; - this.name = "格子抽(自动)"; - } - get Option() { - return Object.assign({}, this.option); - } - set Option(option) { - this.WriteAllObjectRecord(); - Object.assign(this.option, option); - ExtendsBoardThickness(this, option.thickness); - } - // InitBaseParams() - // { - // super.InitBaseParams(); - // return this; - // } - async Update() { - await super.Update(); - let thickness = this.GetParam("BH")?.value; - if (thickness) - this.option.thickness = thickness; - let tool = DrawLatticeDrawerTool.GetInstance(); - let sbrs = this.PositioningSupportBoards; - let space = new ISpaceParse(sbrs, this._CacheSpaceCS); - space.ParseOK = true; - space.SpaceBox = new Box3Ext(new Vector3(), this._CacheSpaceSize); - let nbrs = tool.Draw(space, this.Option); - if (sbrs.length > 0) { - for (let br of nbrs) { - br.BoardProcessOption[EBoardKeyList.CabinetName] = sbrs[0].BoardProcessOption[EBoardKeyList.CabinetName]; - br.BoardProcessOption[EBoardKeyList.RoomName] = sbrs[0].BoardProcessOption[EBoardKeyList.RoomName]; - } - } - for (let i = nbrs.length; i < this.Objects.length; i++) - this.Objects[i].Object.Erase(); - for (let i = 0; i < nbrs.length; i++) { - if (i < this.Objects.length) { - let br = this.Objects[i].Object; - br.Erase(false); - br.CopyFrom(nbrs[i]); - br.SpaceOCS = this._CacheSpaceCS; - } - else { - nbrs[i].SpaceOCS = this._CacheSpaceCS; - this._db.ModelSpace.Append(nbrs[i]); - this.Objects.push(nbrs[i].Id); - } - } - } - //#region -------------------------File------------------------- - //对象应该实现dataIn和DataOut的方法,为了对象的序列化和反序列化 - //对象从文件中读取数据,初始化自身 - ReadFile(file) { - file.Read(); - super.ReadFile(file); - this.option.arrayType = file.Read(); - this.option.gripWidth = file.Read(); - this.option.gripDepth = file.Read(); - this.option.widthCount = file.Read(); - this.option.depthCount = file.Read(); - this.option.knifeRad = file.Read(); - this.option.thickness = file.Read(); - this.option.arcLen = file.Read(); - this.option.downDist = file.Read(); - this.option.space = file.Read(); - this.option.grooveAddWidth = file.Read(); - this.option.upSealed = file.Read(); - this.option.downSealed = file.Read(); - this.option.leftSealed = file.Read(); - this.option.rightSealed = file.Read(); - this.option.isAuto = file.Read(); - this.option.isChange = file.Read(); - this.option.isOpenCut = file.Read(); - this.option.upCut = file.Read(); - this.option.downCut = file.Read(); - } - //对象将自身数据写入到文件. - WriteFile(file) { - file.Write(1); - super.WriteFile(file); - file.Write(this.option.arrayType); - file.Write(this.option.gripWidth); - file.Write(this.option.gripDepth); - file.Write(this.option.widthCount); - file.Write(this.option.depthCount); - file.Write(this.option.knifeRad); - file.Write(this.option.thickness); - file.Write(this.option.arcLen); - file.Write(this.option.downDist); - file.Write(this.option.space); - file.Write(this.option.grooveAddWidth); - file.Write(this.option.upSealed); - file.Write(this.option.downSealed); - file.Write(this.option.leftSealed); - file.Write(this.option.rightSealed); - file.Write(this.option.isAuto); - file.Write(this.option.isChange); - file.Write(this.option.isOpenCut); - file.Write(this.option.upCut); - file.Write(this.option.downCut); - } -}; -TemplateLatticeRecord = __decorate([ - Factory -], TemplateLatticeRecord); - class GripScene extends Object3D { constructor() { super(); @@ -33088,6 +34577,9 @@ let TemplateLeftRightBoardRecord = class TemplateLeftRightBoardRecord extends Te let y = new Vector3().setFromMatrixColumn(this._CacheSpaceCS, 1); x.multiplyScalar(this._CacheSpaceSize.x - lBr.Thickness); rBr.Position = lBr.Position.sub(y.multiplyScalar(ls - rs)).add(x); + //保持SpaceCS + for (let ent of [lBr, rBr]) + ent.SpaceOCS = this._CacheSpaceCS; } ReadFile(file) { super.ReadFile(file); @@ -33142,332 +34634,6 @@ TemplateSizeBoard = __decorate([ Factory ], TemplateSizeBoard); -function BuildTopBottomBoards(topOpt, bottomOpt, space) { - let brs = []; - if (topOpt.isDraw) { - let basePt = GetTopBoardBasePt(topOpt, space); - brs.push(GetTopOrDownBoard(space, topOpt, basePt, true)); - } - if (bottomOpt.isDraw) { - let basePt = GetBottomBoardBasePt(bottomOpt, space); - brs.push(GetTopOrDownBoard(space, bottomOpt, basePt, false)); - let size = space.Size; - let refSize = size.y; - const thickness = bottomOpt.footThickness; - if (bottomOpt.offset > 0 && !bottomOpt.isWrapSide) { - //绘制前地脚 - if (bottomOpt.isDrawFooter) { - brs.push(GetFootBoard(bottomOpt, space, false)); - refSize -= thickness + bottomOpt.footBehindShrink; - } - //绘制后地脚 - if (bottomOpt.isDrawBackFooter) { - brs.push(GetFootBoard(bottomOpt, space, true)); - refSize -= thickness + bottomOpt.footerOffset; - } - //绘制加强条 - if (bottomOpt.isDrawStrengthenStrip) - brs.push(...GetStrengthenStrips(bottomOpt, space, refSize - bottomOpt.frontDist - bottomOpt.behindDistance)); - } - } - return brs; -} -function GetTopOrDownBoard(spaceParse, opt, basePt, isTop = true) { - //前后距 - let frontDist = -opt.frontDist; - let backDist = -opt.behindDistance; - //左右延伸 - let leftExt = opt.leftExt; - let rightExt = opt.rightExt; - //大小 - let size = spaceParse.Size; - let length = size.x; - let width = size.y + frontDist + backDist; - let thickness = opt.thickness; - if (opt.isWrapSide) { - let leftBoardThickness = spaceParse.LeftBoard ? spaceParse.LeftBoard.Thickness : opt.thickness; - let rightBoardThickness = spaceParse.RightBoard ? spaceParse.RightBoard.Thickness : opt.thickness; - length += leftBoardThickness + rightBoardThickness + leftExt + rightExt; - } - else { - leftExt = 0; - rightExt = 0; - } - let board = Board.CreateBoard(length, width, thickness, BoardType.Layer); - board.Name = "顶板"; - if (!isTop) { - board.Name = "底板"; - } - //移动右缩和前距的距离 - basePt.add(new Vector3(rightExt, -frontDist)); - board.ApplyMatrix(MoveMatrix(basePt)); - board.ApplyMatrix(spaceParse.SpaceOCS); - return board; -} -function GetTopBoardBasePt(opt, spc) { - let box = spc.SpaceBox; - let min = box.min; - let max = box.max; - let basePoint = new Vector3(); - if (opt.isWrapSide) { - let rightBoardThickness = spc.RightBoard ? spc.RightBoard.Thickness : opt.thickness; - basePoint.set(max.x + rightBoardThickness, min.y, max.z); - } - else { - basePoint.set(max.x, min.y, max.z - (opt.thickness + parseFloat(opt.offset))); - } - return basePoint; -} -function GetBottomBoardBasePt(opt, spc) { - let box = spc.SpaceBox; - let min = box.min; - let max = box.max; - let basePoint = new Vector3(); - if (opt.isWrapSide) { - let rightBoardThickness = spc.RightBoard ? spc.RightBoard.Thickness : opt.thickness; - basePoint.set(max.x + rightBoardThickness, min.y, min.z - opt.thickness); - } - else { - basePoint.set(max.x, min.y, min.z + opt.offset); - } - return basePoint; -} -function GetFootBoard(opt, spaceParse, isBack) { - let offset = opt.offset; - let thickness = opt.footThickness; - let footBoard = Board.CreateBoard(offset, spaceParse.Size.x, opt.footThickness, BoardType.Behind); - footBoard.Name = isBack ? "后地脚" : "地脚线"; - let moveDist = isBack ? spaceParse.Size.y - opt.footerOffset - opt.behindDistance : thickness + opt.footBehindShrink + opt.frontDist; - footBoard.ApplyMatrix(MoveMatrix(spaceParse.SpaceBox.min.clone().add(new Vector3(0, moveDist)))) - .ApplyMatrix(spaceParse.SpaceOCS); - return footBoard; -} -function GetStrengthenStrips(opt, spaceParse, width) { - let brs = []; - const thickness = opt.footThickness; - let count = opt.divCount; - if (count === 0) - return brs; - let spaceSize = (spaceParse.Size.x - count * thickness) / (count + 1); - let br = Board.CreateBoard(opt.offset, width, thickness, BoardType.Vertical); - let yDist = opt.frontDist; - if (opt.isDrawFooter) - yDist += (opt.footBehindShrink + thickness); - for (let i = 1; i <= count; i++) { - let b = br.Clone(); - b.Name = "加强条" + i; - b.ApplyMatrix(MoveMatrix(spaceParse.SpaceBox.min.clone().add(new Vector3(spaceSize * i + (i - 1) * thickness, yDist)))) - .ApplyMatrix(spaceParse.SpaceOCS); - brs.push(b); - } - return brs; -} - -/**顶底板模板 */ -let TemplateTopBottomBoard = class TemplateTopBottomBoard extends TemplateRecord { - constructor() { - super(); - this._topOption = { ...DefaultTopBoardOption }; - this._bottomOption = { ...DefaultBottomBoardOption }; - this.UseBoardProcessOption = false; - this.DrawCounts = [1, 1, 1]; - this.name = "顶底板"; - } - get TopOption() { - return Object.assign({}, this._topOption); - } - set TopOption(option) { - this.WriteAllObjectRecord(); - Object.assign(this._topOption, option); - ExtendsBoardThickness(this, option.thickness); - } - get BottomOption() { - return Object.assign({}, this._bottomOption); - } - set BottomOption(option) { - this.WriteAllObjectRecord(); - Object.assign(this._bottomOption, option); - } - // InitBaseParams() - // { - // super.InitBaseParams(); - // return this; - // } - async Update() { - await super.Update(); - let thickness = this.GetParam("BH")?.value; - if (thickness) { - this._topOption.thickness = thickness; - this._bottomOption.thickness = thickness; - this._bottomOption.footThickness = thickness; - } - let spaceParse = this.SpaceParse; - let nbrs = BuildTopBottomBoards(this._topOption, this._bottomOption, spaceParse); - let sbrs = this.PositioningSupportBoards; - if (this.BoardProcessOption) { - let minSealed = GetMinSealed(this.BoardProcessOption); - for (let br of nbrs) { - br.BoardProcessOption = this.BoardProcessOption; - this.SetBoardProcess(br, minSealed); - } - this.BoardProcessOption = undefined; - } - if (this.UseBoardProcessOption && sbrs.length > 0) { - let cname = sbrs[0].BoardProcessOption[EBoardKeyList.CabinetName]; - let rname = sbrs[0].BoardProcessOption[EBoardKeyList.RoomName]; - for (let br of nbrs) { - br.BoardProcessOption[EBoardKeyList.CabinetName] = cname; - br.BoardProcessOption[EBoardKeyList.RoomName] = rname; - } - this.UseBoardProcessOption = false; - } - let oldBrss = [[], [], []]; - let refBr; - let minSealed; - for (let id of this.Objects) { - let b = id.Object; - if (!refBr) - refBr = b; - oldBrss[b.BoardType].push(b); - } - if (refBr) - minSealed = GetMinSealed(refBr.BoardProcessOption); - let newBrss = [[], [], []]; - for (let b of nbrs) { - newBrss[b.BoardType].push(b); - } - for (let i = 0; i < oldBrss.length; i++) { - let oldBrs = oldBrss[i]; - let newBrs = newBrss[i]; - let oldLen = oldBrs.length; - for (let j = newBrs.length; j < oldLen; j++) - oldBrs[j].Erase(); - for (let j = 0; j < newBrs.length; j++) { - if (j < oldLen) { - if (j >= this.DrawCounts[i]) { - oldBrs[j].Erase(false); - } - oldBrs[j].Name = newBrs[j].Name; - oldBrs[j].Position = newBrs[j].Position; - oldBrs[j].Width = newBrs[j].Width; - oldBrs[j].Height = newBrs[j].Height; - oldBrs[j].Thickness = newBrs[j].Thickness; - } - else { - if (refBr) { - newBrs[j].BoardProcessOption = refBr.BoardProcessOption; - this.SetBoardProcess(newBrs[j], minSealed); - } - this._db.ModelSpace.Append(newBrs[j]); - this.Objects.push(newBrs[j].Id); - } - } - this.DrawCounts[i] = newBrs.length; - } - let brs = this.Objects.filter(id => !id.IsErase).map(id => id.Object); - brs.map(br => br.SpaceOCS = this._CacheSpaceCS); - } - SetBoardProcess(br, minSealed) { - if (br.Name === "底板") { - br.BoardProcessOption[EBoardKeyList.BigHole] = FaceDirection.Back; - } - else if (br.Name.includes("地脚") || br.Name.includes("加强条")) { - // br.BoardProcessOption.composingFace = ComposingType.Reverse; - br.BoardProcessOption.bigHoleDir = FaceDirection.Back; - br.BoardProcessOption.lines = LinesType.Reverse; - //用薄封边 - br.BoardProcessOption.sealedUp = minSealed; - br.BoardProcessOption.sealedDown = minSealed; - br.BoardProcessOption.sealedLeft = minSealed; - br.BoardProcessOption.sealedRight = minSealed; - } - } - ReadFile(file) { - let ver = file.Read(); - super.ReadFile(file); - this.DrawCounts[0] = file.Read(); - this.DrawCounts[1] = file.Read(); - this.DrawCounts[2] = file.Read(); - this._topOption.type = file.Read(); - this._topOption.name = file.Read(); - this._topOption.isDraw = file.Read(); - this._topOption.thickness = file.Read(); - this._topOption.frontDist = file.Read(); - this._topOption.behindDistance = file.Read(); - this._topOption.isWrapSide = file.Read(); - this._topOption.useLFData = file.Read(); - this._topOption.leftExt = file.Read(); - this._topOption.rightExt = file.Read(); - this._topOption.offset = file.Read(); - if (ver === 1 && typeof this._topOption.offset === "string") - this._topOption.offset = parseFloat(this._topOption.offset) ?? 0; - this._bottomOption.type = file.Read(); - this._bottomOption.name = file.Read(); - this._bottomOption.isDraw = file.Read(); - this._bottomOption.thickness = file.Read(); - this._bottomOption.frontDist = file.Read(); - this._bottomOption.behindDistance = file.Read(); - this._bottomOption.isWrapSide = file.Read(); - this._bottomOption.useLFData = file.Read(); - this._bottomOption.leftExt = file.Read(); - this._bottomOption.rightExt = file.Read(); - this._bottomOption.offset = file.Read(); - this._bottomOption.footThickness = file.Read(); - this._bottomOption.isDrawFooter = file.Read(); - this._bottomOption.footBehindShrink = file.Read(); - this._bottomOption.isDrawBackFooter = file.Read(); - this._bottomOption.isDrawStrengthenStrip = file.Read(); - this._bottomOption.footerOffset = file.Read(); - this._bottomOption.divCount = file.Read(); - } - WriteFile(file) { - file.Write(2); - super.WriteFile(file); - file.Write(this.DrawCounts[0]); - file.Write(this.DrawCounts[1]); - file.Write(this.DrawCounts[2]); - file.Write(this._topOption.type); - file.Write(this._topOption.name); - file.Write(this._topOption.isDraw); - file.Write(this._topOption.thickness); - file.Write(this._topOption.frontDist); - file.Write(this._topOption.behindDistance); - file.Write(this._topOption.isWrapSide); - file.Write(this._topOption.useLFData); - file.Write(this._topOption.leftExt); - file.Write(this._topOption.rightExt); - file.Write(this._topOption.offset); - file.Write(this._bottomOption.type); - file.Write(this._bottomOption.name); - file.Write(this._bottomOption.isDraw); - file.Write(this._bottomOption.thickness); - file.Write(this._bottomOption.frontDist); - file.Write(this._bottomOption.behindDistance); - file.Write(this._bottomOption.isWrapSide); - file.Write(this._bottomOption.useLFData); - file.Write(this._bottomOption.leftExt); - file.Write(this._bottomOption.rightExt); - file.Write(this._bottomOption.offset); - file.Write(this._bottomOption.footThickness); - file.Write(this._bottomOption.isDrawFooter); - file.Write(this._bottomOption.footBehindShrink); - file.Write(this._bottomOption.isDrawBackFooter); - file.Write(this._bottomOption.isDrawStrengthenStrip); - file.Write(this._bottomOption.footerOffset); - file.Write(this._bottomOption.divCount); - } -}; -__decorate([ - AutoRecord -], TemplateTopBottomBoard.prototype, "DrawCounts", void 0); -TemplateTopBottomBoard = __decorate([ - Factory -], TemplateTopBottomBoard); -//获得最薄的封边 -function GetMinSealed(opt) { - return Math.max(0, Math.min(parseFloat(opt.sealedDown) || 0, parseFloat(opt.sealedLeft) || 0, parseFloat(opt.sealedRight) || 0, parseFloat(opt.sealedUp) || 0)).toString(); -} - /** * 立板模板 */ @@ -33612,1019 +34778,6 @@ TemplateVisualSpace = __decorate([ Factory ], TemplateVisualSpace); -const SIN45 = Math.sin(Math.PI / 4); -class DrawWineRackTool extends Singleton { - constructor() { - super(...arguments); - this.boardlist = []; - } - get Config() { - return this._config; - } - Parse(space, config) { - this._config = config; - this.boardlist.length = 0; - this.space = space; - //处理格子深 - if (!config.isTotalDepth) { - let depth = safeEval(config.calcDepth, { L: space.Size.x, W: space.Size.y, H: space.Size.z }); - if (!isNaN(depth)) { - space.SpaceBox.max.setY(space.SpaceBox.min.y + depth); - } - } - //处理前缩 - space.SpaceBox.min.add(new Vector3(0, config.frontCut)); - //左右缩 - space.SpaceBox.min.add(new Vector3(config.leftCut)); - space.SpaceBox.max.add(new Vector3(-config.rightCut)); - //上缩 - space.SpaceBox.max.add(new Vector3(0, 0, -config.topCut)); - } - /** 拾取空间周围的板件柜名房名等信息*/ - GetBoardProcessOption(br) { - //获取空间周围的板件数据 - if (this.space.Boards.length > 0) { - let refProcessData = this.space.Boards[0].BoardProcessOption; - br.BoardProcessOption[EBoardKeyList.RoomName] = refProcessData[EBoardKeyList.RoomName]; - br.BoardProcessOption[EBoardKeyList.CabinetName] = refProcessData[EBoardKeyList.CabinetName]; - } - } - /**分析高级封边数据 */ - ParseHighSealing(br, leftSealed, rightSealed, topSealed, downSealed, isLeft) { - this.GetBoardProcessOption(br); - let cu = br.ContourCurve; - br.BoardProcessOption.sealedLeft = leftSealed.toString(); - br.BoardProcessOption.sealedRight = rightSealed.toString(); - br.BoardProcessOption.sealedUp = topSealed.toString(); - br.BoardProcessOption.sealedDown = downSealed.toString(); - let sizes = [...new Set([downSealed, rightSealed, topSealed, leftSealed])]; - let downSeal = { - size: downSealed, color: sizes.indexOf(downSealed) + 1 - }; - let rigthSeal = { - size: rightSealed, color: sizes.indexOf(rightSealed) + 1 - }; - let topSeal = { size: topSealed, color: sizes.indexOf(topSealed) + 1 }; - let leftSeal = { size: leftSealed, color: sizes.indexOf(leftSealed) + 1 }; - let highSeals = [downSeal]; - if (isLeft) { - highSeals.push(rigthSeal, topSeal); - for (let i = 3; i <= cu.EndParam - 1; i++) { - highSeals.push(leftSeal); - } - } - else { - for (let i = 1; i <= cu.EndParam - 3; i++) { - highSeals.push(rigthSeal); - } - highSeals.push(topSeal, leftSeal); - } - br.BoardProcessOption.highSealed = highSeals; - br.BoardProcessOption.drillType = DrillType.None; - br.BoardProcessOption.highDrill.fill(DrillType.None); - } - /**补板 */ - AddLayerOrVerticalBoard(actWidth, actHeight) { - const config = this.Config; - const size = this.space.Size; - let isDrawLy = false; - //是否补层板 - if (config.isDrawLy && (config.arrayType === EWRackArrayType.Fixed || config.fullType === EFullType.ByWidth)) { - isDrawLy = true; - let length = actWidth; - let width = size.y + config.frontCut; - let position = this.space.SpaceBox.min.clone(); - if (config.arrayType === EWRackArrayType.Fixed) { - if (config.fullDir === EFullDir.Right) { - length += config.rightCut; - position.add(new Vector3(size.x + config.rightCut, -config.frontCut, actHeight + config.topCut)); - } - else { - length += config.leftCut; - position.add(new Vector3(actWidth, -config.frontCut, actHeight + config.topCut)); - } - } - else { - length += (config.leftCut + config.rightCut); - position.add(new Vector3(actWidth + config.rightCut, -config.frontCut, actHeight + config.topCut)); - } - //补板跟随 - if (config.followNarrow) { - //处理前缩 - position.add(new Vector3(0, config.frontCut)); - width -= config.frontCut; - } - let br = Board.CreateBoard(length, width, config.brThick2); - this.GetBoardProcessOption(br); - br.BoardProcessOption.bigHoleDir = FaceDirection.Back; - br.Position = position; - br.ApplyMatrix(this.space.SpaceOCS); - this.boardlist.push(br); - } - if (config.isDrawVer && (config.arrayType === EWRackArrayType.Fixed || config.fullType === EFullType.ByHeight)) { - let len = actHeight + config.topCut; - if (isDrawLy) - len += config.brThick2; - let br = Board.CreateBoard(len, size.y + config.frontCut, config.brThick2, BoardType.Vertical); - let position = this.space.SpaceBox.min.clone(); - if (config.fullDir === EFullDir.Right) - position.x += size.x - actWidth - config.brThick2; - else { - br.BoardProcessOption.bigHoleDir = FaceDirection.Back; - position.x += actWidth; - } - //补板跟随 - if (config.followNarrow) { - br.WriteAllObjectRecord(); - position.y += config.frontCut; - br.Width -= config.frontCut; - } - //这里要跟外面平 - position.y -= config.frontCut; - this.GetBoardProcessOption(br); - br.Position = position; - br.ApplyMatrix(this.space.SpaceOCS); - this.boardlist.push(br); - } - } -} - -const R2WRTolerance = 1e-3; -/** - * 斜酒格 - */ -class DrawObliqueWineRackTool extends DrawWineRackTool { - Parse(space, config) { - super.Parse(space, config); - const size = space.Size; - const spaceHeight = size.z; - const spaceWidth = size.x; - const ptMid = new Vector3(0.5 * size.x, size.z / 2, 0); - let mirrorMtx; - if (config.fullType === EFullType.ByWidth) - mirrorMtx = MakeMirrorMtx(YAxis, ptMid); - else - mirrorMtx = MakeMirrorMtx(XAxis, ptMid); - ptMid.set(0.5 * size.x, size.z / 2, 0); - polar(ptMid, Math.PI * 0.75, -config.boardThick); - if (config.isFull && config.arrayType !== EWRackArrayType.Fixed) { - switch (config.fullType) { - case EFullType.ByHeight: - this.CalGridWidth(spaceHeight); - break; - case EFullType.ByWidth: - this.CalGridWidth(spaceWidth); - break; - case EFullType.Symmetry: - this.CalGridWidth(spaceHeight); - this.CalGridWidth(spaceWidth); - } - let rectPl = new Polyline().Rectangle(spaceWidth, spaceHeight); - let gripWidth = config.boardThick + config.gripWidth; - let retPls = []; - let pls1 = this.CalculationRectPolylineArr(ptMid, rectPl, gripWidth); - polar(ptMid, Math.PI * 0.75, -gripWidth); - let pls2 = this.CalculationRectPolylineArr(ptMid, rectPl, -gripWidth); - retPls.push(...pls1, ...pls2); - for (let pl of [...pls1, ...pls2]) { - let plClone = pl.Clone(); - plClone.ApplyMatrix(mirrorMtx); - retPls.push(plClone); - } - this.DrawBoardFormPolyLine(retPls); - } - else { - let lWRData = []; - let rWRData = []; - let res; - switch (config.arrayType) { - case EWRackArrayType.ByWidth: - res = this.CalcWineRackDataByWidth(lWRData, rWRData); - break; - case EWRackArrayType.ByCount: - res = this.CalcWineRackDataByCount(lWRData, rWRData); - break; - case EWRackArrayType.Fixed: - res = this.CalcWineRackDataByFixed(lWRData, rWRData); - } - let pls = []; - for (let data of lWRData) { - pls.push(this.CreatePolylineByWineData(data)); - } - rWRData.sort((d1, d2) => { - if (equaln$1(d1.basePt.x, d2.basePt.x)) { - return d1.basePt.y - d2.basePt.y; - } - else - return d2.basePt.x - d1.basePt.x; - }); - for (let data of rWRData) { - pls.push(this.CreatePolylineByWineData(data, false)); - } - //补板 - this.AddLayerOrVerticalBoard(res.width, res.height); - this.DrawBoardFormPolyLine(pls, res.width); - } - } - CalGridWidth(length) { - const count = (length - this.Config.boardThick * 2 / SIN45) / ((this.Config.boardThick + this.Config.gripWidth) * Math.sqrt(2)); - this.Config.gripWidth = ((length - this.Config.boardThick / SIN45) / Math.floor(count)) / Math.sqrt(2) - this.Config.boardThick; - } - /**获取矩形多段线的4个对角点并判断是否有效 */ - GetRect4Pts(xline, rectPl, p1, p2, p3, p4) { - let res1 = this.GetRect2Pts(xline, rectPl, p1, p2); - let vec = polar(new Vector3(), Math.PI * 0.75, this.Config.boardThick); - xline.ApplyMatrix(MoveMatrix(vec)); - let res2 = this.GetRect2Pts(xline, rectPl, p3, p4); - return res1 && res2 && p1.distanceTo(p2) > this.Config.gripWidth; - } - /**获取矩形一边的点 */ - GetRect2Pts(xline, rectPl, p1, p2) { - let intPts = xline.IntersectWith(rectPl, IntersectOption.ExtendBoth); - if (intPts.length === 2) { - p1.copy(intPts[0]); - p2.copy(intPts[1]); - if (p1.x > p2.x) { - let tmpPt = p2.clone(); - p2.copy(p1); - p1.copy(tmpPt); - } - return true; - } - return false; - } - /**按格子宽获取酒格数据 */ - CalcWineRackDataByWidth(lWRDataList, rWRDataList) { - let size = this.space.Size; - let Config = this.Config; - let widthCount = 0, heightCount = 0, gripWidth = 0; - let width = size.x - 2 * Config.boardThick * SIN45; - let height = size.z - 2 * Config.boardThick * SIN45; - if (Config.fullType === EFullType.ByWidth) { - widthCount = Math.floor(width / ((Config.gripWidth + Config.boardThick) * SIN45)); - gripWidth = width / widthCount; - //处理锁定个数 - if (!Config.isLock) { - heightCount = Math.floor(height / gripWidth); - } - else { - heightCount = Math.floor(Config.heightCount * 2); - } - height = heightCount * gripWidth + 2 * Config.boardThick * SIN45; - width = size.x; - } - else { - heightCount = Math.floor(height / ((Config.gripWidth + Config.boardThick) * SIN45)); - gripWidth = height / heightCount; - //处理锁定个数 - if (!Config.isLock) { - widthCount = Math.floor(width / gripWidth); - } - else { - widthCount = Math.floor(Config.widthCount * 2); - } - width = widthCount * gripWidth + 2 * Config.boardThick * SIN45; - height = size.z; - } - this.GetWineRackData(width, height, gripWidth, Config.boardThick, widthCount, heightCount, lWRDataList, rWRDataList); - return { - width: width, height: height - }; - } - CalcWineRackDataByCount(lWRDataList, rWRDataList) { - const config = this.Config; - const size = this.space.Size; - let widthCount = Math.floor(config.widthCount * 2); - let heightCount = Math.floor(config.heightCount * 2); - let gripWidth = (size.x - 2 * config.boardThick * SIN45) / widthCount; - let width = 0; - let height = 0; - if (config.fullType === EFullType.ByWidth) { - gripWidth = (size.x - 2 * config.boardThick * SIN45) / widthCount; - width = size.x; - if (!config.isLock) //如果没锁定个数 - { - heightCount = Math.floor((size.z - 2 * config.boardThick * SIN45) / gripWidth + 1e-3); - } - height = heightCount * gripWidth + 2 * config.boardThick * SIN45; - } - else { - gripWidth = (size.z - 2 * config.boardThick * SIN45) / heightCount; - if (!config.isLock) //如果没有锁定个数 - { - widthCount = Math.floor((size.x - 2 * config.boardThick * SIN45) / gripWidth); - } - width = widthCount * gripWidth + 2 * config.boardThick * SIN45; - height = size.z; - } - this.GetWineRackData(width, height, gripWidth, config.boardThick, widthCount, heightCount, lWRDataList, rWRDataList); - return { - width: width, height: height - }; - } - CalcWineRackDataByFixed(lWRDataList, rWRDataList) { - const config = this.Config; - let widthCount = Math.floor(config.widthCount * 2); - let heightCount = Math.floor(config.heightCount * 2); - let gripWidth = config.gripWidth * SIN45; - let width = widthCount * gripWidth + 2 * config.boardThick * SIN45; - let height = heightCount * gripWidth + 2 * config.boardThick * SIN45; - this.GetWineRackData(width, height, gripWidth, config.boardThick, widthCount, heightCount, lWRDataList, rWRDataList); - return { - width: width, height: height - }; - } - /**构建酒格正面多段线组*/ - CalculationRectPolylineArr(ptMid, rectPl, gripWidth) { - let pls = []; - let pt = ptMid.clone(); - while (true) { - let pl = this.CalculationRectPolyline(pt, rectPl); - if (!pl) - break; - polar(pt, Math.PI * 0.75, gripWidth); - pls.push(pl); - } - return pls; - } - /**构建酒格正面多段线*/ - CalculationRectPolyline(pt, rectPl) { - const xline = new Line(pt, pt.clone().add(new Vector3(1, 1))); - const p1 = new Vector3(); - const p2 = new Vector3(); - const p3 = new Vector3(); - const p4 = new Vector3(); - if (!this.GetRect4Pts(xline, rectPl, p1, p2, p3, p4)) { - return null; - } - let minDis = this.Config.boardThick / Math.sqrt(2); - //如果左边停靠 - if (p1.x < minDis) { - p1.copy(polar(p3.clone(), Math.PI * -0.25, this.Config.boardThick)); - } - else { - p3.copy(polar(p1.clone(), Math.PI * 0.75, this.Config.boardThick)); - } - //右边点 上面停靠 - let size = this.space.Size; - if (p2.y > size.z - minDis) { - p2.copy(polar(p4.clone(), -Math.PI * 0.25, this.Config.boardThick)); - } - else { - p4.copy(polar(p2.clone(), Math.PI * 0.75, this.Config.boardThick)); - } - if (p1.distanceTo(p2) < (this.Config.gripWidth + this.Config.boardThick * 1.8) && p1.y > this.Config.boardThick * 2) - return null; - let lineData = [p1, p2, p4, p3].map(p => { - return { - pt: AsVector2(p), - bul: 0 - }; - }); - let pl = new Polyline(lineData); - pl.CloseMark = true; - return pl; - } - //获取酒格数据 - GetWineRackData(width, height, gripWidth, brThick, widthCount, heightCount, lWRDataList, rWRDataList) { - let data; - for (let i = 0; i < Math.floor(widthCount / 2); i++) { - let p1 = gripWidth + brThick * SIN45 + gripWidth * i * 2; - data = { - basePt: new Vector3(p1, 0, 0), - brLength: 0 - }; - if (width - p1 > height - brThick * SIN45) { - data.brLength = (height - brThick * SIN45) / SIN45; - } - else { - data.brLength = (width - p1) / SIN45; - } - rWRDataList.push(data); - } - for (let i = 0; i < Math.floor(heightCount / 2); i++) { - let p1 = gripWidth + brThick * SIN45 + i * gripWidth * 2; - data = { - basePt: new Vector3(brThick * SIN45, p1 - brThick * SIN45, 0), - brLength: 0 - }; - if (height - p1 > width - brThick * SIN45) { - data.brLength = (width - brThick * SIN45) / SIN45; - } - else { - data.brLength = (height - p1) / SIN45; - } - rWRDataList.push(data); - } - for (let i = 0; i < Math.floor(widthCount / 2); i++) { - let p1 = gripWidth + i * gripWidth * 2; - data = { - basePt: new Vector3(p1 + brThick * SIN45, 2 * brThick * SIN45, 0), - brLength: 0 - }; - if (equaln$1(p1, height - brThick * SIN45 * 2)) { - data.brLength = (height - brThick * SIN45 * 2) / SIN45; - } - else if (p1 > height - brThick * SIN45 * 3) { - data.brLength = (height - brThick * SIN45 * 3) / SIN45; - } - else { - data.brLength = (p1 - brThick * SIN45) / SIN45; - } - lWRDataList.push(data); - } - if (widthCount % 2 === 0) { - for (let i = 0; i < Math.floor(heightCount / 2); i++) { - let p1 = gripWidth + 2 * brThick * SIN45 + i * gripWidth * 2; - data = { - basePt: new Vector3(width - brThick * SIN45, p1, 0), - brLength: 0 - }; - if (equaln$1(height - p1, width - 2 * brThick * SIN45)) { - data.brLength = (height - p1) / SIN45; - } - else if (height - p1 - brThick * SIN45 > width - 2 * brThick * SIN45) { - data.brLength = (width - brThick * SIN45 * 3) / SIN45; - } - else { - data.brLength = (height - p1 - brThick * SIN45) / SIN45; - } - lWRDataList.push(data); - } - } - else { - for (let i = 0; i < Math.floor(heightCount / 2) + 1; i++) { - let p1 = 0; - if (i == 0) { - p1 = brThick * SIN45; - data = { - basePt: new Vector3(width, p1, 0), - brLength: 0 - }; - if (equaln$1(height, width, 1e-3)) { - data.brLength = (width - brThick * SIN45) / SIN45; - } - else if (height - p1 > width - 2 * brThick * SIN45) { - data.brLength = (width - brThick * SIN45 * 2) / SIN45; - } - else { - data.brLength = (height - p1 - brThick * SIN45) / SIN45; - } - } - else { - p1 = 2 * brThick * SIN45 + i * gripWidth * 2; - data = { - basePt: new Vector3(width - brThick * SIN45, p1, 0), - brLength: 0 - }; - if (height - p1 > brThick) { - if (equaln$1(height - p1, width - 2 * brThick * SIN45, 1e-3)) { - data.brLength = (height - p1) / SIN45; - } - else if (height - p1 > width - brThick * SIN45) { - data.brLength = (width - brThick * SIN45 * 3) / SIN45; - } - else { - data.brLength = (height - p1 - brThick * SIN45) / SIN45; - } - } - else { - continue; //这里需要跳出. - } - } - lWRDataList.push(data); - } - } - } - /**根据酒格数据获取多段线 */ - CreatePolylineByWineData(data, isLeft = true) { - let thick = this.Config.boardThick; - let lineData = [ - { - pt: new Vector2$1(), - bul: 0 - }, - { - pt: new Vector2$1(thick, 0), - bul: 0 - }, - { - pt: new Vector2$1(thick, data.brLength), - bul: 0 - }, - { - pt: new Vector2$1(0, data.brLength), - bul: 0 - }, - ]; - let pl = new Polyline(lineData); - pl.CloseMark = true; - let mat = MoveMatrix(new Vector3(thick)) - .multiply(new Matrix4().makeRotationZ(0.25 * Math.PI * (isLeft ? 1 : -1))) - .multiply(MoveMatrix(new Vector3(-thick))); - pl.ApplyMatrix(mat) - .ApplyMatrix(MoveMatrix(data.basePt.add(new Vector3(-thick)))); - return pl; - } - /**根据多段线组构建酒格 */ - DrawBoardFormPolyLine(pls, actualWidth, config) { - const leftData = []; - const rightData = []; - for (let pl of pls) { - let data = this.ParsePolyLine(pl); - if (!data.isOk) - continue; - if (data.isLeft) - leftData.push(data); - else - rightData.push(data); - } - this.CreateBoard(leftData, rightData, actualWidth, config); - this.CreateBoard(rightData, leftData, actualWidth, config); - } - ParsePolyLine(pl) { - if (pl.IsClose) { - if (pl.EndParam !== 4) { - return { - isOk: false - }; - } - let pts = pl.GetStretchPoints(); - if (equalv3(pts[0], arrayLast(pts))) - pts.pop(); - /*****统一初始形状 - * **** h - * * * - * 0 **** t - */ - pts.sort((a, b) => { - if (equaln$1(a.y, b.y)) - return a.x - b.x; - else - return a.y - b.y; - }); - let pts1 = pts.splice(0, 2); - pts1.sort((a, b) => a.x - b.x); - pts.sort((a, b) => a.distanceTo(pts1[1]) - b.distanceTo(pts1[1])); - pts.unshift(...pts1); - const area = pl.Area; - let v1 = pts[1].clone().clone().sub(pts[0]); - let v2 = arrayLast(pts).clone().sub(pts[0]); - let [vecY, vecX] = v1.length() > v2.length() ? [v1, v2] : [v2, v1]; - let length = vecY.length(); - let thick = vecX.length(); - let mat = new Matrix4().makeBasis(vecX.normalize(), vecY.normalize(), ZAxis).setPosition(pts[0]); - let matInv = new Matrix4().getInverse(mat); - let bp = pts[0].clone().negate(); - if (equaln$1(length * thick, area, 5)) { - let an = vecY.angleTo(XAxis); - if (equaln$1(an, Math.PI / 4, R2WRTolerance)) { - pts.sort((p1, p2) => p2.x - p1.x); - return { - isOk: true, - isLeft: true, - pl, - length, - matInv, - basePt: new Vector3(pts[0].x, 0, pts[0].y), - thickness: thick, - isRo: true, - }; - } - else if (equaln$1(an, 3 * Math.PI / 4, R2WRTolerance)) { - pts.sort((p1, p2) => p1.y - p2.y); - return { - isOk: true, - isLeft: false, - pl, - length, - matInv, - basePt: new Vector3(pts[0].x, 0, pts[0].y), - thickness: thick, - isRo: true, - }; - } - else if (isParallelTo(vecX, XAxis, R2WRTolerance)) { - return { - isOk: true, - isLeft: false, - pl, - length, - matInv: new Matrix4().setPosition(bp), - basePt: new Vector3(pts[0].x, 0, pts[0].y), - thickness: thick, - isVer: true, - isRo: false, - }; - } - else if (isParallelTo(vecX, YAxis, R2WRTolerance)) { - return { - isOk: true, - isLeft: true, - pl, - length, - matInv: new Matrix4().setPosition(bp), - basePt: new Vector3(pts[1].x, 0, pts[1].y), - thickness: thick, - isRo: false, - }; - } - else { - return { - isOk: false - }; - } - } - } - return { - isOk: false - }; - } - /**绘制酒格 */ - CreateBoard(lData, rData, actualWidth, cof) { - if (!lData.length) - return; - let leftSeal, rightSeal, upSeal, downSeal, knifeRad; - let config; - if (cof) { - leftSeal = cof.sealedLeft; - rightSeal = cof.sealedRight; - upSeal = cof.sealedUp; - downSeal = cof.sealedDown; - knifeRad = cof.knifeRadius; - } - else { - config = this.Config; - leftSeal = config.leftEdge; - rightSeal = config.leftEdge; - upSeal = config.leftEdge; - downSeal = config.leftEdge; - knifeRad = config.grooveLengthAdd; - } - for (let i = 0; i < lData.length; i++) { - let d = lData[i]; - let dists = []; - for (let d2 of rData) { - let intPts = d.pl.IntersectWith(d2.pl, IntersectOption.ExtendNone); - if (intPts.length === 4) { - dists.push(...intPts.map(p => { - let p1 = p.applyMatrix4(d.matInv); - if (!d.isRo && !d.isVer) - return Math.abs(p1.x); - return Math.abs(p1.y); - })); - } - } - arraySortByNumber(dists); - arrayRemoveDuplicateBySort(dists, (n1, n2) => equaln$1(n1, n2, R2WRTolerance)); - let pl = this.GetPolyline(d, dists, cof); - if (pl) { - let br = Board.CreateBoard(1, 1, d.thickness ?? config.boardThick, d.isVer ? BoardType.Vertical : BoardType.Layer); - if (d.isLeft) - br.Name = "右板" + (lData.length - i); - else - br.Name = "左板" + (i + 1); - br.ContourCurve = pl; - this.ParseHighSealing(br, leftSeal, rightSeal, upSeal, downSeal, d.isLeft); - br.KnifeRadius = knifeRad; - if (d.isRo) - br.RotateBoard(0, Math.PI / 4 * (d.isLeft ? -1 : 1), 0); - br.ApplyMatrix(MoveMatrix(this.space.SpaceBox.min)); - br.ApplyMatrix(MoveMatrix(d.basePt)); - if (config && (config.fullType === EFullType.ByHeight || config.arrayType === EWRackArrayType.Fixed) - && config.fullDir === EFullDir.Right) { - br.ApplyMatrix(MoveMatrix(new Vector3(this.space.Size.x - (actualWidth ?? 0)))); - } - br.ApplyMatrix(this.space.SpaceOCS); - this.boardlist.push(br); - } - } - } - /**构建酒格形状,加入齿 */ - GetPolyline(data, dists, cof) { - let len = data.length; - let isLeft = data.isLeft; - const size = this.space.Size; - let pl = new Polyline(); - pl.Rectangle(size.y, len); - let addWidth; - let leftEdge; - let rightEdge; - let knifeRad; - if (cof) { - addWidth = cof.addLen; - leftEdge = cof.sealedLeft; - rightEdge = cof.sealedRight; - knifeRad = cof.knifeRadius; - } - else { - const config = this.Config; - addWidth = config.grooveWidthAdd; - leftEdge = config.leftEdge; - rightEdge = config.rightEdge; - knifeRad = config.grooveLengthAdd; - } - if (isLeft) { - if (!data.isVer) { - let newDist = dists.map(d => len - d); - dists.length = 0; - dists.push(...newDist); - } - addWidth = (addWidth - 2 * leftEdge) / 2; - } - else - addWidth = (addWidth - 2 * rightEdge) / 2; - if (dists.length % 2 === 0 && dists.length > 1) { - let pts = []; - for (let i = 0; i < dists.length; i++) { - if (i % 2 === 0) { - if (isLeft) { - pts.push(new Vector2$1(0, dists[i] + addWidth)); - pts.push(new Vector2$1(size.y / 2 + knifeRad, dists[i] + addWidth)); - } - else { - pts.push(new Vector2$1(size.y, dists[i] - addWidth)); - pts.push(new Vector2$1(size.y / 2 - knifeRad, dists[i] - addWidth)); - } - } - else { - if (isLeft) { - pts.push(new Vector2$1(size.y / 2 + knifeRad, dists[i] - addWidth)); - pts.push(new Vector2$1(0, dists[i] - addWidth)); - } - else { - pts.push(new Vector2$1(size.y / 2 - knifeRad, dists[i] + addWidth)); - pts.push(new Vector2$1(size.y, dists[i] + addWidth)); - } - } - } - pl.AddVertexAt(isLeft ? pl.NumberOfVertices : 2, pts); - } - return pl; - } -} - -/** - * 正酒格 - */ -class DrawUprightWineRackTool extends DrawWineRackTool { - Parse(space, config) { - super.Parse(space, config); - let size = space.Size; - let gripWidth = config.gripWidth; - let brThick = config.boardThick; - let spaceHeight = size.z; - let spaceWidth = size.x; - let gripHeight = gripWidth; - let actualHeight = spaceHeight; - let actualWidth = spaceWidth; - switch (config.arrayType) { - case EWRackArrayType.ByWidth: - // let tempWidthCount = 0; - // let tempHeightCount = 0; - // if (widCount > 0 || heightCount > 0) - // { - // tempWidthCount = Math.floor(spaceWidth / (gripWidth + brThick)); - // tempHeightCount = Math.floor(spaceHeight / (gripWidth + brThick)); - // gripWidth = (spaceWidth - (tempWidthCount - 1) * brThick) / tempWidthCount; - // gripHeight = (spaceHeight - (tempHeightCount - 1) * brThick) / tempHeightCount; - // if (widCount > 0) - // { - // heightCount = tempHeightCount; - // actualWidth = gripWidth * widCount + brThick * (widCount - 1); - // } - // else if (heightCount > 0) - // { - // widCount = tempWidthCount; - // actualWidth = gripWidth * widCount + brThick * (widCount - 1); - // } - // } - config.widthCount = Math.floor(spaceWidth / (gripWidth + brThick)); - config.heightCount = Math.floor(spaceHeight / (gripWidth + brThick)); - config.gripWidth = (spaceWidth - (config.widthCount - 1) * brThick) / config.widthCount; - gripHeight = (spaceHeight - (config.heightCount - 1) * brThick) / config.heightCount; - break; - case EWRackArrayType.ByCount: - if (config.widthCount > 0) { - config.widthCount = Math.floor(config.widthCount); - } - else { - let gk = (spaceHeight - 2 * brThick) / config.heightCount; - config.widthCount = Math.floor((spaceWidth - 2 * brThick) / gk + 1e-6); - } - if (config.heightCount > 0) { - config.heightCount = Math.floor(config.heightCount); - } - else { - let gk = (spaceWidth - 2 * config.heightCount) / config.heightCount; - config.heightCount = Math.floor((spaceHeight - 2 * brThick) / gk + 1e-6); - } - config.gripWidth = (spaceWidth - (config.widthCount - 1) * brThick) / config.widthCount; - gripHeight = (spaceHeight - (config.heightCount - 1) * brThick) / config.heightCount; - break; - case EWRackArrayType.Fixed: - config.widthCount = Math.floor(config.widthCount); - config.heightCount = Math.floor(config.heightCount); - actualWidth = gripWidth * config.widthCount + brThick * (config.widthCount - 1); - actualHeight = gripWidth * config.heightCount + brThick * (config.heightCount - 1); - } - if (config.widthCount <= 0 || config.heightCount <= 0) - throw `绘制酒格失败,酒格个数异常! 宽个数:${config.widthCount} 高个数:${config.heightCount}`; - config.widthCount--; - config.heightCount--; - this.BuildBoard(gripHeight, actualWidth, actualHeight, space); - // this.AddLayerOrVerticalBoard(actualWidth, actualHeight); - } - BuildBoard(gripHeight, spaceWidth, spaceHeight, space) { - const config = this.Config; - let min = space.SpaceBox.min; - let size = space.Size; - let brThick = config.boardThick; - let verBr = Board.CreateBoard(spaceHeight, size.y, brThick, BoardType.Vertical); - this.ParseBrTooth(verBr, gripHeight); - for (let i = 1; i <= config.widthCount; i++) { - let br = verBr.Clone(); - br.Name = "右板" + i; - br.ApplyMatrix(MoveMatrix(min.clone().add(new Vector3(config.gripWidth * i + (i - 1) * brThick)))).ApplyMatrix(space.SpaceOCS); - this.boardlist.push(br); - } - let lyBr = Board.CreateBoard(spaceWidth, size.y, brThick); - this.ParseBrTooth(lyBr); - for (let i = 1; i <= config.heightCount; i++) { - let br = lyBr.Clone(); - br.Name = "左板" + i; - br.ApplyMatrix(MoveMatrix(min.clone().add(new Vector3(spaceWidth, 0, gripHeight * i + (i - 1) * brThick)))) - .ApplyMatrix(space.SpaceOCS); - this.boardlist.push(br); - } - } - ParseBrTooth(br, gripHeight) { - const config = this.Config; - let initPts = []; - let addWidth = config.grooveWidthAdd; - let topEdge = config.topEdge; - let bottomEdge = config.bottomEdge; - let leftEdge = config.leftEdge; - let rightEdge = config.rightEdge; - let grooveLenAdd = config.grooveLengthAdd; - br.BoardProcessOption.sealedUp = topEdge.toString(); - br.BoardProcessOption.sealedDown = bottomEdge.toString(); - br.BoardProcessOption.sealedLeft = leftEdge.toString(); - br.BoardProcessOption.sealedRight = rightEdge.toString(); - if (br.BoardType === BoardType.Layer) { - addWidth = (addWidth - 2 * leftEdge) / 2; - let p1 = new Vector3(0, config.gripWidth - addWidth); - let p2 = new Vector3(br.Width / 2 + grooveLenAdd, config.gripWidth - addWidth); - let p3 = new Vector3(br.Width / 2 + grooveLenAdd, config.gripWidth + br.Thickness + addWidth); - let p4 = new Vector3(0, config.gripWidth + br.Thickness + addWidth); - initPts.push(p1, p2, p3, p4); - for (let i = 2; i <= config.widthCount; i++) { - initPts.push(...[p1, p2, p3, p4].map(p => p.clone().add(new Vector3(0, (config.gripWidth + br.Thickness) * (i - 1))))); - } - initPts.reverse(); - let cu = br.ContourCurve; - cu.AddVertexAt(cu.EndParam, initPts.map(p => AsVector2(p))); - br.ContourCurve = cu; - } - else { - addWidth = (addWidth - 2 * rightEdge) / 2; - let p1 = new Vector3(br.Width, gripHeight - addWidth); - let p2 = new Vector3(br.Width / 2 - grooveLenAdd, gripHeight - addWidth); - let p3 = new Vector3(br.Width / 2 - grooveLenAdd, gripHeight + br.Thickness + addWidth); - let p4 = new Vector3(br.Width, gripHeight + br.Thickness + addWidth); - initPts.push(p1, p2, p3, p4); - for (let i = 2; i <= config.heightCount; i++) { - initPts.push(...[p1, p2, p3, p4].map(p => p.clone().add(new Vector3(0, (gripHeight + br.Thickness) * (i - 1))))); - } - let cu = br.ContourCurve; - cu.AddVertexAt(2, initPts.map(p => AsVector2(p))); - br.ContourCurve = cu; - } - this.ParseHighSealing(br, config.leftEdge, config.rightEdge, config.topEdge, config.bottomEdge, br.BoardType === BoardType.Layer); - } -} - -let TemplateWineRackRecord = class TemplateWineRackRecord extends TemplateRecord { - constructor() { - super(); - this.option = { ...DefaultWineRackConfig }; - this.name = "酒格(自动)"; - } - get Option() { - return Object.assign({}, this.option); - } - set Option(option) { - this.WriteAllObjectRecord(); - Object.assign(this.option, option); - ExtendsBoardThickness(this, option.boardThick); - } - async Update() { - await super.Update(); - let bh = this.GetParam("BH")?.value; - if (bh) - this.option.boardThick = bh; - let bh2 = this.GetParam("BH2")?.value; - if (bh2) - this.option.brThick2 = bh2; - let wineRack; - if (this.option.type === EWineRackType.Oblique) - wineRack = DrawObliqueWineRackTool.GetInstance(); - else - wineRack = DrawUprightWineRackTool.GetInstance(); - let sbrs = this.PositioningSupportBoards; - let space = new ISpaceParse(sbrs, this._CacheSpaceCS); - space.ParseOK = true; - space.SpaceBox = new Box3Ext(new Vector3(), this._CacheSpaceSize); - wineRack.Parse(space, this.Option); - let nbrs = wineRack.boardlist; - for (let i = nbrs.length; i < this.Objects.length; i++) - this.Objects[i].Object.Erase(); - for (let i = 0; i < nbrs.length; i++) { - if (i < this.Objects.length) { - let br = this.Objects[i].Object; - br.Erase(false); - br.CopyFrom(nbrs[i]); - br.SpaceOCS = this._CacheSpaceCS; - } - else { - this._db.ModelSpace.Append(nbrs[i]); - this.Objects.push(nbrs[i].Id); - nbrs[i].SpaceOCS = this._CacheSpaceCS; - } - } - } - //#region -------------------------File------------------------- - //对象应该实现dataIn和DataOut的方法,为了对象的序列化和反序列化 - //对象从文件中读取数据,初始化自身 - ReadFile(file) { - let ver = file.Read(); - super.ReadFile(file); - this.option.type = file.Read(); - this.option.arrayType = file.Read(); - this.option.fullType = file.Read(); - this.option.isFull = file.Read(); - this.option.fullDir = file.Read(); - this.option.isLock = file.Read(); - this.option.heightCount = file.Read(); - this.option.widthCount = file.Read(); - this.option.isTotalDepth = file.Read(); - this.option.depth = file.Read(); - this.option.calcDepth = file.Read(); - this.option.gripWidth = file.Read(); - this.option.boardThick = file.Read(); - this.option.grooveWidthAdd = file.Read(); - this.option.leftEdge = file.Read(); - this.option.rightEdge = file.Read(); - this.option.topEdge = file.Read(); - this.option.bottomEdge = file.Read(); - this.option.frontCut = file.Read(); - this.option.leftCut = file.Read(); - this.option.rightCut = file.Read(); - this.option.topCut = file.Read(); - this.option.grooveLengthAdd = file.Read(); - this.option.isDrawLy = file.Read(); - this.option.isDrawVer = file.Read(); - this.option.brThick2 = file.Read(); - if (ver > 1) - this.option.followNarrow = file.Read(); - } - //对象将自身数据写入到文件. - WriteFile(file) { - file.Write(2); - super.WriteFile(file); - file.Write(this.option.type); - file.Write(this.option.arrayType); - file.Write(this.option.fullType); - file.Write(this.option.isFull); - file.Write(this.option.fullDir); - file.Write(this.option.isLock); - file.Write(this.option.heightCount); - file.Write(this.option.widthCount); - file.Write(this.option.isTotalDepth); - file.Write(this.option.depth); - file.Write(this.option.calcDepth); - file.Write(this.option.gripWidth); - file.Write(this.option.boardThick); - file.Write(this.option.grooveWidthAdd); - file.Write(this.option.leftEdge); - file.Write(this.option.rightEdge); - file.Write(this.option.topEdge); - file.Write(this.option.bottomEdge); - file.Write(this.option.frontCut); - file.Write(this.option.leftCut); - file.Write(this.option.rightCut); - file.Write(this.option.topCut); - file.Write(this.option.grooveLengthAdd); - file.Write(this.option.isDrawLy); - file.Write(this.option.isDrawVer); - file.Write(this.option.brThick2); - file.Write(this.option.followNarrow); - } -}; -TemplateWineRackRecord = __decorate([ - Factory -], TemplateWineRackRecord); - /** * 更新视口实体的时机: * ->在布局状态下才应该更新,否则则标记为需要更新(或者不需要标记) @@ -34984,6 +35137,10 @@ let RoomWallLine = class RoomWallLine extends RoomWallBase { let inv = this.OCSInv; let thisParam = new GetLineParam(this); const BuildLeftFace = (curve) => { + let materialIndex = 0; + if (curve[CURVE_FACE_TYPE_KEY] === WallFaceType.Outside) { + materialIndex = 1; + } if (curve instanceof Line) { let tapes = [new Tape(0, 1, 0, this._Height)]; let curveParam = new GetLineParam(curve); @@ -35018,12 +35175,16 @@ let RoomWallLine = class RoomWallLine extends RoomWallBase { let endX = curveParam.Length * 1e-3 * tape.end; let startZ = tape.bottom * 1e-3; let endZ = tape.top * 1e-3; - geo.faces.push(new Face3(startIndex, startIndex + 2, startIndex + 1, parse.LeftDir), new Face3(startIndex + 1, startIndex + 2, startIndex + 3, parse.LeftDir)); + geo.faces.push(new Face3(startIndex, startIndex + 2, startIndex + 1, parse.LeftDir, undefined, materialIndex), new Face3(startIndex + 1, startIndex + 2, startIndex + 3, parse.LeftDir, undefined, materialIndex)); geo.faceVertexUvs[0].push([new Vector2$1(startX, startZ), new Vector2$1(startX, endZ), new Vector2$1(endX, startZ)], [new Vector2$1(endX, startZ), new Vector2$1(startX, endZ), new Vector2$1(endX, endZ)]); } } }; const BuildRightFace = (curve) => { + let materialIndex = 0; + if (curve[CURVE_FACE_TYPE_KEY] === WallFaceType.Outside) { + materialIndex = 1; + } if (curve instanceof Line) { let tapes = [new Tape(0, 1, 0, this._Height)]; let curveParam = new GetLineParam(curve); @@ -35058,7 +35219,7 @@ let RoomWallLine = class RoomWallLine extends RoomWallBase { let endX = curveParam.Length * 1e-3 * tape.end; let startZ = tape.bottom * 1e-3; let endZ = tape.top * 1e-3; - geo.faces.push(new Face3(startIndex, startIndex + 1, startIndex + 2, curveParam.RightDir), new Face3(startIndex + 1, startIndex + 3, startIndex + 2, curveParam.RightDir)); + geo.faces.push(new Face3(startIndex, startIndex + 1, startIndex + 2, curveParam.RightDir, undefined, materialIndex), new Face3(startIndex + 1, startIndex + 3, startIndex + 2, curveParam.RightDir, undefined, materialIndex)); geo.faceVertexUvs[0].push([new Vector2$1(startX, startZ), new Vector2$1(endX, startZ), new Vector2$1(startX, endZ)], [new Vector2$1(endX, startZ), new Vector2$1(endX, endZ), new Vector2$1(startX, endZ)]); } } @@ -36175,7 +36336,8 @@ class RoomRegionParse { for (let r of routes) r.curve[CURVE_FACE_TYPE_KEY] = WallFaceType.Outside; //我们需要返回这个轮廓,以便在ue中可以绘制真正的屋顶 - con.contour.Curve.Z = maxZ; + con.contour.Curve["MaxZ"] = maxZ; + con.contour.Curve["MinZ"] = minZ; roofs.push(con.contour.Curve); } else if (con.contour.Curve.ColorIndex === 1) //内空区域 diff --git a/api.esm.js.map b/api.esm.js.map index fa75a4a..8744824 100644 --- a/api.esm.js.map +++ b/api.esm.js.map @@ -1 +1 @@ -{"version":3,"file":"api.esm.js","sources":["../src/Geometry/CoordinateSystem.ts","../src/Common/SystemEnum.ts","../src/GraphicsSystem/RenderType.ts","../src/ApplicationServices/HostApplicationServices.ts","../src/Common/Dispose.ts","../src/Common/Status.ts","../src/Geometry/Box.ts","../src/DatabaseServices/AutoRecord.ts","../src/DatabaseServices/CADFactory.ts","../src/DatabaseServices/ObjectId.ts","../src/DatabaseServices/CADFiler.ts","../src/DatabaseServices/AllObjectData.ts","../src/DatabaseServices/EraseEntityData.ts","../src/DatabaseServices/CADObject.ts","../src/DatabaseServices/HistorycRecord.ts","../src/Add-on/testEntity/USE_WORLD_UV.ts","../src/DatabaseServices/SymbolTableRecord.ts","../src/DatabaseServices/MaterialTableRecord.ts","../src/DatabaseServices/PhysicalMaterialRecord.ts","../src/DatabaseServices/Entity/Entity.ts","../src/Common/eval.ts","../src/Common/StoreageKeys.ts","../src/Common/Utils.ts","../src/Geometry/GeUtils.ts","../src/Common/Matrix4Utils.ts","../src/Editor/ObjectSnapMode.ts","../src/Geometry/Orbit.ts","../src/Common/ArrayExt.ts","../src/DatabaseServices/Shape2.ts","../src/Geometry/CreatePolylinePath.ts","../src/GLSL/GoochShader.ts","../src/Common/ColorPalette.ts","../src/Editor/BufferGeometry2GeometryCacheMap.ts","../src/Geometry/BufferGeometryUtils.ts","../src/DatabaseServices/Entity/Curve.ts","../src/DatabaseServices/Entity/DragPointType.ts","../src/Geometry/Plane.ts","../src/DatabaseServices/Entity/Line.ts","../src/DatabaseServices/Entity/Ellipse.ts","../src/DatabaseServices/Entity/Circle.ts","../src/DatabaseServices/SplineConver2Polyline.ts","../src/DatabaseServices/Spline.ts","../src/Geometry/CurveIntersection.ts","../src/Geometry/CurveMap.ts","../src/Geometry/RegionParse.ts","../src/Geometry/CreateContour2.ts","../src/GraphicsSystem/BoolOperateUtils.ts","../src/DatabaseServices/Contour.ts","../src/GraphicsSystem/OffsetPolyline.ts","../src/DatabaseServices/PointInPolyline.ts","../src/DatabaseServices/Entity/Polyline.ts","../src/GraphicsSystem/IntersectWith.ts","../src/DatabaseServices/Entity/Arc.ts","../src/Geometry/Count.ts","../src/Common/CurveUtils.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/DatabaseServices/3DSolid/Hole.ts","../src/DatabaseServices/3DSolid/CylinderHole.ts","../src/UI/Store/BoardInterface.ts","../src/Add-on/DrawDrilling/HoleUtils.ts","../src/Geometry/BoardUVGenerator.ts","../src/Geometry/PointShapeUtils.ts","../src/Common/Toaster.ts","../src/UI/Components/RightPanel/RightPanelInterface.ts","../src/UI/Store/BoardFindInterface.ts","../src/UI/Store/DoorInterface.ts","../src/UI/Store/LatticeInterface.ts","../src/UI/Store/WineRackInterface.ts","../src/Editor/OrderType.ts","../src/Editor/DefaultConfig.ts","../src/Nest/Common/Util.ts","../src/Common/Log.ts","../src/Geometry/SweepGeometry.ts","../src/Geometry/OBB/obb.ts","../src/DatabaseServices/3DSolid/SweepSolid.ts","../src/DatabaseServices/Hardware/HardwareTopline.ts","../src/Add-on/LookOverBoardInfos/LookOverBoardInfosTool.ts","../src/Common/Report.ts","../src/Common/ShowSelectObjects.ts","../src/Geometry/CreateWireframe.ts","../src/Geometry/SimpleExtrudeEdgeGeometry.ts","../src/Common/CSGIntersect.ts","../src/csg/core/math/IsMirrot.ts","../src/csg/core/math/Polygon3.ts","../src/csg/core/Geometry2CSG.ts","../src/Geometry/BSPGroupParse.ts","../src/Geometry/FastOffset.ts","../src/Geometry/ExtrudeMeshGeomBuilder/SplitCurveParams.ts","../src/Geometry/ExtrudeMeshGeomBuilder/ExtrudeEdgeGeometry2.ts","../src/DatabaseServices/Entity/GenUVForWorld.ts","../src/DatabaseServices/Entity/Extrude.ts","../src/DatabaseServices/3DSolid/ExtrudeHole.ts","../src/Common/AddEntityDrawObject.ts","../src/DatabaseServices/Entity/CompositeEntity.ts","../src/DatabaseServices/Hardware/HardwareCompositeEntity.ts","../src/Geometry/DrillParse/Face.ts","../src/Geometry/DrillParse/BoardGetFace.ts","../src/Common/Singleton.ts","../src/GraphicsSystem/ToolPath/OptimizeToolPath.ts","../src/GraphicsSystem/ToolPath/FeedingToolPath.ts","../src/Production/Convert2PtsBul.ts","../src/Production/Product.ts","../src/GraphicsSystem/ParseEdgeSealDir.ts","../src/GraphicsSystem/CalcEdgeSealing.ts","../src/GraphicsSystem/ToolPath/VKnifToolPath.ts","../src/DatabaseServices/Entity/Board.ts","../src/DatabaseServices/Room/ParseService/RangeUtils.ts","../src/DatabaseServices/Room/ParseService/CurveTrim.ts","../src/Geometry/Matrix2.ts","../src/Common/EntityUpdateWrap.ts","../src/Nest/Common/ClipperCpp.ts","../src/DatabaseServices/Room/Entity/RoomBase.ts","../src/DatabaseServices/Room/Entity/Wall/Hole/RoomHoleBase.ts","../src/DatabaseServices/Room/Entity/Wall/Hole/RoomHolePolyline.ts","../src/DatabaseServices/Room/Entity/Wall/WallSnapMode.ts","../src/DatabaseServices/Room/Entity/Wall/RoomWallBase.ts","../src/DatabaseServices/Room/Entity/Wall/RoomWallArc.ts","../src/DatabaseServices/Room/ParseService/Hole/RoomWallPlaceIHoleHelper.ts","../src/Reactor/RoomHoleReactor.ts","../src/Add-on/Purge.ts","../src/DatabaseServices/CreateObjectData.ts","../src/DatabaseServices/RemoveObjectData.ts","../src/DatabaseServices/SymbolTable.ts","../src/DatabaseServices/BlockTable.ts","../src/DatabaseServices/ObjectCollection.ts","../src/DatabaseServices/BlockTableRecord.ts","../src/DatabaseServices/ObjectAllDataHistoryRecord.ts","../src/DatabaseServices/CommandHistoryRecord.ts","../src/DatabaseServices/CameraSnapshoot/CameraSnapshootRecord.ts","../src/DatabaseServices/DeepCloneFiler.ts","../src/DatabaseServices/GroupTable.ts","../src/Editor/CommandState.ts","../src/DatabaseServices/HistoricManage.ts","../src/DatabaseServices/Lights/Light.ts","../src/DatabaseServices/Lights/AmbientLight.ts","../src/DatabaseServices/Lights/SunLightHelper.ts","../src/DatabaseServices/Lights/DirectionalLight.ts","../src/DatabaseServices/Lights/HemisphereLight.ts","../src/DatabaseServices/MaterialTable.ts","../src/DatabaseServices/ProcessingGroup/ProcessingGroupTable.ts","../src/DatabaseServices/Template/TemplateTable.ts","../src/DatabaseServices/Texture.ts","../src/DatabaseServices/TextureTable.ts","../src/DatabaseServices/WblockCloneFiler.ts","../src/DatabaseServices/Database.ts","../src/DatabaseServices/FaceEntity.ts","../src/DatabaseServices/GroupTableRecord.ts","../src/DatabaseServices/Text/Text.ts","../src/Editor/VisualSpaceBox.ts","../src/GraphicsSystem/CameraUpdate.ts","../src/DatabaseServices/ViewportEntity.ts","../src/DatabaseServices/3DSolid/Cylineder.ts","../src/DatabaseServices/3DSolid/RevolveSolid.ts","../src/DatabaseServices/Dimension/Dimension.ts","../src/DatabaseServices/Dimension/GetDimLineMaterial.ts","../src/DatabaseServices/Dimension/2LineAngularDimension.ts","../src/DatabaseServices/Dimension/AlignedDimension.ts","../src/DatabaseServices/Dimension/ArcDimension.ts","../src/DatabaseServices/Dimension/RadiusDimension.ts","../src/DatabaseServices/Dimension/DiameterDimension.ts","../src/DatabaseServices/Dimension/LinearDimension.ts","../src/DatabaseServices/Entity/BoxSolid.ts","../src/Add-on/testEntity/BoxLine.ts","../src/DatabaseServices/Entity/EntityRef.ts","../src/DatabaseServices/Entity/Point.ts","../src/DatabaseServices/Lights/PointLightHelper.ts","../src/DatabaseServices/Lights/PointLight.ts","../src/DatabaseServices/Lights/RectAreaLightHelper.ts","../src/DatabaseServices/Lights/RectAreaLight.ts","../src/DatabaseServices/Lights/SpotLightHelper.ts","../src/DatabaseServices/Lights/SpotLight.ts","../src/DatabaseServices/ProcessingGroup/ProcessingGroupRecord.ts","../src/DatabaseServices/Room/Entity/Flat/RoomFlatBase.ts","../src/DatabaseServices/Room/Entity/Flat/RoomFlatFloor.ts","../src/DatabaseServices/Room/Entity/Flat/RoomFlatTop.ts","../src/DatabaseServices/Room/Entity/Region/RoomRegion.ts","../src/DatabaseServices/Room/Entity/Wall/Hole/RoomHoleLine.ts","../src/Geometry/SpaceParse/ISpaceParse.ts","../src/DatabaseServices/Template/Action/TemplateAction.ts","../src/Editor/PromptResult.ts","../src/Add-on/FilletUtils.ts","../src/DatabaseServices/Template/Action/TemplateFilletAction.ts","../src/UI/Components/ApplyGoodInfo.tsx","../src/DatabaseServices/Template/Action/TemplateMaterialAction.ts","../src/DatabaseServices/Template/Param/TemplateParamType.ts","../src/DatabaseServices/Template/Param/TemplateParam.ts","../src/Geometry/SpaceParse/ClampSpaceParse.ts","../src/Geometry/SpaceParse/ClampSpaceParseFix.ts","../src/DatabaseServices/Template/Positioning/Positioning.ts","../src/DatabaseServices/Template/Positioning/PositioningClampSpace.ts","../src/DatabaseServices/Template/Positioning/PositioningTemporary.ts","../src/DatabaseServices/Template/TemplateType.ts","../src/DatabaseServices/Template/TemplateRecord.ts","../src/DatabaseServices/Template/Action/TempateThicknessAction.ts","../src/DatabaseServices/Template/Action/TemplateMoveAction.ts","../src/DatabaseServices/Template/Action/TemplateSetSealAction.ts","../src/DatabaseServices/Template/Action/TemplateStretchGripAction.ts","../src/DatabaseServices/Template/Action/TemplateStretchScaleBoxAction.ts","../src/DatabaseServices/Template/Positioning/PositioningBoardSpace.ts","../src/Add-on/DrawBoard/BuildBoardTool.ts","../src/DatabaseServices/Template/ProgramTempate/TemplateBoard.ts","../src/DatabaseServices/Template/ProgramTempate/TemplateBehindBoard.ts","../src/Add-on/LatticeDrawer/LatticeDrawerTool.ts","../src/DatabaseServices/Template/ProgramTempate/TemplateLatticeRecord.ts","../src/GraphicsSystem/GripScene.ts","../src/Editor/SelectFilter.ts","../src/Editor/SelectBox.ts","../src/Editor/PointPick.ts","../src/Add-on/DrawBoard/ActivityLayerBoardTool.ts","../src/DatabaseServices/Template/ProgramTempate/TemplateLayerBoard.ts","../src/DatabaseServices/Template/ProgramTempate/TemplateLeftRightBoardRecord.ts","../src/DatabaseServices/Template/ProgramTempate/TemplateSizeBoard.ts","../src/Add-on/DrawBoard/BuildTopBottomBoardTool.ts","../src/DatabaseServices/Template/ProgramTempate/TemplateTopBottomBoard.ts","../src/DatabaseServices/Template/ProgramTempate/TemplateVerticalBoard.ts","../src/DatabaseServices/Template/ProgramTempate/TemplateVisualSpace.ts","../src/Add-on/DrawWineRack/DrawWinRackTool.ts","../src/Add-on/DrawWineRack/DrawObliqueWineRackTool.ts","../src/Add-on/DrawWineRack/DrawUprightWineRackTool.ts","../src/DatabaseServices/Template/ProgramTempate/TemplateWineRackRecord.ts","../src/DatabaseServices/ViewportEntity/ViewportEntity2.ts","../src/DatabaseServices/Room/Entity/Wall/RoomWallLine.ts","../src/DatabaseServices/Room/ParseService/GetCurveParam.ts","../src/Nest/Common/Area.ts","../src/Nest/Common/Vector2.ts","../src/Nest/Common/Box2.ts","../src/Nest/Core/Path.ts","../src/Nest/Core/NestCache.ts","../src/Nest/Converter/Path2Polyline.ts","../src/Nest/Converter/Curves2Points.ts","../src/DatabaseServices/Room/ParseService/ParseRegionTextPos.ts","../src/DatabaseServices/Room/ParseService/RegionReplacement.ts","../src/DatabaseServices/Room/ParseService/RoomRegionParse.ts","../src/DatabaseServices/Room/ParseService/RoomWallExtendAndBreak.ts","../src/DatabaseServices/Room/ParseService/RoomWallParse.ts"],"sourcesContent":["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(m = new Matrix4): Matrix4\r\n {\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","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\r\nexport enum FractionDigitsType\r\n{\r\n zero = 0,\r\n one = 1,\r\n two = 2,\r\n three = 3,\r\n four = 4,\r\n five = 5,\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 PlaceFace = 8,//排版面\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\r\nexport function IsPhysical(renderType: RenderType)\r\n{\r\n return renderType === RenderType.Physical || renderType === RenderType.Physical2 || renderType === RenderType.PhysicalPrint || renderType === RenderType.Physical2Print;\r\n}\r\n","import { MeshBasicMaterial, MeshStandardMaterial, Texture } from 'three';\r\nimport { FractionDigitsType } from '../Common/SystemEnum';\r\nimport { ICursorConfig } from '../Editor/ICursorConfig';\r\nimport { RenderType } from '../GraphicsSystem/RenderType';\r\nimport { DrillingOption } from '../UI/Store/drillInterface';\r\n\r\nexport class IHostApplicationServices\r\n{\r\n DefaultMeshMaterial?: MeshBasicMaterial | MeshStandardMaterial;\r\n @ProxyValue isShowLightShadow: boolean = true;//灯光阴影 (除太阳光外)\r\n ShowHistoryLog: boolean = true;\r\n\r\n @ProxyValue Physical2EdgeColor = 7;//真实视图带线框的线框颜色 默认白色\r\n @ProxyValue ConceptualEdgeColor = 7;//概念线框的颜色\r\n\r\n DrawWallBottomFace = false;//绘制底面\r\n\r\n private __ProxyObject__: any;//代理对象,当代理对象存在时,获取内部的值指向代理对象\r\n static __ProxyKeys__: string[] = [];//代理对象,当代理对象存在时,获取内部的值指向代理对象\r\n get ProxyObject() { return this.__ProxyObject__; }\r\n set ProxyObject(obj: any)\r\n {\r\n this.__ProxyObject__ = obj;\r\n\r\n for (let key of IHostApplicationServices.__ProxyKeys__)\r\n {\r\n let v = this.__ProxyObject__[key];\r\n if (v === undefined)\r\n throw \"程序内部错误:未能代理变量!\";\r\n }\r\n }\r\n\r\n //#region _RenderType 渲染类型\r\n @ProxyValue _renderType: RenderType = RenderType.Wireframe;\r\n //#endregion\r\n\r\n //#region 排钻数据\r\n @ProxyValue DrillConfigs: Map = new Map;\r\n //#endregion\r\n\r\n //#region 开启排钻反应器\r\n @ProxyValue openDrillingReactor = true;\r\n //#endregion\r\n\r\n //#region 封边数据\r\n @ProxyValue sealingColorMap: [string, string][] = [];\r\n //#endregion\r\n\r\n //#endregion 显示纹路\r\n @ProxyValue showLines = false;\r\n //#endregion\r\n\r\n //#region\r\n @ProxyValue uese: string;\r\n //#endregion\r\n\r\n //#region 偏心轮过滤\r\n @ProxyValue forceFilterPxl: boolean = false;\r\n //#endregion\r\n\r\n @ProxyValue 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 statTk: false,//统计通孔排钻\r\n statSt: false,//统计双头排钻\r\n };\r\n\r\n @ProxyValue viewSize = {\r\n minViewHeight: 1e-3,\r\n maxViewHeight: 3e6,\r\n zoomSpeed: 0.6\r\n };\r\n\r\n @ProxyValue cursorSize: ICursorConfig = {\r\n D2: 1000,\r\n D3: 100,\r\n SquareSize: 10,\r\n };\r\n\r\n @ProxyValue dimTextHeight = 60;\r\n @ProxyValue lineWidth = 2; //打印线框\r\n @ProxyValue fractionDigitsType: FractionDigitsType = FractionDigitsType.two;\r\n\r\n private constructor() { };\r\n\r\n private static _SingleInstance: IHostApplicationServices;\r\n static GetInstance(): IHostApplicationServices\r\n {\r\n if (this._SingleInstance) return this._SingleInstance;\r\n this._SingleInstance = new IHostApplicationServices;\r\n return this._SingleInstance;\r\n }\r\n\r\n //加载贴图,将在index.ts中设置实现的函数\r\n async LoadDefaultExr(): Promise { return; }\r\n async LoadMetalEnv(): Promise { return; }\r\n}\r\n\r\nexport let HostApplicationServices = IHostApplicationServices.GetInstance();\r\n\r\n\r\n//将属性字段指向代理对象\r\nfunction ProxyValue(\r\n target: any,\r\n propertyKey: string,\r\n descriptor?: PropertyDecorator)\r\n{\r\n let privateKey = '__' + propertyKey;\r\n IHostApplicationServices.__ProxyKeys__.push(propertyKey);\r\n\r\n Object.defineProperty(target, propertyKey,\r\n {\r\n set: function (value)\r\n {\r\n if (this.ProxyObject)\r\n this.ProxyObject[propertyKey] = value;\r\n else\r\n this[privateKey] = value;\r\n },\r\n get: function ()\r\n {\r\n if (this.ProxyObject)\r\n return this.ProxyObject[propertyKey];\r\n return this[privateKey];\r\n },\r\n enumerable: true,\r\n configurable: true\r\n }\r\n );\r\n}\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","\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","import { Box3, Vector3 } 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 BoxIsSolid(this, 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\r\nlet size = new Vector3;\r\nexport function BoxIsSolid(box: Box3, minSize = 1)\r\n{\r\n box.getSize(size);\r\n return size.x > minSize && size.y > minSize && size.z > minSize;\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","\r\n//const UE_REX_DEL = /_.*/g;\r\n\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.replace(UE_REX_DEL, \"\"), C);\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 { 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 _Object?: T) { }\r\n\r\n get IsErase(): boolean\r\n {\r\n return !this._Object || this._Object.IsErase;\r\n }\r\n\r\n set Object(obj: T)\r\n {\r\n this._Object = obj;\r\n }\r\n get Object(): T | undefined\r\n {\r\n return this._Object;\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 { Vec3 } from '../Geometry/IVec3';\r\nimport { CADFactory } from './CADFactory';\r\nimport { CADObject } from './CADObject';\r\nimport { Database } from './Database';\r\nimport { Entity } from './Entity/Entity';\r\nimport { ISerialize } from './ISerialize';\r\nimport { ObjectId } from './ObjectId';\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 if (!obj)\r\n console.error(\"未注册类名:\", className);\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 WriteVec3(v3: Vec3)\r\n {\r\n this._datas.push(v3.x, v3.y, v3.z);\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)// id?.Object 为什么没有这么写? 这么写会精简图纸,但是不确定会不会引发新的问题? 其他地方有没有可能依赖这个特性实现一些功能? 比如排钻,如果排钻被删除,我们依然知道排钻的顺序?(曾经拥有?) 暂时不优化似乎也没事?\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 { 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","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 if (this.objectId)\r\n this.objectId.Object = undefined;//解除绑定(关联bug:绘制关联切割板后删除切割板,在pu时调用了这个,此时obj被删除但是还会被拷贝,导致错误崩溃)\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() as ObjectId;\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 let id = file.ReadObjectId() as ObjectId;\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) 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 f.database = this._db;//这样保证了关联的数据(例如材质)\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 { Factory } from './CADFactory';\r\nimport { CADFiler } from './CADFiler';\r\nimport { ISerialize } from './ISerialize';\r\n\r\n/**\r\n * 历史记录,用于撤销和重做的数据.\r\n */\r\n@Factory\r\nexport class HistorycRecord\r\n{\r\n //指定撤销时所需要的数据\r\n undoData: ISerialize;\r\n //制定重做时所需要的数据\r\n redoData: ISerialize;\r\n userData: ISerialize;\r\n\r\n //#region -------------------------File-------------------------\r\n //对象应该实现dataIn和DataOut的方法,为了对象的序列化和反序列化\r\n\r\n //对象从文件中读取数据,初始化自身\r\n ReadFile(file: CADFiler)\r\n {\r\n let ver = file.Read();\r\n this.undoData = file.ReadObject();\r\n this.redoData = file.ReadObject();\r\n this.userData = file.ReadObject();\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(1);\r\n file.WriteObject(this.undoData);\r\n file.WriteObject(this.redoData);\r\n file.WriteObject(this.userData);\r\n }\r\n //#endregion\r\n}\r\n","\r\nexport const USE_WORLD_UV = \"USE_WORLD_UV\";\r\nexport const U_WORLD_REP = \"u_w_rep\";\r\nexport const V_WORLD_REP = \"v_w_rep\";\r\n\r\nexport const U_WORLD_MOVE = \"u_w_move\";\r\nexport const V_WORLD_MOVE = \"v_w_move\";\r\n\r\nexport const U_WORLD_RO = \"v_w_ro\";\r\n\r\nexport const U_REP = \"u_rep\";\r\nexport const V_REP = \"v_rep\";\r\n\r\nexport const U_MOVE = \"u_move\";\r\nexport const V_MOVE = \"v_move\";\r\n\r\nexport const U_RO = \"v_ro\";\r\n","import { CADObject } from \"./CADObject\";\r\nimport { CADFiler } from \"./CADFiler\";\r\nimport { SymbolTable } from \"./SymbolTable\";\r\nimport { Status } from \"../Common/Status\";\r\n\r\nexport class SymbolTableRecord extends CADObject\r\n{\r\n protected name: string = \"\";\r\n get Name()\r\n {\r\n return this.name;\r\n }\r\n set Name(name: string)\r\n {\r\n if (this.name === name) return;\r\n this.WriteAllObjectRecord();\r\n if (this.Owner)\r\n {\r\n let symbolTable = this.Owner.Object as SymbolTable;\r\n if (!symbolTable.ChangeRecordName(this, name))\r\n return;\r\n }\r\n this.name = name;\r\n }\r\n\r\n Add(obj: CADObject, isCheckObjectCleanly = true): Status\r\n {\r\n return Status.False;\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.name);\r\n }\r\n\r\n ReadFile(file: CADFiler)\r\n {\r\n super.ReadFile(file);\r\n file.Read();\r\n this.name = file.Read();\r\n }\r\n\r\n}\r\n","import { SymbolTableRecord } from \"./SymbolTableRecord\";\r\nimport { Factory } from \"./CADFactory\";\r\n\r\n@Factory\r\nexport class MaterialTableRecord extends SymbolTableRecord\r\n{\r\n}\r\n","import { Color, FrontSide, MeshPhysicalMaterial, Side } from \"three\";\r\nimport { USE_WORLD_UV, U_WORLD_MOVE, U_WORLD_REP, U_WORLD_RO, V_WORLD_MOVE, V_WORLD_REP } from \"../Add-on/testEntity/USE_WORLD_UV\";\r\nimport { HostApplicationServices } from \"../ApplicationServices/HostApplicationServices\";\r\nimport { AutoRecord } from \"./AutoRecord\";\r\nimport { Factory } from \"./CADFactory\";\r\nimport { CADFiler } from \"./CADFiler\";\r\nimport { MaterialType } from \"./IMaterialDefaultParam\";\r\nimport { MaterialTableRecord } from \"./MaterialTableRecord\";\r\nimport { ObjectId } from \"./ObjectId\";\r\nimport { TextureTableRecord } from \"./Texture\";\r\n\r\n\r\nexport interface IGoodProps\r\n{\r\n name: string;\r\n material: string;\r\n color: string;\r\n}\r\n\r\nexport enum UVType\r\n{\r\n LocalUV = 0,\r\n WorldUV = 1,\r\n}\r\n\r\n\r\n//有关于pbr材质的属性解释说明: https://knowledge.autodesk.com/zh-hans/support/3ds-max/learn-explore/caas/CloudHelp/cloudhelp/2021/CHS/3DSMax-Lighting-Shading/files/GUID-18087194-B2A6-43EF-9B80-8FD1736FAE52-htm.html\r\n\r\n@Factory\r\nexport class PhysicalMaterialRecord extends MaterialTableRecord\r\n{\r\n @AutoRecord type: MaterialType = \"木纹\";\r\n @AutoRecord ref: string = \"\";//参考材质,当存在这个变量时,使用ue材质\r\n\r\n //基础色\r\n @AutoRecord color: string = \"#ffffff\";//基础色\r\n //#region 基础色附加 默认折叠\r\n @AutoRecord baseColorLuminance = 0;//基础色亮度 默认0 范围±1\r\n @AutoRecord baseColorLightColor = new Color(0.5, 0.5, 0.5);//基础色_亮部颜色 默认0.5灰色 范围RGB颜色\r\n @AutoRecord baseColorDarkColor = new Color(0, 0, 0);//基础色_暗部颜色 默认 0黑色 范围RGB颜色\r\n @AutoRecord baseColorSaturability = 1;//基础色饱和度 默认1 范围0-10;\r\n //#endregion\r\n\r\n //透明\r\n @AutoRecord transparent: boolean = false; //透明度 0-1\r\n @AutoRecord opacity: number = 1;//不透明度.\r\n //#region 透明度附加 默认折叠\r\n @AutoRecord opacityContrast = 1; //不透明度对比 默认1\r\n @AutoRecord opacityBorder = 1; //不透明度边界 默认1\r\n @AutoRecord opacityMaximum = 1; //不透明度最大值 默认1\r\n @AutoRecord opacityMinimum = 0.3; // 不透明度最小值 默认0.3\r\n //#endregion\r\n\r\n //折射\r\n @AutoRecord refraction = 1; //玻璃折射 默认1\r\n\r\n @AutoRecord matalness: number = 0;//金属性 0-1\r\n @AutoRecord bumpScale: number = 0;//凹凸比例 UE:法线强度 默认0 范围0-20\r\n @AutoRecord roughness: number = 0.2; //粗糙度 0-1\r\n @AutoRecord specular: number = 1; //高光 范围0-1\r\n @AutoRecord selfLuminous: number = 0;//自发光强度 0-200\r\n\r\n @AutoRecord useMap: boolean = true;\r\n @AutoRecord map: ObjectId;//纹理贴图\r\n //#region 法线贴图和粗糙贴图默认折叠\r\n @AutoRecord useBumpMap: boolean = true;\r\n @AutoRecord bumpMap: ObjectId;//凹凸贴图\r\n @AutoRecord useRoughnessMap: boolean = true;\r\n @AutoRecord roughnessMap: ObjectId;//粗糙贴图\r\n //#endregion\r\n\r\n @AutoRecord IsFull: boolean = false;//完全平铺板(此时修改板的uv)\r\n @AutoRecord side: Side = FrontSide; //双面\r\n\r\n @AutoRecord UVType = UVType.LocalUV;\r\n\r\n\r\n //#region 菲涅尔 默认折叠(绒毛?) 反射?(皮革 布料中可用)\r\n @AutoRecord fresnelPO = 1;//菲涅尔对比度 默认1 范围-1至10\r\n @AutoRecord fresnelST = 1;//菲涅尔强度 默认1 范围0至20\r\n @AutoRecord fresnelLuminance = 1;//菲涅尔亮度 默认1 范围0至20\r\n @AutoRecord fresnelLightColor = new Color(1, 1, 1);//菲涅尔亮部颜色 默认白色 范围RGB\r\n @AutoRecord fresnelDarkColor = new Color(1, 1, 1);//菲涅尔暗部颜色 默认白色 范围RGB\r\n //#endregion\r\n\r\n @AutoRecord sharpen = 1;//锐化 默认1 范围0-20 默认折叠\r\n\r\n get UseWorldUV() { return this.UVType === UVType.WorldUV; }\r\n set UseWorldUV(b: boolean) { this.UVType = b ? UVType.WorldUV : UVType.LocalUV; }\r\n\r\n @AutoRecord UWroldRep = 1;\r\n @AutoRecord VWroldRep = 1;\r\n @AutoRecord UWroldRo = 0;\r\n @AutoRecord UWorldMove = 0;\r\n @AutoRecord VWorldMove = 0;\r\n\r\n @AutoRecord depthTest: boolean = true;//深度测试(默认true)(弃用(不在UI上显示)\r\n\r\n private _goodsInfo: IGoodProps = {\r\n name: \"\",\r\n color: \"\",\r\n material: \"\",\r\n };\r\n private material = new MeshPhysicalMaterial({});\r\n async Update()\r\n {\r\n this.material[USE_WORLD_UV] = this.UseWorldUV;\r\n if (this.material[USE_WORLD_UV])\r\n {\r\n this.material[U_WORLD_REP] = this.UWroldRep;\r\n this.material[V_WORLD_REP] = this.VWroldRep;\r\n\r\n this.material[U_WORLD_RO] = this.UWroldRo;\r\n\r\n this.material[U_WORLD_MOVE] = this.UWorldMove;\r\n this.material[V_WORLD_MOVE] = this.VWorldMove;\r\n }\r\n\r\n if (!this.material.color)\r\n this.material.color = new Color(this.color);\r\n else\r\n this.material.color.set(this.color);\r\n\r\n this.material.transparent = this.transparent;\r\n\r\n if (this.type === \"玻璃\")\r\n {\r\n this.material.metalness = 0.2;\r\n this.material.reflectivity = Math.abs(this.refraction);\r\n } else\r\n this.material.metalness = this.matalness;\r\n\r\n this.material.side = this.side;\r\n\r\n this.material.opacity = Math.max(0.1, this.opacity);\r\n this.material.depthTest = this.depthTest;\r\n this.material.bumpScale = this.bumpScale;\r\n this.material.roughness = this.roughness;\r\n\r\n\r\n if (this.material.metalness > 0.9)\r\n HostApplicationServices.LoadMetalEnv().then(env =>\r\n {\r\n this.material.envMap = env;\r\n this.material.needsUpdate = true;\r\n });\r\n else\r\n HostApplicationServices.LoadDefaultExr().then(exr =>\r\n {\r\n this.material.envMap = exr;\r\n this.material.needsUpdate = true;\r\n });\r\n\r\n this.material.needsUpdate = true;\r\n if (this.useMap && this.map && !this.map.IsErase)\r\n {\r\n let map = this.map.Object as TextureTableRecord;\r\n let texture = map.GetThreeTexture();\r\n await map.WaitUpdate();\r\n this.material.map = texture;\r\n this.material.needsUpdate = true;\r\n }\r\n else\r\n this.material.map = undefined;\r\n\r\n if (this.type === \"自发光\")\r\n {\r\n this.material.emissiveIntensity = this.selfLuminous;\r\n this.material.emissive.copy(this.material.color);\r\n this.material.emissiveMap = this.material.map;\r\n }\r\n else\r\n {\r\n this.material.emissiveIntensity = 1;\r\n this.material.emissive.setRGB(0, 0, 0);\r\n this.material.emissiveMap = undefined;\r\n }\r\n\r\n if (this.useMap && this.useBumpMap && this.bumpMap && !this.bumpMap.IsErase)\r\n {\r\n let map = this.bumpMap.Object as TextureTableRecord;\r\n let texture = map.GetThreeTexture();\r\n await map.WaitUpdate();\r\n this.material.bumpMap = texture;\r\n this.material.needsUpdate = true;\r\n }\r\n else\r\n this.material.bumpMap = undefined;\r\n\r\n if (this.useMap && this.roughnessMap && this.roughnessMap && !this.roughnessMap.IsErase)\r\n {\r\n let map = this.roughnessMap.Object as TextureTableRecord;\r\n let texture = map.GetThreeTexture();\r\n await map.WaitUpdate();\r\n this.material.roughnessMap = texture;\r\n this.material.needsUpdate = true;\r\n }\r\n else\r\n this.material.roughnessMap = undefined;\r\n\r\n this.material.needsUpdate = true;\r\n\r\n this.AsyncUpdated();\r\n }\r\n get Material(): MeshPhysicalMaterial\r\n {\r\n return this.material;\r\n }\r\n get GoodsInfo()\r\n {\r\n return this._goodsInfo;\r\n }\r\n set GoodsInfo(info: IGoodProps)\r\n {\r\n if (info.color === this._goodsInfo.color\r\n && info.material === this._goodsInfo.material\r\n && info.name === this._goodsInfo.name\r\n )\r\n return;\r\n\r\n this.WriteAllObjectRecord();\r\n Object.assign(this._goodsInfo, info);\r\n }\r\n //#region -------------------------File-------------------------\r\n ReadFile(file: CADFiler)\r\n {\r\n super.ReadFile(file);\r\n let ver = file.Read();\r\n if (ver === 1)\r\n this.name = file.Read();\r\n this.color = file.Read();\r\n this.transparent = file.Read();\r\n this.matalness = file.Read();\r\n this.opacity = file.Read();\r\n this.depthTest = file.Read();\r\n this.map = file.ReadObjectId();\r\n this.bumpMap = file.ReadObjectId();\r\n this.bumpScale = file.Read();\r\n this.roughnessMap = file.ReadObjectId();\r\n this.roughness = file.Read();\r\n this.useMap = file.Read();\r\n this.useBumpMap = file.Read();\r\n this.useRoughnessMap = file.Read();\r\n if (ver <= 2)\r\n file.Read();\r\n if (ver > 2)\r\n {\r\n this._goodsInfo.name = file.Read();\r\n this._goodsInfo.material = file.Read();\r\n this._goodsInfo.color = file.Read();\r\n }\r\n\r\n if (ver > 3)\r\n this.IsFull = file.Read();\r\n\r\n if (ver > 4)\r\n {\r\n this.baseColorLuminance = file.Read();\r\n this.baseColorLightColor.r = file.Read();\r\n this.baseColorLightColor.g = file.Read();\r\n this.baseColorLightColor.b = file.Read();\r\n\r\n this.baseColorDarkColor.r = file.Read();\r\n this.baseColorDarkColor.g = file.Read();\r\n this.baseColorDarkColor.b = file.Read();\r\n\r\n this.baseColorSaturability = file.Read();\r\n\r\n this.opacityContrast = file.Read();\r\n this.opacityBorder = file.Read();\r\n this.opacityMaximum = file.Read();\r\n this.opacityMinimum = file.Read();\r\n\r\n this.specular = file.Read();\r\n this.selfLuminous = file.Read();\r\n\r\n this.fresnelPO = file.Read();\r\n this.fresnelST = file.Read();\r\n this.fresnelLuminance = file.Read();\r\n\r\n this.fresnelLightColor.r = file.Read();\r\n this.fresnelLightColor.g = file.Read();\r\n this.fresnelLightColor.b = file.Read();\r\n\r\n this.fresnelDarkColor.r = file.Read();\r\n this.fresnelDarkColor.g = file.Read();\r\n this.fresnelDarkColor.b = file.Read();\r\n\r\n this.sharpen = file.Read();\r\n\r\n if (ver > 5)\r\n this.UVType = file.Read();\r\n\r\n if (ver > 6)\r\n this.type = file.Read();\r\n if (ver > 7)\r\n this.ref = file.Read();\r\n\r\n if (ver > 8)\r\n {\r\n this.UWroldRep = file.Read();\r\n this.VWroldRep = file.Read();\r\n this.UWroldRo = file.Read();\r\n this.UWorldMove = file.Read();\r\n this.VWorldMove = file.Read();\r\n }\r\n if (ver > 9)\r\n {\r\n this.refraction = file.Read();\r\n this.side = file.Read();\r\n }\r\n }\r\n\r\n this.Update();\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.color);\r\n file.Write(this.transparent);\r\n file.Write(this.matalness);\r\n file.Write(this.opacity);\r\n file.Write(this.depthTest);\r\n file.WriteHardObjectId(this.map);\r\n file.WriteHardObjectId(this.bumpMap);\r\n file.Write(this.bumpScale);\r\n file.WriteHardObjectId(this.roughnessMap);\r\n file.Write(this.roughness);\r\n file.Write(this.useMap);\r\n file.Write(this.useBumpMap);\r\n file.Write(this.useRoughnessMap);\r\n file.Write(this._goodsInfo.name);\r\n file.Write(this._goodsInfo.material);\r\n file.Write(this._goodsInfo.color);\r\n file.Write(this.IsFull);\r\n\r\n //ver 5\r\n file.Write(this.baseColorLuminance);\r\n file.Write(this.baseColorLightColor.r);\r\n file.Write(this.baseColorLightColor.g);\r\n file.Write(this.baseColorLightColor.b);\r\n\r\n file.Write(this.baseColorDarkColor.r);\r\n file.Write(this.baseColorDarkColor.g);\r\n file.Write(this.baseColorDarkColor.b);\r\n\r\n file.Write(this.baseColorSaturability);\r\n\r\n file.Write(this.opacityContrast);\r\n file.Write(this.opacityBorder);\r\n file.Write(this.opacityMaximum);\r\n file.Write(this.opacityMinimum);\r\n\r\n file.Write(this.specular);\r\n file.Write(this.selfLuminous);\r\n\r\n file.Write(this.fresnelPO);\r\n file.Write(this.fresnelST);\r\n file.Write(this.fresnelLuminance);\r\n\r\n file.Write(this.fresnelLightColor.r);\r\n file.Write(this.fresnelLightColor.g);\r\n file.Write(this.fresnelLightColor.b);\r\n\r\n file.Write(this.fresnelDarkColor.r);\r\n file.Write(this.fresnelDarkColor.g);\r\n file.Write(this.fresnelDarkColor.b);\r\n\r\n file.Write(this.sharpen);\r\n\r\n //ver 6\r\n file.Write(this.UVType);\r\n\r\n //ver 7\r\n file.Write(this.type);\r\n\r\n //ver8\r\n file.Write(this.ref);\r\n\r\n //ver9\r\n file.Write(this.UWroldRep);\r\n file.Write(this.VWroldRep);\r\n file.Write(this.UWroldRo);\r\n file.Write(this.UWorldMove);\r\n file.Write(this.VWorldMove);\r\n\r\n //ver10\r\n file.Write(this.refraction);\r\n file.Write(this.side);\r\n }\r\n //#endregion\r\n}\r\n","import { 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 { Box3Ext } from '../../Geometry/Box';\r\nimport { equaln, equalv3, GetBox, IdentityMtx4, UpdateBoundingSphere } from '../../Geometry/GeUtils';\r\nimport { Vec3 } from '../../Geometry/IVec3';\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 { HistorycRecord } from '../HistorycRecord';\r\nimport { ISerialize } from '../ISerialize';\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 HasEdgeRenderType = false;//拥有封边检查绘制模式\r\n protected HasPlaceFaceRenderType = false;//拥有排版面绘制模式\r\n\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 CacheDrawObject() { return this._CacheDrawObject; }\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 CopyInRenderTpye: RenderType; //记录在哪种RenderType下copy的\r\n set Material(materialId: ObjectId)\r\n {\r\n if (materialId === this._MaterialId) return;\r\n\r\n if (this._db && materialId?.Object)//我们放宽校验,当图形未加入到图纸时,我们允许它任意设置材质\r\n {\r\n if (!(materialId.Object instanceof PhysicalMaterialRecord))\r\n throw \"程序内部错误!设置材质错误:该对象不是材质\";\r\n\r\n if (materialId.Object.Db !== this.Db)\r\n throw \"程序内部错误!设置材质错误:不同图纸间材质\";\r\n }\r\n\r\n this.WriteAllObjectRecord();\r\n this._MaterialId = materialId;\r\n for (let [type, obj] of this._CacheDrawObject)\r\n this.UpdateDrawObjectMaterial(type, obj);\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 let undoRec = this.UndoRecord();\r\n if (undoRec)\r\n {\r\n let hisRec = new HistorycRecord();\r\n hisRec.redoData = new EntityColorHistoryRecord(color);\r\n hisRec.undoData = new EntityColorHistoryRecord(this._Color);\r\n undoRec.WriteObjectHistoryPath(this, hisRec);\r\n }\r\n\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()\r\n {\r\n for (let [, obj] of this._CacheDrawObject)\r\n return GetBox(obj);\r\n return GetBox(this.GetDrawObjectFromRenderType());\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 Move(v: Vec3)\r\n {\r\n if (equaln(v.x, 0) && equaln(v.y, 0) && equaln(v.z, 0)) return;\r\n\r\n this.WriteAllObjectRecord();\r\n\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 this._SpaceOCS.elements[12] += v.x;\r\n this._SpaceOCS.elements[13] += v.y;\r\n this._SpaceOCS.elements[14] += v.z;\r\n this.Update(UpdateDraw.Matrix);\r\n return this;\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 get Z() { return this._Matrix.elements[14]; }\r\n set Z(z: number)\r\n {\r\n if (equaln(this.Z, z)) return;\r\n this.Move({ x: 0, y: 0, z: z - this.Z });\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.Move({ x: 0, y: 0, z: -this.Z });\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\r\n protected get CaseShadow()\r\n {\r\n if (!this.MeshMaterial) return true;\r\n return !this.MeshMaterial.transparent || this.MeshMaterial.opacity === 1;\r\n }\r\n\r\n protected get ReceiveShadow()\r\n {\r\n return this.CaseShadow;\r\n }\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 = HostApplicationServices._renderType;\r\n let obj = this.GetDrawObjectFromRenderType(HostApplicationServices._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 if (renderType === RenderType.Edge && !this.HasEdgeRenderType)\r\n renderType = RenderType.Conceptual;\r\n if (renderType === RenderType.PlaceFace && !this.HasPlaceFaceRenderType)\r\n renderType = RenderType.Wireframe;\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 {\r\n this.DeferUpdate();\r\n // if (this.__ReadFileIng__) //!警告\r\n // console.error(\"在读取文件时更新实体的显示!\");\r\n }\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(HostApplicationServices._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 static _xa = new Vector3;\r\n static _ya = new Vector3;\r\n static _za = new Vector3;\r\n /**\r\n * 使用统一的方法设置对象的矩阵.\r\n * 需要对缩放矩形进行重载.避免对象矩阵不是单位矩阵\r\n */\r\n ApplyMatrix(m: Matrix4): this\r\n {\r\n this.WriteAllObjectRecord();\r\n\r\n m.extractBasis(Entity._xa, Entity._ya, Entity._za);\r\n if (\r\n equaln(Entity._xa.lengthSq(), 1, 1e-4) &&\r\n equaln(Entity._ya.lengthSq(), 1, 1e-4) &&\r\n equaln(Entity._za.lengthSq(), 1, 1e-4)\r\n )\r\n {\r\n this._Matrix.multiplyMatrices(m, this._Matrix);\r\n this._SpaceOCS.multiplyMatrices(m, this._SpaceOCS);\r\n if (!equalv3(Entity._xa.cross(Entity._ya).normalize(), Entity._za))\r\n this.ApplyMirrorMatrix(m);\r\n }\r\n else\r\n this.ApplyScaleMatrix(m);\r\n this.Update(UpdateDraw.Matrix);\r\n return this;\r\n }\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 /**\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 GetGripPoints(): Vector3[]\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 GetStretchPoints(): Array\r\n {\r\n return [];\r\n }\r\n\r\n /**\r\n * 拉伸夹点,用于Stretch命令\r\n * @param {Array} indexList 拉伸点索引列表.\r\n * @param {Vector3} vec 移动向量\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 override 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.__ReadFileIng__ = false;\r\n this.Update();\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 {\r\n let id = file.ReadHardObjectId();\r\n if (id) this.ProcessingGroupList.push(id);\r\n }\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 if (undoData instanceof EntityColorHistoryRecord)\r\n this.ColorIndex = undoData.color;\r\n }\r\n\r\n override 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\r\n@Factory\r\nexport class EntityColorHistoryRecord implements ISerialize\r\n{\r\n constructor(public color: number) { }\r\n ReadFile(file: CADFiler): this\r\n {\r\n this.color = file.Read();\r\n return this;\r\n }\r\n WriteFile(file: CADFiler): this\r\n {\r\n file.Write(this.color);\r\n return this;\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, defaultParam);\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 HistoryWs = \"HistoryWs\",\r\n}\r\n","import { Object3D } from \"three\";\r\nimport { Entity } from \"../DatabaseServices/Entity/Entity\";\r\nimport { ObjectId } from \"../DatabaseServices/ObjectId\";\r\nimport { equaln } from \"../Geometry/GeUtils\";\r\nimport { safeEval } from \"./eval\";\r\nimport { StoreageKeys } from \"./StoreageKeys\";\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 (Math.abs(v) < Math.pow(0.1, fractionDigits) * 0.49) return \"0\";\r\n if (!fractionDigits)\r\n return v.toFixed(0);\r\n else\r\n return v.toFixed(fractionDigits).replace(/[.]?0+$/, \"\");\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\nimport { Vec3 } from './IVec3';\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\nexport const ZAxisN = new Vector3(0, 0, -1);\r\n\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: Vec3, v2: Vec3, 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 * @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 * @param {Vector3} v1\r\n * @param {Vector3} v2\r\n * @param {Vector3} [ref] 参考向量,如果为世界坐标系则为0,0,1\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\nlet tempBox = new Box3();\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 = false): 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 //@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 tempBox.copy(geo.boundingBox).applyMatrix4(o.matrixWorld);\r\n box.union(tempBox);\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 {\r\n geo.computeBoundingSphere();\r\n geo.computeBoundingBox();//样条线更新位置和更新点位置后,无法被选中\r\n }\r\n}\r\n\r\n\r\nexport type compareVectorFn = (v1: Vector, v2: Vector) => 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 ComparePointFnGenerate(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: Vector): 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, Quaternion, 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} mtx 矩阵\r\n * @param {number} col 列索引,0x 1y 2z 3org\r\n * @param {Vector3} v 向量或点\r\n */\r\nexport function SetMtxVector(mtx: Matrix4, col: number, v: Vector3)\r\n{\r\n let index = col * 4;\r\n mtx.elements[index] = v.x;\r\n mtx.elements[index + 1] = v.y;\r\n mtx.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 scaleMtx = new Matrix4().makeScale(scale, scale, scale);\r\n if (center) scaleMtx.setPosition(center.clone().multiplyScalar(1 - scale));\r\n return scaleMtx;\r\n}\r\n\r\n//缩放矩阵 不等比例\r\nexport function MakeScaleMatrix(scaleX: number, scaleY: number, scaleZ: number, center?: Vector3)\r\n{\r\n let scaleMtx = new Matrix4().makeScale(scaleX, scaleY, scaleZ);\r\n if (center) scaleMtx.setPosition(center.clone().applyMatrix4(scaleMtx).sub(center).negate());\r\n return scaleMtx;\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, index = 1): Matrix4\r\n{\r\n let cs = new CoordinateSystem().applyMatrix4(mtx);\r\n if (index === 0)\r\n cs.XAxis.negate();\r\n else if (index === 1)\r\n cs.YAxis.negate();\r\n else\r\n cs.ZAxis.negate();\r\n\r\n return cs.getMatrix4(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 cacheVec.z = 0;\r\n\r\n cacheVec.applyMatrix4(mtx);\r\n\r\n vec.x = cacheVec.x;\r\n vec.y = cacheVec.y;\r\n}\r\n\r\nexport function MakeMirrorMtx(planeNormal: Vector3, pos?: Vector3)\r\n{\r\n let mirrorMtx = new Matrix4();\r\n let xAxis = new Vector3(1 - 2 * planeNormal.x ** 2, -2 * planeNormal.x * planeNormal.y, -2 * planeNormal.x * planeNormal.z);\r\n let yAxis = new Vector3(-2 * planeNormal.x * planeNormal.y, 1 - 2 * planeNormal.y ** 2, -2 * planeNormal.y * planeNormal.z);\r\n let zAxis = new Vector3(-2 * planeNormal.x * planeNormal.z, -2 * planeNormal.y * planeNormal.z, 1 - 2 * planeNormal.z ** 2);\r\n mirrorMtx.makeBasis(xAxis, yAxis, zAxis);\r\n\r\n if (pos)\r\n mirrorMtx.setPosition(pos.clone().applyMatrix4(mirrorMtx).sub(pos).negate());\r\n\r\n return mirrorMtx;\r\n}\r\n\r\n/**\r\n * 对向量进行方向变换 (如果是pos 请使用pos.applyMatrix4)\r\n * @param vec 向量\r\n * @param m 矩阵\r\n * @returns vec\r\n */\r\nexport function TransformVector(vec: T, m: Matrix4): T\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\nexport function MakeRotateMatrix4(cen: Vector3, axis: Vector3, angle: number, roMtx: Matrix4 = new Matrix4)\r\n{\r\n roMtx.makeRotationAxis(axis, angle);\r\n roMtx.setPosition(cen.clone().applyMatrix4(roMtx).negate().add(cen));\r\n return roMtx;\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\nlet p = new Vector3;\r\nlet s = new Vector3;\r\nlet q = new Quaternion;\r\n//归一化矩阵 避免轴不是非标准向量\r\nexport function NormalMatrix(mtx: Matrix4)\r\n{\r\n mtx.decompose(p, q, s);\r\n s.set(1, 1, 1);\r\n mtx.compose(p, q, s);\r\n return mtx;\r\n}\r\n\r\n//四舍五入\r\nexport function RoundMatrix(mtx: Matrix4, fuzz = 1e-6)\r\n{\r\n let el = mtx.elements;\r\n for (let i = 0; i < 16; i++)\r\n {\r\n let re = Math.round(el[i]);\r\n if (equaln(re, el[i], fuzz))\r\n el[i] = re;\r\n }\r\n return mtx;\r\n}\r\n\r\nexport const tempMatrix1 = new Matrix4;\r\n\r\nexport const ZMirrorMatrix = MakeMirrorMtx(new Vector3(0, 0, 1));\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 { MathUtils, Vector3 } from \"three\";\r\nimport { equaln, YAxis, ZAxis } 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","/**\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\nexport function FindLast(arr: T[], searchFn: (item: T) => boolean)\r\n{\r\n for (let i = arr.length; i--;)\r\n if (searchFn(arr[i]))\r\n return i;\r\n return -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] 校验对象相等函数,如果相等 则删除e2\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//因为多段线的数据关系,我们需要保留下一段的数据\r\nexport function ArrayRemoveDupSavePre(baseCompareArray: any[], arrs: (any[])[])\r\n{\r\n let index = 0;//set index\r\n let pre = 0;//前一个点\r\n for (let next = 1; next <= baseCompareArray.length; next++)\r\n {\r\n if (baseCompareArray[pre] !== baseCompareArray[next])\r\n {\r\n baseCompareArray[index] = baseCompareArray[pre];\r\n\r\n for (let arr of arrs)\r\n arr[index] = arr[pre];\r\n\r\n index++;\r\n }\r\n\r\n pre++;\r\n }\r\n\r\n baseCompareArray.length = index;\r\n for (let arr of arrs)\r\n arr.length = index;\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","import { EllipseCurve, Shape, Vector2 } from \"three\";\r\nimport { clamp } from \"../Common/Utils\";\r\nimport { equalv2 } from \"../Geometry/GeUtils\";\r\nimport { Arc } from \"./Entity/Arc\";\r\n\r\nlet tempArc: Arc;\r\nexport class Shape2 extends Shape\r\n{\r\n getPoints(divisions: number = 12, optimizeArc = true): Vector2[]\r\n {\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] as EllipseCurve;\r\n let resolution = divisions;\r\n\r\n //@ts-ignore\r\n if (curve && curve.isEllipseCurve)\r\n {\r\n if (optimizeArc)\r\n {\r\n if (!tempArc) tempArc = new Arc;\r\n else tempArc.ClearDraw();\r\n\r\n tempArc.IsClockWise = curve.aClockwise;\r\n tempArc.StartAngle = curve.aStartAngle;\r\n tempArc.EndAngle = curve.aEndAngle;\r\n tempArc.Radius = Math.abs(curve.xRadius);\r\n\r\n //根据圆弧的角度,来确定绘制个数\r\n let count = Math.max(2, Math.abs(Math.ceil((tempArc.AllAngle) / Math.PI)) * divisions);\r\n\r\n resolution = clamp(Math.ceil(tempArc.Length / 20), count, 60);\r\n }\r\n else\r\n resolution = divisions * 2;\r\n }\r\n else\r\n {\r\n //@ts-ignore\r\n resolution = (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\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 { Shape, Vector2 } from 'three';\r\nimport { Shape2 } from '../DatabaseServices/Shape2';\r\nimport { angle, equaln, equalv2, polar } from './GeUtils';\r\n\r\n//解析二维圆弧\r\nclass Arc2d\r\n{\r\n _StartAn: number;\r\n _EndAn: number;\r\n _Center: Vector2;\r\n _Radius: number;\r\n constructor(p1: Vector2, p2: Vector2, bul: number)\r\n {\r\n p1 = p1.clone();\r\n p2 = p2.clone();\r\n\r\n //a (* 2 (atan b))\r\n let a = Math.atan(bul) * 2;\r\n //r (/ (distance p1 p2) 2 (sin a))\r\n let r = p1.distanceTo(p2) / 2 / Math.sin(a);\r\n //c (polar p1 (+ (- (/ pi 2) a) (angle p1 p2)) r)\r\n let c = polar(p1.clone(), Math.PI / 2 - a + angle(p2.clone().sub(p1)), r);\r\n\r\n this._Radius = Math.abs(r);\r\n\r\n this._StartAn = angle(p1.sub(c));\r\n this._EndAn = angle(p2.sub(c));\r\n\r\n this._Center = c;\r\n }\r\n}\r\n\r\n//创建轮廓 通过点表和凸度\r\nexport function CreatePolylinePath(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 prePt = pts[i];\r\n let nextPt = pts[i + 1];\r\n if (equaln(buls[i], 0, 1e-8) || equalv2(prePt, nextPt, 1e-2))\r\n {\r\n shape.lineTo(nextPt.x, nextPt.y);\r\n }\r\n else\r\n {\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(prePt, 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\nexport function CreateShapeFromPoints()\r\n{\r\n\r\n}\r\n","import { FrontSide, 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, side = FrontSide): ShaderMaterialParameters\r\n{\r\n return {\r\n uniforms: {\r\n \"SurfaceColor\": { value: color }\r\n },\r\n \r\n side,\r\n polygonOffset: true,\r\n polygonOffsetFactor: 1,\r\n polygonOffsetUnits: 1\r\n };\r\n}\r\n","import { Color, DoubleSide, FrontSide, LineBasicMaterial, LineDashedMaterial, MeshBasicMaterial, ShaderMaterial, Side, Vector2, Vector3 } from 'three';\r\nimport { LineMaterial } from 'three/examples/jsm/lines/LineMaterial';\r\nimport { HostApplicationServices } from '../ApplicationServices/HostApplicationServices';\r\nimport { GetGoodShaderSimple } from '../GLSL/GoochShader';\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 UseLogBuf = false;\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 private static _WallLineMtlMap = new Map();\r\n static GetWallLineMtl(color: number): LineDashedMaterial\r\n {\r\n if (this._WallLineMtlMap.has(color)) return this._WallLineMtlMap.get(color);\r\n let mtl = new LineDashedMaterial({\r\n color: this.GetColor(color),\r\n dashSize: 10,\r\n gapSize: 10,\r\n });\r\n this._WallLineMtlMap.set(color, mtl);\r\n return mtl;\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, side: Side = FrontSide)\r\n {\r\n let key = `${color}${side}`;\r\n if (this._ConceptualMaterial.has(key))\r\n return this._ConceptualMaterial.get(key);\r\n\r\n let shaderParams = GetGoodShaderSimple(new Vector3().fromArray(this.GetColor(color).toArray()), side);\r\n let mtl = new ShaderMaterial(shaderParams);\r\n this._ConceptualMaterial.set(key, mtl);\r\n return mtl;\r\n }\r\n\r\n static UpdateConceptualMaterial(useLogBuf: boolean)\r\n {\r\n \r\n }\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 \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, color: this.GetColor(color) });\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 mtl = this._BasicTransparentMaterialMap2.get(key);\r\n if (mtl) return mtl;\r\n mtl = new MeshBasicMaterial({ transparent: true, opacity: opacity, color: this.GetColor(color) });\r\n this._BasicTransparentMaterialMap2.set(key, mtl);\r\n return mtl;\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 private static _ConceptualEdgeMaterial: LineBasicMaterial;\r\n static GetConceptualEdgeMaterial()\r\n {\r\n if (!this._ConceptualEdgeMaterial)\r\n this._ConceptualEdgeMaterial = new LineBasicMaterial({ color: this.GetColor(HostApplicationServices.ConceptualEdgeColor).clone(), side: DoubleSide });\r\n\r\n return this._ConceptualEdgeMaterial;\r\n }\r\n static UpdateConceptualEdgeMaterial()\r\n {\r\n if (this._ConceptualEdgeMaterial)\r\n this._ConceptualEdgeMaterial.color.copy(this.GetColor(HostApplicationServices.ConceptualEdgeColor));\r\n }\r\n private static _Physical2EdgeMaterial: LineBasicMaterial;\r\n static GetPhysical2EdgeMaterial()\r\n {\r\n if (!this._Physical2EdgeMaterial)\r\n this._Physical2EdgeMaterial = new LineBasicMaterial({ color: this.GetColor(HostApplicationServices.Physical2EdgeColor).clone(), side: DoubleSide });\r\n\r\n return this._Physical2EdgeMaterial;\r\n }\r\n static UpdatePhysical2EdgeMaterial()\r\n {\r\n if (this._Physical2EdgeMaterial)\r\n this._Physical2EdgeMaterial.color.copy(this.GetColor(HostApplicationServices.Physical2EdgeColor));\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","import { BufferGeometry, Geometry } from \"three\";\r\n\r\nexport const BufferGeometry2GeometryCacheMap = new WeakMap();\r\nglobalThis.fuck = BufferGeometry2GeometryCacheMap;\r\n","import { BufferAttribute, BufferGeometry, Shape, ShapeGeometry, Vector3 } 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 * @param ignoreBoxError 忽略更新点后盒子错误的问题\r\n * @returns 当成功时返回true,更新失败时返回false\r\n */\r\n export function UpdatePts(geo: BufferGeometry, pts: Vector3[], ignoreBoxError = false): 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 || (ignoreBoxError && 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//此时这个Geometry.Dispose后在进行重新生成会比较后,否则属性没有被回收导致内存泄漏\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 { BufferGeometry, Curve as TCurve, Line, Line as TLine, Material, Object3D, Vector3 } from 'three';\r\nimport { Line2 } from 'three/examples/jsm/lines/Line2';\r\nimport { LineGeometry } from 'three/examples/jsm/lines/LineGeometry';\r\nimport { arrayRemoveDuplicateBySort, arraySortByNumber } from '../../Common/ArrayExt';\r\nimport { ColorMaterial } from '../../Common/ColorPalette';\r\nimport { Status } from '../../Common/Status';\r\nimport { BufferGeometryUtils } from '../../Geometry/BufferGeometryUtils';\r\nimport { equaln, equalv3, updateGeometry } 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 get Shape(): TCurve { throw \"未实现\"; }\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 * @param {(number | Vector3)} param\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 */\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 override OnlyRenderType = true;\r\n\r\n //样条线重载了这个,得到了更高的绘制精度\r\n protected GetDrawCount() { return 30; }\r\n\r\n /**\r\n * @param {RenderType} [renderType=RenderType.Wireframe]\r\n */\r\n protected override InitDrawObject(renderType: RenderType = RenderType.Wireframe): Object3D\r\n {\r\n let pts = this.Shape.getPoints(this.GetDrawCount());\r\n if (renderType === RenderType.WireframePrint)\r\n {\r\n let array: number[] = [];\r\n for (let p of pts) array.push(p.x, p.y, 0);\r\n let geometry = new LineGeometry().setPositions(array);\r\n return new Line2(geometry, ColorMaterial.PrintLineMatrial);\r\n }\r\n let geo = new BufferGeometry().setFromPoints(pts);\r\n return new TLine(geo, ColorMaterial.GetLineMaterial(this._Color));\r\n }\r\n\r\n /**\r\n * 重载:更新绘制的实体\r\n * @param {RenderType} type\r\n * @param {Object3D} obj\r\n */\r\n override UpdateDrawObject(type: RenderType, obj: Object3D)\r\n {\r\n let pts = this.Shape.getPoints(this.GetDrawCount());\r\n let plObj = obj as TLine;\r\n let geo = plObj.geometry as BufferGeometry | LineGeometry;\r\n if (geo instanceof LineGeometry)\r\n {\r\n let array: number[] = [];\r\n for (let p of pts) array.push(p.x, p.y, 0);\r\n (geo as LineGeometry).setPositions(array);\r\n }\r\n else\r\n {\r\n //@ts-ignore\r\n for (let p of pts) p.z = 0;\r\n if (!BufferGeometryUtils.UpdatePts(geo, pts as unknown as Vector3[]))\r\n updateGeometry(plObj, new BufferGeometry().setFromPoints(pts));\r\n }\r\n }\r\n\r\n /**\r\n * 重载:更新实体材质\r\n */\r\n override 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 override 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","export enum DragPointType\r\n{\r\n Grip = 0,\r\n Stretch = 1\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, 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 { Box3Ext } from '../../Geometry/Box';\r\nimport { BufferGeometryUtils } from '../../Geometry/BufferGeometryUtils';\r\nimport { AsVector2, equaln, equalv3, isParallelTo, MoveMatrix, updateGeometry } 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 let ocsInv = this.OCSInv;\r\n let sp = this.StartPoint.setZ(0).applyMatrix4(ocsInv);\r\n let ep = this.EndPoint.setZ(0).applyMatrix4(ocsInv);\r\n this._StartPoint.copy(sp);\r\n this._EndPoint.copy(ep);\r\n this.Update();\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\r\n InitDrawObject(renderType: RenderType = RenderType.Wireframe): Object3D\r\n {\r\n let pts = [this._StartPoint, this._EndPoint];\r\n if (renderType === RenderType.WireframePrint)\r\n {\r\n let array: number[] = [];\r\n for (let p of pts) array.push(p.x, p.y, p.z);\r\n let geometry = new LineGeometry().setPositions(array);\r\n return new Line2(geometry, ColorMaterial.PrintLineMatrial);\r\n }\r\n let geo = new BufferGeometry().setFromPoints(pts);\r\n return new TLine(geo, ColorMaterial.GetLineMaterial(this._Color));\r\n }\r\n\r\n /**\r\n * 重载:更新绘制的实体\r\n * @param {RenderType} type\r\n * @param {Object3D} obj\r\n */\r\n UpdateDrawObject(type: RenderType, obj: Object3D)\r\n {\r\n let pts = [this._StartPoint, this._EndPoint];\r\n let plObj = obj as TLine;\r\n let geo = plObj.geometry as BufferGeometry | LineGeometry;\r\n if (geo instanceof LineGeometry)\r\n {\r\n let array: number[] = [];\r\n for (let p of pts) array.push(p.x, p.y, p.z);\r\n (geo as LineGeometry).setPositions(array);\r\n }\r\n else\r\n {\r\n if (!BufferGeometryUtils.UpdatePts(geo, pts as unknown as Vector3[]))\r\n updateGeometry(plObj, new BufferGeometry().setFromPoints(pts));\r\n }\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.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(): Vector3[]\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 || curve.constructor.name === \"RoomWallLine\")\r\n {\r\n return IntersectLineAndLine(this, curve as Line, intType, tolerance);\r\n }\r\n if (curve instanceof Arc || curve.constructor.name === \"RoomWallArc\")\r\n {\r\n return IntersectLineAndArc(this, curve as Arc, 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.SetStartEndPoint(\r\n pts[i],\r\n pts[i + 1]\r\n );\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 || cu.constructor.name === \"RoomWallLine\")\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.SetStartEndPoint(\r\n this.StartPoint.add(derv),\r\n this.EndPoint.add(derv)\r\n );\r\n return [newLine];\r\n }\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 /**\r\n * 返回对象在自身坐标系下的Box\r\n */\r\n get BoundingBoxInOCS(): Box3Ext\r\n {\r\n return new Box3Ext().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 override _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 override 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.OCSNoClone);\r\n }\r\n\r\n get EndPoint(): Vector3\r\n {\r\n return this._EndPoint.clone().applyMatrix4(this.OCSNoClone);\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 SetStartEndPoint(s: Vector3, e: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n let inv = this.OCSInv;\r\n this._StartPoint.copy(s).applyMatrix4(inv);\r\n this._EndPoint.copy(e).applyMatrix4(inv);\r\n this.Update();\r\n }\r\n\r\n //#endregion\r\n}\r\n","import { MathUtils, Matrix3, Matrix4, Shape, Vector3 } from 'three';\r\nimport { arrayLast, arrayRemoveDuplicateBySort } from '../../Common/ArrayExt';\r\nimport { getArcOrCirNearPts, getDeterminantFor2V, getTanPtsOnEllipse, Pts2Polyline } from '../../Common/CurveUtils';\r\nimport { Status } from '../../Common/Status';\r\nimport { ObjectSnapMode } from '../../Editor/ObjectSnapMode';\r\nimport { angle, angleTo, AsVector2, equaln, equalv3, MoveMatrix, rotatePoint } from '../../Geometry/GeUtils';\r\nimport { IntersectEllipse, IntersectEllipseAndCircleOrArc, IntersectEllipseAndLine, IntersectOption, IntersectPolylineAndCurve, reverseIntersectOption } from '../../GraphicsSystem/IntersectWith';\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 { Line } from './Line';\r\nimport { Polyline } from './Polyline';\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\r\n protected ApplyScaleMatrix(m: Matrix4): this\r\n {\r\n //或许我们应该在缩放一下轴尺寸 但是先不做了\r\n let p = this.Position;\r\n p.applyMatrix4(m);\r\n this.Position = p;\r\n return this;\r\n }\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\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 vec.set(0, -1, 0);\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\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.ColorIndex = this.ColorIndex;\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 { 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, equalv2, MoveMatrix, polar, ZeroVec } from '../../Geometry/GeUtils';\r\nimport { Orbit } from '../../Geometry/Orbit';\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, fuzz = 1e-5)\r\n {\r\n return equaln(pt.distanceToSquared(this.Center), this._Radius * this._Radius, fuzz);\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 BoundingBoxInOCS(): Box3Ext\r\n {\r\n return new Box3Ext(new Vector3(-this.Radius, -this.Radius), new Vector3(this.Radius, this.Radius));\r\n }\r\n\r\n get BoundingBox(): Box3Ext\r\n {\r\n let z = this.Normal;\r\n let x = new Vector3;\r\n let y = new Vector3;\r\n Orbit.ComputUpDirection(z, y, x);\r\n let m = new Matrix4().makeBasis(x, y, z).setPosition(this.Center);\r\n //使用任意轴坐标系 以便我们正确的对齐世界坐标系\r\n return this.BoundingBoxInOCS.applyMatrix4(m);\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);\r\n if (equalv2(pt, ZeroVec, 1e-8))\r\n return this.GetPointAtParam(0);\r\n\r\n let a = Math.atan2(pt.y, pt.x);\r\n return polar(new Vector3, a, this._Radius).applyMatrix4(this._Matrix);\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","import { Vec2, Vector2, Vector3 } from \"three\";\r\nimport { arrayLast } from \"../Common/ArrayExt\";\r\nimport { orientation } from \"../Geometry/DoIntersect\";\r\nimport { AsVector2, AsVector3, equaln, equalv2 } from \"../Geometry/GeUtils\";\r\nimport { Arc } from \"./Entity/Arc\";\r\nimport { Curve } from \"./Entity/Curve\";\r\nimport { Line } from \"./Entity/Line\";\r\nimport { Polyline, PolylineProps } from \"./Entity/Polyline\";\r\nimport { Spline } from \"./Spline\";\r\n\r\nexport function SplineConver2Polyline(spl: Spline, tolerance = 0.1): Polyline\r\n{\r\n let cu = spl.Shape;\r\n\r\n let cacheParam = new Map();\r\n let cacheTange = new Map();\r\n\r\n const GetPointAtParam = (param: number) =>\r\n {\r\n let p = cacheParam.get(param);\r\n if (p) return p;\r\n\r\n p = cu.getPoint(param);\r\n cacheParam.set(param, p);\r\n return p;\r\n };\r\n\r\n const GetTangentAtParam = (param: number) =>\r\n {\r\n let t = cacheTange.get(param);\r\n if (t) return t;\r\n\r\n if (equaln(param, 1))\r\n {\r\n if (spl.CloseMark)\r\n t = cu.getPoint(1e-4).sub(GetPointAtParam(param)).normalize();\r\n else\r\n t = GetPointAtParam(param).clone().sub(cu.getPoint(1 - 1e-4)).normalize();\r\n }\r\n else\r\n t = cu.getPoint(param + 1e-4).sub(GetPointAtParam(param)).normalize();\r\n cacheTange.set(param, t);\r\n return t;\r\n };\r\n\r\n let count = spl.EndParam;\r\n let stepx = 1 / count;\r\n\r\n let curves: Curve[] = [];\r\n for (let i = 0; i < 1;)\r\n {\r\n let step = 0.25 * stepx;//0.5的时候也可以有不错的收敛,但是在0.25的时候会有比较贴合的效果\r\n while (true)\r\n {\r\n let param1 = i;\r\n let param2 = Math.min(1, i + step);\r\n\r\n let x = param2 - param1;\r\n let midp1 = GetPointAtParam(param1 + x * 0.25);\r\n let midp2 = GetPointAtParam(param1 + x * 0.75);\r\n\r\n let p1 = GetPointAtParam(param1);\r\n let p2 = GetPointAtParam(param2);\r\n\r\n let t1 = GetTangentAtParam(param1);\r\n let t2 = GetTangentAtParam(param2);\r\n\r\n let [c1, c2] = ComputeBiarc(p1, p2, t1, t2);\r\n\r\n // TestDraw(new Point(midp1));\r\n // TestDraw(new Point(midp2));\r\n\r\n // TestDraw(new Point(c1.GetPointAtParam(0.5)));\r\n // TestDraw(new Point(c2.GetPointAtParam(0.5)));\r\n\r\n if (\r\n c1.GetClosestPointTo(midp1, false).distanceTo(midp1) < tolerance &&\r\n c2.GetClosestPointTo(midp2, false).distanceTo(midp2) < tolerance\r\n )\r\n {\r\n curves.push(c1, c2);\r\n break;\r\n }\r\n else\r\n step = step * 0.5;\r\n }\r\n i += step;\r\n }\r\n\r\n let polyline = Polyline.Combine(curves, 1e-3);\r\n polyline.ApplyMatrix(spl.OCSNoClone);\r\n polyline.ColorIndex = spl.ColorIndex;\r\n return polyline;\r\n}\r\n\r\n//传入的一定是碎点,不是碎点,没有6个点请不要进来\r\nfunction PointsSimplify2Polyline(pts: Vector3[], tolerance = 0.1): Polyline\r\n{\r\n let tolSq = tolerance * tolerance;\r\n let cacheTange = new Map();\r\n\r\n let ptsCount = pts.length;\r\n\r\n const GetIndexAtParam = (param: number) =>\r\n {\r\n if (param === 1) return pts.length - 1;\r\n return Math.floor(ptsCount * param);\r\n };\r\n const GetPointAtParam = (param: number) =>\r\n {\r\n return pts[GetIndexAtParam(param)];\r\n };\r\n\r\n const GetTangentAtParam = (param: number) =>\r\n {\r\n let t = cacheTange.get(param);\r\n if (t) return t;\r\n\r\n let index = Math.floor(ptsCount * param);\r\n if (equaln(param, 1) || index + 1 >= pts.length)\r\n t = arrayLast(pts).clone().sub(pts[pts.length - 1]).normalize();\r\n else\r\n t = pts[index + 1].clone().sub(pts[index]).normalize();\r\n cacheTange.set(param, t);\r\n return t;\r\n };\r\n\r\n let stepx = 1;\r\n\r\n let curves: Curve[] = [];\r\n for (let i = 0; i < 1;)\r\n {\r\n let step = 0.25 * stepx;//0.5的时候也可以有不错的收敛,但是在0.25的时候会有比较贴合的效果\r\n while (true)\r\n {\r\n let param1 = i;\r\n let param2 = Math.min(1, i + step);\r\n\r\n let index1 = GetIndexAtParam(param1);\r\n let index2 = GetIndexAtParam(param2);\r\n if ((index2 - index1) < 4)//当点个数等于4时,我们计算双圆弧插值必然成功.(但是也失去了意义)\r\n {\r\n if (index2 - index1 > 0)\r\n {\r\n let lineD: PolylineProps[] = [];\r\n for (let i = index1; i <= index2; i++)\r\n lineD.push({ pt: AsVector2(pts[i]), bul: 0 });\r\n curves.push(new Polyline(lineD));\r\n }\r\n break;\r\n }\r\n\r\n let x = param2 - param1;\r\n let midp1 = GetPointAtParam(param1 + x * 0.25);\r\n let midp2 = GetPointAtParam(param1 + x * 0.75);\r\n\r\n let p1 = pts[index1];\r\n let p2 = pts[index2];\r\n\r\n let t1 = GetTangentAtParam(param1);\r\n let t2 = GetTangentAtParam(param2);\r\n\r\n let [c1, c2] = ComputeBiarc(p1, p2, t1, t2);\r\n\r\n if (\r\n c1.GetClosestPointTo(midp1, false).distanceToSquared(midp1) < tolSq &&\r\n c2.GetClosestPointTo(midp2, false).distanceToSquared(midp2) < tolSq\r\n )\r\n {\r\n curves.push(c1, c2);\r\n break;\r\n }\r\n else\r\n step = step * 0.5;\r\n }\r\n i += step;\r\n }\r\n\r\n let polyline = Polyline.Combine(curves, 1e-3);\r\n return polyline;\r\n}\r\n\r\n/**\r\n * 将碎点简化为多段线,(尝试转换为简单圆弧,或者使用双圆弧插值)\r\n * @param pts 点表\r\n * @param [tolerance=0.1] 容差\r\n * @param [parseArc=true] 解析成简单圆弧\r\n * @param [lineLengthSq=2000]\r\n * @returns 多段线\r\n */\r\nexport function PointsSimplify2PolylineAndParseArc(pts: Vector2[], buls: number[] = undefined, tolerance = 0.1, parseArc = true, lineLengthSq = 2000): Polyline\r\n{\r\n let tolSq = tolerance * tolerance;\r\n let ptsCount = pts.length;\r\n\r\n const CreateLineOrArc = (startIndex: number, endIndex: number) =>\r\n {\r\n if (!buls || equaln(buls[startIndex], 0, 1e-4))\r\n return new Line(AsVector3(pts[startIndex]), AsVector3(pts[endIndex]));\r\n else\r\n return new Arc().ParseFromBul(AsVector3(pts[startIndex]), AsVector3(pts[endIndex]), buls[startIndex]);\r\n };\r\n\r\n let retPolyline = new Polyline;\r\n let start = 0;\r\n for (let next = start + 1; next <= ptsCount; next++)\r\n {\r\n if (next === ptsCount || pts[next].distanceToSquared(pts[next - 1]) > lineLengthSq || (buls && !equaln(buls[next - 1], 0, 1e-4)))//长度大于50,我们才认为它是一条直线\r\n {\r\n //1.将start->next-1部分组成圆弧\r\n if (parseArc || (next - start) < 6)\r\n while (start < next - 1)\r\n {\r\n if ((next - 1) - start === 1)//直线\r\n {\r\n retPolyline.Join(CreateLineOrArc(start, next - 1));\r\n break;\r\n }\r\n\r\n //第一个三角形的方向\r\n let firstDir = orientation(pts[start], pts[start + 1], pts[start + 2]);\r\n let to = start;\r\n for (; to + 3 < next; to++)\r\n {\r\n let dir = orientation(pts[to + 1], pts[to + 2], pts[to + 3]);\r\n if (dir !== firstDir)\r\n break;\r\n }\r\n\r\n if (start === to)//三个点\r\n {\r\n retPolyline.Join(CreateLineOrArc(start, start + 1));\r\n retPolyline.Join(CreateLineOrArc(start + 1, start + 2));\r\n start = to + 2;\r\n continue;\r\n }\r\n else if ((to - start) < 3)\r\n {\r\n retPolyline.Join(PointsSimplify2Polyline(pts.slice(start, to + 2 + 1).map(AsVector3)));\r\n }\r\n else\r\n {\r\n let sp = pts[start];\r\n let ep = pts[to + 2];\r\n let mp = pts[Math.floor((start + to + 2) / 2)];\r\n let arc = new Arc().FromThreePoint(AsVector3(sp), AsVector3(mp), AsVector3(ep));\r\n\r\n let c = to + 2 - start;\r\n\r\n let p1 = AsVector3(pts[start + Math.floor(c * 0.25)]);\r\n let p2 = AsVector3(pts[start + Math.floor(c * 0.75)]);\r\n if (arc.GetClosestPointTo(p1, false).distanceToSquared(p1) < tolSq\r\n && arc.GetClosestPointTo(p2, false).distanceToSquared(p2) < tolSq)\r\n retPolyline.Join(arc);\r\n else\r\n retPolyline.Join(PointsSimplify2Polyline(pts.slice(start, to + 2 + 1).map(AsVector3)));\r\n }\r\n\r\n start = to + 2;//闪烁到圆弧终点\r\n\r\n if (start === next - 2)\r\n {\r\n retPolyline.Join(PointsSimplify2Polyline(pts.slice(start, next).map(AsVector3)));\r\n start = next;\r\n break;\r\n };\r\n }\r\n else\r\n retPolyline.Join(PointsSimplify2Polyline(pts.slice(start, next).map(AsVector3)));\r\n\r\n //2.加入直线\r\n if (next !== ptsCount)\r\n retPolyline.Join(CreateLineOrArc(next - 1, next));\r\n start = next;\r\n }\r\n }\r\n\r\n return retPolyline;\r\n}\r\n\r\nexport function SmartPointsSimply2Polyline(pts: Vector2[], buls: number[] = undefined, tolerance = 0.1, lineLengthSq = 2000)\r\n{\r\n let pl1 = PointsSimplify2PolylineAndParseArc(pts, buls, tolerance, true, lineLengthSq);\r\n let pl2 = PointsSimplify2PolylineAndParseArc(pts, buls, tolerance, false, lineLengthSq);\r\n\r\n if (pl1.EndParam < pl2.EndParam)\r\n return pl1;\r\n else\r\n return pl2;\r\n}\r\n\r\n/**\r\n * 简化多段线,返回结果比较好的多段线\r\n * @param pl\r\n * @param [tolerance=0.1]\r\n * @param [lineLengthSq=2000]\r\n * @returns 返回undefined时,简化失败\r\n */\r\nexport function SmartPolylineSimply2Polyline(pl: Polyline, tolerance = 0.1, lineLengthSq = 2000): Polyline | undefined\r\n{\r\n if (pl.EndParam < 3) return;\r\n\r\n let ld = pl.LineData;\r\n let pts: Vector2[] = [ld[0].pt];\r\n let buls: number[] = [ld[0].bul];\r\n let prep = pts[0];\r\n for (let i = 1; i < ld.length; i++)\r\n {\r\n let d = ld[i];\r\n let p = d.pt;\r\n if (!equalv2(p, prep, 1e-3))\r\n {\r\n pts.push(p);\r\n buls.push(d.bul);\r\n prep = p;\r\n }\r\n }\r\n\r\n if (pl.CloseMark && !equalv2(pts[0], arrayLast(pts)))\r\n pts.push(pts[0].clone());\r\n\r\n let npl = SmartPointsSimply2Polyline(pts, pl.LineData.map(p => p.bul), tolerance, lineLengthSq);\r\n npl.ApplyMatrix(pl.OCSNoClone);\r\n npl.ColorIndex = pl.ColorIndex;\r\n return npl;\r\n}\r\n\r\n//types\r\nfunction Vec2(x: number, y: number)\r\n{\r\n this.x = x;\r\n this.y = y;\r\n}\r\n\r\nlet c_Epsilon = 0.0001;\r\n\r\n// math functions\r\nfunction Sqr(val: number)\r\n{\r\n return val * val;\r\n}\r\nfunction IsEqualEps(lhs: number, rhs: number)\r\n{\r\n return Math.abs(lhs - rhs) <= c_Epsilon;\r\n}\r\n\r\nfunction ToNumber_Safe(input: number)\r\n{\r\n let output = Number(input);\r\n return isNaN(output) ? 0 : output;\r\n}\r\n\r\nfunction Vec2_Add(lhs: Vec2, rhs: Vec2)\r\n{\r\n return new Vec2(lhs.x + rhs.x, lhs.y + rhs.y);\r\n}\r\nfunction Vec2_Sub(lhs: Vec2, rhs: Vec2)\r\n{\r\n return new Vec2(lhs.x - rhs.x, lhs.y - rhs.y);\r\n}\r\nfunction Vec2_Scale(lhs: { x: number; y: number; }, scale: number)\r\n{\r\n return new Vec2(lhs.x * scale, lhs.y * scale);\r\n}\r\nfunction Vec2_AddScaled(lhs: Vec2, rhs: Vec2, scale: number)\r\n{\r\n return new Vec2(lhs.x + rhs.x * scale, lhs.y + rhs.y * scale);\r\n}\r\n\r\nfunction Vec2_Dot(lhs: Vec2, rhs: Vec2)\r\n{\r\n return lhs.x * rhs.x + lhs.y * rhs.y;\r\n}\r\n\r\nfunction Vec2_MagSqr(val: { x: number; y: number; })\r\n{\r\n return val.x * val.x + val.y * val.y;\r\n}\r\n\r\nfunction CreateArcFromEdge(p1: Vec2, t1: Vec2, p2: Vec2, fromP1: boolean): Arc | Line\r\n{\r\n let chord = Vec2_Sub(p2, p1);\r\n let n1 = new Vec2(-t1.y, t1.x);\r\n let chordDotN1 = Vec2_Dot(chord, n1);\r\n\r\n if (IsEqualEps(chordDotN1, 0))\r\n return new Line(AsVector3(p1), AsVector3(p2));\r\n else\r\n {\r\n let radius = Vec2_MagSqr(chord) / (2 * chordDotN1);\r\n let center = Vec2_AddScaled(p1, n1, radius);\r\n\r\n let p1Offset = Vec2_Sub(p1, center);\r\n let p2Offset = Vec2_Sub(p2, center);\r\n\r\n let p1Ang1 = Math.atan2(p1Offset.y, p1Offset.x);\r\n let p2Ang1 = Math.atan2(p2Offset.y, p2Offset.x);\r\n if (p1Offset.x * t1.y - p1Offset.y * t1.x > 0)\r\n return new Arc(AsVector3(center), Math.abs(radius), p1Ang1, p2Ang1, !fromP1);\r\n else\r\n return new Arc(AsVector3(center), Math.abs(radius), p1Ang1, p2Ang1, fromP1);\r\n }\r\n}\r\n\r\n/**\r\n * 计算双圆弧插值的圆弧\r\n * @param p1 起点\r\n * @param p2 终点\r\n * @param t1 起点切线\r\n * @param t2 终点切线\r\n * @returns 两个圆弧(或者其中一个是直线)\r\n */\r\nexport function ComputeBiarc(p1: Vec2, p2: Vec2, t1: Vec2, t2: Vec2): [Arc | Line, Arc | Line]\r\n{\r\n let v = Vec2_Sub(p2, p1);\r\n let vMagSqr = Vec2_MagSqr(v);\r\n\r\n let vDotT1 = Vec2_Dot(v, t1);\r\n\r\n if (true)//自动d1 d2=d1\r\n {\r\n let t = Vec2_Add(t1, t2);\r\n let tMagSqr = Vec2_MagSqr(t);\r\n\r\n let equalTangents = IsEqualEps(tMagSqr, 4.0);\r\n\r\n let perpT1 = IsEqualEps(vDotT1, 0.0);\r\n if (equalTangents && perpT1) //2个半圆\r\n {\r\n let angle = Math.atan2(v.y, v.x);\r\n let center1 = Vec2_AddScaled(p1, v, 0.25);\r\n let center2 = Vec2_AddScaled(p1, v, 0.75);\r\n let radius = Math.sqrt(vMagSqr) * 0.25;\r\n let cross = v.x * t1.y - v.y * t1.x;\r\n\r\n return [\r\n new Arc(AsVector3(center1), radius, angle, angle + Math.PI, cross < 0),\r\n new Arc(AsVector3(center2), radius, angle, angle + Math.PI, cross > 0)\r\n ];\r\n }\r\n else\r\n {\r\n let vDotT = Vec2_Dot(v, t);\r\n\r\n let d1: number;\r\n if (equalTangents)\r\n d1 = vMagSqr / (4 * vDotT1);\r\n else\r\n {\r\n let denominator = 2 - 2 * Vec2_Dot(t1, t2);\r\n let discriminant = Sqr(vDotT) + denominator * vMagSqr;\r\n d1 = (Math.sqrt(discriminant) - vDotT) / denominator;\r\n }\r\n\r\n let joint = Vec2_Scale(Vec2_Sub(t1, t2), d1);\r\n joint = Vec2_Add(joint, p1);\r\n joint = Vec2_Add(joint, p2);\r\n joint = Vec2_Scale(joint, 0.5);\r\n\r\n return [\r\n CreateArcFromEdge(p1, t1, joint, true),\r\n CreateArcFromEdge(p2, t2, joint, false)\r\n ];\r\n }\r\n }\r\n\r\n //使用自定义d1\r\n else\r\n {\r\n let d1_min = -500;\r\n let d1_max = 500;\r\n let d1 = d1_min + (d1_max - d1_min) * ToNumber_Safe(60) / 100.0;\r\n\r\n let vDotT2 = Vec2_Dot(v, t2);\r\n let t1DotT2 = Vec2_Dot(t1, t2);\r\n let denominator = (vDotT2 - d1 * (t1DotT2 - 1));\r\n\r\n if (IsEqualEps(denominator, 0.0))\r\n {\r\n //第二个圆弧是半圆\r\n let joint = Vec2_AddScaled(p1, t1, d1);\r\n joint = Vec2_AddScaled(joint, t2, vDotT2 - d1 * t1DotT2);\r\n\r\n return [\r\n CreateArcFromEdge(p1, t1, joint, true),\r\n CreateArcFromEdge(p2, t2, joint, false)\r\n ];\r\n }\r\n else\r\n {\r\n let d2 = (0.5 * vMagSqr - d1 * vDotT1) / denominator;\r\n\r\n let invLen = 1.0 / (d1 + d2);\r\n\r\n let joint = Vec2_Scale(Vec2_Sub(t1, t2), d1 * d2);\r\n joint = Vec2_AddScaled(joint, p2, d1);\r\n joint = Vec2_AddScaled(joint, p1, d2);\r\n joint = Vec2_Scale(joint, invLen);\r\n\r\n return [\r\n CreateArcFromEdge(p1, t1, joint, true),\r\n CreateArcFromEdge(p2, t2, joint, false)\r\n ];\r\n }\r\n }\r\n}\r\n","import { CatmullRomCurve3, Matrix3, Vector3 } from 'three';\r\nimport { arrayLast } from '../Common/ArrayExt';\r\nimport { ObjectSnapMode } from '../Editor/ObjectSnapMode';\r\nimport { AsVector2, AsVector3, equalv3 } from '../Geometry/GeUtils';\r\nimport { Factory } from './CADFactory';\r\nimport { CADFiler } from './CADFiler';\r\nimport { Curve } from './Entity/Curve';\r\nimport { Polyline } from './Entity/Polyline';\r\nimport { SplineConver2Polyline } from './SplineConver2Polyline';\r\n\r\n\r\nconst DrawSplitCount = 120;\r\n\r\n@Factory\r\nexport class Spline extends Curve\r\n{\r\n private _ClosedMark: boolean = false;\r\n constructor(private _PointList: Vector3[] = [])\r\n {\r\n super();\r\n }\r\n\r\n get Shape()\r\n {\r\n return new CatmullRomCurve3(this.Points, this._ClosedMark);\r\n }\r\n\r\n get Length()\r\n {\r\n //TODO:这个的性能挺低的(因为还需要重新获取一遍点表(如果我们有绘制对象,应该用绘制对象的点表来计算长度))\r\n return this.Shape.getLength();\r\n }\r\n\r\n get Points()\r\n {\r\n return this._PointList;\r\n }\r\n set Points(pts: Vector3[])\r\n {\r\n if (pts.length < 2) return;\r\n this.WriteAllObjectRecord();\r\n let ocsInv = this.OCSInv;\r\n this._PointList = pts.map(p => p.clone().applyMatrix4(ocsInv));\r\n\r\n if (pts.length > 2 && equalv3(this._PointList[0], arrayLast(this._PointList), 1e-3))\r\n {\r\n this._PointList.pop();\r\n this._ClosedMark = true;\r\n }\r\n\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 if (this._ClosedMark === v) return;\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\r\n get EndParam()\r\n {\r\n return this._ClosedMark ? this._PointList.length : this._PointList.length - 1;\r\n }\r\n\r\n GetClosestPointTo(pt: Vector3, extend: boolean): Vector3\r\n {\r\n return this.Convert2Polyline().GetClosestPointTo(pt, extend);\r\n }\r\n\r\n GetOffsetCurves(offsetDist: number): Array\r\n {\r\n if (offsetDist === 0) return [];\r\n let pld = this._PointList.map(p =>\r\n {\r\n return { pt: AsVector2(p), bul: 0 };\r\n });\r\n\r\n let pl = new Polyline(pld);\r\n let pls = pl.GetOffsetCurves(offsetDist);\r\n\r\n return pls.map(pl =>\r\n {\r\n let pts = pl.LineData.map(p => AsVector3(p.pt));\r\n let spl = new Spline(pts);\r\n spl.OCS = this._Matrix;\r\n spl._ClosedMark = this._ClosedMark;\r\n return spl;\r\n });\r\n }\r\n\r\n GetGripPoints()\r\n {\r\n return this._PointList.map(p => p.clone().applyMatrix4(this.OCSNoClone));\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 vec = vec.clone().applyMatrix4(this.OCSInv.setPosition(0, 0, 0)).setZ(0);\r\n this.WriteAllObjectRecord();\r\n for (let index of indexList)\r\n this._PointList[index].add(vec);\r\n this.Update();\r\n }\r\n MoveStretchPoints(indexList: Array, vec: Vector3)\r\n {\r\n vec = vec.clone().applyMatrix4(this.OCSInv.setPosition(0, 0, 0)).setZ(0);\r\n this.WriteAllObjectRecord();\r\n for (let index of indexList)\r\n this._PointList[index].add(vec);\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\r\n protected GetDrawCount()\r\n {\r\n return this.EndParam * DrawSplitCount;\r\n }\r\n\r\n Convert2Polyline(): Polyline\r\n {\r\n return SplineConver2Polyline(this);\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 if (ver > 1)\r\n this._ClosedMark = file.Read();\r\n }\r\n WriteFile(file: CADFiler)\r\n {\r\n super.WriteFile(file);\r\n file.Write(2);//ver\r\n file.Write(this._PointList.length);\r\n this._PointList.forEach(p => file.Write(p.toArray()));\r\n file.Write(this._ClosedMark);\r\n }\r\n}\r\n","import { Box3, Vector3 } from \"three\";\r\nimport { arrayPushArray } from \"../Common/ArrayExt\";\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 //交点参数集\r\n intersect2: Map = new Map();\r\n\r\n intersect3: [Curve, Curve, Vector3[]][] = [];\r\n\r\n /**\r\n * @param {Curve[]} cus 请注意数组的顺序会被更改,如果你在意数组的顺序,请拷贝数组后传进来\r\n * @memberof CurveIntersection\r\n */\r\n constructor(cus: Curve[], parseIntersectionParam = false, intType = IntersectOption.ExtendNone, protected fuzz = 1e-6, parseRecord = false)\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 (parseRecord)\r\n this.intersect3.push([c1, c2, pts]);\r\n\r\n if (parseIntersectionParam)\r\n {\r\n this.AppendIntersectionParams(c1, ints.map(i => [i.thisParam, i.pt]));\r\n this.AppendIntersectionParams(c2, ints.map(i => [i.argParam, i.pt]));\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, Vector3][])\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 arrayPushArray(arr, 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) || (p.thisParam < 0 ? 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) || (p.argParam < 0 ? 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 { 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 for (let hashpart of hashparts)\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\nconst _overlap_ = \"_overlap_\";\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 = [];//外轮廓和内轮廓重叠时,只有外轮廓有数据,可以使用RegionParse.RegionsIsOverlap来取得\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\r\n maxWalk[_overlap_] = true;\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 //大小圈重叠\r\n static RegionsIsOverlap(Route: Route[])\r\n {\r\n return Boolean(Route[_overlap_]);\r\n }\r\n\r\n private 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 private 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 protected 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 > 1e-4 && param < 0.9999)\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\nexport function 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 { arrayPushArray } from \"../Common/ArrayExt\";\r\nimport { Contour } from \"../DatabaseServices/Contour\";\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 { Spline } from \"../DatabaseServices/Spline\";\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 CreateContours(curves: Curve[], fuzz = 1e-4): Contour[]\r\n{\r\n let contours: Contour[] = [];\r\n let extendsMinDistSq = fuzz * fuzz;\r\n //炸开多段线(防止自交多段线)\r\n let newCurves: Curve[] = [];\r\n for (let cu of curves)\r\n {\r\n if (cu instanceof Circle)\r\n contours.push(Contour.CreateContour(cu.Clone()));//避免将原始曲线传递给板,导致撤销这个圆失败\r\n else if (cu instanceof Polyline)\r\n arrayPushArray(newCurves, cu.Explode());\r\n else if (cu instanceof Spline)\r\n {\r\n let pl = cu.Convert2Polyline();\r\n if (pl.IsClose)\r\n contours.push(Contour.CreateContour(pl, false));\r\n else\r\n newCurves.push(pl);\r\n }\r\n else if (cu instanceof Ellipse)\r\n Contour.CreateContour(cu.Convert2Polyline(), false);\r\n else\r\n newCurves.push(cu);\r\n }\r\n\r\n let intersect = new CurveIntersection2(newCurves, 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 arrayPushArray(ipts, 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 arrayPushArray(tempCus, c.Explode());\r\n else\r\n tempCus.push(c);\r\n }\r\n\r\n arrayPushArray(curves2, 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 let contour = Contour.CreateContour(curves, false);\r\n if (contour)\r\n contours.push(contour);\r\n }\r\n return contours;\r\n}\r\n\r\nexport function CreateContour2(curves: Curve[], fuzz = 1e-4): Contour | undefined\r\n{\r\n return CreateContours(curves, fuzz)[0];\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.ExtendNone);\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 { 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 { CreateContour2 } from \"../Geometry/CreateContour2\";\r\nimport { Route } from \"../Geometry/CurveMap\";\r\nimport { equaln, equalv2, 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 //同心圆\r\n if (this._Curve instanceof Circle && target._Curve instanceof Circle && equalv2(this._Curve.Center, target._Curve.Center, 1e-3))\r\n {\r\n if (this._Curve.Radius > target._Curve.Radius)\r\n return { intersectionList: [target._Curve], unionList: [this._Curve] };\r\n else\r\n return { intersectionList: [this._Curve], unionList: [target._Curve] };\r\n }\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.ExtendNone, 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.ExtendNone, 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) ?? CreateContour2(cs);\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.ExtendNone, 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//也许有一天这个中点算法需要改一下, 使用.MidPoint比较稳妥\r\nfunction fastCurveInCurve(sourceCu: Polyline | Circle, targetCu: Curve)\r\n{\r\n return sourceCu.PtInCurve(targetCu.Midpoint);\r\n}\r\n\r\n//当交点小于等于1时\r\nexport function fastCurveInCurve2(sourceCu: Polyline | Circle, targetCu: Curve)\r\n{\r\n return sourceCu.PtInCurve(targetCu.StartPoint) ||\r\n sourceCu.PtInCurve(targetCu.Midpoint);\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 ep?: Vector3;\r\n preCurve?: Curve;\r\n nextCurve?: Curve;\r\n paddingCurve?: Curve[];\r\n}\r\n\r\nexport class CurveTreeNode\r\n{\r\n children: this[];\r\n box: Box3;\r\n used: boolean;\r\n\r\n Create(curve: Curve, box?: Box3): this { return new (this.constructor)(curve, box) as this; }\r\n\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.ExtendNone)\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(this.Create(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: this[] = [];\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 this.RepairResultPolylineClosemark();\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 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.nextCurve = curveNext;\r\n curveResNext.preCurve = 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.ExtendNone, 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.ExtendNone);\r\n let ipts2 = cu2.IntersectWith(l2, IntersectOption.ExtendNone);\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.preCurve && d.preCurve instanceof Arc)\r\n {\r\n let a = d.preCurve;\r\n if (Math.sign(a.Bul) !== this._OffsetDistSign && a.AllAngle > 1e-6)\r\n {\r\n let ipts = a.IntersectWith(l1, IntersectOption.ExtendNone);\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.nextCurve && d.nextCurve instanceof Arc)\r\n {\r\n let a = d.nextCurve;\r\n if (Math.sign(a.Bul) !== this._OffsetDistSign && a.AllAngle > 1e-6)\r\n {\r\n let ipts = a.IntersectWith(l2, IntersectOption.ExtendNone);\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, 8e-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 private RepairResultPolylineClosemark()\r\n {\r\n if (!this._RetCurves.length) return;\r\n\r\n if (this._Polyline.CloseMark)\r\n {\r\n if (!equalv2(this._Polyline.LineData[0].pt, arrayLast(this._Polyline.LineData).pt, 8e-2))//缺省一个点\r\n {\r\n for (let pl of this._RetCurves)\r\n {\r\n if (pl.IsClose && //封闭\r\n equaln(arrayLast(pl.LineData).bul, 0, 1e-5) &&//是直线\r\n equalv2(pl.LineData[0].pt, arrayLast(pl.LineData).pt, 8e-2))//首尾重复(一般已经是了)\r\n {\r\n pl.LineData.pop();//移除最后一点\r\n pl.CloseMark = true;\r\n }\r\n }\r\n }\r\n else\r\n {\r\n for (let pl of this._RetCurves)\r\n {\r\n if (pl.IsClose)\r\n pl.CloseMark = true;\r\n }\r\n }\r\n }\r\n else if (this._IsClose)\r\n {\r\n for (let pl of this._RetCurves)\r\n {\r\n let firstP = pl.LineData[0].pt;\r\n let lastP = arrayLast(pl.LineData).pt;\r\n if (equalv2(firstP, lastP, 8e-2))\r\n lastP.copy(firstP);\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\nexport function EntityEncode2(c1: Curve, c2: Curve)\r\n{\r\n return EntityEncode(c1) & EntityEncode(c2);\r\n}\r\n\r\n//表示这个是一个正常的曲线,不是0长度的线,也不是0长度的圆弧\r\nexport function 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 { Vec2, 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.GetBulgeAt(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\nexport function IsPointInPolygon(pt: Vec2, pts: Vec2[])\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","import { Box3, Matrix3, Matrix4, Shape, Vec2, Vector2, Vector3 } from 'three';\r\nimport { arrayLast, arrayRemoveDuplicateBySort, changeArrayStartIndex } from '../../Common/ArrayExt';\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 { CreatePolylinePath } from '../../Geometry/CreatePolylinePath';\r\nimport { AsVector2, AsVector3, equaln, equalv2, equalv3, MatrixIsIdentityCS } from '../../Geometry/GeUtils';\r\nimport { IntersectOption, IntersectPolylineAndCurve } from '../../GraphicsSystem/IntersectWith';\r\nimport { OffsetPolyline } from '../../GraphicsSystem/OffsetPolyline';\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\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 UpdateOCSTo(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.OCSNoClone, 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.NumberOfVertices,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 let inv = this.OCSInv;\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(inv);\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 let inv = this.OCSInv;\r\n for (let i = 0; i < oldPts.length; i++)\r\n {\r\n let newP = oldPts[i].applyMatrix4(inv);\r\n let newBul = -this.GetBulgeAt(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\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\r\n GetBulgeAt(index: number): number\r\n {\r\n return this._LineData[index].bul;\r\n }\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\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 FromPoints2d(pts: Vec2[]): this\r\n {\r\n this.WriteAllObjectRecord();\r\n this._LineData.length = 0;\r\n for (let p of pts)\r\n this._LineData.push({ pt: AsVector2(p), bul: 0 });\r\n this.Update();\r\n return this;\r\n }\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.GetBulgeAt(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.GetBulgeAt(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 */\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.OCSNoClone);\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 cuCount = paramFloor > this.EndParam ? this.EndParam : paramFloor;\r\n\r\n let dist = 0;\r\n //首先计算完整曲线的长度\r\n for (let i = 0; i < cuCount; i++)\r\n {\r\n dist += this.GetCurveAtIndex(i).Length;\r\n }\r\n\r\n //参数已经大于索引,证明参数在线外.\r\n if (paramFloor !== cuCount)\r\n {\r\n dist += this.GetCurveAtParam(param).GetDistAtParam(param - cuCount);\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 if (equaln(dist, 0)) return 0;\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 let normal = pl.Normal;\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 {\r\n let dir = equalv3(normal, cu.Normal.negate(), 1e-3) ? -1 : 1;\r\n bul = cu.Bul * dir;\r\n }\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 //偏移\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-5))\r\n curve = new Line(AsVector3(d1.pt), AsVector3(d2.pt)).ApplyMatrix(this.OCSNoClone);\r\n else\r\n curve = new Arc().ParseFromBul(d1.pt, d2.pt, d1.bul).ApplyMatrix(this.OCSNoClone);\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.ExtendNone);\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(): Shape\r\n {\r\n let { pts, buls } = this.PtsBuls;\r\n return CreatePolylinePath(pts, buls);\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.GetBulgeAt(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\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 ptCount = this._LineData.length;\r\n\r\n let frontIndex = cuIndex - 1;\r\n if (this._ClosedMark)\r\n frontIndex = FixIndex(frontIndex, ptCount);\r\n\r\n if (frontIndex >= 0 && this.GetBulgeAt(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 !== ptCount - 1) && this.GetBulgeAt(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 ptCount = this._LineData.length;\r\n\r\n for (let index of indexList)\r\n {\r\n if (index >= ptCount)\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, ptCount);\r\n nextIndex = FixIndex(nextIndex, ptCount);\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 count = file.Read();\r\n for (let i = 0; i < count; 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 { ComparePointFnGenerate, 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 ExtendNone = 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(ComparePointFnGenerate(\"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.ExtendNone;\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 { Box3, Matrix3, Matrix4, Vector2, Vector3 } from 'three';\r\nimport { getArcOrCirNearPts, getCircleCenter, GetTanPtsOnArcOrCircle } from '../../Common/CurveUtils';\r\nimport { reviseMirrorMatrix, SetMtxVector, TransformVector } from '../../Common/Matrix4Utils';\r\nimport { Status } from '../../Common/Status';\r\nimport { ObjectSnapMode } from '../../Editor/ObjectSnapMode';\r\nimport { Box3Ext } from '../../Geometry/Box';\r\nimport { angle, AsVector3, clampRad, equaln, equalv2, equalv3, MoveMatrix, polar, ZeroVec } from '../../Geometry/GeUtils';\r\nimport { Orbit } from '../../Geometry/Orbit';\r\nimport { IntersectArcAndArc, IntersectCircleAndArc, IntersectEllipseAndCircleOrArc, IntersectLineAndArc, IntersectOption, IntersectPolylineAndCurve, reverseIntersectOption } from '../../GraphicsSystem/IntersectWith';\r\nimport { Factory } from '../CADFactory';\r\nimport { CADFiler } from '../CADFiler';\r\nimport { Shape2 } from '../Shape2';\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 = ZeroVec, 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 Shape2();\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 SetMtxVector(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 private get BoundingBoxPtsInOCS()\r\n {\r\n let pts = [\r\n polar(new Vector3(), this._StartAngle, this._Radius),\r\n polar(new Vector3(), this._EndAngle, this._Radius),\r\n ];\r\n\r\n if (this.ParamOnCurve(this.GetParamAtAngle(0)))\r\n pts.push(new Vector3(this._Radius, 0));\r\n\r\n if (this.ParamOnCurve(this.GetParamAtAngle(Math.PI / 2)))\r\n pts.push(new Vector3(0, this._Radius));\r\n\r\n if (this.ParamOnCurve(this.GetParamAtAngle(Math.PI)))\r\n pts.push(new Vector3(-this._Radius, 0));\r\n\r\n if (this.ParamOnCurve(this.GetParamAtAngle(Math.PI * 3 / 2)))\r\n pts.push(new Vector3(0, -this._Radius));\r\n return pts;\r\n }\r\n\r\n private static _X = new Vector3;\r\n private static _Y = new Vector3;\r\n private static _Z = new Vector3;\r\n private static _Mtx = new Matrix4;\r\n get BoundingBox(): Box3\r\n {\r\n Arc._Z.setFromMatrixColumn(this._Matrix, 2);\r\n Orbit.ComputUpDirection(Arc._Z, Arc._Y, Arc._X);\r\n\r\n Arc._Mtx.makeBasis(Arc._X, Arc._Y, Arc._Z).setPosition(this._Matrix.elements[12], this._Matrix.elements[13], this._Matrix.elements[14]);\r\n\r\n let pts = [\r\n polar(new Vector3(), this._StartAngle, this._Radius),\r\n polar(new Vector3(), this._EndAngle, this._Radius),\r\n ];\r\n\r\n let ocsInv = this.OCSInv;\r\n\r\n for (let p of [new Vector3(this._Radius), new Vector3(0, this._Radius), new Vector3(-this._Radius), new Vector3(0, -this._Radius)])\r\n {\r\n p.applyMatrix4(Arc._Mtx).applyMatrix4(ocsInv);\r\n if (this.ParamOnCurve(this.GetParamAtAngle(angle(p))))\r\n pts.push(p);\r\n }\r\n\r\n for (let p of pts)\r\n p.applyMatrix4(this.OCSNoClone);\r\n\r\n return new Box3Ext().setFromPoints(pts);\r\n }\r\n\r\n /**\r\n * 返回对象在自身坐标系下的Box\r\n */\r\n get BoundingBoxInOCS(): Box3Ext\r\n {\r\n return new Box3Ext().setFromPoints(this.BoundingBoxPtsInOCS);\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 // if (equaln(v, this._StartAngle)) return;//优化导致测试用例失败\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 // if (equaln(v, this._EndAngle)) return;//优化导致测试用例失败\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.OCSNoClone);\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 private static __PointTemp__ = new Vector3;\r\n GetAngleAtPoint(pt: Vector3)\r\n {\r\n return angle(Arc.__PointTemp__.copy(pt).applyMatrix4(this.OCSInv));\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 || curve.constructor.name === \"RoomWallArc\")\r\n {\r\n return IntersectArcAndArc(this, curve as Arc, intType);\r\n }\r\n if (curve instanceof Line || curve.constructor.name === \"RoomWallLine\")\r\n {\r\n return SwapParam(IntersectLineAndArc(curve as Line, 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 * ref http://www.lee-mac.com/bulgeconversion.html\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 //a (* 2 (atan b))\r\n let a = Math.atan(bul) * 2;\r\n //r (/ (distance p1 p2) 2 (sin a))\r\n let r = p1.distanceTo(p2) / 2 / Math.sin(a);\r\n //c (polar p1 (+ (- (/ pi 2) a) (angle p1 p2)) r)\r\n let c = polar(p1.clone(), Math.PI / 2 - a + angle(p2.clone().sub(p1)), r);\r\n\r\n this._Radius = Math.abs(r);\r\n\r\n this._StartAngle = angle(p1.sub(c));\r\n this._EndAngle = angle(p2.sub(c));\r\n\r\n this._Clockwise = bul < 0;\r\n\r\n this.Center = c.applyMatrix4(this.OCSNoClone);\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 this;\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 if (!center)\r\n {\r\n this.ParseFromBul(pt1.applyMatrix4(this.OCSNoClone), pt3.applyMatrix4(this.OCSNoClone), 1e-3);//faker line\r\n return this;\r\n };\r\n\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 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 index = indexList[0];\r\n\r\n if (index > 2)\r\n this.Center = this.Center.add(vec);\r\n else\r\n {\r\n let p1 = polar(new Vector3, this._StartAngle, this._Radius);\r\n let p2 = polar(new Vector3, this.GetAngleAtParam(0.5), this._Radius);\r\n let p3 = polar(new Vector3, this._EndAngle, this._Radius);\r\n\r\n vec = TransformVector(vec.clone(), this.OCSInv).setZ(0);\r\n\r\n [p1, p2, p3][index].add(vec);\r\n\r\n let center = getCircleCenter(p1, p2, p3);\r\n if (!center)//三点共线 使用faker arc\r\n {\r\n this.ParseFromBul(p1.applyMatrix4(this.OCSNoClone), p3.applyMatrix4(this.OCSNoClone), 1e-3);\r\n this.Update();\r\n return;\r\n }\r\n\r\n //起始角度 端点角度\r\n this._StartAngle = angle(p1.clone().sub(center));\r\n this._EndAngle = angle(p3.clone().sub(center));\r\n if (equaln(this._StartAngle, this._EndAngle, 1e-5))//差不多也是三点共线,只不过逃逸了\r\n {\r\n this.ParseFromBul(p1.applyMatrix4(this.OCSNoClone), p3.applyMatrix4(this.OCSNoClone), 1e-3);\r\n this.Update();\r\n return;\r\n }\r\n\r\n //用圆心和其中一个点求距离得到半径:\r\n this._Radius = center.distanceTo(p1);\r\n\r\n this.Center = center.clone().applyMatrix4(this.OCS);\r\n\r\n //求出向量p1->p2,p1->p3\r\n let v1 = p2.clone().sub(p1);\r\n let v2 = p3.clone().sub(p1);\r\n\r\n this._Clockwise = v1.cross(v2).z < 0;\r\n\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 pt = pt.clone().applyMatrix4(this.OCSInv);\r\n if (equalv2(pt, ZeroVec, 1e-8))\r\n return this.GetPointAtParam(0);\r\n\r\n let a = angle(pt);\r\n let param = this.GetParamAtAngle(a);\r\n if (extend || this.ParamOnCurve(param))\r\n return polar(new Vector3, a, this._Radius).applyMatrix4(this._Matrix);\r\n\r\n if (param < 0) return this.GetPointAtParam(0);\r\n else return this.GetPointAtParam(1);\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\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 { 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 { Spline } from '../DatabaseServices/Spline';\r\nimport { Count } from '../Geometry/Count';\r\nimport { CurveMap, Vertice } from '../Geometry/CurveMap';\r\nimport { AsVector2, AsVector3, equaln, equalv2, equalv3, isIntersect, isParallelTo, isPerpendicularityTo, XAxis, YAxis, ZeroVec } 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, arrayRemoveDuplicateBySort, arrayRemoveIf, 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 (equaln(temp, 0, 1e-5))\r\n {\r\n return;\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 cirAng = Math.PI * 2 - cirAng;\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 else if (cu instanceof Spline)\r\n return GetPointAtCurveDir(cu.Convert2Polyline(), pt);\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.GetBulgeAt(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.OCSNoClone;\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 arrayRemoveIf(cus, c => c.Length < LINK_FUZZ);\r\n\r\n let cir: Circle;\r\n arrayRemoveDuplicateBySort(cus, (c1, c2) =>\r\n {\r\n if (cir) return true;\r\n\r\n let status = c1.Join(c2, false, LINK_FUZZ);\r\n if (status === Status.ConverToCircle)\r\n {\r\n let arc = c1 as Arc;\r\n cir = new Circle(arc.Center, arc.Radius);\r\n return true;\r\n }\r\n return status === Status.True;\r\n });\r\n\r\n if (cir)\r\n {\r\n cus.length = 0;\r\n cus.push(cir);\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 const IsNorZeroVector = (v: Vector3) => v && !equalv3(v, ZeroVec, 1e-3);\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 || c instanceof Circle)\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 if (IsNorZeroVector(v))\r\n {\r\n v.normalize().cross(firstV);\r\n if (IsNorZeroVector(v))//避免平行向量\r\n {\r\n normal = v.normalize();\r\n break;\r\n }\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 (IsNorZeroVector(fv))//先判断零向量\r\n firstV = fv.normalize();//再归一化\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(), 1e-5))\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(), 1e-2))\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))\r\n 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 let rects: Polyline[] = [];\r\n let endParam = outline.EndParam;\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 let res2 = c2.IntersectWith2(outline, IntersectOption.ExtendThis);\r\n let pars: number[] = [];\r\n for (let i of res) pars.push(i.argParam);\r\n for (let i of res2) pars.push(i.argParam);\r\n for (let i = 0; i < pars.length; i++)\r\n {\r\n let p = pars[i];\r\n if (p < 0) p = 0;//请参照测试用例\r\n else if (p > endParam) p = endParam;//请参照测试用例\r\n else p = Math.floor(p);\r\n\r\n pars[i] = p;\r\n }\r\n pars.sort((a, b) => a - b);\r\n arrayRemoveDuplicateBySort(pars);\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 { 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 { Box3, Matrix3, Matrix4, Path, Shape as TShape, Vector3 } from 'three';\r\nimport { arrayRemoveIf } from '../Common/ArrayExt';\r\nimport { ObjectSnapMode } from '../Editor/ObjectSnapMode';\r\nimport { IntersectBox2 } from '../Geometry/Box';\r\nimport { equaln } from '../Geometry/GeUtils';\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\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 // TestDraw(this._Outline.Curve.Clone()); //测试代码\r\n // TestDraw(targetShape._Outline.Curve.Clone());\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 {\r\n console.warn(\"未知情况\");//qiannianzhou_lvzhijia.test.ts触发这个 本质是轮廓+轮廓会产生新的洞!\r\n\r\n //TODO: 这是个BUG\r\n // let f = new CADFiler;\r\n // f.Write(3);\r\n // c.Curve.ColorIndex = 1;\r\n // f.WriteObject(c.Curve);\r\n // f.WriteObject(ic.Curve);\r\n // ic.Curve.ColorIndex = 2;\r\n // f.WriteObject(unions.holes[0].Curve);\r\n // unions.holes[0].Curve.ColorIndex = 3;\r\n // copyTextToClipboard(f.ToString());\r\n }\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.UpdateOCSTo(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 { Matrix4 } from 'three';\r\nimport { IntersectBox2 } from '../Geometry/Box';\r\nimport { BoolOpeartionType } from '../GraphicsSystem/BoolOperateUtils';\r\nimport { CADFiler } from './CADFiler';\r\nimport { Shape } from './Shape';\r\n\r\n\r\nexport class ShapeManager\r\n{\r\n constructor(private _ShapeList: Shape[] = [])\r\n {\r\n\r\n }\r\n\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 if (type === RenderType.Physical)\r\n {\r\n let mesh = obj as Mesh;\r\n mesh.material = this.MeshMaterial;\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 BrName = \"brName\",\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 DrawNumber = \"drawNumber\",\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 { AutoRecord } from '../AutoRecord';\r\nimport { Factory } from '../CADFactory';\r\nimport { CADFiler } from '../CADFiler';\r\nimport { Entity } from '../Entity/Entity';\r\nimport { ObjectId } from '../ObjectId';\r\n\r\n@Factory\r\nexport class Hole extends Entity\r\n{\r\n @AutoRecord FId: ObjectId;\r\n @AutoRecord MId: ObjectId;//层板钉:{mid=层板} 排钻:{mid=面}\r\n protected _Height: number;\r\n @AutoRecord OtherHalfTongKong: ObjectId;\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 Clone()\r\n {\r\n let ent = super.Clone();\r\n ent.OtherHalfTongKong = null;\r\n return ent;\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 if (ver >= 6)\r\n {\r\n this.OtherHalfTongKong = file.ReadSoftObjectId();\r\n }\r\n\r\n }\r\n WriteFile(file: CADFiler)\r\n {\r\n super.WriteFile(file);\r\n file.Write(6);//ver\r\n file.Write(this._Height);\r\n file.WriteSoftObjectId(this.FId);\r\n file.WriteSoftObjectId(this.MId);\r\n file.WriteSoftObjectId(this.OtherHalfTongKong);\r\n }\r\n}\r\n","import { BufferGeometry, CylinderBufferGeometry, Float32BufferAttribute, LineSegments, Matrix3, Matrix4, Mesh, Object3D, Shape as TShape, Vector3 } from \"three\";\r\nimport { ColorMaterial } from '../../Common/ColorPalette';\r\nimport { DisposeThreeObj, Object3DRemoveAll } from '../../Common/Dispose';\r\nimport { FixIndex } from \"../../Common/Utils\";\r\nimport { ObjectSnapMode } from \"../../Editor/ObjectSnapMode\";\r\nimport { Box3Ext } from \"../../Geometry/Box\";\r\nimport { RenderType } from \"../../GraphicsSystem/RenderType\";\r\nimport { CADFactory, Factory } from '../CADFactory';\r\nimport { CADFiler } from '../CADFiler';\r\nimport { Circle } from \"../Entity/Circle\";\r\nimport { Hole } from \"./Hole\";\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 return this.BoundingBoxInOCS.applyMatrix4(this._Matrix);\r\n }\r\n\r\n /**\r\n * 返回对象在自身坐标系下的Box\r\n */\r\n get BoundingBoxInOCS(): Box3Ext\r\n {\r\n return new Box3Ext(new Vector3(-this._Radius, -this._Radius, 0), new Vector3(this._Radius, this._Radius, this._Height));\r\n }\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 Erase(isErase: boolean = true)\r\n {\r\n if (isErase === this.IsErase) return;\r\n super.Erase(isErase);\r\n if (!isErase) return;\r\n\r\n if (this.OtherHalfTongKong && !this.OtherHalfTongKong.IsErase)\r\n {\r\n let cy = this.OtherHalfTongKong.Object as this;\r\n cy.Type = GangDrillType.Ymj;\r\n cy.OtherHalfTongKong = null;\r\n }\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 { 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 = 0, //正面\r\n Reverse = 1, //反面\r\n Arbitrary = 2 //任意\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 ISealingData extends IHighSealedItem\r\n{\r\n length: number;\r\n type?: string;\r\n shop?: string;\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\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\n\r\nexport interface LightConfigOption extends IBaseOption\r\n{\r\n Intensity: number;\r\n lightColor: string;\r\n temperature: number;\r\n IndirectLightingIntensity: number;\r\n SpecularScale: number;\r\n CaseShadow: boolean;\r\n}\r\n\r\nexport interface PointLightOption extends LightConfigOption\r\n{\r\n SourceRadius: number;\r\n SoftSourceRadius: number;\r\n SourceLength: number;\r\n}\r\n\r\nexport interface SpotLightOption extends LightConfigOption\r\n{\r\n Angle: number;\r\n InnerConeAngle: number;\r\n SourceRadius: number;\r\n SoftSourceRadius: number;\r\n SourceLength: number;\r\n AttenuationRadius: number;\r\n ShowHelper: boolean;\r\n}\r\n\r\nexport interface RectAreaLightOption extends LightConfigOption\r\n{\r\n Width: number;\r\n Height: number;\r\n BarnDoorAngle: number;\r\n BarnDoorLength: number;\r\n AttenuationRadius: number;\r\n ShowHelper: boolean;\r\n}\r\n\r\nexport interface RightPlaneLightOption\r\n{\r\n version: number;\r\n ShowHemiLight: boolean;\r\n SkyLightColor: string;\r\n SkyLightIntensity: number;\r\n SkyLightIndirectLightingIntensity: number;\r\n ShowSunLight: boolean;\r\n SunLightIntensity: number;\r\n SunLightIndirectLightingIntensity: number;\r\n SunLightColor: string;\r\n SunLightTemperature: number;\r\n SunLightElevationDeg: number;\r\n SunLightRotateDeg: number;\r\n ShowExposure: boolean;\r\n AutoExposure: boolean;\r\n ExposureCompensation: number;\r\n SunTime: string;\r\n}\r\n\r\nexport interface ModifyTextsConfigOption\r\n{\r\n changeTexts: [string, string][];\r\n}\r\n\r\nexport interface KJLImportConfigOption extends IBaseOption\r\n{\r\n materials: MaterialMapOption[];\r\n isImportVirtualModel: boolean;\r\n}\r\nexport interface MaterialMapOption\r\n{\r\n id: string; //引用材质ID\r\n kjlName: string; //酷家乐基础材质名称\r\n}\r\n\r\nexport interface ViewportConfigOption\r\n{\r\n view: number;\r\n wireFrame: string;\r\n}\r\n\r\nexport interface Viewport2ConfigOption\r\n{\r\n align: string;\r\n view1: number,\r\n view2: number,\r\n wireFrame: string[],\r\n}\r\nexport interface Viewport3ConfigOption\r\n{\r\n align: string;\r\n view: number[],\r\n wireFrame: string[],\r\n}\r\n\r\nexport interface Viewport4ConfigOption\r\n{\r\n view: number[],\r\n wireFrame: string[],\r\n}\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\n\r\nexport interface SingleBoardOption extends BoardConfigOption\r\n{\r\n rotateX: number;\r\n rotateY: number;\r\n rotateZ: number;\r\n drawNumber?: 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 name: string;\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 RadioType\r\n{\r\n lefttop = \"1\",\r\n leftbottom = \"2\",\r\n righttop = \"3\",\r\n rightbottom = \"4\",\r\n}\r\n\r\nexport interface IBatchModifyPanelOption extends IBaseOption\r\n{\r\n length: string;\r\n width: string;\r\n thick: string;\r\n position: RadioType;\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\r\nexport interface CommonPanelConfigOption\r\n{\r\n orderType: string;\r\n}\r\n","import { Box3, Matrix4, Vector3 } from \"three\";\r\nimport { HostApplicationServices } from \"../../ApplicationServices/HostApplicationServices\";\r\nimport { EBoardKeyList } from \"../../Common/BoardKeyList\";\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 { 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 { angle, clampRad, isParallelTo, rotatePoint, ZAxis } from \"../../Geometry/GeUtils\";\r\nimport { DrillType } from \"../../UI/Store/BoardInterface\";\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 (HostApplicationServices.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 an = clampRad(an);\r\n\r\n if (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 an = clampRad(an);\r\n\r\n if (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 { 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 { 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","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 { 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 { EBoardKeyList } from \"../../Common/BoardKeyList\";\r\nimport { ComposingType, FaceDirection, IBaseOption, LinesType } from \"./BoardInterface\";\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 Include = \"//\",\r\n}\r\n","import { IBaseOption } from \"./BoardInterface\";\r\nimport { ITemplateParam } from \"./RightPanelStore/ITemplateParam\";\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 useRule: boolean;\r\n changeTemplateBoardNameOfOpenDir: boolean;//使用模块时,修改板件名称\r\n frontAndBackDrill: boolean; //正反面排孔\r\n}\r\n\r\n/**\r\n * 铰链数据接口\r\n */\r\nexport interface IHingeConfigOption extends IBaseOption\r\n{\r\n hingeCount: number; //铰链\r\n hindeTopDist: number;\r\n hindeBottomDist: number;\r\n useRule: boolean,\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?: ITemplateParam[];\r\n title?: string;\r\n isHandle?: boolean;\r\n isHinge?: boolean;\r\n tagName?: string;\r\n isKuGan?: boolean;\r\n diy_logo?: string;\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 \"./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 { EBoardKeyList } from \"../../Common/BoardKeyList\";\r\nimport { IBaseOption } from \"./BoardInterface\";\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 isExtendsBH2: boolean;//是否继承\r\n followNarrow: boolean;//酒格补板前缩跟随\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","export enum EOrderType\r\n{\r\n ByCreate = \"create_date desc\",\r\n ByCreate2 = \"create_date\",\r\n ByUpdate = \"update_date desc\",\r\n ByUpdate2 = \"update_date\",\r\n ByName = \"name\",\r\n ByName2 = \"name desc\",\r\n}\r\n","import { Curve2RecOption } from \"../Add-on/twoD2threeD/Modals/Curve2RecOption\";\r\nimport { IParseBoardNameOption, IRec2BrOption, IRect2Br2Option } from \"../Add-on/twoD2threeD/R2bInterface\";\r\nimport { EBoardKeyList } from \"../Common/BoardKeyList\";\r\nimport { IUpdateBoardInfosOption } from \"../UI/Components/Board/UpdateBoardInfointerface\";\r\nimport { EMetalsType, ICompHardwareOption, ICylMetalsOption, IExtMetalsOption, IToplineOption } from \"../UI/Components/RightPanel/RightPanelInterface\";\r\nimport { IKuGangDrawOption } from \"../UI/Components/Template/TemplateInterface\";\r\nimport { ECompareType, IBoardFindOption } from \"../UI/Store/BoardFindInterface\";\r\nimport { BehindBoardOption, BehindHeightPositon, BoardProcessOption, BoardType, BrRelativePos, ClosingStripOption, CommonPanelConfigOption, ComposingType, CurtailType, FaceDirection, IBatchModifyPanelOption, IBoardBatchCurtailOption, KJLImportConfigOption, LayerBoardOption, LayerNailOption, LinesType, ModifyTextsConfigOption, PointLightOption, RadioType, RectAreaLightOption, RightPlaneLightOption, SideBoardOption, SingleBoardOption, SpotLightOption, StripType, TBBoardOption, VerticalBoardOption, Viewport2ConfigOption, Viewport3ConfigOption, Viewport4ConfigOption, ViewportConfigOption } from \"../UI/Store/BoardInterface\";\r\nimport { DoorPosType, HandleHorPos, HandleVePos, IDoorConfigOption, IDrawerConfigOption, IHingeConfigOption } from \"../UI/Store/DoorInterface\";\r\nimport { IHSOption } from \"../UI/Store/HSInterface\";\r\nimport { ELatticeArrayType, ILatticeOption } from \"../UI/Store/LatticeInterface\";\r\nimport { EFullDir, EFullType, EWineRackType, EWRackArrayType, IWineRackOption } from \"../UI/Store/WineRackInterface\";\r\nimport { EOrderType } from \"./OrderType\";\r\n\r\nexport const DefaultLayerBoardConfig: LayerBoardOption = {\r\n version: 3,\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: 3,\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: 3,\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 isExtendsBH2: false,\r\n followNarrow: false,\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 DefaultViewportConfigOption: ViewportConfigOption = {\r\n view: 3,\r\n wireFrame: \"打印模式\",\r\n};\r\nObject.freeze(DefaultViewportConfigOption);\r\n\r\nexport const DefaultViewport2ConfigOption: Viewport2ConfigOption = {\r\n align: \"垂直\",\r\n wireFrame: [\"打印模式\", \"打印模式\"],\r\n view1: 1,\r\n view2: 3,\r\n};\r\nObject.freeze(DefaultViewport2ConfigOption);\r\n\r\nexport const DefaultViewport3ConfigOption: Viewport3ConfigOption = {\r\n align: \"V\",\r\n wireFrame: [\"打印模式\", \"打印模式\", \"打印模式\"],\r\n view: [4, 3, 7],\r\n};\r\nObject.freeze(DefaultViewport3ConfigOption);\r\n\r\nexport const DefaultViewport4ConfigOption: Viewport4ConfigOption = {\r\n view: [4, 1, 3, 7],\r\n wireFrame: [\"打印模式\", \"打印模式\", \"打印模式\", \"打印模式\"],\r\n};\r\nObject.freeze(DefaultViewport4ConfigOption);\r\n\r\nexport const DefaultModifyTextsOption: ModifyTextsConfigOption = {\r\n changeTexts: Array.from({ length: 5 }, () => [\"\", \"\"]),\r\n};\r\nObject.freeze(DefaultModifyTextsOption);\r\n\r\nexport const DefaultKJImportOption: KJLImportConfigOption = {\r\n version: 2,\r\n materials: [],\r\n isImportVirtualModel: true\r\n};\r\nObject.freeze(DefaultKJImportOption);\r\n\r\nexport const DefaultPointLightOption: PointLightOption = {\r\n version: 1,\r\n lightColor: \"#FFFFFF\",\r\n temperature: 6500,\r\n Intensity: 100,\r\n IndirectLightingIntensity: 1,\r\n SpecularScale: 1,\r\n SourceRadius: 10,\r\n SoftSourceRadius: 0,\r\n SourceLength: 0,\r\n CaseShadow: true,\r\n};\r\nObject.freeze(DefaultPointLightOption);\r\n\r\nexport const DefaultSpotLightOption: SpotLightOption = {\r\n version: 1,\r\n lightColor: \"#FFFFFF\",\r\n temperature: 6500,\r\n Intensity: 100,\r\n IndirectLightingIntensity: 1,\r\n SpecularScale: 1,\r\n SourceRadius: 0,\r\n SoftSourceRadius: 0,\r\n SourceLength: 0,\r\n Angle: 40,\r\n InnerConeAngle: 0,\r\n AttenuationRadius: 300,\r\n CaseShadow: true,\r\n ShowHelper: true,\r\n};\r\nObject.freeze(DefaultSpotLightOption);\r\n\r\nexport const DefaultRectAreaLightOption: RectAreaLightOption = {\r\n version: 1,\r\n lightColor: \"#FFFFFF\",\r\n temperature: 6500,\r\n Intensity: 100,\r\n IndirectLightingIntensity: 1,\r\n SpecularScale: 1,\r\n AttenuationRadius: 300,\r\n Width: 150,\r\n Height: 150,\r\n BarnDoorAngle: 90,\r\n BarnDoorLength: 20,\r\n CaseShadow: true,\r\n ShowHelper: true,\r\n};\r\nObject.freeze(DefaultRectAreaLightOption);\r\n\r\nexport const DefaultRightPlaneLightOption: RightPlaneLightOption = {\r\n version: 2,\r\n ShowHemiLight: true,\r\n ShowSunLight: true,\r\n SkyLightColor: \"#FFFFFF\",\r\n SkyLightIntensity: 1,\r\n SkyLightIndirectLightingIntensity: 1,\r\n SunLightIntensity: 50,\r\n SunLightIndirectLightingIntensity: 1,\r\n SunLightColor: \"#FFFFFF\",\r\n SunLightTemperature: 6500,\r\n SunLightElevationDeg: 60,\r\n SunLightRotateDeg: 300,\r\n ShowExposure: true,\r\n AutoExposure: false,\r\n ExposureCompensation: 0,\r\n SunTime: \"默认\",\r\n};\r\nObject.freeze(DefaultRightPlaneLightOption);\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 drawNumber: 1\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: 5,\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 useRule: false,\r\n changeTemplateBoardNameOfOpenDir: true,\r\n frontAndBackDrill: false,\r\n};\r\nObject.freeze(DefaultDoorOption);\r\nexport const DefaultHingeOption: IHingeConfigOption = {\r\n hingeCount: 0,\r\n hindeTopDist: 0,\r\n hindeBottomDist: 0,\r\n useRule: false,\r\n};\r\nObject.freeze(DefaultHingeOption);\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 DefaultBatchModifyPanelOption: IBatchModifyPanelOption = {\r\n version: 1,\r\n length: \"L\",\r\n width: \"W\",\r\n thick: \"H\",\r\n position: RadioType.lefttop,\r\n};\r\nObject.freeze(DefaultBatchModifyPanelOption);\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 forceUseUCS: false,\r\n ForceUseFrontViewCS: false,\r\n};\r\nObject.freeze(DefaultCurve2RecOption);\r\n\r\nexport const DefaultUpdateInfoOption: IUpdateBoardInfosOption = {\r\n version: 2,\r\n [EBoardKeyList.BrName]: \"\",\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 isChaiDan: true,\r\n condition: {\r\n [EBoardKeyList.BrName]: false,\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 isChaiDan: true,\r\n autoCutOption: { isAutoCut: false, isRelevance: false }\r\n }\r\n};\r\n\r\nObject.freeze(DefaultUpdateInfoOption);\r\n\r\nexport const DefaultKuGanOption: IKuGangDrawOption = {\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 upDist: 0,\r\n downDist: 0,\r\n};\r\nObject.freeze(DefaultKuGanOption);\r\n\r\n\r\nexport const DefaultParseBoardNameOPtion: IParseBoardNameOption = {\r\n version: 1,\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 isBack: true,\r\n backName: \"背板\",\r\n isAloneStripName: true,//收口条名字独立\r\n};\r\nObject.freeze(DefaultParseBoardNameOPtion);\r\n\r\nexport const DefaultR2bOption: IRec2BrOption = {\r\n version: 5,\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 ...DefaultParseBoardNameOPtion,\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 backBrTemplateId: \"\",\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 closeStripThickness: 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\r\nexport const DefaultHSOption: IHSOption = {\r\n version: 1,\r\n isAll: true,\r\n isHide: true,\r\n isDelete: false,\r\n behind: false,\r\n layer: false,\r\n vertial: false,\r\n footer: false,\r\n tbBoard: false,\r\n specialShape: false,\r\n hole: false,\r\n door: false,\r\n drawer: false,\r\n closingStrip: false,\r\n winerack: false,\r\n wood: false,\r\n nails: false,\r\n topline: false,\r\n handle: false,\r\n hinge: false,\r\n hwComposity: false,\r\n lattice: false,\r\n dim: false,\r\n curve: false,\r\n line: false,\r\n polyline: false,\r\n circle: false,\r\n arc: false\r\n};\r\n\r\nexport const DefaultCommonPanelOption: CommonPanelConfigOption = {\r\n orderType: EOrderType.ByUpdate,\r\n};\r\nObject.freeze(DefaultCommonPanelOption);\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 true => t2 , false => t1\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","\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\nexport const ReportErrorWrap = {\r\n ReportError: undefined,\r\n IsProduction: false,\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(4);\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(4);\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 { 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 { Box3, 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 { UpdateDraw } from \"../../Common/Status\";\r\nimport { ObjectSnapMode } from \"../../Editor/ObjectSnapMode\";\r\nimport { equaln, 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.GetConceptualEdgeMaterial())\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.GetPhysical2EdgeMaterial())\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.GetConceptualEdgeMaterial())\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.GetPhysical2EdgeMaterial())\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\r\n get BoundingBox()\r\n {\r\n let geom = this.MeshGeometry;\r\n\r\n if (!geom)\r\n {\r\n console.error(\"SweepSolid无法建模\");\r\n return new Box3;\r\n }\r\n\r\n if (!geom.boundingBox)\r\n geom.computeBoundingBox();\r\n\r\n return geom.boundingBox.clone().applyMatrix4(this._Matrix);\r\n }\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 ApplyMatrix(m: Matrix4)\r\n {\r\n this.WriteAllObjectRecord();\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 if (!equalv3(xA.clone().cross(yA).normalize(), zA))\r\n this.ApplyMirrorMatrix(m);\r\n else\r\n {\r\n this._Matrix.multiplyMatrices(m, this._Matrix);\r\n this._SpaceOCS.multiplyMatrices(m, this._SpaceOCS);\r\n this.Update(UpdateDraw.Matrix);\r\n }\r\n }\r\n else\r\n {\r\n this.ApplyScaleMatrix(m);\r\n }\r\n return this;\r\n }\r\n protected ApplyMirrorMatrix(m: Matrix4)\r\n {\r\n if (!this.Id)\r\n {\r\n this._Matrix.multiplyMatrices(m, this._Matrix);\r\n return this;\r\n }\r\n let ocsInv = this.OCSInv;\r\n this._PathCurve.ApplyMatrix(this.OCS).ApplyMatrix(m).ApplyMatrix(ocsInv);\r\n\r\n let mtx = this._PathCurve.OCS;\r\n let mtxInv = new Matrix4().getInverse(mtx);\r\n this._PathCurve.ApplyMatrix(mtxInv);\r\n this._SpaceOCS.copy(this._Matrix);\r\n this._Matrix.multiplyMatrices(this._Matrix, mtx);\r\n\r\n this.Update(UpdateDraw.Geometry);\r\n return this;\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(): Curve[]\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(): Curve[]\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 { HostApplicationServices } from \"../../ApplicationServices/HostApplicationServices\";\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 { GetBoardSealingData, GetSealedBoardContour } from \"../../GraphicsSystem/CalcEdgeSealing\";\r\nimport { IHardwareType, Production } from \"../../Production/Product\";\r\nimport { HoleInBoard } from \"../DrawDrilling/HoleUtils\";\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: (key: string, block: Board, size: number) => void; getHoles?: (name: string, hole: CylinderHole) => void; };\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 let holes = ids.map(id => id.Object).filter(h => h) as Hole[];\r\n\r\n if (!holes[0] || !HoleInBoard(holes, b))\r\n continue;\r\n\r\n let isTk = false;\r\n let spliteName: string;\r\n let hole: Hole;\r\n let pxlCount = 0;\r\n findHole:\r\n for (let objId of ids)\r\n {\r\n let gd = objId.Object as CylinderHole | ExtrudeHole;\r\n if (!gd || gd.IsErase) break;\r\n\r\n const group = gd.GroupId?.Object as GroupRecord;\r\n\r\n if (!group)\r\n {\r\n Toaster({ message: `柜名:${b.BoardProcessOption.cabinetName} 板名:${b.Name} 的排钻的编组丢失,统计排钻个数时会丢失该个数!`, timeout: 5000, intent: Intent.DANGER });\r\n break;\r\n }\r\n\r\n if (gd instanceof CylinderHole)\r\n {\r\n switch (gd.Type)\r\n {\r\n case GangDrillType.Pxl:\r\n pxlCount++;\r\n break;\r\n case GangDrillType.Ljg:\r\n case GangDrillType.Ymj:\r\n break;\r\n case GangDrillType.TK:\r\n isTk = true;\r\n break;\r\n case GangDrillType.Wood:\r\n case GangDrillType.WoodPXL:\r\n spliteName = \"木销\";\r\n break;\r\n default:\r\n break findHole;\r\n }\r\n options?.getHoles && options?.getHoles(spliteName || group.Name || \"未命名\", gd);\r\n }\r\n else\r\n {\r\n if (gd.isThrough)\r\n isTk = true;\r\n }\r\n if (!spliteName)\r\n spliteName = group.Name || \"未命名\";\r\n if (!hole)\r\n hole = gd;\r\n }\r\n\r\n if (spliteName && hole)\r\n {\r\n if (isTk && HostApplicationServices.chaidanOption.statTk)\r\n {\r\n addDrillToMap(\"通孔\" + spliteName, hole);\r\n }\r\n else if (pxlCount === 2 && HostApplicationServices.chaidanOption.statSt)\r\n {\r\n addDrillToMap(\"双头\" + spliteName, hole);\r\n }\r\n else\r\n {\r\n addDrillToMap(spliteName, hole);\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 = GetBoardSealingData(GetSealedBoardContour(b, true, true));\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 && options.sealGruopKey)\r\n {\r\n options.sealGruopKey(k, b, data.size);\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","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","import { BufferGeometry, Float32BufferAttribute, Geometry, Line, LineBasicMaterial, LineSegments, Matrix4, Object3D, Vector3 } from \"three\";\r\nimport { ColorMaterial } from \"../Common/ColorPalette\";\r\nimport { FixIndex } from \"../Common/Utils\";\r\nimport { ExtrudeHole } from \"../DatabaseServices/3DSolid/ExtrudeHole\";\r\nimport { Contour } from \"../DatabaseServices/Contour\";\r\nimport { Board } from \"../DatabaseServices/Entity/Board\";\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 { MatrixIsIdentityCS, MoveMatrix } from \"./GeUtils\";\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\n//使用lineseg来生成拉伸的边框,避免生成过多的实体导致的drawcall次数增多\r\nexport function FastWireframe(br: ExtrudeSolid, color = 0, divCount = 6, optArc = true): Line[]\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(divCount, optArc);\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.OCSNoClone);\r\n\r\n let edge = new LineSegments(edgeGeo, material);\r\n edge.applyMatrix4(cu.OCSNoClone);\r\n\r\n let result = [line, edge];\r\n\r\n let ocsInv = br.OCSInv;\r\n\r\n if (br.Grooves.length < 100)\r\n for (let g of br.Grooves)\r\n {\r\n let m = ocsInv.clone().multiply(g.OCSNoClone);\r\n let lines = FastWireframe(g, color, 3, false);\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\n\r\nlet tempP = new Vector3;\r\nexport function FastExtrudeEdgeGeometry(ext: ExtrudeSolid, color = 0, divCount = 6, optArc = true, coords: number[] = [], inv: Matrix4 = undefined)\r\n{\r\n color = color || ext.ColorIndex;\r\n\r\n let thickness = ext.Thickness;\r\n\r\n let cu = ext.ContourCurve;\r\n let pts = cu.Shape.getPoints(divCount, optArc);\r\n\r\n let startIndex = coords.length / 3;\r\n\r\n for (let i = 0; i < pts.length; i++)\r\n {\r\n let p = pts[i];\r\n let nextp = pts[FixIndex(i + 1, pts)];\r\n //底面\r\n coords.push(p.x, p.y, 0, nextp.x, nextp.y, 0);\r\n //顶面\r\n coords.push(p.x, p.y, thickness, nextp.x, nextp.y, thickness);\r\n\r\n if (p[\"_mask_\"])//侧面\r\n coords.push(p.x, p.y, 0, p.x, p.y, thickness);\r\n }\r\n\r\n let m = inv ? (ext.Grooves.length ? inv.clone() : inv).multiply(cu.OCSNoClone) : cu.OCSNoClone;\r\n\r\n if (!MatrixIsIdentityCS(m))\r\n {\r\n let count = coords.length / 3;\r\n for (let i = startIndex; i < count; i++)\r\n {\r\n let a = i * 3;\r\n let b = a + 1;\r\n let c = a + 2;\r\n\r\n tempP.set(coords[a], coords[b], coords[c]);\r\n tempP.applyMatrix4(m);\r\n coords[a] = tempP.x;\r\n coords[b] = tempP.y;\r\n coords[c] = tempP.z;\r\n }\r\n }\r\n\r\n let ocsInv = inv ? (inv.multiply(ext.OCSInv)) : ext.OCSInv;\r\n optArc = ext.Grooves.length < 100;\r\n for (let g of ext.Grooves)\r\n {\r\n FastExtrudeEdgeGeometry(g, color, divCount, optArc, coords, ocsInv.clone().multiply(g.OCSNoClone));\r\n }\r\n\r\n return coords;\r\n}\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, Vector3 } from \"three\";\r\nimport { arrayLast, arrayPushArray } from \"../Common/ArrayExt\";\r\nimport { FixIndex } from \"../Common/Utils\";\r\nimport { equalv3 } from \"./GeUtils\";\r\n\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 arrayPushArray(pts, GenerateExtrudeEdgeGeometryPoints(cs, height));\r\n let geo = new BufferGeometry().setFromPoints(pts);\r\n return geo;\r\n}\r\n\r\n//拉伸点表成为Geom\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\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 geom3 from \"@jscad/modeling/src/geometries/geom3\";\r\nimport { Geom3 } from \"@jscad/modeling/src/geometries/types\";\r\nimport { Mat4 } from \"@jscad/modeling/src/maths/mat4\";\r\nimport { Vec3 } from \"@jscad/modeling/src/maths/vec3\";\r\nimport { intersect } from \"@jscad/modeling/src/operations/booleans\";\r\nimport { Matrix4 } from \"three\";\r\n\r\nexport interface Geom3Res\r\n{\r\n polygons: Array<{\r\n vertices: Array,\r\n plane: [number, number, number, number];\r\n }>;\r\n}\r\n\r\nexport function CSGIntersect(csg1: Geom3, csg2: Geom3, csg2tranfrom: Matrix4): Geom3Res\r\n{\r\n //因为内部使用geom3进行box cache 所以我们新建了一个geom3 避免被cache导致错误\r\n let csg1Clone = geom3.create(csg1.polygons.concat());\r\n let csg2Clone = geom3.create(csg2.polygons.concat());\r\n csg2Clone.transforms = csg2tranfrom.elements as Mat4;\r\n return intersect(csg1Clone, csg2Clone) as unknown as Geom3Res;\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","import { Matrix4 } from \"three\";\r\nimport { arrayLast, arrayRemoveDuplicateBySort } from \"../../../Common/ArrayExt\";\r\nimport { equalv3 } from \"../../../Geometry/GeUtils\";\r\nimport { EPS, _CSGDEBUG } from \"../constants\";\r\nimport { IsMirror } from \"./IsMirrot\";\r\nimport { Plane } from \"./Plane\";\r\nimport { Vector3D } from \"./Vector3\";\r\nimport { Vertex3D } from \"./Vertex3\";\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 arrayRemoveDuplicateBySort(backVertices, (v1, v2) => equalv3(v1.pos, v2.pos, EPS));\r\n if (backVertices.length > 2 && equalv3(backVertices[0].pos, arrayLast(backVertices).pos, EPS))\r\n backVertices.pop();\r\n arrayRemoveDuplicateBySort(frontVertices, (v1, v2) => equalv3(v1.pos, v2.pos, EPS));\r\n if (frontVertices.length > 2 && equalv3(frontVertices[0].pos, arrayLast(frontVertices).pos, EPS))\r\n frontVertices.pop();\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 /**\r\n * 是一个凸多边形\r\n * @param vertices 顶点列表\r\n * @param planenormal 平面法线\r\n * @returns true:是凸多边形 false:不是凸多边形\r\n */\r\n static verticesConvex(vertices: Vertex3D[], planenormal: Vector3D): boolean\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 geom3, { Geom3 } from \"@jscad/modeling/src/geometries/geom3\";\r\nimport { create, Poly3 } from \"@jscad/modeling/src/geometries/poly3\";\r\nimport { Vec3 } from \"@jscad/modeling/src/maths/vec3\";\r\nimport { BufferGeometry, Face3, Geometry, Vector2, Vector3 } from \"three\";\r\nimport { Geom3Res } from \"../../Common/CSGIntersect\";\r\nimport { AsVector2, AsVector3, 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 = AsVector3(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 = AsVector3(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(AsVector3(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 AsVector2(firstVertex.uv),\r\n AsVector2(poly.vertices[i + 1].uv),\r\n AsVector2(poly.vertices[i + 2].uv)\r\n ]);\r\n }\r\n }\r\n return geo;\r\n}\r\n\r\nexport function Geometry2CSG2(geometry: Geometry | BufferGeometry): Geom3\r\n{\r\n if (geometry instanceof BufferGeometry)\r\n geometry = new Geometry().fromBufferGeometry(geometry);\r\n\r\n let polygons: Poly3[] = [];\r\n for (let i = 0; i < geometry.faces.length; i++)\r\n {\r\n let face = geometry.faces[i];\r\n let vertices: Vec3[] = [];\r\n if (face instanceof Face3)\r\n {\r\n vertices.push(geometry.vertices[face.a].toArray() as Vec3);\r\n vertices.push(geometry.vertices[face.b].toArray() as Vec3);\r\n vertices.push(geometry.vertices[face.c].toArray() as Vec3);\r\n }\r\n polygons.push(create(vertices));\r\n }\r\n return geom3.create(polygons);\r\n}\r\n\r\nexport function CSG2Geometry2(csg: Geom3 | Geom3Res): Geometry\r\n{\r\n let geo = new Geometry;\r\n for (let poly of csg.polygons)\r\n {\r\n //@ts-ignore\r\n let normal = new Vector3().fromArray(poly.plane);\r\n\r\n let startIndex = geo.vertices.length;\r\n for (let v of poly.vertices)\r\n geo.vertices.push(new Vector3().fromArray(v));\r\n\r\n for (let i = poly.vertices.length - 3; i >= 0; i--)\r\n {\r\n let f = new Face3(\r\n startIndex,\r\n startIndex + i + 1,\r\n startIndex + i + 2,\r\n normal);\r\n\r\n geo.faces.push(f);\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","import { Poly3 } from \"@jscad/modeling/src/geometries/types\";\r\nimport { Vec3 } from \"@jscad/modeling/src/maths/vec3\";\r\nimport { Vector3 } from \"three\";\r\nimport { Geom3Res } from \"../Common/CSGIntersect\";\r\nimport { ToFixed } from \"../Common/Utils\";\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?: Geom3Res, 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: Poly3)\r\n {\r\n let strs = poly.vertices.map(p => this.GenerateP(p));\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().fromArray(v3);\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: Map = new Map();\r\n private GenerateP(v: Vec3)\r\n {\r\n let str = v.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 { Vec2, Vector2, Vector3 } from \"three\";\r\nimport { FixIndex } from \"../Common/Utils\";\r\nimport { AsVector3 } from \"./GeUtils\";\r\n\r\n/**\r\n * 快速的对点表进行偏移\r\n * @param contour\r\n * @param [offsetDist=1]\r\n * @param [ignoreSpike=true] 忽略尖角优化(如果不忽略,那么尖角将会变钝(有点奇怪))\r\n * @returns 偏移后的点表\r\n */\r\nexport function FastOffset(contour: Vector3[], offsetDist = 1, ignoreSpike = true): Vector3[]\r\n{\r\n let res: Vector3[] = [];\r\n\r\n for (let i = 0; i < contour.length; i++)\r\n {\r\n let v = AsVector3(getBevelVec(contour[i], contour[FixIndex(i - 1, contour)], contour[FixIndex(i + 1, contour)]));\r\n // TestDraw(new Line(contour[i], contour[i].clone().add(v)), 3);\r\n let p = v.multiplyScalar(offsetDist).add(contour[i]);\r\n res.push(p);\r\n }\r\n return res;\r\n}\r\n\r\n//Ref:threejs ExtrudeGeometry源码\r\nfunction getBevelVec(inPt: Vec2, inPrev: Vec2, inNext: Vec2, ignoreSpike = true): Vector2\r\n{\r\n\r\n // computes for inPt the corresponding point inPt' on a new contour\r\n // shifted by 1 unit (length of normalized vector) to the left\r\n // if we walk along contour clockwise, this new contour is outside the old one\r\n //\r\n // inPt' is the intersection of the two lines parallel to the two\r\n // adjacent edges of inPt at a distance of 1 unit on the left side.\r\n\r\n let v_trans_x: number, v_trans_y: number, shrink_by: number; // resulting translation vector for inPt\r\n\r\n // good reading for geometry algorithms (here: line-line intersection)\r\n // http://geomalgorithms.com/a05-_intersect-1.html\r\n\r\n const v_prev_x = inPt.x - inPrev.x,\r\n v_prev_y = inPt.y - inPrev.y;\r\n const v_next_x = inNext.x - inPt.x,\r\n v_next_y = inNext.y - inPt.y;\r\n\r\n const v_prev_lensq = (v_prev_x * v_prev_x + v_prev_y * v_prev_y);\r\n\r\n // check for collinear edges\r\n const collinear0 = (v_prev_x * v_next_y - v_prev_y * v_next_x);\r\n\r\n if (Math.abs(collinear0) > Number.EPSILON)\r\n {\r\n // not collinear\r\n // length of vectors for normalizing\r\n const v_prev_len = Math.sqrt(v_prev_lensq);\r\n const v_next_len = Math.sqrt(v_next_x * v_next_x + v_next_y * v_next_y);\r\n // shift adjacent points by unit vectors to the left\r\n const ptPrevShift_x = (inPrev.x - v_prev_y / v_prev_len);\r\n const ptPrevShift_y = (inPrev.y + v_prev_x / v_prev_len);\r\n\r\n const ptNextShift_x = (inNext.x - v_next_y / v_next_len);\r\n const ptNextShift_y = (inNext.y + v_next_x / v_next_len);\r\n // scaling factor for v_prev to intersection point\r\n const sf = ((ptNextShift_x - ptPrevShift_x) * v_next_y -\r\n (ptNextShift_y - ptPrevShift_y) * v_next_x) /\r\n (v_prev_x * v_next_y - v_prev_y * v_next_x);\r\n\r\n // vector from inPt to intersection point\r\n\r\n v_trans_x = (ptPrevShift_x + v_prev_x * sf - inPt.x);\r\n v_trans_y = (ptPrevShift_y + v_prev_y * sf - inPt.y);\r\n\r\n // Don't normalize!, otherwise sharp corners become ugly\r\n // but prevent crazy spikes\r\n const v_trans_lensq = (v_trans_x * v_trans_x + v_trans_y * v_trans_y);\r\n if (v_trans_lensq <= 2 || ignoreSpike)\r\n return new Vector2(v_trans_x, v_trans_y);\r\n else\r\n shrink_by = Math.sqrt(v_trans_lensq / 2);\r\n }\r\n else\r\n {\r\n // handle special case of collinear edges\r\n let direction_eq = false; // assumes: opposite\r\n\r\n if (v_prev_x > Number.EPSILON)\r\n {\r\n if (v_next_x > Number.EPSILON)\r\n direction_eq = true;\r\n }\r\n else\r\n {\r\n if (v_prev_x < - Number.EPSILON)\r\n {\r\n if (v_next_x < - Number.EPSILON)\r\n direction_eq = true;\r\n }\r\n else\r\n {\r\n if (Math.sign(v_prev_y) === Math.sign(v_next_y))\r\n direction_eq = true;\r\n }\r\n }\r\n\r\n if (direction_eq || ignoreSpike)\r\n {\r\n // console.log(\"Warning: lines are a straight sequence\");\r\n v_trans_x = - v_prev_y;\r\n v_trans_y = v_prev_x;\r\n shrink_by = Math.sqrt(v_prev_lensq);\r\n }\r\n else\r\n {\r\n // console.log(\"Warning: lines are a straight spike\");\r\n v_trans_x = v_prev_x;\r\n v_trans_y = v_prev_y;\r\n shrink_by = Math.sqrt(v_prev_lensq / 2);\r\n }\r\n }\r\n return new Vector2(v_trans_x / shrink_by, v_trans_y / shrink_by);\r\n}\r\n","import { Vector3 } from \"three\";\r\nimport { arraySortByNumber } from \"../../Common/ArrayExt\";\r\nimport { clamp } from \"../../Common/Utils\";\r\nimport { Arc } from \"../../DatabaseServices/Entity/Arc\";\r\nimport { Circle } from \"../../DatabaseServices/Entity/Circle\";\r\nimport { ExtrudeContourCurve } from \"../../DatabaseServices/Entity/Extrude\";\r\nimport { AsVector3 } from \"../GeUtils\";\r\n\r\nconst ARC_SplitLength = 4;//圆的分段长度\r\nconst Arc_MinSplitCount = 12;//圆的最小分段个数\r\nconst ARC_MaxSplitCount = 360;//圆的最大分段个数\r\n\r\n/**\r\n *\r\n * @param cu\r\n */\r\nexport function SplitCurveParams(cu: ExtrudeContourCurve): number[]\r\n{\r\n let xparams: number[] = [];\r\n if (cu instanceof Circle)\r\n {\r\n let splitCount = cu.Radius / ARC_SplitLength;\r\n splitCount = clamp(Math.floor(splitCount), Arc_MinSplitCount, ARC_MaxSplitCount);\r\n for (let i = 0; i < splitCount; i++)\r\n xparams.push(i / splitCount);\r\n }\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.GetBulgeAt(i) !== 0)\r\n {\r\n let arc = cu.GetCurveAtIndex(i) as Arc;\r\n let splitCount = arc.Radius / ARC_SplitLength;\r\n splitCount = clamp(Math.floor(splitCount), Arc_MinSplitCount, ARC_MaxSplitCount);\r\n if (splitCount === 0)\r\n 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)\r\n continue;\r\n\r\n for (let p of params)\r\n {\r\n if (p > 1e-5 && p < 0.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\nexport function SplitCurvePoints(cu: ExtrudeContourCurve): Vector3[]\r\n{\r\n let pts: Vector3[] = [];\r\n if (cu instanceof Circle)\r\n {\r\n let splitCount = cu.Radius / ARC_SplitLength;\r\n splitCount = clamp(Math.floor(splitCount), Arc_MinSplitCount, ARC_MaxSplitCount);\r\n for (let i = 0; i < splitCount; i++)\r\n pts.push(cu.GetPointAtParam(i / splitCount));\r\n }\r\n\r\n else\r\n //分段1\r\n for (let i = 0; i < cu.EndParam; i++)\r\n {\r\n pts.push(AsVector3(cu.GetPoint2dAt(i)).applyMatrix4(cu.OCSNoClone));\r\n if (cu.GetBulgeAt(i) !== 0)\r\n {\r\n let arc = cu.GetCurveAtIndex(i) as Arc;\r\n let splitCount = arc.Radius / ARC_SplitLength;\r\n splitCount = clamp(Math.floor(splitCount), Arc_MinSplitCount, ARC_MaxSplitCount);\r\n if (splitCount === 0)\r\n continue;\r\n\r\n let divParam = 1 / splitCount;\r\n for (let j = 1; j < splitCount - 1; j++)\r\n {\r\n let p = arc.GetPointAtParam(divParam * j);\r\n pts.push(p);\r\n }\r\n }\r\n }\r\n pts.push(cu.EndPoint);\r\n return pts;\r\n}\r\n\r\nexport function SplitArcParams(arc: Arc): number[]\r\n{\r\n let splitCount = arc.Radius / ARC_SplitLength;\r\n splitCount = clamp(Math.floor(splitCount), Arc_MinSplitCount, ARC_MaxSplitCount);\r\n if (splitCount === 0)\r\n return [];\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)\r\n return [];\r\n\r\n return params.filter(p => p > 1e-5 && p < 9.99999);\r\n}\r\n","import Flatbush from 'flatbush';\r\nimport { Box3, BufferGeometry, Float32BufferAttribute, MathUtils, Matrix4, Shape as TShape, ShapeUtils, Vector3 } from \"three\";\r\nimport { arrayPushArray, arrayRemoveDuplicateBySort, arraySortByNumber } from \"../../Common/ArrayExt\";\r\nimport { curveLinkGroup } from \"../../Common/CurveUtils\";\r\nimport { FixIndex } from \"../../Common/Utils\";\r\nimport { Contour, fastCurveInCurve2 } from \"../../DatabaseServices/Contour\";\r\nimport { Board } from \"../../DatabaseServices/Entity/Board\";\r\nimport { Circle } from \"../../DatabaseServices/Entity/Circle\";\r\nimport { Curve } from \"../../DatabaseServices/Entity/Curve\";\r\nimport { ExtrudeContourCurve, ExtrudeSolid, MaxDrawGrooveCount } 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\nimport { SplitCurveParams } from './SplitCurveParams';\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: ExtrudeContourCurve): 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.UpdateOCSTo(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时,表示它是一个洞(如果有多层时,使用IsHole判断)\r\n\r\n box: Box3;\r\n area: number;\r\n constructor(public contour: Contour, public children: ContourTreeNode[] = []) { }\r\n\r\n SetParent(node: ContourTreeNode)\r\n {\r\n if (this.parent)\r\n throw \"ContourTreeNode重复设置父对象\";\r\n this.parent = node;\r\n node.children.push(this);\r\n }\r\n\r\n get Depth(): number\r\n {\r\n let depth = 0;\r\n let parent = this.parent;\r\n while (parent)\r\n {\r\n depth++;\r\n parent = parent.parent;\r\n\r\n if (depth > 10)\r\n throw \"ContourTreeNode嵌套超过10层\";\r\n }\r\n return depth;\r\n }\r\n\r\n get IsHole(): boolean\r\n {\r\n return this.Depth % 2 === 1;\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.concat();\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 arrayPushArray(vertices, 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 if (contourNodes.length < 2) return;\r\n\r\n let fb = new Flatbush(contourNodes.length);\r\n for (let node of contourNodes)\r\n {\r\n node.box = node.contour.BoundingBox;\r\n node.area = node.contour.Area;\r\n fb.add(node.box.min.x, node.box.min.y, node.box.max.x, node.box.max.y);\r\n }\r\n fb.finish();\r\n\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\r\n let ids = fb.search(node1.box.min.x, node1.box.min.y, node1.box.max.x, node1.box.max.y);\r\n ids.sort((i1, i2) => contourNodes[i1].area - contourNodes[i2].area);\r\n for (let id of ids)\r\n {\r\n if (id === i) continue;\r\n\r\n let node2 = contourNodes[id];\r\n if (node2.parent === node1 || node2.area < node1.area) continue;//避免自己的儿子成为自己的父亲\r\n\r\n if (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\nexport class 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\r\n if (pre < this.end)//避免最后一个切割元素小于终点时没有补上最后一个\r\n ret.push(new Tape(pre, this.end, this.bottom, this.top));\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\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: ExtrudeContourCurve,\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 = equaln(vs[0].x, vs[1].x, 1e-2);\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(arr: number[], el: number): number\r\n{\r\n let m = 0;\r\n let n = arr.length - 1;\r\n while (m <= n)\r\n {\r\n let k = (n + m) >> 1;\r\n let cmp = (el - arr[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: ExtrudeContourCurve, cu2: ExtrudeContourCurve, reverseParse = false): [CurveParamRangeRelation, CurveParamRangeRelation]\r\n{\r\n let ins = GetIntersection(cu1, cu2);\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\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 let a1 = cu1.Area, a2 = cu2.Area;\r\n\r\n if (a2 > a1 && cu2.PtInCurve(cu1.StartPoint))//cu2包含cu1\r\n c1Res.container.push([0, cu1.EndParam]);\r\n else\r\n c1Res.outer.push([0, cu1.EndParam]);\r\n\r\n if (a1 > a2 && cu1.PtInCurve(cu2.StartPoint))//cu1包含cu2\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 if (ins.length === 1)\r\n {\r\n let a1 = cu1.Area, a2 = cu2.Area;\r\n\r\n if (a2 > a1 && fastCurveInCurve2(cu2, cu1))//cu2包含cu1\r\n c1Res.container.push([0, cu1.EndParam]);\r\n else\r\n c1Res.outer.push([0, cu1.EndParam]);\r\n\r\n if (a1 > a2 && fastCurveInCurve2(cu1, cu2))//cu1包含cu2\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 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: ExtrudeContourCurve, 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\r\n\r\n/**\r\n *\r\n * @param orgStart 被裁剪范围的起点(如果起点大于终点,那么表示 s->end + 0->e)\r\n * @param orgEnd\r\n * @param clipStart\r\n * @param clipEnd\r\n * @param end\r\n * @returns\r\n */\r\nexport function SubtractRange(orgStart: number, orgEnd: number, clipStart: number, clipEnd: number, end: number): Range[]\r\n{\r\n if (orgStart < 0\r\n || orgEnd < 0\r\n || orgEnd > end\r\n || orgStart > end\r\n || clipStart < 0\r\n || clipEnd < 0\r\n || clipStart > end\r\n || clipEnd > end) return [];\r\n\r\n if (orgStart > orgEnd)\r\n return SubtractRange(orgStart, end, clipStart, clipEnd, end).concat(SubtractRange(0, orgEnd, clipStart, clipEnd, end));\r\n if (clipStart > clipEnd)\r\n {\r\n let arr = SubtractRange(orgStart, orgEnd, clipStart, end, end);\r\n let rem: [number, number][] = [];\r\n for (let s of arr)\r\n arrayPushArray(rem, SubtractRange(s[0], s[1], 0, clipEnd, end));\r\n return rem;\r\n }\r\n\r\n if (clipStart >= orgEnd || clipEnd <= orgStart)\r\n return [[orgStart, orgEnd]];\r\n\r\n if (clipStart <= orgStart)// c1 a1 b1\r\n {\r\n if (clipEnd >= orgEnd) return [];\r\n return [[clipEnd, orgEnd]];\r\n }\r\n\r\n if (clipEnd < orgEnd)\r\n return [[orgStart, clipStart], [clipEnd, orgEnd]];\r\n return [[orgStart, clipStart]];\r\n}\r\n\r\nexport function 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 arrayPushArray(temps, SubtractRange2(r, sr, end));\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, rotateUv: boolean = false)\r\n {\r\n this.GenerateMeshData(br, rotateUv);\r\n }\r\n\r\n protected GenerateMeshData(br: ExtrudeSolid, rotateUv: boolean)\r\n {\r\n this.edgeAndLidBuilder = new EdgeGeometryBuild(this.br.Thickness);\r\n rotateUv = rotateUv || (br instanceof Board && br.BoardProcessOption.lines === LinesType.Reverse);\r\n\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 if (grooves.length < MaxDrawGrooveCount)//只能绘制1000个以下的造型\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.UpdateOCSTo(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.UpdateOCSTo(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.ExtendNone);\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 { Box3, BufferAttribute, BufferGeometry, Material, Matrix4, Mesh, Vector3 } from \"three\";\r\nimport { USE_WORLD_UV, U_WORLD_MOVE, U_WORLD_REP, V_WORLD_MOVE, V_WORLD_REP } from \"../../Add-on/testEntity/USE_WORLD_UV\";\r\nimport { XAxis, XAxisN, YAxis, YAxisN, ZAxis, ZAxisN } from \"../../Geometry/GeUtils\";\r\nimport { Orbit } from \"../../Geometry/Orbit\";\r\n\r\nconst DIRS = [XAxis, YAxis, ZAxis, XAxisN, YAxisN, ZAxisN];\r\nfunction GetFaceDir(direction: Vector3): Vector3\r\n{\r\n let absx = Math.abs(direction.x);\r\n let absy = Math.abs(direction.y);\r\n let absz = Math.abs(direction.z);\r\n\r\n let face = - 1.0;\r\n if (absx > absz)\r\n {\r\n if (absx > absy)\r\n face = direction.x > 0 ? 0 : 3;\r\n else\r\n face = direction.y > 0 ? 1 : 4;\r\n }\r\n else\r\n {\r\n if (absz > absy)\r\n face = direction.z > 0 ? 2 : 5;\r\n else\r\n face = direction.y > 0 ? 1 : 4;\r\n }\r\n return DIRS[face];\r\n}\r\n\r\nexport class GenUVForWorld\r\n{\r\n InvMtxMap = new Map();\r\n\r\n private _Z = new Vector3;\r\n private _X = new Vector3;\r\n private _Y = new Vector3;\r\n private _Box = new Box3;\r\n private _Box2 = new Box3;\r\n GetMtxInv(normalX: number, normalY: number, normalZ: number)\r\n {\r\n this._Z.set(normalX, normalY, normalZ);\r\n let n = GetFaceDir(this._Z);\r\n let mtx = this.InvMtxMap.get(n);\r\n if (mtx)\r\n return mtx;\r\n\r\n this._Z.copy(n);\r\n Orbit.ComputUpDirection(this._Z, this._Y, this._X);\r\n mtx = new Matrix4().makeBasis(this._X, this._Y, this._Z);\r\n mtx.getInverse(mtx);\r\n\r\n this.InvMtxMap.set(n, mtx);\r\n return mtx;\r\n }\r\n\r\n GenUV(mesh: Mesh)\r\n {\r\n if (Array.isArray(mesh.material))\r\n {\r\n let geo = mesh.geometry;\r\n if (!geo.boundingBox)\r\n geo.computeBoundingBox();\r\n let normals = geo.getAttribute(\"normal\") as BufferAttribute;\r\n let pos = geo.getAttribute(\"position\") as BufferAttribute;\r\n let uvs = geo.getAttribute(\"uv\") as BufferAttribute;\r\n for (let i = 0; i < mesh.material.length; i++)\r\n {\r\n let mtl = mesh.material[i];\r\n if (mtl[USE_WORLD_UV])\r\n {\r\n this._Box.makeEmpty();\r\n let g = mesh.geometry.groups[i];\r\n for (let y = 0; y < g.count; y++)\r\n {\r\n let index = (y + g.start) * 3;\r\n this._X.set(pos.array[index], pos.array[index + 1], pos.array[index + 2]);\r\n this._Box.expandByPoint(this._X);\r\n }\r\n\r\n for (let y = 0; y < g.count; y++)\r\n {\r\n let index = (y + g.start) * 3;\r\n let mtx = this.GetMtxInv(normals.array[index], normals.array[index + 1], normals.array[index + 2]);\r\n\r\n this._X.set(pos.array[index], pos.array[index + 1], pos.array[index + 2]);\r\n\r\n this._X.applyMatrix4(mtx);\r\n\r\n this._Box2.copy(this._Box).applyMatrix4(mtx);\r\n\r\n //@ts-ignore\r\n uvs.array[(y + g.start) * 2] = (((this._X.x - (this._Box2.min.x + this._Box2.max.x) * 0.5)) * 1e-2 + mtl[U_WORLD_MOVE]) * mtl[U_WORLD_REP] + 0.5;\r\n //@ts-ignore\r\n uvs.array[(y + g.start) * 2 + 1] = (((this._X.y - (this._Box2.min.y + this._Box2.max.y) * 0.5)) * 1e-2 - mtl[V_WORLD_MOVE]) * mtl[V_WORLD_REP] + 0.5;\r\n }\r\n uvs.needsUpdate = true;\r\n }\r\n }\r\n }\r\n\r\n else\r\n {\r\n let mtl = mesh.material;\r\n if (mtl[USE_WORLD_UV])\r\n this.GenGeoUV(mesh.geometry, mtl, 1e-2);\r\n }\r\n }\r\n\r\n GenGeoUV(geo: BufferGeometry, mtl: Material, scale = 1e-3)\r\n {\r\n if (!geo.boundingBox)\r\n geo.computeBoundingBox();\r\n\r\n let normals = geo.getAttribute(\"normal\") as BufferAttribute;\r\n let pos = geo.getAttribute(\"position\") as BufferAttribute;\r\n let uvs = geo.getAttribute(\"uv\") as BufferAttribute;\r\n for (let y = 0; y < pos.count; y++)\r\n {\r\n let index = y * 3;\r\n let mtx = this.GetMtxInv(normals.array[index], normals.array[index + 1], normals.array[index + 2]);\r\n\r\n this._X.set(pos.array[index], pos.array[index + 1], pos.array[index + 2]);\r\n\r\n this._X.applyMatrix4(mtx);\r\n\r\n this._Box.copy(geo.boundingBox);\r\n this._Box.applyMatrix4(mtx);\r\n\r\n //@ts-ignore\r\n uvs.array[y * 2] = (((this._X.x - (this._Box.min.x + this._Box.max.x) * 0.5)) * scale + mtl[U_WORLD_MOVE]) * mtl[U_WORLD_REP] + 0.5;\r\n //@ts-ignore\r\n uvs.array[y * 2 + 1] = (((this._X.y - (this._Box.min.y + this._Box.max.y) * 0.5)) * scale + mtl[V_WORLD_MOVE]) * mtl[V_WORLD_REP] + 0.5;\r\n }\r\n uvs.needsUpdate = true;\r\n }\r\n}\r\n","import { Geom3 } from '@jscad/modeling/src/geometries/types';\r\nimport Flatbush from 'flatbush';\r\nimport { Box3, BoxGeometry, BufferGeometry, ExtrudeGeometry, ExtrudeGeometryOptions, Float32BufferAttribute, Geometry, InstancedInterleavedBuffer, InterleavedBufferAttribute, Line as TLine, LineSegments, Matrix3, Matrix4, Mesh, Object3D, 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, arrayPushArray, arrayRemoveIf, arrayRemoveOnce, arraySortByNumber, arraySum } from \"../../Common/ArrayExt\";\r\nimport { ColorMaterial } from \"../../Common/ColorPalette\";\r\nimport { CSGIntersect } from '../../Common/CSGIntersect';\r\nimport { equalCurve, PolylineSpliteRect } from \"../../Common/CurveUtils\";\r\nimport { DisposeThreeObj, Object3DRemoveAll } from \"../../Common/Dispose\";\r\nimport { Log } from \"../../Common/Log\";\r\nimport { reviseMirrorMatrix, SetMtxVector, tempMatrix1, TransformVector, Vector2ApplyMatrix4 } from \"../../Common/Matrix4Utils\";\r\nimport { Status, UpdateDraw } from \"../../Common/Status\";\r\nimport { Geometry2CSG2 } 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 { FastExtrudeEdgeGeometry, FastWireframe } from \"../../Geometry/CreateWireframe\";\r\nimport { EdgesGeometry } from \"../../Geometry/EdgeGeometry\";\r\nimport { ExtrudeGeometryBuilder } from \"../../Geometry/ExtrudeMeshGeomBuilder/ExtrudeEdgeGeometry2\";\r\nimport { AsVector2, 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 { GenUVForWorld } from './GenUVForWorld';\r\nimport { Line } from \"./Line\";\r\nimport { Polyline } from \"./Polyline\";\r\nimport { Region } from \"./Region\";\r\n\r\nexport type ExtrudeContourCurve = Polyline | Circle;\r\nexport type ExtrudeContour = Polyline | Circle | ExtrudeSolid | Region;\r\n\r\nexport const MaxDrawGrooveCount = 1000;//最大的绘制槽个数(但是还是会绘制线)\r\n\r\n\r\n@Factory\r\nexport class ExtrudeSolid extends Entity\r\n{\r\n /*\r\n y-----------\r\n ^ |\r\n | ↑ |\r\n | | | height\r\n | ↓ |\r\n | |\r\n 0---width->x\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 * 出于优化考虑,可能未初始化,请注意调用this.ContourCurve\r\n * 形状位于WCS 0点位置,不随OCS变化而变化\r\n */\r\n protected contourCurve: ExtrudeContourCurve;\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 set Material(materialId: ObjectId)\r\n {\r\n let oldMaterial = this.Material ?? this._db?.DefaultMaterial.objectId;\r\n super.Material = materialId;\r\n\r\n let isf_old = Boolean((oldMaterial?.Object as PhysicalMaterialRecord)?.IsFull);\r\n let isf_new = Boolean((materialId?.Object as PhysicalMaterialRecord)?.IsFull);\r\n if (isf_old !== isf_new)\r\n this.Update();\r\n else if ((materialId?.Object as PhysicalMaterialRecord)?.UseWorldUV)\r\n {\r\n if (this._MeshGeometry)\r\n this.GenWorldUV(this._MeshGeometry);\r\n }\r\n }\r\n\r\n get Material() { return super.Material; }\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 if (this.width > 0 && this.height > 0 && this.thickness > 0)\r\n return new Box3Ext(new Vector3, new Vector3(this.width, this.height, this.thickness));\r\n else\r\n return new Box3Ext().setFromPoints([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\r\n for (let g of this.grooves)\r\n {\r\n g._SpaceOCS.copy(this._SpaceOCS);//因为在镜像的时候 没有设置这个会导致错误 所以拷贝一下\r\n g.objectId = new ObjectId;\r\n g.ApplyMatrix(m);\r\n g.objectId = undefined;\r\n }\r\n\r\n //由于修改矩阵会导致矩阵错误\r\n this.csg = undefined;\r\n this.AutoUpdate = updateBak;\r\n\r\n let te = m.elements;\r\n let scaleXSq = te[0] * te[0] + te[1] * te[1] + te[2] * te[2];\r\n let scaleYSq = te[4] * te[4] + te[5] * te[5] + te[6] * te[6];\r\n let scaleZSq = te[8] * te[8] + te[9] * te[9] + te[10] * te[10];\r\n\r\n if (!equaln(scaleXSq, 1, 1e-4) || !equaln(scaleYSq, 1, 1e-4) || !equaln(scaleZSq, 1, 1e-4))\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.OCSNoClone);\r\n cu.ApplyMatrix(m);\r\n cu.ApplyMatrix(this.OCSInv);\r\n this.CheckContourCurve();\r\n return this;\r\n }\r\n protected ApplyMirrorMatrix(m: Matrix4)\r\n {\r\n this.WriteAllObjectRecord();\r\n const curve = this.ContourCurve;\r\n if (curve instanceof Polyline && !equalv3(curve.Position, ZeroVec))\r\n {\r\n let pts = curve.LineData;\r\n if (equalv2(pts[0].pt, arrayLast(pts).pt))\r\n pts.pop();\r\n let ocs = curve.OCSNoClone;\r\n for (let p of pts)\r\n {\r\n Vector2ApplyMatrix4(ocs, p.pt);\r\n }\r\n curve.OCS = IdentityMtx4;\r\n }\r\n let nor = this.Normal.applyMatrix4(this.SpaceOCSInv.setPosition(ZeroVec));\r\n if (equaln(Math.abs(nor.z), 1))\r\n {\r\n reviseMirrorMatrix(this._Matrix, 1);\r\n if (curve instanceof Circle)\r\n {\r\n curve.ApplyMatrix(new Matrix4().makeRotationX(Math.PI));\r\n }\r\n else\r\n {\r\n reviseMirrorMatrix(curve.OCSNoClone, 1);\r\n }\r\n\r\n this.SetContourCurve(curve);\r\n }\r\n else if (equaln(Math.abs(nor.x), 1))\r\n {\r\n reviseMirrorMatrix(this._Matrix, 2);\r\n this._Matrix.setPosition(this.Position.add(this.Normal.multiplyScalar(-this.Thickness)));\r\n }\r\n else\r\n {\r\n reviseMirrorMatrix(this._Matrix, 0);\r\n if (curve instanceof Circle)\r\n {\r\n curve.ApplyMatrix(new Matrix4().makeRotationY(Math.PI));\r\n }\r\n else\r\n {\r\n reviseMirrorMatrix(curve.OCSNoClone, 0);\r\n }\r\n\r\n this.SetContourCurve(curve);\r\n }\r\n\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: ExtrudeContourCurve)\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坐标系0点\r\n */\r\n SetContourCurve(curve: ExtrudeContourCurve)\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\r\n let x = new Vector3().setFromMatrixColumn(ocs, 0);\r\n let y = new Vector3().setFromMatrixColumn(ocs, 1);\r\n let z = new Vector3().setFromMatrixColumn(ocs, 2);\r\n let z1 = x.cross(y);\r\n\r\n let isMirror = equaln(ocs.elements[10], -1, 1e-4) || !equalv3(z, z1);\r\n let isRotate = !equaln(ocs.elements[0], 1);\r\n\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 ocsInv = this.OCSInv;\r\n let x = TransformVector(xAxis.clone(), ocsInv).setZ(0).normalize();\r\n if (equalv3(ZeroVec, x, 1e-5)) return this;\r\n\r\n this.WriteAllObjectRecord();\r\n\r\n let a = Math.atan2(x.y, x.x);\r\n\r\n x.transformDirection(this._Matrix);\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 this.ContourCurve.ApplyMatrix(tempMatrix1.makeRotationZ(-a));//复用了这个矩阵\r\n this.CheckContourCurve();\r\n if (this.contourCurve instanceof Polyline)\r\n this.contourCurve.UpdateOCSTo(IdentityMtx4);\r\n\r\n this.Update();\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 = 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, 1e-3))\r\n holes.push(Contour.CreateContour(g.ContourCurve.Clone().ApplyMatrix(this.OCSInv.multiply(g.OCSNoClone)), 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 arrayPushArray(grooves, gs);\r\n }\r\n if (grooves.length === 0) return false;\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 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.OCSNoClone);\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.OCSNoClone);\r\n pts.push(\r\n ...l.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform)\r\n );\r\n }\r\n\r\n if (this.grooves.length < 100)\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.OCSNoClone); });\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.GetBulgeAt(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\r\n private csg: Geom3;\r\n get CSG(): Geom3\r\n {\r\n if (this.csg) return this.csg;\r\n\r\n this.csg = Geometry2CSG2(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\r\n //0不平行 1同向,2反向 () 这里保证判断平行和判断方向相反的判断方式是一样的 #I3BUSY\r\n const __eqfuzz__ = 1e-3;\r\n let parType = equalv3(n1, n2, __eqfuzz__) ? 1 : equalv3(n1, n2.clone().negate(), __eqfuzz__) ? 2 : 0;\r\n\r\n if (parType > 0)\r\n {\r\n target = target.Clone().ClearDraw();\r\n if (parType === 2)\r\n {\r\n let mtx = target._Matrix;\r\n SetMtxVector(mtx, 2, n1);\r\n let p = n1.setFromMatrixColumn(mtx, 3);\r\n p.add(n2.multiplyScalar(target.thickness));\r\n SetMtxVector(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 ibox.getSize(size);\r\n if (size.x < 1 || size.y < 1 || size.z < 0.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 //必须修正向量,否则会出错 #I3BUSY\r\n xv.normalize();\r\n yv.normalize();\r\n zv.normalize();\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 interCSG = CSGIntersect(this.CSG, target.CSG, this.OCSInv.multiply(target.OCSNoClone));\r\n\r\n //测试绘制\r\n // TestDraw(new Mesh(CSG2Geometry2(interBSP), ColorMaterial.GetConceptualMaterial(1, DoubleSide)));\r\n\r\n let topology = new BSPGroupParse(interCSG);\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: ExtrudeContourCurve[] = [];\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 if (this.grooves.length < 2) return;\r\n //生命周期:初始化->used->undefined\r\n type ExtData = {\r\n index: number;\r\n used: boolean;\r\n box: Box3;\r\n };\r\n\r\n //构建二维空间索引\r\n let ocsInv = this.OCSInv;\r\n let mtx = new Matrix4;\r\n let fb = new Flatbush(this.grooves.length);\r\n for (let i = 0; i < this.grooves.length; i++)\r\n {\r\n let g = this.grooves[i];\r\n mtx.multiplyMatrices(ocsInv, g.OCSNoClone);\r\n let cu = g.ContourCurve.Clone().ApplyMatrix(mtx);\r\n let box = cu.BoundingBox;\r\n g.TempData = { index: i, used: false, box };\r\n fb.add(box.min.x, box.min.y, box.max.x, box.max.y);\r\n }\r\n fb.finish();\r\n\r\n let retGs: ExtrudeSolid[] = [];//新的槽列表\r\n\r\n for (let i = 0; i < this.grooves.length; i++)\r\n {\r\n let startG = this.grooves[i];\r\n\r\n if (startG.TempData === undefined)//已经被使用\r\n continue;\r\n\r\n retGs.push(startG);\r\n\r\n let stack = [startG];\r\n\r\n for (let j = 0; j < stack.length; j++)\r\n {\r\n let g = stack[j];\r\n let gd = g.TempData as ExtData;//能入栈的都是未被使用的\r\n\r\n let ids = fb.search(gd.box.min.x - 1e-2, gd.box.min.y - 1e-2, gd.box.max.x + 1e-2, gd.box.max.y + 1e-2, (id =>\r\n {\r\n if (id <= i) return false;//(id比它小(如果能合并 早就合并了))\r\n let gd = this.grooves[id].TempData as ExtData;\r\n return gd && !gd.used;//判断被使用\r\n }));\r\n\r\n for (let id of ids)\r\n {\r\n let ng = this.grooves[id];\r\n if (equaln(startG.knifeRadius, ng.knifeRadius, 1e-3) && startG.Join(ng) === Status.True)\r\n {\r\n (ng.TempData as ExtData).used = true;\r\n stack.push(ng);\r\n }\r\n }\r\n\r\n g.TempData = undefined;//总是保证被使用的造型这个数据为空\r\n }\r\n }\r\n\r\n if (retGs.length !== this.grooves.length)\r\n {\r\n this.grooves = retGs;\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 (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\r\n //分裂后重新将排钻实体设置给不同的实体\r\n HandleSpliteEntitys(splitEntitys: this[]) { }\r\n\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\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.GetConceptualEdgeMaterial())\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\r\n Object.defineProperty(mesh, \"castShadow\", {\r\n get: () => this.CaseShadow\r\n });\r\n Object.defineProperty(mesh, \"receiveShadow\", {\r\n get: () => this.CaseShadow\r\n });\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\r\n Object.defineProperty(mesh, \"castShadow\", {\r\n get: () => this.CaseShadow\r\n });\r\n Object.defineProperty(mesh, \"receiveShadow\", {\r\n get: () => this.CaseShadow\r\n });\r\n\r\n return new Object3D().add(\r\n mesh,\r\n new LineSegments(this.EdgeGeometry, ColorMaterial.GetPhysical2EdgeMaterial())\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 if (this.__CacheSplitExtrudes)\r\n for (let e of this.__CacheSplitExtrudes)\r\n e._MaterialId = this._MaterialId;\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 if (grooves.length < 1000)\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 this.GenWorldUV(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 if (grooves.length < MaxDrawGrooveCount)\r\n this._EdgeGeometry = builder.EdgeGeometry;\r\n this.UpdateUV(null, null);\r\n this.GenWorldUV(this._MeshGeometry);\r\n\r\n return this._MeshGeometry;\r\n }\r\n\r\n private _EdgeGeometry: EdgesGeometry | BufferGeometry;\r\n 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\r\n if (this._EdgeGeometry)\r\n return this._EdgeGeometry;\r\n\r\n //这里我们超过100就用这个,为了性能 和MaxDrawGrooveCount不一致\r\n if (this.grooves.length > 100 || this.grooves.every(g => equaln(g.thickness, this.thickness)) || this.grooves.length === 0)\r\n {\r\n let coords = FastExtrudeEdgeGeometry(this, this.ColorIndex, 20, true);\r\n let edgeGeo = new BufferGeometry();\r\n edgeGeo.setAttribute('position', new Float32BufferAttribute(coords, 3));\r\n this._EdgeGeometry = edgeGeo;\r\n return this._EdgeGeometry;\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 mtl = (this.Material?.Object as PhysicalMaterialRecord) ?? this.Db?.DefaultMaterial;\r\n\r\n if (mtl?.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\r\n GenWorldUV(geo: BufferGeometry)\r\n {\r\n let mtl = (this.Material?.Object as PhysicalMaterialRecord) ?? this.Db?.DefaultMaterial;\r\n\r\n if (mtl?.UseWorldUV)\r\n {\r\n let gen = new GenUVForWorld;\r\n gen.GenGeoUV(geo, mtl.Material);\r\n }\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.GetConceptualEdgeMaterial())\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\r\n Object.defineProperty(mesh, \"castShadow\", {\r\n get: () => this.CaseShadow\r\n });\r\n Object.defineProperty(mesh, \"receiveShadow\", {\r\n get: () => this.CaseShadow\r\n });\r\n\r\n return obj.add(\r\n mesh,\r\n new LineSegments(this.EdgeGeometry, ColorMaterial.GetPhysical2EdgeMaterial())\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 ExtrudeContourCurve;\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 { 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 { AsVector3, equaln, equalv2, equalv3, ZeroVec } from \"../../Geometry/GeUtils\";\r\nimport { GenerateExtrudeEdgeGeometry } from \"../../Geometry/SimpleExtrudeEdgeGeometry\";\r\nimport { ScaleUV } from \"../../Geometry/UVUtils\";\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 { ExtrudeContourCurve, ExtrudeSolid } from \"../Entity/Extrude\";\r\nimport { GenUVForWorld } from \"../Entity/GenUVForWorld\";\r\nimport { Polyline } from \"../Entity/Polyline\";\r\nimport { PhysicalMaterialRecord } from \"../PhysicalMaterialRecord\";\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: ExtrudeContourCurve = 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: ExtrudeContourCurve)\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 Erase(isErase: boolean = true)\r\n {\r\n if (isErase === this.IsErase) return;\r\n super.Erase(isErase);\r\n if (!isErase) return;\r\n\r\n if (this.OtherHalfTongKong && !this.OtherHalfTongKong.IsErase)\r\n {\r\n let cy = this.OtherHalfTongKong.Object as this;\r\n cy.isThrough = false;\r\n cy.OtherHalfTongKong = null;\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.OCSNoClone);\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: 6,\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\r\n let mtl = this.Material?.Object as PhysicalMaterialRecord ?? this.Db?.DefaultMaterial;\r\n if (mtl?.UseWorldUV)\r\n {\r\n let bgeo = new BufferGeometry().fromGeometry(geo);\r\n let gen = new GenUVForWorld();\r\n gen.GenGeoUV(bgeo, mtl.Material);\r\n return bgeo;\r\n }\r\n else\r\n ScaleUV(geo);\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.GetBulgeAt(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.OCSNoClone);\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.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.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.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.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.Conceptual || 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.Physical)\r\n {\r\n let mesh = obj as Mesh;\r\n mesh.material = this.MeshMaterial;\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 ExtrudeContourCurve;\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 { 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 { Matrix3, Matrix4, Object3D, Vector3 } from \"three\";\r\nimport { AddEntityDrawObject } from \"../../Common/AddEntityDrawObject\";\r\nimport { arrayPushArray, 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 abstract 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 /**\r\n * 返回对象在自身坐标系下的Box\r\n */\r\n override get BoundingBoxInOCS(): Box3Ext\r\n {\r\n //这个代码可能是错误的. 当复合实体是子实体时,复合实体的矩阵和世界坐标垂直,但是父实体没有垂直时,此时的结果是错误的 所以注释掉这个代码\r\n // if (\r\n // (equaln(this._Matrix.elements[0], 1, 1e-5) ||\r\n // equaln(this._Matrix.elements[1], 1, 1e-5) ||\r\n // equaln(this._Matrix.elements[2], 1, 1e-5)\r\n // //3\r\n // )\r\n // &&\r\n // (equaln(this._Matrix.elements[4], 1, 1e-5) ||\r\n // equaln(this._Matrix.elements[5], 1, 1e-5) ||\r\n // equaln(this._Matrix.elements[6], 1, 1e-5)\r\n // //7\r\n // )\r\n // &&\r\n // (equaln(this._Matrix.elements[8], 1, 1e-5) ||\r\n // equaln(this._Matrix.elements[9], 1, 1e-5) ||\r\n // equaln(this._Matrix.elements[10], 1, 1e-5)\r\n // )\r\n // )\r\n // return this.GetBoundingBoxInMtx(this.OCSInv);\r\n // else\r\n {\r\n let box = new Box3Ext;\r\n for (let e of this.Entitys)\r\n box.union(e.BoundingBoxInOCS.applyMatrix4(e.OCSNoClone));\r\n return box;\r\n }\r\n }\r\n\r\n //#region 绘制\r\n // OnlyRenderType = true; //我们现在不需要这样,因为我们每个绘制类型的Object的子实体都有子实体的渲染类型(唯一的缺点可能是渲染速度变慢了?)\r\n /**\r\n * 初始化绘制的threejs实体,子类型重载该函数初始化绘制实体.\r\n */\r\n override 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.OCSNoClone);\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\r\n //实体在被内嵌时,它绘制对象的世界矩阵会被影响,所以这里我们不直接计算它的盒子,而是用绘制对象的盒子来计算包围盒,避免错误\r\n //例如 复合扫略实体 的ZoomObject在这个实现下是错误的(因为扫略实体也是直接取绘制对象的包围盒)\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.OCSNoClone);\r\n // }\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\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 rtype = renderType;\r\n if (renderType === RenderType.Print && e.IsOnlyRender)\r\n rtype += 100;\r\n\r\n let o = e.GetDrawObjectFromRenderType(rtype);\r\n if (o)\r\n {\r\n o.traverse(obj => obj.userData = {});\r\n AddEntityDrawObject(obj, e, rtype);\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 {\r\n if (!e.Db) e.SetDatabase(this.Db);\r\n e.Material = id;\r\n }\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 arrayPushArray(pts, e.Clone().ApplyMatrix(this.OCSNoClone).GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform));\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 ApplyMirrorMatrix(m: Matrix4)\r\n {\r\n if (this.Id)\r\n this.Update(UpdateDraw.Geometry);\r\n return this;\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 { DefaultCompositeMetalsOption } from \"../../Editor/DefaultConfig\";\r\nimport { ICompHardwareOption } from \"../../UI/Components/RightPanel/RightPanelInterface\";\r\nimport { AutoRecord } from \"../AutoRecord\";\r\nimport { Factory } from \"../CADFactory\";\r\nimport { CADFiler } from \"../CADFiler\";\r\nimport { CompositeEntity } from \"../Entity/CompositeEntity\";\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 @AutoRecord RelevanceHardware: ObjectId[] = []; //当这个实体为复合板时,关联五金的信息\r\n /**\r\n *\r\n * @param [checkIsHole=false] true:只获取是孔的实体 false:返回所有实体\r\n * @param [checkFilter] 过滤函数\r\n * @returns\r\n */\r\n GetAllEntity(checkIsHole: boolean = false, checkFilter?: (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 (!checkIsHole || e.HardwareOption.isHole)\r\n holes.push(...e.GetAllEntity(checkIsHole, checkFilter).map(h => h.ApplyMatrix(this.OCSNoClone)));\r\n }\r\n else\r\n {\r\n if (!checkFilter || checkFilter(e))\r\n holes.push(e.Clone().ApplyMatrix(this.OCSNoClone));\r\n }\r\n }\r\n return holes;\r\n }\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 file.Read(),\r\n file.Read()\r\n ];\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 > 2)\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 this.RelevanceBoards.push(file.ReadSoftObjectId());\r\n }\r\n\r\n if (v > 3)\r\n {\r\n let count = file.Read();\r\n this.RelevanceHardware.length = 0;\r\n for (let i = 0; i < count; i++)\r\n this.RelevanceHardware.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(4);\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 file.Write(this.RelevanceHardware.length);\r\n for (let id of this.RelevanceHardware)\r\n file.WriteSoftObjectId(id);\r\n }\r\n}\r\n","import { Box3, Matrix4, Vector3 } from \"three\";\r\nimport { MatrixPlanarizere } from \"../../Common/Matrix4Utils\";\r\nimport { Contour } from \"../../DatabaseServices/Contour\";\r\nimport { Board } from \"../../DatabaseServices/Entity/Board\";\r\nimport { Polyline } from \"../../DatabaseServices/Entity/Polyline\";\r\nimport { Region } from \"../../DatabaseServices/Entity/Region\";\r\nimport { BoolOpeartionType } from \"../../GraphicsSystem/BoolOperateUtils\";\r\nimport { Box3Ext } from \"../Box\";\r\nimport { equaln, XAxis } from \"../GeUtils\";\r\nimport { BoardFaceType } from \"./BoardGetFace\";\r\n\r\nexport interface BoardFaceParams\r\n{\r\n type: BoardFaceType;\r\n length: number;\r\n width: number;\r\n localBoard: Board;\r\n matrix4: Matrix4;\r\n region?: Region;\r\n isRect?: boolean;\r\n drillType?: string;\r\n}\r\nexport class Face\r\n{\r\n type: BoardFaceType;\r\n Length: number;\r\n Width: number;\r\n private _Region: Region;\r\n LocalBoard: Board;\r\n InterBoard: Board; //提供侧面的作为相交面\r\n isEqualType: boolean = false;\r\n OCS: Matrix4 = new Matrix4();\r\n IsRect: boolean = true;\r\n DrillType: string;\r\n constructor(parameters?: BoardFaceParams)\r\n {\r\n if (parameters)\r\n {\r\n this.type = parameters.type;\r\n this._Region = parameters.region;\r\n this.LocalBoard = parameters.localBoard;\r\n this.OCS = parameters.matrix4;\r\n this.Length = parameters.length;\r\n this.Width = parameters.width;\r\n if (parameters.isRect !== undefined)\r\n this.IsRect = parameters.isRect;\r\n if (parameters.drillType)\r\n this.DrillType = parameters.drillType;\r\n else\r\n this.DrillType = this.LocalBoard.BoardProcessOption.drillType;\r\n }\r\n }\r\n get Region()\r\n {\r\n if (!this._Region)\r\n this._Region = Region.CreateFromCurves([new Polyline().Rectangle(this.Length, this.Width)]);\r\n return this._Region;\r\n }\r\n get OCSInv()\r\n {\r\n return new Matrix4().getInverse(this.OCS);\r\n }\r\n get Normal()\r\n {\r\n return new Vector3().setFromMatrixColumn(this.OCS, 2);\r\n }\r\n Intersect(f: Face): Face[]\r\n {\r\n //获得侧面和非侧面\r\n let [sideFace, noSideFace] = this.type === BoardFaceType.Side ? [this, f] : [f, this];\r\n\r\n //布尔面和被布尔面得差异矩阵\r\n let diffMtx = sideFace.OCSInv.multiply(noSideFace.OCS);\r\n MatrixPlanarizere(diffMtx);\r\n\r\n let isSuccess = false;\r\n\r\n let x = new Vector3().setFromMatrixColumn(diffMtx, 0);\r\n let ang = x.angleTo(XAxis);\r\n //盒子旋转0,90,180度不会被破坏\r\n let canUseBoxCalc = equaln(ang, 0) || equaln(ang, Math.PI / 2) || equaln(ang, Math.PI);\r\n\r\n let retBoxs: Box3Ext[] = [];\r\n let sizes: Vector3[] = [];\r\n\r\n //如果不是矩形,用布尔运算,如果\r\n if (!noSideFace.IsRect || !canUseBoxCalc)\r\n {\r\n let sideReg = sideFace.Region?.Clone();\r\n if (!sideReg || !noSideFace.Region) return [];\r\n\r\n let toReg = noSideFace.Region.Clone().ApplyMatrix(diffMtx);\r\n isSuccess = sideReg.BooleanOper(toReg, BoolOpeartionType.Intersection);\r\n for (let s of sideReg.ShapeManager.ShapeList)\r\n {\r\n let box = s.BoundingBox as Box3Ext;\r\n retBoxs.push(box);\r\n sizes.push(box.getSize(new Vector3()));\r\n }\r\n }\r\n else\r\n {\r\n let retBox = new Box3Ext(new Vector3(), new Vector3(sideFace.Length, sideFace.Width));\r\n\r\n let p1 = new Vector3().setFromMatrixPosition(diffMtx);\r\n let p2 = new Vector3(noSideFace.Length, noSideFace.Width).applyMatrix4(diffMtx);\r\n let box3 = new Box3Ext().setFromPoints([p1, p2]);\r\n\r\n if (retBox.intersectsBox(box3))\r\n {\r\n retBox.intersect(box3);\r\n let size = retBox.getSize(new Vector3());\r\n isSuccess = !equaln(size.x * size.y, 0);\r\n retBoxs = [retBox];\r\n sizes = [size];\r\n }\r\n }\r\n\r\n let newFaces: Face[] = [];\r\n\r\n if (isSuccess)\r\n {\r\n for (let i = 0; i < sizes.length; i++)\r\n {\r\n let newFace = new Face();\r\n //提供侧面的板件作为相交面\r\n newFace.LocalBoard = noSideFace.LocalBoard;\r\n newFace.InterBoard = sideFace.LocalBoard;\r\n\r\n newFace.Length = sizes[i].x;\r\n newFace.Width = sizes[i].y;\r\n\r\n let min = retBoxs[i].min;\r\n min.applyMatrix4(sideFace.OCS);\r\n\r\n //构建碰撞面坐标系\r\n newFace.OCS = sideFace.OCS.clone().setPosition(min);\r\n\r\n newFace.DrillType = sideFace.DrillType;\r\n //都是侧面\r\n if (this.type === f.type)\r\n newFace.isEqualType = true;\r\n newFaces.push(newFace);\r\n }\r\n }\r\n return newFaces;\r\n }\r\n IsIntersect(f: Face, fuzz = 1e-6, currentCoverBoxes: Box3[] = []): { isInt: boolean, coverBoxesList?: Box3[]; }\r\n {\r\n //获得侧面和非侧面\r\n let [sideFace, noSideFace] = this.type === BoardFaceType.Side ? [this, f] : [f, this];\r\n\r\n //布尔面和被布尔面得差异矩阵\r\n let diffMtx = sideFace.OCSInv.multiply(noSideFace.OCS);\r\n MatrixPlanarizere(diffMtx);\r\n\r\n let x = new Vector3().setFromMatrixColumn(diffMtx, 0);\r\n let ang = x.angleTo(XAxis);\r\n //盒子旋转0,90,180度不会被破坏\r\n let canUseBoxCalc = equaln(ang, 0) || equaln(ang, Math.PI / 2) || equaln(ang, Math.PI);\r\n\r\n //如果不是矩形,用布尔运算,如果\r\n if (!noSideFace.IsRect || !canUseBoxCalc)\r\n {\r\n let c1 = new Polyline().Rectangle(sideFace.Length, sideFace.Width);\r\n let c2 = noSideFace.LocalBoard.ContourCurve.Clone().ApplyMatrix(diffMtx);\r\n let box = c1.BoundingBox.intersect(c2.BoundingBox);\r\n\r\n let size = box.getSize(new Vector3);\r\n\r\n if (equaln(size.x * size.y, 0))\r\n return { isInt: false, coverBoxesList: currentCoverBoxes };\r\n\r\n let con1 = Contour.CreateContour(c1);\r\n let con2 = Contour.CreateContour(c2);\r\n let cs = con1.IntersectionBoolOperation(con2);\r\n let width = 0;\r\n let boxList: Box3[] = [];\r\n //当前碰撞区域如果遮光直接退出\r\n for (let c of cs)\r\n {\r\n let b = c.BoundingBox;\r\n b.getSize(size);\r\n width += size.x;\r\n if (width / sideFace.Length > fuzz)\r\n return { isInt: true };\r\n boxList.push(b);\r\n }\r\n if (currentCoverBoxes.length === 0)\r\n {\r\n return { isInt: false, coverBoxesList: boxList };\r\n }\r\n //与旧盒子合并后测试是否遮光\r\n width = 0;\r\n while (currentCoverBoxes.length > 0)\r\n {\r\n let b = currentCoverBoxes.pop();\r\n let isInt = false;\r\n for (let box of boxList)\r\n {\r\n if (box.intersectsBox(b))\r\n {\r\n isInt = true;\r\n box.union(b);\r\n break;\r\n }\r\n }\r\n if (!isInt)\r\n boxList.push(b);\r\n }\r\n\r\n for (let b of boxList)\r\n {\r\n b.getSize(size);\r\n width += size.x;\r\n if (width / sideFace.Length > fuzz)\r\n return { isInt: true };\r\n }\r\n\r\n return { isInt: false, coverBoxesList: boxList };\r\n }\r\n else\r\n {\r\n let retBox = new Box3Ext(new Vector3(), new Vector3(sideFace.Length, sideFace.Width));\r\n\r\n let p1 = new Vector3().setFromMatrixPosition(diffMtx);\r\n let p2 = new Vector3(noSideFace.Length, noSideFace.Width).applyMatrix4(diffMtx);\r\n let box3 = new Box3Ext().setFromPoints([p1, p2]);\r\n\r\n if (retBox.intersectsBox(box3))\r\n {\r\n retBox.intersect(box3);\r\n let size = retBox.getSize(new Vector3());\r\n if (equaln(size.x * size.y, 0) || size.y / sideFace.Width <= fuzz)\r\n return { isInt: false, coverBoxesList: currentCoverBoxes };\r\n\r\n if (size.x / sideFace.Length > fuzz)\r\n return { isInt: true };\r\n if (currentCoverBoxes.length === 0)\r\n {\r\n return { isInt: false, coverBoxesList: [retBox] };\r\n }\r\n for (let b of currentCoverBoxes)\r\n {\r\n if (b.intersectsBox(retBox))\r\n {\r\n b.union(retBox);\r\n retBox = null;\r\n break;\r\n }\r\n }\r\n if (retBox)\r\n currentCoverBoxes.push(retBox);\r\n let width = 0;\r\n for (let b of currentCoverBoxes)\r\n {\r\n b.getSize(size);\r\n width += size.x;\r\n if (width / sideFace.Length > fuzz)\r\n return { isInt: true };\r\n }\r\n\r\n return { isInt: false, coverBoxesList: currentCoverBoxes };\r\n }\r\n return { isInt: false, coverBoxesList: currentCoverBoxes };\r\n }\r\n }\r\n}\r\n","import { Matrix4, Vector3 } from \"three\";\r\nimport { MergeCurvelist } from \"../../Common/CurveUtils\";\r\nimport { MakeMirrorMtx } 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\n\r\n\r\nexport const CanDrawHoleFuzz = 0.1;\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 mtx = MakeMirrorMtx(ZAxis);\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, mtx),\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, zFuzz: number): 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(), 1e-5))\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, zFuzz);\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, 1e-5) && x.y > 0) || x.x < -1e-5)\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","\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 { Vector3 } from \"three\";\r\nimport { arrayRemoveIf } from \"../../Common/ArrayExt\";\r\nimport { ConverCircleToPolyline, curveLinkGroup, equalCurve, IRectInfo } 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, ComparePointFnGenerate, 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 = ComparePointFnGenerate(\"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 { HostApplicationServices } from \"../../ApplicationServices/HostApplicationServices\";\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 { ExtrudeContourCurve } 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 { 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: boolean): Curve[]\r\n {\r\n let outline = shape.Outline.Curve;\r\n if (isOut)\r\n outline = outline.Clone();\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 //理论上最大的宽度为1220,所以2000已经是种仁慈.\r\n //更好的算法应该是, 如果线不在outline里面, 那么已经算是错误的,但是理论上如果线已经往外偏太多了,就一定会使得这个判断生效\r\n if (offsetDist > 2000)\r\n throw \"无法加工的造型!已经超过了最大的走刀范围2000!\";\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 //是否和孤岛相交\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\r\n let vailHoles: Contour[] = [];\r\n\r\n //内偏(走刀方式)\r\n let outlineOffsetCusOfTool = GetOffsetCurves(outline, dir * knifRadius).filter(c => c.IsClose) as Curve[];\r\n let maxArea = Math.max(...(outlineOffsetCusOfTool.map(c => c.Area)));\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 holeOffsetCurve = holeOffsetCus[i];//网洞走刀曲线\r\n for (let j = 0; j < outlineOffsetCusOfTool.length; j++)\r\n {\r\n let outlineCurveOffsetInside = outlineOffsetCusOfTool[j];\r\n if (h.Curve.IntersectWith(outlineCurveOffsetInside, 0).length > 0)\r\n {\r\n if (!(equalCurve(holeOffsetCurve, outlineCurveOffsetInside) || isTargetCurInOrOnSourceCur(outlineCurveOffsetInside as Polyline, h.Curve)))\r\n {\r\n isVail = false;\r\n break;\r\n }\r\n else if (isTargetCurInOrOnSourceCur(h.Curve, outlineCurveOffsetInside as Polyline))\r\n {\r\n offsetCus.push(outlineCurveOffsetInside);\r\n isVail = false;\r\n break;\r\n }\r\n }\r\n else if (holeOffsetCurve.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 /**用于测试走刀路径 */\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 && HostApplicationServices.chaidanOption.useDefaultRad)\r\n modelings.forEach(m => m.knifeRadius = HostApplicationServices.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 < HostApplicationServices.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 */\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\r\n //获取造型走刀\r\n GetModelFeedPath(br: { Thickness: number, ContourCurve: ExtrudeContourCurve; }, modeling: IModeling): Curve[]\r\n {\r\n const brThickness = br.Thickness;\r\n let cus: Curve[] = [];\r\n let { shape, thickness, knifeRadius, addLen, addWidth, addDepth } = modeling;\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, modeling.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, true);\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\r\n /**\r\n * 获取所有的轮廓\r\n * @param cus\r\n * @param retCus 不能组成轮廓的线被添加到这里\r\n * @returns\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 return cons;\r\n }\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 (HostApplicationServices.chaidanOption.useDefaultRad)\r\n modelings[i].knifeRadius = HostApplicationServices.chaidanOption.radius;\r\n let m = modelings[i];\r\n let cu = m.shape.Outline.Curve;\r\n if (cu instanceof Circle && cu.Radius < HostApplicationServices.chaidanOption.modeling2HoleRad + 1e-6)\r\n continue;\r\n let cus = this.GetModelFeedPath(br, m);\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 < HostApplicationServices.chaidanOption.modeling2HoleRad + 1e-6)\r\n continue;\r\n if (HostApplicationServices.chaidanOption.useDefaultRad)\r\n m.knifeRadius = HostApplicationServices.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: ExtrudeContourCurve, 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","import { Vector2, Vector3 } from \"three\";\r\nimport { ConverCircleToPolyline } from \"../Common/CurveUtils\";\r\nimport { Vector2ApplyMatrix4 } from \"../Common/Matrix4Utils\";\r\nimport { Arc } from \"../DatabaseServices/Entity/Arc\";\r\nimport { Circle } from \"../DatabaseServices/Entity/Circle\";\r\nimport { Polyline } from \"../DatabaseServices/Entity/Polyline\";\r\nimport { equaln } from \"../Geometry/GeUtils\";\r\n\r\n\r\n/**轮廓(多段线Pts Bul)数据 */\r\nexport interface IContourData\r\n{\r\n pts: Vector2[];\r\n buls: number[];\r\n}\r\n\r\n\r\n//转换成多段线点表(pts bul)\r\nexport function ConverToPtsBul(cu: Polyline | Circle, isOutline = true): IContourData\r\n{\r\n let ptsBuls: IContourData;\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 ptsBuls = cu.PtsBuls;\r\n }\r\n let ocs = cu.OCSNoClone;\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//转换成多段线点表(pts bul)\r\nexport function ConverArcToPtsBul(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 result.pts.push(arc.StartPoint);\r\n result.buls.push(bul);\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","import { Box3, Matrix4, Vector2, Vector3 } from \"three\";\r\nimport { SCALAR } from \"../Add-on/DrawDrilling/HoleUtils\";\r\nimport { lookOverBoardInfosTool } from \"../Add-on/LookOverBoardInfos/LookOverBoardInfosTool\";\r\nimport { HostApplicationServices } from \"../ApplicationServices/HostApplicationServices\";\r\nimport { EBoardKeyList } from \"../Common/BoardKeyList\";\r\nimport { MergeCurvelist } from \"../Common/CurveUtils\";\r\nimport { IsDev } from \"../Common/Deving\";\r\nimport { ParseExpr, safeEval } from \"../Common/eval\";\r\nimport { Log } from \"../Common/Log\";\r\nimport { SendReport } from \"../Common/Report\";\r\nimport { ShowSelectObjects } from \"../Common/ShowSelectObjects\";\r\nimport { Intent, Toaster } from \"../Common/Toaster\";\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 { Contour } from \"../DatabaseServices/Contour\";\r\nimport { Arc } from \"../DatabaseServices/Entity/Arc\";\r\nimport { Board, I2DModeingItem, IKnifeInfo, IModeling } from \"../DatabaseServices/Entity/Board\";\r\nimport { Circle } from \"../DatabaseServices/Entity/Circle\";\r\nimport { ExtrudeContourCurve } 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 { Shape } from \"../DatabaseServices/Shape\";\r\nimport { CanDrawHoleFuzz } from \"../Geometry/DrillParse/BoardGetFace\";\r\nimport { angleTo, equaln, equalv3, IsBetweenA2B, isIntersect2, isParallelTo, MoveMatrix, XAxis } from \"../Geometry/GeUtils\";\r\nimport { GetBoardSealingData, 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, ISealingData } from \"../UI/Store/BoardInterface\";\r\nimport { Entity } from './../DatabaseServices/Entity/Entity';\r\nimport { ICompHardwareOption } from './../UI/Components/RightPanel/RightPanelInterface';\r\nimport { ConverArcToPtsBul, ConverToPtsBul, IContourData } from \"./Convert2PtsBul\";\r\n\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\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 interface IDrillingOption\r\n{\r\n position: Vector3;\r\n radius: number;\r\n type: GangDrillType;\r\n depth: number;\r\n face: FaceDirection;\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 brThickness: number;\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 orgContour = GetSealedBoardContour(br, true, true);\r\n if (!orgContour || equaln(orgContour.Area, 0))\r\n {\r\n Toaster({\r\n message: br.Name + \" 轮廓错误,可能存在轮廓自交,请检查后重新拆单!(错误的板已经选中,您可以按住鼠标中键查看该板!)(使用FISC命令可以修复自交轮廓!)\",\r\n timeout: 8000,\r\n intent: Intent.DANGER,\r\n });\r\n Report([br.__OriginalEnt__ ?? br], br.Name + \" 轮廓错误\");\r\n return undefined;\r\n }\r\n let sealedOutline = GetSealedBoardContour(br, false);\r\n\r\n if (!sealedOutline || equaln(sealedOutline.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.__OriginalEnt__ ?? br], br.Name + \"扣除封边轮廓有误\");\r\n return;\r\n }\r\n let offsetTanslation = sealedOutline.BoundingBox.min;\r\n sealedOutline.Position = sealedOutline.Position.sub(offsetTanslation);\r\n let sealedOutlinePtsBul = ConverToPtsBul(sealedOutline);//不分裂圆弧转点表\r\n //外轮廓去掉最后的闭合点\r\n sealedOutlinePtsBul.pts.pop();\r\n sealedOutlinePtsBul.buls.pop();\r\n let size = sealedOutline.BoundingBox.getSize(new Vector3);\r\n\r\n //不扣除封边的轮廓信息\r\n let originOutlinePtsBul = ConverToPtsBul(orgContour);\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 = ConverToPtsBul(br.ContourCurve);//不分裂圆弧转点表\r\n\r\n return {\r\n info: GetBoardInfo(br, size),\r\n originOutlin: originOutlinePtsBul,//拼错了 未扣封边的点表\r\n outline: sealedOutlinePtsBul, //扣完封边的点表\r\n sealing: GetBoardSealingData(orgContour),\r\n modeling,\r\n holes: GetBoardHolesData(br, offsetTanslation, orgContour),\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 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\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 < HostApplicationServices.chaidanOption.modeling2HoleRad + 1e-6)\r\n continue;\r\n if (HostApplicationServices.chaidanOption.useDefaultRad)\r\n m.knifeRadius = HostApplicationServices.chaidanOption.radius;\r\n\r\n data.push({\r\n outline: ConverToPtsBul(cu.Clone(), false),\r\n holes: m.shape.Holes.map(h => ConverToPtsBul(h.Curve.Clone(), 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 < HostApplicationServices.chaidanOption.modeling2HoleRad + 1e-6)\r\n continue;\r\n if (HostApplicationServices.chaidanOption.useDefaultRad)\r\n m.knifeRadius = HostApplicationServices.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: ExtrudeContourCurve) => ConverToPtsBul(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: ConverToPtsBul(cu.Clone(), false),\r\n holes: m.shape.Holes.map(h => ConverToPtsBul(h.Curve.Clone(), 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): ExtrudeContourCurve | undefined\r\n {\r\n let con: ExtrudeContourCurve = GetSpliteOutlineBySpliteSize(br);\r\n if (con)\r\n return con;\r\n\r\n con = br.ContourCurve;\r\n if (con instanceof Circle) return con.Clone();\r\n\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\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, \"L\");\r\n let spliteWidth = safeEval(br.BoardProcessOption.spliteWidth, param, \"W\");\r\n let spliteThickness = safeEval(br.BoardProcessOption.spliteThickness, param, \"H\");\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 //获得拆单轮廓(如果没有,那么将返回空,如果有,返回多段线)\r\n export function GetSpliteOutlineBySpliteSize(br: Board): Polyline | null\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: ExtrudeContourCurve): 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, CanDrawHoleFuzz)) 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, CanDrawHoleFuzz) ? FaceDirection.Front : FaceDirection.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 < HostApplicationServices.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: ExtrudeContourCurve, 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 (HostApplicationServices.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: ExtrudeContourCurve)\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: FaceDirection;\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 sp = position.clone().setZ(0).add(d.Normal.multiplyScalar(- CanDrawHoleFuzz).applyMatrix4(roMat));//加长线(以便加大容差)\r\n let ep = position.clone().setZ(0).add(d.Normal.multiplyScalar(d.Height + CanDrawHoleFuzz).applyMatrix4(roMat));//加长线\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.warn(\"侧孔与板无交点,无法加工该侧孔!\");\r\n return;\r\n }\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, CanDrawHoleFuzz) ? FaceDirection.Front : FaceDirection.Back;\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: ExtrudeContourCurve, 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 //区间没有交集\r\n if (!(Math.max(z0, 0) < (Math.min(z1, br.Thickness) - CanDrawHoleFuzz))) return;\r\n\r\n if (!(z0 < CanDrawHoleFuzz || z1 > (br.Thickness - CanDrawHoleFuzz)))//禁止在中间挖洞\r\n {\r\n Log(`警告:板:{${br.Name}}的孔嵌在板中间,无法加工,已经跳过!`);\r\n return;\r\n }\r\n\r\n if (!(outline.PtInCurve(p)))//在轮廓内\r\n {\r\n Log(`警告:板:{${br.Name}}的孔不在板轮廓内,无法加工,已经跳过!`);\r\n return;\r\n }\r\n\r\n if (groovesOutlines.some(g => g.PtInCurve(p)))//在洞内\r\n {\r\n Log(`警告:板:{${br.Name}}的孔在造型内,无法加工,已经跳过!`);\r\n return;\r\n }\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 ? FaceDirection.Back : FaceDirection.Front,\r\n angle: angle,\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 Log(`警告:板:${br.Name}的排钻嵌在板件内部,已经跳过!`);\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.model = ParseExpr(data.model, { L: size.x, W: size.y, H: size.z });\r\n data.factory = ParseExpr(data.factory, { L: size.x, W: size.y, H: size.z });\r\n data.brand = ParseExpr(data.brand, { 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\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: ConverToPtsBul(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\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 = ConverArcToPtsBul(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\r\n export function GetChaiDanFeedingPath(data: IChaiDanFeedingData)\r\n {\r\n const { thickness, boardContour, dir, addLen, addWidth, addDepth, knifeRadius, brThickness } = 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: brThickness, 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: ExtrudeContourCurve) => ConverToPtsBul(c, false));\r\n }\r\n}\r\n","import Flatbush from 'flatbush';\r\nimport { Box3, Vector3 } from \"three\";\r\nimport { Curve } from \"../DatabaseServices/Entity/Curve\";\r\nimport { XAxis, YAxis } from '../Geometry/GeUtils';\r\n\r\n/**\r\n * 分析曲线的上下左右位置的线\r\n * @param curves\r\n */\r\nexport function ParseEdgeSealDir(curves: Curve[]): [number, number, number, number]\r\n{\r\n let boxAll = new Box3;\r\n let boxs: Box3[] = [];\r\n\r\n let fb = new Flatbush(curves.length);\r\n\r\n for (let c of curves)\r\n {\r\n let box = c.BoundingBox;\r\n boxs.push(box);\r\n boxAll.union(box);\r\n\r\n fb.add(box.min.x, box.min.y, box.max.x, box.max.y);\r\n }\r\n\r\n fb.finish();\r\n\r\n let leftids = fb.search(boxAll.min.x - 1, boxAll.min.y - 1, boxAll.min.x + 1, boxAll.max.y + 1);\r\n let rightids = fb.search(boxAll.max.x - 1, boxAll.min.y - 1, boxAll.max.x + 1, boxAll.max.y + 1);\r\n let topids = fb.search(boxAll.min.x - 1, boxAll.max.y - 1, boxAll.max.x + 1, boxAll.max.y + 1);\r\n let bottomids = fb.search(boxAll.min.x - 1, boxAll.min.y - 1, boxAll.max.x + 1, boxAll.min.y + 1);\r\n\r\n const FindBestCurveIndex = (ids: number[], dirRef: Vector3) =>\r\n {\r\n if (ids.length === 1) return ids[0];\r\n\r\n let maxLength = -Infinity;\r\n let bestIndex = -1;\r\n for (let id of ids)\r\n {\r\n let c = curves[id];\r\n let dir = c.EndPoint.sub(c.StartPoint).normalize();\r\n let length = Math.abs(dir.dot(dirRef));//取模(模越长 表示和dirRef越平行(接近))\r\n if (length > maxLength)\r\n {\r\n bestIndex = id;\r\n maxLength = length;\r\n }\r\n }\r\n return bestIndex;\r\n };\r\n\r\n let left = FindBestCurveIndex(leftids, YAxis);\r\n let right = FindBestCurveIndex(rightids, YAxis);\r\n let top = FindBestCurveIndex(topids, XAxis);\r\n let bottom = FindBestCurveIndex(bottomids, XAxis);\r\n\r\n return [left, right, top, bottom];\r\n}\r\n","import { arrayPushArray } from \"../Common/ArrayExt\";\r\nimport { 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 { ExtrudeContourCurve } from \"../DatabaseServices/Entity/Extrude\";\r\nimport { Line } from \"../DatabaseServices/Entity/Line\";\r\nimport { Polyline } from \"../DatabaseServices/Entity/Polyline\";\r\nimport { CreateContour2 } from \"../Geometry/CreateContour2\";\r\nimport { angle, clampRad, equaln, equalv3, isParallelTo, SelectNearP, XAxis } from \"../Geometry/GeUtils\";\r\nimport { Production } from \"../Production/Product\";\r\nimport { IHighSealedItem, ISealingData } from \"../UI/Store/BoardInterface\";\r\nimport { IntersectOption } from \"./IntersectWith\";\r\nimport { ParseEdgeSealDir } from \"./ParseEdgeSealDir\";\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\nexport function CalcEdgeSealing(cus: Curve[], highSeals?: IHighSealedItem[])\r\n{\r\n if (cus.length <= 1) return;\r\n\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))//反向共线 later 在front内\r\n {\r\n //删除线\r\n cus.splice(laterIndex, 1);\r\n highSeals?.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))//反向共线 front 在 later内\r\n {\r\n //删除线\r\n cus.splice(i, 1);\r\n highSeals?.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 => refLine.PtOnCurve(p) && refLine2.PtOnCurve(p));\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 //删除线\r\n cus.splice(i, 1);\r\n highSeals?.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 highSeals?.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 if (cus.length < 2) return false;\r\n\r\n //后面线点无效,如果是起始线,则删除,否则缓存原始线,继续尝试连接\r\n if (par > 1 - 1e-6)\r\n {\r\n if (laterIndex === 0)\r\n {\r\n //删除线\r\n cus.shift();\r\n highSeals?.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\n//与GetBoardSealingCurves相关\r\nexport function GetBoardHighSeal(br: Board, sealcus: Curve[]): IHighSealedItem[]\r\n{\r\n if (br.BoardProcessOption[EBoardKeyList.SpliteHeight]\r\n && br.BoardProcessOption[EBoardKeyList.SpliteWidth]\r\n && br.BoardProcessOption[EBoardKeyList.SpliteThickness]\r\n )\r\n {\r\n return [\r\n { size: parseFloat(br.BoardProcessOption.sealedDown) },\r\n { size: parseFloat(br.BoardProcessOption.sealedRight) },\r\n { size: parseFloat(br.BoardProcessOption.sealedUp) },\r\n { size: parseFloat(br.BoardProcessOption.sealedLeft) },\r\n ];\r\n }\r\n\r\n let highSeals = br.BoardProcessOption.highSealed.filter(d => d.size !== null && d.size !== undefined);\r\n\r\n //若未设置高级封边,把上下左右封边存入高级封边\r\n if (sealcus.length !== highSeals.length || !br.IsSpecialShape)\r\n {\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 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\r\n an = clampRad(an);\r\n\r\n if ((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 //当存在拆单尺寸时\r\n if (br.BoardProcessOption[EBoardKeyList.SpliteHeight]\r\n && br.BoardProcessOption[EBoardKeyList.SpliteWidth]\r\n && br.BoardProcessOption[EBoardKeyList.SpliteThickness]\r\n )\r\n {\r\n const param = { L: br.Height, W: br.Width, H: br.Thickness };\r\n let width = safeEval(br.BoardProcessOption[EBoardKeyList.SpliteWidth], param, \"W\");\r\n let height = safeEval(br.BoardProcessOption[EBoardKeyList.SpliteHeight], param, \"L\");\r\n let cu = new Polyline().Rectangle(width, height);\r\n return cu.Explode();\r\n }\r\n\r\n let cu: ExtrudeContourCurve = 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 ExtrudeContourCurve;\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\nconst SEAL_VALUE_KEY = \"__highSeals__\";\r\n\r\n\r\n/**\r\n * 获取板件轮廓\r\n * 结果轮廓拆单用,统一逆时针数据\r\n * hasSealing 轮廓是否包含封边\r\n * 用户计算拆单侧孔面id\r\n *\r\n * //返回的曲线中 如果 hasSealing isParseSeal 那么将可以取出封边信息\r\n */\r\nexport function GetSealedBoardContour(br: Board, hasSealing: boolean, isParseSeal = false): Polyline | Circle | undefined\r\n{\r\n let area2 = br.ContourCurve.Area2;\r\n if (Math.abs(area2) < 10)\r\n return;\r\n\r\n let offsetCus: Curve[] = [];\r\n let curves = GetBoardSealingCurves(br);\r\n let dir = Math.sign(area2);\r\n\r\n let highSealsExpd: ISealingData[];//展开后的封边信息(仅在未扣除封边的分支中计算)\r\n if (hasSealing)\r\n {\r\n let highSeals: IHighSealedItem[];\r\n if (isParseSeal)\r\n {\r\n highSeals = GetBoardHighSeal(br, curves);\r\n highSealsExpd = [];\r\n }\r\n\r\n for (let i = 0; i < curves.length; i++)\r\n {\r\n let curve = curves[i];\r\n\r\n const PushCurve = (c: Curve) =>\r\n {\r\n offsetCus.push(c);\r\n highSealsExpd?.push({ size: highSeals[i].size, length: c.Length });\r\n };\r\n\r\n if (curve instanceof Polyline)\r\n for (let cu of curve.Explode())\r\n PushCurve(cu);\r\n else\r\n PushCurve(curve);\r\n }\r\n }\r\n else\r\n {\r\n let highSeals = GetBoardHighSeal(br, curves);\r\n\r\n //圆的dir始终等于1\r\n // if (cus[0] instanceof Circle)\r\n // dir = 1;\r\n\r\n //所有的封边都一样时\r\n if (highSeals.every(s => equaln(s.size, highSeals[0].size), 1e-3))\r\n {\r\n let brContour = br.ContourCurve;\r\n\r\n //当存在拆单尺寸时\r\n if (br.BoardProcessOption[EBoardKeyList.SpliteHeight]\r\n && br.BoardProcessOption[EBoardKeyList.SpliteWidth]\r\n && br.BoardProcessOption[EBoardKeyList.SpliteThickness]\r\n )\r\n {\r\n const param = { L: br.Height, W: br.Width, H: br.Thickness };\r\n let width = safeEval(br.BoardProcessOption[EBoardKeyList.SpliteWidth], param, \"W\");\r\n let height = safeEval(br.BoardProcessOption[EBoardKeyList.SpliteHeight], param, \"L\");\r\n brContour = new Polyline().Rectangle(width, height);\r\n }\r\n\r\n let retPl: ExtrudeContourCurve;\r\n\r\n if (!highSeals[0].size || equaln(highSeals[0].size, 0, 1e-3))\r\n {\r\n retPl = brContour.Clone();\r\n if (dir < 0)\r\n retPl.Reverse();\r\n }\r\n else\r\n {\r\n retPl = brContour.GetOffsetCurves(-highSeals[0].size * dir)[0] as ExtrudeContourCurve;\r\n\r\n if (retPl && !retPl.IsClose)\r\n {\r\n //某些情况下,这里会出现非闭合轮廓\r\n retPl = CreateContour2([retPl])?.Curve;\r\n }\r\n\r\n if (retPl && retPl.Area2 < 0)\r\n retPl.Reverse();\r\n }\r\n\r\n if (retPl) return retPl;\r\n }\r\n\r\n for (let i = 0; i < curves.length; i++)\r\n {\r\n let cs: Curve[];\r\n if (!highSeals[i].size)\r\n cs = [curves[i].Clone()];\r\n else\r\n cs = curves[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 arrayPushArray(offsetCus, c.Explode());\r\n else\r\n offsetCus.push(c);\r\n }\r\n }\r\n }\r\n\r\n if (offsetCus.length === 1 && offsetCus[0] instanceof Circle)\r\n {\r\n let cir = offsetCus[0];\r\n\r\n if (highSealsExpd) cir[SEAL_VALUE_KEY] = highSealsExpd;\r\n\r\n return cir;\r\n }\r\n\r\n if (!CalcEdgeSealing(offsetCus, highSealsExpd)) return;\r\n let pl = Polyline.FastCombine(offsetCus, LINK_FUZZ);\r\n if (pl && dir < 0)\r\n {\r\n pl.Reverse();\r\n highSealsExpd?.reverse();\r\n }\r\n\r\n if (highSealsExpd) pl[SEAL_VALUE_KEY] = highSealsExpd;\r\n\r\n return pl;\r\n}\r\n\r\nexport function GetBoardSealingData(curve: Polyline | Circle)\r\n{\r\n let sealData = curve[SEAL_VALUE_KEY] as ISealingData[];\r\n if (curve instanceof Circle)\r\n {\r\n sealData[0].length *= 0.5;\r\n sealData.push({ ...sealData[0] });\r\n }\r\n return sealData;\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 = GetBoardSealingCurves(br);\r\n\r\n //现在我们不管是否有拆单尺寸,我们总是关系封边值\r\n // let param = { L: br.Height, W: br.Width, H: br.Thickness };\r\n // let spliteHeight = safeEval(br.BoardProcessOption.spliteHeight, param, \"L\");\r\n // let spliteWidth = safeEval(br.BoardProcessOption.spliteWidth, param, \"W\");\r\n // let spliteThickness = safeEval(br.BoardProcessOption.spliteThickness, param, \"H\");\r\n // if ((spliteHeight && spliteWidth && spliteThickness) || !br.IsSpecialShape && cus.length === 4)\r\n\r\n if (!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).normalize();\r\n if (isParallelTo(derv, XAxis, 1e-4))\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 else\r\n {\r\n let [left, right, top, bottom] = ParseEdgeSealDir(cus);\r\n br.BoardProcessOption[EBoardKeyList.LeftSealed] = edges[left].size.toString();\r\n br.BoardProcessOption[EBoardKeyList.RightSealed] = edges[right].size.toString();\r\n br.BoardProcessOption[EBoardKeyList.UpSealed] = edges[top].size.toString();\r\n br.BoardProcessOption[EBoardKeyList.DownSealed] = edges[bottom].size.toString();\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 = Math.abs(feedingDepth * Math.tan(knifAngle));\r\n let cus = polyline.Explode();\r\n arrayRemoveIf(cus, c => c.Length < 0.01);\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.clone());\r\n }\r\n if (c2 instanceof Arc)\r\n c2 = new Line(curP.clone(), curP.clone().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 //向量与平分线,参照倒角代码\r\n let derv1 = c1.GetFistDeriv(0).normalize();\r\n let derv2 = c2.GetFistDeriv(0).normalize();\r\n let bisectorVec = derv1.clone().negate().add(derv2).multiplyScalar(0.5);\r\n\r\n let co1 = c1.GetOffsetCurves(x * Math.sign(derv1.cross(bisectorVec).z))[0];\r\n let co2 = c2.GetOffsetCurves(x * Math.sign(derv2.cross(bisectorVec).z))[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 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","import { Geometry, Line as TLine, LineSegments, Matrix3, Matrix4, Mesh, Object3D, ShapeGeometry, UVGenerator, Vector3 } from 'three';\r\nimport { Board2Regions } from '../../Add-on/BoardEditor/Board2Regions';\r\nimport { DeserializationBoard2DModeingData, DeserializationBoard3DModeingData, deserializationBoardData, SerializeBoard2DModeingData, SerializeBoard3DModeingData, serializeBoardData } from '../../Add-on/BoardEditor/SerializeBoardData';\r\nimport { CyHoleInBoard, InitRectBoardHoleOption, SetRectHighHole, TempRectHoleOption } from '../../Add-on/DrawDrilling/HoleUtils';\r\nimport { HostApplicationServices } from '../../ApplicationServices/HostApplicationServices';\r\nimport { arrayRemoveIf, arraySortByNumber, arraySum } from '../../Common/ArrayExt';\r\nimport { EBoardKeyList } from '../../Common/BoardKeyList';\r\nimport { ColorMaterial } from '../../Common/ColorPalette';\r\nimport { tempMatrix1, TransformVector, ZMirrorMatrix } from '../../Common/Matrix4Utils';\r\nimport { UpdateDraw } from '../../Common/Status';\r\nimport { ObjectSnapMode } from '../../Editor/ObjectSnapMode';\r\nimport { boardUVGenerator, boardUVGenerator2 } from '../../Geometry/BoardUVGenerator';\r\nimport { BufferGeometryUtils } from '../../Geometry/BufferGeometryUtils';\r\nimport { equaln, equalv3, IdentityMtx4, XAxis, XAxisN, YAxis, YAxisN, ZAxis, ZeroVec } from '../../Geometry/GeUtils';\r\nimport { PointShapeUtils } from '../../Geometry/PointShapeUtils';\r\nimport { GetBoardHighSeal, GetBoardSealingCurves, HandleRectBoardSealingData } from '../../GraphicsSystem/CalcEdgeSealing';\r\nimport { RenderType } from '../../GraphicsSystem/RenderType';\r\nimport { VData2Curve, VKnifToolPath } from '../../GraphicsSystem/ToolPath/VKnifToolPath';\r\nimport { BoardOpenDir, BoardProcessOption, BoardType, ComposingType, FaceDirection, IHighSealedItem, LinesType } from '../../UI/Store/BoardInterface';\r\nimport { CylinderHole } from '../3DSolid/CylinderHole';\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 { Arc } from './Arc';\r\nimport { Circle } from './Circle';\r\nimport { DragPointType } from './DragPointType';\r\nimport { Entity } from './Entity';\r\nimport { ExtrudeContourCurve, ExtrudeSolid } from './Extrude';\r\nimport { Polyline } from './Polyline';\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\n//排钻配置名是合法的\r\nfunction IsValidDriName(name: string): boolean\r\n{\r\n return name === \"不排\" || HostApplicationServices.DrillConfigs.has(name);\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 protected HasEdgeRenderType = true;\r\n protected HasPlaceFaceRenderType = true;\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\r\n //更新封边检查的显示\r\n if (!this.__ReadFileIng__ && key === EBoardKeyList.HighSealed)\r\n {\r\n let obj = this.CacheDrawObject.get(RenderType.Edge);\r\n if (obj)\r\n {\r\n this.UpdateDrawObject(RenderType.Edge, obj);\r\n obj.updateMatrixWorld(true);\r\n }\r\n }\r\n return true;\r\n }\r\n let result = Reflect.set(target, key, value, receiver);\r\n\r\n if (!this.__ReadFileIng__)//看起来使用 this.ReadFileIng 似乎也是没问题的\r\n {\r\n if (key === EBoardKeyList.Lines)\r\n this.Update(UpdateDraw.Geometry);\r\n else if (key === EBoardKeyList.ComposingFace)\r\n {\r\n let obj = this.CacheDrawObject.get(RenderType.PlaceFace);\r\n if (obj)\r\n {\r\n this.UpdateDrawObject(RenderType.PlaceFace, obj);\r\n obj.updateMatrixWorld(true);\r\n }\r\n }\r\n }\r\n\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.WriteAllObjectRecord();\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 = [...HostApplicationServices.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\r\n let dridatas: string[];\r\n let ocsInv: Matrix4;\r\n if (brs.some(br => br.__OriginalEnt__))\r\n {\r\n if (this._BoardProcessOption.highDrill\r\n && this._BoardProcessOption.highDrill.length > 1\r\n && !this._BoardProcessOption.highDrill.every(d => d === this._BoardProcessOption.drillType))\r\n dridatas = this._BoardProcessOption.highDrill;\r\n\r\n ocsInv = this.OCSInv;\r\n }\r\n\r\n //拆单或者bbs的时候会重新加入最新的原板件的排钻和层板钉数据\r\n for (let br of brs)\r\n {\r\n if (br.__OriginalEnt__)\r\n {\r\n br._Name = this._Name;\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 if (dridatas)\r\n {\r\n br.BoardProcessOption.highDrill = [];//因为上面用了拷贝,所以这里不能直接改它的数据(我们新建一个数组来改它,否则原始板件的数据就被改掉了)\r\n //矩阵对齐\r\n let m = br.OCS.premultiply(ocsInv);\r\n for (let i = 0; i < br.contourCurve.EndParam; i++)\r\n {\r\n let p = br.contourCurve.GetPointAtParam(i + 0.5);\r\n p.applyMatrix4(m);\r\n\r\n let cp = this.contourCurve.GetClosestPointTo(p, false);\r\n let cparam = this.contourCurve.GetParamAtPoint2(cp);\r\n if (cparam !== undefined)\r\n {\r\n let newDri = dridatas[Math.floor(cparam)];\r\n br._BoardProcessOption.highDrill[i] = newDri ?? br._BoardProcessOption.drillType;\r\n }\r\n else\r\n br._BoardProcessOption.highDrill[i] = br._BoardProcessOption.drillType;\r\n }\r\n }\r\n else//填充默认类型就好了\r\n br._BoardProcessOption.highDrill = Array(br.contourCurve.EndParam).fill(br._BoardProcessOption.drillType);\r\n\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.OCSNoClone));\r\n cu.Erase(false);//当内部造型超过100个时,不校验时,这个曲线就是erase的状态,所以设置这个状态,避免无法绘制出来\r\n if (cu instanceof Circle)//这里保证这个圆是正常坐标系 I3BUSY#note_4525213\r\n cu.OCS = new Matrix4().setPosition(cu.Position);\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.OCSNoClone));\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\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.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.ContourCurve = hole.Curve;\r\n subG.Thickness = model.thickness;\r\n\r\n g.AppendGroove(subG);\r\n }\r\n\r\n //不需要处理正反面的原因是因为Get时保留了曲线的高度,导致生成的槽位置已经在指定位置\r\n\r\n g.ApplyMatrix(this.OCSNoClone);\r\n\r\n this.grooves.push(g);\r\n }\r\n this.GrooveCheckAllAutoSplit();\r\n this.Update();\r\n }\r\n\r\n get Modeling2D()\r\n {\r\n return [...this._2DModelingList];\r\n }\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\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 if (this._2DModelingList.length === 0) return;\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 if (this._3DModelingList.length === 0) return;\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 if (this.grooves.length === 0) return;\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 && !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 YAxis,\r\n XAxisN,\r\n ZAxis\r\n );\r\n break;\r\n case BoardType.Vertical:\r\n roMat.makeBasis(\r\n YAxis,\r\n ZAxis,\r\n XAxis\r\n );\r\n break;\r\n case BoardType.Behind:\r\n roMat.makeBasis(\r\n XAxis,\r\n ZAxis,\r\n YAxisN\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 if (type === this._BoardType) return;\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 if (n === this._Name) return;\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: ExtrudeContourCurve)\r\n {\r\n //标识是否被初始化\r\n TempRectHoleOption.up = undefined;\r\n\r\n let needRename = !IsValidDriName(this.BoardProcessOption.drillType);\r\n if (!this.contourCurve || cu.EndParam !== this.contourCurve.EndParam || needRename)\r\n {\r\n let defaultType = this._BoardProcessOption.drillType;\r\n if (needRename)\r\n {\r\n defaultType = HostApplicationServices.DrillConfigs.size ? HostApplicationServices.DrillConfigs.entries().next().value[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 }\r\n\r\n /**\r\n * 在不改变Normal和实体显示的情况下,修改X轴的指向\r\n * @param xAxis\r\n */\r\n override SetXAxis(xAxis: Vector3, isKeepLines = false): this\r\n {\r\n let ocsInv = this.OCSInv;\r\n let x = TransformVector(xAxis.clone(), ocsInv).setZ(0).normalize();\r\n if (equalv3(ZeroVec, x, 1e-5)) return this;\r\n\r\n this.WriteAllObjectRecord();\r\n\r\n let highSeals: IHighSealedItem[];\r\n if (this.isRect)\r\n highSeals = GetBoardHighSeal(this, GetBoardSealingCurves(this));\r\n\r\n let a = Math.atan2(x.y, x.x);\r\n\r\n if (isKeepLines && this.BoardProcessOption.lines !== LinesType.CanReversal && (equaln(x.y, 1, 1e-5) || equaln(x.y, -1, 1e-5)))\r\n this.BoardProcessOption.lines = 1 - this.BoardProcessOption.lines;//翻转纹路 1=>0 0=>1\r\n\r\n x.transformDirection(this._Matrix);\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 this.ContourCurve.ApplyMatrix(tempMatrix1.makeRotationZ(-a));//复用了这个矩阵\r\n this.CheckContourCurve();\r\n if (this.contourCurve instanceof Polyline)\r\n this.contourCurve.UpdateOCSTo(IdentityMtx4);\r\n\r\n if (this.isRect)\r\n HandleRectBoardSealingData(this, highSeals);//这里不可以用缓存的曲线 否则分析错误,必须重新开始分析曲线\r\n\r\n this.Update();\r\n return this;\r\n }\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)\r\n {\r\n if (!this.Id)\r\n {\r\n // super.ApplyMirrorMatrix(m); //这个变更导致镜像错误 因为实体没有正常的被更新. 所以需要注意的是,如果需要镜像变更,需要给实体一个id!!!\r\n return this;\r\n }\r\n\r\n this.ContourCurve;//因为下面翻转孔面的代码,所以必须初始化这个\r\n\r\n let hasSplitSize = (this.BoardProcessOption[EBoardKeyList.SpliteHeight]\r\n && this.BoardProcessOption[EBoardKeyList.SpliteWidth]\r\n && this.BoardProcessOption[EBoardKeyList.SpliteThickness]\r\n );\r\n\r\n let highSeals = GetBoardHighSeal(this, GetBoardSealingCurves(this));\r\n\r\n super.ApplyMirrorMatrix(m);\r\n\r\n if (this.contourCurve.Area2 < 0)\r\n {\r\n this.contourCurve.Reverse();\r\n highSeals.reverse();\r\n this.BoardProcessOption.highSealed?.reverse();\r\n this.BoardProcessOption.highDrill?.reverse();\r\n\r\n if (hasSplitSize)\r\n {\r\n [\r\n this.BoardProcessOption.sealedUp,\r\n this.BoardProcessOption.sealedLeft,\r\n this.BoardProcessOption.sealedDown,\r\n this.BoardProcessOption.sealedRight,\r\n ]\r\n =\r\n [\r\n this.BoardProcessOption.sealedUp,\r\n this.BoardProcessOption.sealedRight,\r\n this.BoardProcessOption.sealedDown,\r\n this.BoardProcessOption.sealedLeft,\r\n ];\r\n }\r\n }\r\n else\r\n this.BoardProcessOption[EBoardKeyList.BigHole] = 1 - this.BoardProcessOption[EBoardKeyList.BigHole];//反转大孔面\r\n\r\n this.BoardProcessOption.highSealed = highSeals;\r\n\r\n if (!hasSplitSize && this.isRect)\r\n HandleRectBoardSealingData(this, highSeals);\r\n //重新构建SpaceOCS\r\n this._SpaceOCS.multiplyMatrices(this._Matrix, new Matrix4().getInverse(this.RotateMat));\r\n\r\n //\"左\",\"右\"互换\r\n if (this.Name.includes(\"左\"))\r\n this.Name = this.Name.replace(\"左\", \"右\");\r\n else if (this.Name.includes(\"右\"))\r\n this.Name = this.Name.replace(\"右\", \"左\");\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 _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\r\n //分裂后重新将排钻实体设置给不同的实体\r\n override HandleSpliteEntitys(splitEntitys: this[])\r\n {\r\n if (!splitEntitys.length) return;\r\n this.WriteAllObjectRecord();\r\n\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\r\n //如果没有开排钻反应器,那么需要重新关联排钻\r\n //排钻列表\r\n let dris: [ObjectId, ObjectId[][]][] = [];\r\n if (!HostApplicationServices.openDrillingReactor)\r\n {\r\n for (let d of this._DrillList)\r\n {\r\n dris.push(d);\r\n\r\n //离婚,分割财产\r\n let fbr = d[0]?.Object as Board;\r\n if (fbr)\r\n {\r\n fbr.WriteAllObjectRecord();\r\n fbr._DrillList.delete(this.Id);\r\n }\r\n }\r\n\r\n this._DrillList.clear();//开启反应器时,这个行为由排钻重排控制,没有开启时,我们暂时清空,下面会重新计算关联\r\n }\r\n\r\n //清除所有层板钉(因为下面会重新关联)(这个和排钻反应器没有关联,必须全部清除)\r\n this._LayerNails.length = 0;\r\n\r\n //所有的实体,包括自己\r\n let ents: this[] = [this].concat(splitEntitys);\r\n\r\n for (let en of ents)\r\n {\r\n let ocsInv = en.OCSInv;\r\n //把层板钉送给有缘人\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 if (en === this)\r\n {\r\n this._LayerNails.push(id);\r\n return false;\r\n }\r\n //异形换位,把排钻给别人\r\n if (n.MId === this.Id)\r\n n.MId = en.Id;\r\n else if (n.FId === this.Id)\r\n n.FId = en.Id;\r\n //新的板需要关联这个id\r\n en._LayerNails.push(id);\r\n return false;\r\n }\r\n return true;\r\n });\r\n\r\n //如果没有开排钻反应器,那么需要重新关联排钻\r\n if (!HostApplicationServices.openDrillingReactor)\r\n {\r\n for (let d of dris)\r\n {\r\n let [bid, drIdss] = d;\r\n let board = bid?.Object as Board;//另一个父亲\r\n\r\n drIdss = drIdss.filter(ids =>\r\n {\r\n if (!ids[0]?.Object || ids[0].IsErase) return false;\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 if (board)//重新拥有父亲的身份.\r\n board.AppendDrillList(en.Id, [ids]);\r\n\r\n en.AppendDrillList(bid, [ids]);//拥有新的母亲的身份\r\n\r\n for (let h of holes)\r\n {\r\n //成了别人的新娘\r\n if (h.FId === this.Id)\r\n h.FId = en.Id;\r\n if (h.MId === this.Id)\r\n h.MId = en.Id;\r\n }\r\n return false;\r\n }\r\n }\r\n else\r\n {\r\n //直接删除,毫不留情\r\n for (let id of ids)\r\n {\r\n let object = id?.Object;\r\n if (object && !object.IsErase)\r\n object.Erase();\r\n }\r\n return false;\r\n }\r\n return true;\r\n });\r\n\r\n d[1] = drIdss;\r\n }\r\n\r\n }\r\n\r\n }\r\n\r\n //删除无父母的排钻\r\n for (let d of dris)\r\n {\r\n for (let ids of d[1])\r\n for (let id of ids)\r\n {\r\n let object = id?.Object;\r\n if (object && !object.IsErase)\r\n object.Erase();\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 this.UpdateDrawObject(renderType, obj);\r\n }\r\n else if (renderType === RenderType.PlaceFace)\r\n {\r\n obj = new Object3D;\r\n this.UpdateDrawObject(renderType, 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\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 else if (renderType === RenderType.PlaceFace)\r\n {\r\n let isArbitrary = this._BoardProcessOption[EBoardKeyList.ComposingFace] === ComposingType.Arbitrary;\r\n\r\n obj.add(new Mesh(this.MeshGeometry, ColorMaterial.GetConceptualMaterial(8)),\r\n new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(7))\r\n );\r\n\r\n if (!isArbitrary)\r\n obj.add(this.GetPlaceFace());\r\n }\r\n this.HandleBoardMaterial(renderType, obj);\r\n\r\n return o;\r\n }\r\n\r\n private get PlaceColor() { return this._Color === 8 ? 9 : this._Color; }\r\n //获得绘制的放置网格\r\n GetPlaceFace(): Mesh\r\n {\r\n let shapeGeom = new ShapeGeometry(this.contourCurve.Shape);\r\n let isBack = this._BoardProcessOption[EBoardKeyList.ComposingFace] !== ComposingType.Positive;\r\n shapeGeom.applyMatrix4(this.contourCurve.OCSNoClone);\r\n shapeGeom.translate(0, 0, isBack ? -0.2 : this.thickness + 0.5);\r\n let mesh = new Mesh(shapeGeom, ColorMaterial.GetBasicMaterialDoubleSide(this.PlaceColor));\r\n return mesh;\r\n }\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) && HostApplicationServices.showLines && this.IsChaiDan)\r\n obj.add(...this.GetLinesDir());\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\r\n UpdateDrawObjectMaterial(renderType: RenderType, obj: Object3D)\r\n {\r\n super.UpdateDrawObjectMaterial(renderType, obj);\r\n\r\n if (renderType === RenderType.PlaceFace)\r\n {\r\n let face = obj.children[2] as Mesh;\r\n if (!face) return;\r\n face.material = ColorMaterial.GetBasicMaterialDoubleSide(this.PlaceColor);\r\n }\r\n\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\r\n CheckSealing(obj: Object3D)\r\n {\r\n let sealingInfo = new Map(HostApplicationServices.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\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 if (!polyline) continue;//多段线可能偏移失败\r\n\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 else if (snapMode === ObjectSnapMode.Mid)\r\n {\r\n for (let vm of this._2DModelingList)\r\n {\r\n let ps = vm.path.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform);\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 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 // if (this.width === 0 || this.height === 0) //板件变成0长度,无法绘制\r\n // this._isErase = true;\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\r\n file.Write(this._LayerNails.length);\r\n for (let nail of this._LayerNails)\r\n file.WriteHardObjectId(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 { arrayRemoveDuplicateBySort } from \"../../../Common/ArrayExt\";\r\n\r\ntype Range = [number, number];\r\n\r\nconst COMPARE_FUNC = (sparam: number, range: Range) => sparam - range[0];\r\n\r\n//寻找插入位置\r\nexport function InsertRangeIndex(ranges: Range[], sparam: number)\r\n{\r\n return InsertSortedIndex(ranges, sparam, COMPARE_FUNC);\r\n}\r\n\r\n//返回可以插入的位置\r\nexport function InsertSortedIndex(array: T[], element: E, comparefunc: (a: E, 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) // element > testelement\r\n leftbound = testindex + 1;\r\n else if (compareresult === 0)//因为函数 FindBestRange 会取index-1 来取范围\r\n leftbound = testindex + 1;\r\n else\r\n rightbound = testindex;\r\n }\r\n return leftbound;\r\n}\r\n\r\n/**\r\n * 插入范围,并且合并范围\r\n */\r\nexport function InsertRangeAndUnion(\r\n ranges: Range[],\r\n sparam: number,\r\n eparam: number,\r\n insertIndex = InsertRangeIndex(ranges, sparam)\r\n)\r\n{\r\n if (insertIndex !== 0 && (sparam - 1e-6) <= (ranges[insertIndex - 1][1]))//和前面一个范围合并\r\n {\r\n //传染\r\n let s = insertIndex;\r\n for (; s < ranges.length; s++)\r\n {\r\n let r = ranges[s];\r\n if ((r[0] - 1e-6) < eparam)\r\n {\r\n if (r[1] >= (eparam - 1e-6))\r\n {\r\n eparam = r[1];\r\n s++;\r\n break;\r\n }\r\n //else continue\r\n }\r\n else\r\n break;\r\n }\r\n ranges.splice(insertIndex, s - insertIndex);\r\n ranges[insertIndex - 1][1] = eparam;//合并成功\r\n }\r\n else if (insertIndex !== ranges.length && eparam + 1e-6 > ranges[insertIndex][0]) //和后面的合并\r\n {\r\n let nextRange = ranges[insertIndex];\r\n nextRange[0] = sparam;\r\n nextRange[1] = Math.max(eparam, nextRange[1]);\r\n\r\n eparam = nextRange[1];\r\n\r\n //传染\r\n insertIndex++;\r\n let s = insertIndex;\r\n for (; s < ranges.length; s++)\r\n {\r\n let r = ranges[s];\r\n if (r[0] <= (eparam + 1e-6))\r\n {\r\n if ((r[1] + 1e-6) >= eparam)\r\n {\r\n eparam = r[1];\r\n s++;\r\n break;\r\n }\r\n //else continue\r\n }\r\n else\r\n break;\r\n }\r\n ranges.splice(insertIndex, s - insertIndex);\r\n ranges[insertIndex - 1][1] = eparam;//合并成功\r\n }\r\n else\r\n {\r\n ranges.splice(insertIndex, 0, [sparam, eparam]);\r\n }\r\n\r\n return ranges;\r\n}\r\n\r\n//范围并集\r\nexport function RangeUnion(ranges: Range[])\r\n{\r\n arrayRemoveDuplicateBySort(ranges, (r1, r2) =>\r\n {\r\n if (r1[1] >= r2[1])\r\n return true;\r\n\r\n if (r1[1] >= r2[0])\r\n {\r\n r1[1] = r2[1];\r\n return true;\r\n }\r\n\r\n return false;\r\n });\r\n\r\n return ranges;\r\n}\r\n\r\n//范围交集\r\nexport function Intersection(range1: Range, range2: Range): Range | undefined\r\n{\r\n let min = Math.max(range1[0], range2[0]);\r\n let max = Math.min(range1[1], range2[1]);\r\n\r\n if (max > min) return [min, max];\r\n}\r\n","import { Box3, Vector3 } from \"three\";\r\nimport { arrayRemoveDuplicateBySort } from \"../../../Common/ArrayExt\";\r\nimport { equalv3 } from \"../../../Geometry/GeUtils\";\r\nimport { IntersectOption } from \"../../../GraphicsSystem/IntersectWith\";\r\nimport { equaln } from \"../../../Nest/Common/Util\";\r\nimport { Contour } from \"../../Contour\";\r\nimport { Arc } from \"../../Entity/Arc\";\r\nimport { Curve } from \"../../Entity/Curve\";\r\nimport { Line } from \"../../Entity/Line\";\r\nimport { Polyline } from \"../../Entity/Polyline\";\r\nimport { InsertRangeAndUnion, InsertRangeIndex } from \"./RangeUtils\";\r\n\r\n\r\nexport class CurveTrim\r\n{\r\n _TrimParams: [number, number][] = [];\r\n _IsErase = false;\r\n public _Box: Box3;\r\n constructor(public _curve: Line | Arc)\r\n {\r\n this._Box = _curve.BoundingBox.expandByVector(new Vector3(0.01, 0.01));\r\n }\r\n\r\n TrimBy(contour: Contour, box: Box3, saveSyntropy = false)\r\n {\r\n if (this._IsErase) return;\r\n\r\n //交点参数列表\r\n let iParams = this._curve.IntersectWith2(contour.Curve, IntersectOption.ExtendNone).map(p => p.thisParam).filter(p => p > 1e-6 && p < 0.999999);\r\n iParams.push(0, 1);\r\n iParams.sort((a, b) => a - b);\r\n arrayRemoveDuplicateBySort(iParams, (a1, a2) => equaln(a1, a2, 1e-6));\r\n\r\n if (iParams.length === 2)//[0,1]全包含 或者在外部\r\n {\r\n let p = this.GetPointAtParam(0.5);\r\n if (this.PointInContour(p, contour, box, saveSyntropy))\r\n this._IsErase = true;\r\n return;\r\n }\r\n\r\n for (let i = 0; i < iParams.length - 1; i++)\r\n {\r\n let sparam = iParams[i], eparam = iParams[i + 1];\r\n\r\n let insertIndex = InsertRangeIndex(this._TrimParams, iParams[i]);\r\n\r\n if (insertIndex !== 0 && this._TrimParams[insertIndex - 1][1] > eparam)//包含在已经被切割的范围内,那么直接不用重复判断 (只可能被前一段包含)\r\n continue;\r\n\r\n let midParam = (sparam + eparam) * 0.5;\r\n let p = this.GetPointAtParam(midParam);\r\n if (this.PointInContour(p, contour, box, saveSyntropy))\r\n {\r\n InsertRangeAndUnion(this._TrimParams, sparam, eparam, insertIndex);\r\n\r\n if (this._TrimParams.length === 1 && this._TrimParams[0][0] === 0 && this._TrimParams[0][1] === 1)\r\n {\r\n this._IsErase = true;\r\n return;\r\n }\r\n }\r\n }\r\n\r\n }\r\n\r\n PointInContour(p: Vector3, contour: Contour, contourBox: Box3, saveSyntropy = false)\r\n {\r\n return contourBox.containsPoint(p) && (contour.Curve.PtInCurve(p) && !contour.Curve.PtOnCurve(p));\r\n }\r\n\r\n TrimParam(sparam: number, eparam: number)\r\n {\r\n let insertIndex = InsertRangeIndex(this._TrimParams, sparam);\r\n\r\n if (insertIndex !== 0 && this._TrimParams[insertIndex - 1][1] > eparam)//包含在已经被切割的范围内,那么直接不用重复判断 (只可能被前一段包含)\r\n return;\r\n InsertRangeAndUnion(this._TrimParams, sparam, eparam, insertIndex);\r\n\r\n if (this._TrimParams.length === 1 && this._TrimParams[0][0] < 1e-6 && this._TrimParams[0][1] > (1 - 1e-6))\r\n {\r\n this._IsErase = true;\r\n }\r\n }\r\n\r\n GetPointAtParam(param: number): Vector3\r\n {\r\n return this._curve.GetPointAtParam(param);\r\n }\r\n\r\n get Curves(): Curve[]\r\n {\r\n return [];\r\n }\r\n}\r\n\r\nexport class CurveTrimLine extends CurveTrim\r\n{\r\n constructor(curve: Line,\r\n private derv: Vector3,\r\n private _Sp = curve.StartPoint,\r\n private _Fd = curve.GetFistDeriv(0))\r\n {\r\n super(curve);\r\n }\r\n\r\n override GetPointAtParam(param: number): Vector3\r\n {\r\n return this._Fd.clone().multiplyScalar(param).add(this._Sp);\r\n }\r\n\r\n override PointInContour(p: Vector3, contour: Contour, contourBox: Box3, saveSyntropy = false)\r\n {\r\n if (!contourBox.containsPoint(p)) return false;\r\n\r\n let pl = contour.Curve as Polyline;\r\n for (let i = 0; i < pl.EndParam; i++)\r\n {\r\n let cu = pl.GetCurveAtIndex(i);\r\n if (cu instanceof Line)\r\n {\r\n let d = cu.GetClosestAtPoint(p, true);\r\n if (cu.ParamOnCurve(d.param) && equalv3(d.closestPt, p, 1e-5))//点在线上\r\n {\r\n let derv = cu.GetFistDeriv(d.param).normalize();\r\n return equalv3(derv, this.derv, 1e-4) || (saveSyntropy && equalv3(derv.negate(), this.derv, 1e-4));//因为墙体为顺时针 轮廓为逆时针 所以这里相等=反向\r\n }\r\n }\r\n else\r\n {\r\n if (cu.PtOnCurve(p, 1e-5))\r\n {\r\n let derv = cu.GetFistDeriv(cu.GetParamAtPoint2(p)).normalize();\r\n return equalv3(this.derv, derv, 1e-4) || (saveSyntropy && equalv3(derv.negate(), this.derv, 1e-4));\r\n }\r\n }\r\n }\r\n\r\n return contour.Curve.PtInCurve(p);\r\n }\r\n\r\n override get Curves(): Line[]\r\n {\r\n if (this._IsErase) return [];\r\n\r\n if (this._TrimParams.length === 0) return [this._curve as Line];\r\n\r\n let lines: Line[] = [];\r\n\r\n if (this._TrimParams[0][0] !== 0)\r\n lines.push(new Line(this.GetPointAtParam(0), this.GetPointAtParam(this._TrimParams[0][0])));\r\n\r\n for (let i = 0; i < this._TrimParams.length - 1; i++)\r\n {\r\n let param1 = this._TrimParams[i][1];\r\n let param2 = this._TrimParams[i + 1][0];\r\n lines.push(new Line(this.GetPointAtParam(param1), this.GetPointAtParam(param2)));\r\n }\r\n\r\n if (this._TrimParams[this._TrimParams.length - 1][1] !== 1)\r\n lines.push(new Line(this.GetPointAtParam(this._TrimParams[this._TrimParams.length - 1][1]), this.GetPointAtParam(1)));\r\n\r\n return lines;\r\n }\r\n}\r\n\r\nexport class CurveTrimArc extends CurveTrim\r\n{\r\n constructor(\r\n public _curve: Arc,\r\n private _IsLeft = false\r\n )\r\n {\r\n super(_curve);\r\n }\r\n override PointInContour(p: Vector3, contour: Contour, contourBox: Box3, saveSyntropy = false)\r\n {\r\n if (!contourBox.containsPoint(p)) return false;\r\n\r\n let pl = contour.Curve as Polyline;\r\n let thisDerv = this._curve.GetFistDeriv(p).normalize();\r\n if (this._IsLeft) thisDerv.negate();\r\n\r\n for (let i = 0; i < pl.EndParam; i++)\r\n {\r\n let cu = pl.GetCurveAtIndex(i);\r\n if (cu instanceof Line)\r\n {\r\n let d = cu.GetClosestAtPoint(p, true);\r\n if (cu.ParamOnCurve(d.param) && equalv3(d.closestPt, p, 1e-5))//点在线上 //这个代码似乎是错误的,因为直线和圆弧不可能重合\r\n {\r\n let derv = cu.GetFistDeriv(d.param).normalize();\r\n return equalv3(derv, thisDerv, 1e-4) || (saveSyntropy && equalv3(derv.negate(), thisDerv, 1e-4));//因为墙体为顺时针 轮廓为逆时针 所以这里相等=反向\r\n }\r\n }\r\n else\r\n {\r\n if (cu.PtOnCurve(p, 1e-5))\r\n {\r\n let cuDerv = cu.GetFistDeriv(cu.GetParamAtPoint2(p)).normalize();\r\n return equalv3(thisDerv, cuDerv, 1e-4) || (saveSyntropy && equalv3(cuDerv.negate(), thisDerv, 1e-4));\r\n }\r\n }\r\n }\r\n\r\n return contour.Curve.PtInCurve(p);\r\n }\r\n\r\n override get Curves(): Arc[]\r\n {\r\n if (this._IsErase) return [];\r\n\r\n if (this._TrimParams.length === 0) return [this._curve];\r\n\r\n let arcs: Arc[] = [];\r\n let center = this._curve.Center;\r\n for (let i = 0; i < this._TrimParams.length - 1; i++)\r\n {\r\n let param1 = this._TrimParams[i][1];\r\n let param2 = this._TrimParams[i + 1][0];\r\n arcs.push(new Arc(center, this._curve.Radius, this._curve.GetAngleAtParam(param1), this._curve.GetAngleAtParam(param2), this._curve.IsClockWise));\r\n }\r\n\r\n if (this._TrimParams[0][0] !== 0)\r\n arcs.push(new Arc(center, this._curve.Radius, this._curve.StartAngle, this._curve.GetAngleAtParam(this._TrimParams[0][0]), this._curve.IsClockWise));\r\n\r\n if (this._TrimParams[this._TrimParams.length - 1][1] !== 1)\r\n arcs.push(new Arc(center, this._curve.Radius, this._curve.GetAngleAtParam(this._TrimParams[this._TrimParams.length - 1][1]), this._curve.EndAngle, this._curve.IsClockWise));\r\n\r\n return arcs;\r\n }\r\n}\r\n\r\nexport function CreateCurveTrim(cu: Line | Arc)\r\n{\r\n if (cu instanceof Line) return new CurveTrimLine(cu, undefined);\r\n else return new CurveTrimArc(cu);\r\n}\r\n","import { Matrix4, Vector2, Vector3 } 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 return this;\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 { Entity } from \"../DatabaseServices/Entity/Entity\";\r\n\r\nexport function EntityUpdateWrap(ent: Entity, exec: Function)\r\n{\r\n let bak = ent.AutoUpdate;\r\n ent.AutoUpdate = false;\r\n exec();\r\n ent.DeferUpdate();\r\n ent.AutoUpdate = bak;\r\n}\r\n\r\nexport function EntitysUpdateWrap(ens: Entity[], exec: Function)\r\n{\r\n let baks = ens.map(e => e.AutoUpdate);\r\n exec();\r\n for (let i = 0; i < ens.length; i++)\r\n {\r\n let en = ens[i];\r\n en.DeferUpdate();\r\n en.AutoUpdate = baks[i];\r\n }\r\n}\r\n","import * as clipperLib from \"js-angusj-clipper/web\"; // nodejs style require\r\n\r\nexport let clipperCpp: { lib?: clipperLib.ClipperLibWrapper; } = {};\r\nexport function InitClipperCpp(): Promise\r\n{\r\n if (clipperCpp.lib) return;\r\n if (!globalThis.document)\r\n globalThis.document = {} as any;\r\n return new Promise((res, rej) =>\r\n {\r\n clipperLib.loadNativeClipperLibInstanceAsync(\r\n // let it autodetect which one to use, but also available WasmOnly and AsmJsOnly\r\n \r\n clipperLib.NativeClipperLibRequestedFormat.AsmJsOnly\r\n\r\n ).then(c =>\r\n {\r\n clipperCpp.lib = c;\r\n res();\r\n // console.log(\"载入成功!\");//不再需要\r\n });\r\n });\r\n}\r\n","import { Factory } from \"../../CADFactory\";\r\nimport { Entity } from \"../../Entity/Entity\";\r\n\r\n\r\n/**\r\n * 户型元件的基类\r\n * 墙 平面(地板 天花)\r\n */\r\n@Factory\r\nexport class RoomBase extends Entity\r\n{\r\n}\r\n","import { equaln } from \"../../../../../Geometry/GeUtils\";\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 { RoomBase } from \"../../RoomBase\";\r\nimport { RoomWallBase } from \"../RoomWallBase\";\r\n\r\n\r\n/**\r\n * 墙上的洞\r\n *\r\n * 这个类接管了墙上的洞的绘制,以便可以直接在视图上操作这个洞(选择到洞,并且拖动) 但是同时我们也需要拿到原始墙的信息,保持材质(或者白墙? 独立材质?)\r\n */\r\n@Factory\r\nexport class RoomHoleBase extends RoomBase\r\n{\r\n @AutoRecord RelevancyWalls: ObjectId[] = [];//关联的墙体列表\r\n\r\n protected _Height = 800;\r\n\r\n constructor() { super(); }\r\n\r\n public get Height()\r\n {\r\n return this._Height;\r\n }\r\n public set Height(value)\r\n {\r\n if (equaln(value, this._Height, 1e-4)) return;\r\n this.WriteAllObjectRecord();\r\n this._Height = value;\r\n this.Update();\r\n }\r\n\r\n //#region -------------------------File-------------------------\r\n //对象从文件中读取数据,初始化自身\r\n protected override _ReadFile(file: CADFiler)\r\n {\r\n let ver = file.Read();\r\n super._ReadFile(file);\r\n this._Height = file.Read();\r\n\r\n if (ver > 1)\r\n {\r\n let count = file.Read();\r\n this.RelevancyWalls.length = 0;\r\n for (let i = 0; i < count; i++)\r\n {\r\n let id = file.ReadObjectId();\r\n if (id)\r\n this.RelevancyWalls.push(id as ObjectId);\r\n }\r\n }\r\n }\r\n //对象将自身数据写入到文件.\r\n override WriteFile(file: CADFiler)\r\n {\r\n file.Write(2);\r\n super.WriteFile(file);\r\n file.Write(this._Height);\r\n\r\n file.Write(this.RelevancyWalls.length);\r\n for (let id of this.RelevancyWalls)\r\n file.WriteObjectId(id);\r\n }\r\n //局部撤销\r\n override ApplyPartialUndo(undoData: CADObject)\r\n {\r\n super.ApplyPartialUndo(undoData);\r\n }\r\n //#endregion\r\n}\r\n","import { Face3, Geometry, LineSegments, Matrix3, Mesh, Object3D, ShapeUtils, Vector2, Vector3 } from \"three\";\r\nimport { arrayPushArray } from \"../../../../../Common/ArrayExt\";\r\nimport { ColorMaterial } from \"../../../../../Common/ColorPalette\";\r\nimport { ObjectSnapMode } from \"../../../../../Editor/ObjectSnapMode\";\r\nimport { Box3Ext } from \"../../../../../Geometry/Box\";\r\nimport { CreatePolylinePath } from \"../../../../../Geometry/CreatePolylinePath\";\r\nimport { AsVector3, equalv2, ZAxis } from \"../../../../../Geometry/GeUtils\";\r\nimport { RenderType } from \"../../../../../GraphicsSystem/RenderType\";\r\nimport { Factory } from \"../../../../CADFactory\";\r\nimport { CADFiler } from \"../../../../CADFiler\";\r\nimport { CADObject } from \"../../../../CADObject\";\r\nimport { Curve } from \"../../../../Entity/Curve\";\r\nimport { Line } from \"../../../../Entity/Line\";\r\nimport { Polyline } from \"../../../../Entity/Polyline\";\r\nimport { LEFT_ROTATE_MTX2 } from \"../../../ParseService/GetCurveParam\";\r\nimport { RoomWallBase } from \"../RoomWallBase\";\r\nimport { RoomWallLine } from \"../RoomWallLine\";\r\nimport { RoomHoleBase } from \"./RoomHoleBase\";\r\n\r\nenum HoleType\r\n{\r\n Door = 1,\r\n Window = 2,\r\n LWindow = 3,\r\n UWindow = 4,\r\n}\r\n\r\n/**\r\n * 折线洞 例如 转角窗 或者U型窗\r\n */\r\n@Factory\r\nexport class RoomHolePolyline extends RoomHoleBase\r\n{\r\n //虽然使用了三维的点,但是我们实际使用的是二维的点 z总是等于0\r\n private _Points: Vector3[] = [];\r\n private _FakerWalls: RoomWallBase[] = [];\r\n public set FakerWalls(_FakerWalls: RoomWallBase[])\r\n {\r\n this._FakerWalls = _FakerWalls;\r\n this.LidCurves = [];\r\n this.Regions = [];\r\n for (let w of this._FakerWalls)\r\n {\r\n arrayPushArray(this.LidCurves, w.LidCurves);\r\n if (w.Region)\r\n this.Regions.push(w.Region);\r\n w.OCSNoClone.elements[14] = this._Matrix.elements[14];\r\n w.Height = this.Height;\r\n\r\n if (w instanceof RoomWallLine && w.Length > 1e-6)\r\n w.UpdateOCSToMinBox();\r\n }\r\n }\r\n get FakerWalls(): RoomWallBase[] { return this._FakerWalls; }\r\n\r\n constructor() { super(); }\r\n\r\n override get BoundingBoxInOCS(): Box3Ext\r\n {\r\n let box = new Box3Ext;\r\n let inv = this.OCSInv;\r\n for (let w of this._FakerWalls)\r\n box.union(w.GetBoundingBoxInMtx(inv));\r\n return box;\r\n return new Box3Ext().copy(this.BoundingBox).applyMatrix4(this.OCSInv);\r\n }\r\n\r\n get Points() { return this._Points.map(p => p.clone().applyMatrix4(this.OCSNoClone)); }\r\n set Points(pts: Vector3[])\r\n {\r\n this.WriteAllObjectRecord();\r\n let inv = this.OCSInv;\r\n this._Points = pts.map(p => p.clone().applyMatrix4(inv).setZ(0));\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 let pts: Vector3[] = [];\r\n\r\n if (this.LidCurves)\r\n {\r\n let line = new Line;\r\n let inv = this.OCSInv;\r\n for (let lid of this.LidCurves)\r\n {\r\n let sp = lid.StartPoint.applyMatrix4(inv).setZ(0);\r\n let ep = lid.EndPoint.applyMatrix4(inv).setZ(0);\r\n\r\n line.StartPoint = sp.clone().applyMatrix4(this.OCSNoClone);\r\n line.EndPoint = sp.setZ(this._Height).applyMatrix4(this.OCSNoClone);\r\n\r\n arrayPushArray(pts, line.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform));\r\n\r\n line.StartPoint = ep.clone().applyMatrix4(this.OCSNoClone);\r\n line.EndPoint = ep.setZ(this._Height).applyMatrix4(this.OCSNoClone);\r\n\r\n arrayPushArray(pts, line.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform));\r\n }\r\n }\r\n\r\n if (this.Regions)\r\n {\r\n for (let region of this.Regions)\r\n {\r\n region.Z = this.Z;//我们拥有它\r\n\r\n arrayPushArray(pts, region.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform));\r\n\r\n region.Z += this._Height;\r\n\r\n arrayPushArray(pts, region.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform));\r\n }\r\n }\r\n return pts;\r\n }\r\n\r\n GetGripPoints(): Vector3[]\r\n {\r\n return this.Points;\r\n }\r\n\r\n MoveGripPoints(ids: number[], vec: Vector3)\r\n {\r\n\r\n }\r\n\r\n GetStretchPoints(): Array\r\n {\r\n return this.Points;\r\n }\r\n\r\n MoveStretchPoints(ids: Array, vec: Vector3)\r\n {\r\n }\r\n\r\n get FakerPoints()\r\n {\r\n let pts: Vector3[] = [];\r\n\r\n for (let w of this._FakerWalls)\r\n pts.push(w.StartPoint);\r\n if (this._FakerWalls.length)\r\n pts.push(this._FakerWalls[this._FakerWalls.length - 1].EndPoint);\r\n\r\n return pts;\r\n }\r\n //使用FakerWalls来更新这个洞的信息\r\n UpdatePoints(checkChange: boolean = false)\r\n {\r\n let pts = this.FakerPoints;\r\n\r\n this.WriteAllObjectRecord();\r\n\r\n if (pts.length === 2)\r\n {\r\n let x = pts[1].clone().sub(pts[0]).normalize();\r\n let z = ZAxis;\r\n let y = z.clone().cross(x).normalize();\r\n this._Matrix.makeBasis(x, y, z).setPosition(pts[0]);\r\n }\r\n else\r\n this._Matrix.setPosition(pts[1]);\r\n\r\n let ocsInv = this.OCSInv;\r\n for (let p of pts) p.applyMatrix4(ocsInv);\r\n\r\n this._Points = pts;\r\n this.Update();\r\n }\r\n\r\n //#region Draw\r\n LidCurves: Curve[];//窗户的开始和结束,我们接管了这个的绘制\r\n Regions: Polyline[];//窗户的区域,我们接管了这个的绘制(包括上面)\r\n\r\n override UpdateDrawGeometry()\r\n {\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 private _EdgeGeometry: Geometry;\r\n get EdgeGeometry()\r\n {\r\n if (this._EdgeGeometry) return this._EdgeGeometry;\r\n\r\n this._EdgeGeometry = new Geometry();\r\n\r\n let inv = this.OCSInv;\r\n\r\n let pts: Vector3[] = this._EdgeGeometry.vertices;\r\n\r\n if (this.LidCurves)\r\n for (let lid of this.LidCurves)\r\n {\r\n //TODO:是否真的需要切换到本地坐标系 (如果我们使用墙体上的曲线,那么需要 如果我们使用本地坐标系计算曲线 则不需要)\r\n let sp = lid.StartPoint.applyMatrix4(inv).setZ(0);\r\n let ep = lid.EndPoint.applyMatrix4(inv).setZ(0);\r\n\r\n pts.push(sp, sp.clone().setZ(this._Height),\r\n ep, ep.clone().setZ(this._Height),\r\n );\r\n }\r\n\r\n if (this.Regions)\r\n {\r\n for (let region of this.Regions)\r\n {\r\n region.Z = this.Z;//我们拥有它\r\n let lined = region.MatrixAlignTo2(this.OCSNoClone);\r\n\r\n if (region.CloseMark && !equalv2(lined.pts[0], lined.pts[lined.pts.length - 1], 1e-4))\r\n {\r\n lined.pts.push(lined.pts[0]);\r\n lined.buls.push(0);\r\n }\r\n\r\n let path = CreatePolylinePath(lined.pts, lined.buls);\r\n let rpts = path.getPoints(30);\r\n\r\n // let wallTopHeight = 0;\r\n // if (this.FakerHoles[0])\r\n // wallTopHeight = this.FakerHoles[0].Position.z + this.FakerHoles[0].Height - this.Position.z;\r\n\r\n for (let i = 1; i < rpts.length; i++)\r\n {\r\n let pre = AsVector3(rpts[i - 1]);\r\n let p = AsVector3(rpts[i]);\r\n\r\n pts.push(pre.setZ(0), p.setZ(0));\r\n pts.push(pre.clone().setZ(this._Height), p.clone().setZ(this._Height));\r\n\r\n // if (wallTopHeight)\r\n // pts.push(pre.clone().setZ(wallTopHeight), p.clone().setZ(wallTopHeight));\r\n }\r\n }\r\n }\r\n\r\n return this._EdgeGeometry;\r\n }\r\n\r\n private _MeshGeometry: Geometry;\r\n get MeshGeometry()\r\n {\r\n if (this._MeshGeometry) return this._MeshGeometry;\r\n\r\n this._MeshGeometry = new Geometry();\r\n\r\n let inv = this.OCSInv;\r\n let geo = this._MeshGeometry;\r\n\r\n if (this.LidCurves)\r\n for (let lid of this.LidCurves)\r\n {\r\n let startIndex = geo.vertices.length;\r\n\r\n //TODO:是否真的需要切换到本地坐标系 (如果我们使用墙体上的曲线,那么需要 如果我们使用本地坐标系计算曲线 则不需要)\r\n let p1 = lid.StartPoint.applyMatrix4(inv).setZ(0);\r\n let p2 = lid.EndPoint.applyMatrix4(inv).setZ(0);\r\n\r\n geo.vertices.push(p1.setZ(0), p2.setZ(0));\r\n geo.vertices.push(p1.clone().setZ(this._Height));\r\n geo.vertices.push(p2.clone().setZ(this._Height));\r\n\r\n let startX = 0;\r\n let endX = lid.Length * 1e-3;\r\n\r\n let startZ = 0;\r\n let endZ = this._Height * 1e-3;\r\n\r\n let normal = p2.clone().sub(p1).normalize();\r\n LEFT_ROTATE_MTX2.applyVector(normal);\r\n\r\n geo.faces.push(\r\n new Face3(startIndex, startIndex + 2, startIndex + 1, normal),\r\n new Face3(startIndex + 1, startIndex + 2, startIndex + 3, normal),\r\n );\r\n\r\n geo.faceVertexUvs[0].push(\r\n [new Vector2(startX, startZ), new Vector2(startX, endZ), new Vector2(endX, startZ)],\r\n [new Vector2(endX, startZ), new Vector2(startX, endZ), new Vector2(endX, endZ)],\r\n );\r\n }\r\n\r\n if (this.Regions)\r\n for (let region of this.Regions)\r\n {\r\n region.OCSNoClone.elements[14] = this._Matrix.elements[14];//我们拥有它\r\n let lined = region.MatrixAlignTo2(this.OCSNoClone);\r\n\r\n if (region.CloseMark && !equalv2(lined.pts[0], lined.pts[lined.pts.length - 1], 1e-4))\r\n {\r\n lined.pts.push(lined.pts[0]);\r\n lined.buls.push(0);\r\n }\r\n\r\n let path = CreatePolylinePath(lined.pts, lined.buls);\r\n let rpts = path.getPoints(30);\r\n\r\n let faces = ShapeUtils.triangulateShape(rpts, []);\r\n let startIndex = geo.vertices.length;\r\n for (let p of rpts) geo.vertices.push(new Vector3(p.x, p.y, 0));\r\n for (let p of rpts) geo.vertices.push(new Vector3(p.x, p.y, this._Height));\r\n\r\n let normal = this.Normal;\r\n let normaln = normal.clone().negate();\r\n for (let i = 0; i < faces.length; i++)\r\n {\r\n let [a, b, c] = faces[i];\r\n geo.faces.push(new Face3(startIndex + a, startIndex + b, startIndex + c, normal));\r\n let uvs = faces[i].map(index => rpts[index].clone().multiplyScalar(1e-3));\r\n geo.faceVertexUvs[0].push(uvs);\r\n\r\n geo.faces.push(new Face3(startIndex + rpts.length + c, startIndex + rpts.length + b, startIndex + rpts.length + a, normaln));\r\n geo.faceVertexUvs[0].push(uvs.concat().reverse().map(v => v.clone()));\r\n }\r\n }\r\n\r\n return this._MeshGeometry;\r\n }\r\n\r\n\r\n InitDrawObject(renderType: RenderType = RenderType.Wireframe): Object3D\r\n {\r\n 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\r\n let obj = new Object3D;\r\n if (renderType === RenderType.Wireframe || renderType === RenderType.Jig)\r\n {\r\n return new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(4));\r\n }\r\n else if (renderType === RenderType.Conceptual)\r\n {\r\n let mesh = new Mesh(this.MeshGeometry, ColorMaterial.GetConceptualMaterial(this.ColorIndex));\r\n let line = new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(this.ColorIndex));\r\n obj.add(mesh, line);\r\n }\r\n return obj;\r\n }\r\n\r\n /**\r\n * 重载:更新绘制的实体\r\n * @param {RenderType} renderType\r\n * @param {Object3D} obj\r\n */\r\n UpdateDrawObject(renderType: RenderType, obj: Object3D)\r\n {\r\n if (renderType === RenderType.Wireframe || renderType === RenderType.Jig)\r\n {\r\n let line = obj as LineSegments;\r\n if (line.geometry !== this.EdgeGeometry)\r\n {\r\n line.geometry.dispose();\r\n line.geometry = this.EdgeGeometry;\r\n }\r\n }\r\n else if (renderType === RenderType.Conceptual)\r\n {\r\n let mesh = obj.children[0] as Mesh;\r\n if (mesh.geometry !== this.MeshGeometry)\r\n {\r\n mesh.geometry.dispose();\r\n mesh.geometry = this.MeshGeometry;\r\n }\r\n\r\n let line = obj.children[1] as LineSegments;\r\n if (line.geometry !== this.EdgeGeometry)\r\n {\r\n line.geometry.dispose();\r\n line.geometry = this.EdgeGeometry;\r\n }\r\n }\r\n else if (renderType === RenderType.Physical)\r\n {\r\n let mesh = obj as Mesh;\r\n if (mesh.geometry !== this.MeshGeometry)\r\n {\r\n mesh.geometry.dispose();\r\n mesh.geometry = this.MeshGeometry;\r\n }\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 LineSegments;\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 //#endregion\r\n\r\n //#region -------------------------File-------------------------\r\n //对象从文件中读取数据,初始化自身\r\n protected override _ReadFile(file: CADFiler)\r\n {\r\n let ver = file.Read();\r\n super._ReadFile(file);\r\n\r\n this._Points.length = 0;\r\n let count = file.Read();\r\n for (let i = 0; i < count; i++)\r\n {\r\n let p = new Vector3(file.Read(), file.Read(), 0);\r\n this._Points.push(p);\r\n }\r\n }\r\n //对象将自身数据写入到文件.\r\n override WriteFile(file: CADFiler)\r\n {\r\n file.Write(1);\r\n super.WriteFile(file);\r\n\r\n file.Write(this._Points.length);\r\n for (let p of this._Points)\r\n {\r\n file.Write(p.x);\r\n file.Write(p.y);\r\n }\r\n }\r\n //局部撤销\r\n ApplyPartialUndo(undoData: CADObject)\r\n {\r\n super.ApplyPartialUndo(undoData);\r\n }\r\n //#endregion\r\n}\r\n","\r\nexport enum WallSnapMode\r\n{\r\n None = 0,\r\n Center = 1,\r\n Out = 2,\r\n All = 3\r\n}\r\n","import { Line as TLine, Mesh, Object3D } from \"three\";\r\nimport { ColorMaterial } from \"../../../../Common/ColorPalette\";\r\nimport { equaln } 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 { CADObject } from \"../../../CADObject\";\r\nimport { Arc } from \"../../../Entity/Arc\";\r\nimport { Curve } from \"../../../Entity/Curve\";\r\nimport { Line } from \"../../../Entity/Line\";\r\nimport { Polyline } from \"../../../Entity/Polyline\";\r\nimport { ObjectId } from \"../../../ObjectId\";\r\nimport { RoomBase } from \"../RoomBase\";\r\nimport { RoomHolePolyline } from \"./Hole/RoomHolePolyline\";\r\nimport { WallSnapMode } from \"./WallSnapMode\";\r\n\r\nexport const CURVE_FACE_TYPE_KEY = \"__CURVE_FACE_TYPE_KEY__\";//用来存储墙体类型的key\r\n\r\nexport enum WallFaceType\r\n{\r\n Inside = 0,//内部\r\n Pillar = 1,//柱子\r\n Outside = 2,//外墙\r\n}\r\n\r\ninterface HoleData\r\n{\r\n StartParam: number;\r\n EndParam: number;\r\n Bottom: number;\r\n Top: number;\r\n}\r\n\r\n@Factory\r\nexport abstract class RoomWallBase extends RoomBase\r\n{\r\n static SnapMode: WallSnapMode = WallSnapMode.All;\r\n\r\n @AutoRecord RelevancyHoles: ObjectId[] = [];\r\n Holes: HoleData[] = [];\r\n\r\n get RealHoles(): HoleData[]\r\n {\r\n return this.Holes.filter(h => h.EndParam > h.StartParam && h.Top > h.Bottom);\r\n }\r\n\r\n protected _Thickness = 120;\r\n protected _Height = 2700;\r\n\r\n get Height()\r\n {\r\n return this._Height;\r\n }\r\n set Height(_newHeight)\r\n {\r\n if (_newHeight <= 0.1 || equaln(this._Height, _newHeight)) return;\r\n this.WriteAllObjectRecord();\r\n this._Height = _newHeight;\r\n this.Update();\r\n }\r\n\r\n get Thickness() { return this._Thickness; }\r\n set Thickness(t: number)\r\n {\r\n if (t <= 0.1 || equaln(this._Thickness, t)) return;\r\n this.WriteAllObjectRecord();\r\n this._Thickness = t;\r\n this.Update();\r\n }\r\n\r\n\r\n //中心轴线\r\n get CenterAxisCurve(): Arc | Line { return; }\r\n\r\n //从曲线更新墙体\r\n UpdateCurve(cu: Curve) { }\r\n\r\n //绘制相关\r\n LeftCurves: (Arc | Line)[];\r\n RightCurves: (Arc | Line)[];\r\n LidCurves: (Arc | Line)[];\r\n Region: Polyline;\r\n\r\n UpdateDrawObjectMaterial(renderType: RenderType, obj: Object3D)\r\n {\r\n if (renderType === RenderType.Wireframe)\r\n {\r\n let l = obj.children[1] 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 //绘制相关_end\r\n\r\n //为了支持F后正确的保持洞\r\n override CopyFrom(obj: CADObject)\r\n {\r\n let bak = this.RelevancyHoles.concat();\r\n super.CopyFrom(obj);\r\n this.RelevancyHoles = bak;\r\n }\r\n\r\n //为了支持F,看起来不大行\r\n // override Clone(): this\r\n // {\r\n // let ent = super.Clone();\r\n // ent.Holes = this.Holes.concat();\r\n // return ent;\r\n // }\r\n\r\n //#region -------------------------File-------------------------\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._Thickness = file.Read();\r\n\r\n if (ver > 1)\r\n {\r\n let count = file.Read();\r\n this.RelevancyHoles.length = 0;\r\n for (let i = 0; i < count; i++)\r\n {\r\n let id = file.ReadObjectId();\r\n if (id)\r\n this.RelevancyHoles.push(id as ObjectId);\r\n }\r\n }\r\n\r\n if (ver > 2)\r\n {\r\n this._Height = file.Read();\r\n }\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(3);\r\n super.WriteFile(file);\r\n file.Write(this._Thickness);\r\n\r\n file.Write(this.RelevancyHoles.length);\r\n for (let id of this.RelevancyHoles)\r\n file.WriteObjectId(id);\r\n\r\n file.Write(this._Height);\r\n }\r\n //#endregion\r\n}\r\n\r\n// @ts-ignore\r\nexport interface RoomWallBase extends RoomBase, Curve { }\r\n\r\nexport const CURVE_MESH_NAMES = [\r\n \"Shape\",\r\n \"GetDrawCount\",\r\n\r\n \"Midpoint\",\r\n \"MidParam\",\r\n \"StartParam\",\r\n \"EndParam\",\r\n \"Area\",\r\n \"Area2\",\r\n \"Length\",\r\n \"IsClose\",\r\n \"IsClockWise\",\r\n\r\n \"GetPointAtParam\",\r\n \"GetPointAtDistance\",\r\n \"GetDistAtParam\",\r\n \"GetDistAtPoint\",\r\n \"GetParamAtPoint\",\r\n \"GetParamAtPoint2\",\r\n \"GetParamAtDist\",\r\n \"GetClosestAtPoint\",\r\n \"GetFistDeriv\",\r\n \"GetFistDerivAngle\",\r\n \"GetSplitCurves\",\r\n \"GetCurveAtParamRange\",\r\n \"GetSplitCurvesByPts\",\r\n \"Extend\",\r\n \"Join\",\r\n \"Reverse\",\r\n \"PtOnCurve\",\r\n \"PtOnCurve2\",\r\n \"PtOnCurve3\",\r\n \"ParamOnCurve\",\r\n \"GetOffsetCurves\",\r\n \"GetClosestPointTo\",\r\n \"IntersectWith\",\r\n \"IntersectWith2\",\r\n \"SplitParamSort\",\r\n\r\n \"SetStartEndPoint\",\r\n];\r\n\r\n// This can live anywhere in your codebase:\r\nexport function applyMixins(derivedCtor: any, constructor: any, methons = CURVE_MESH_NAMES)\r\n{\r\n for (let name of methons)\r\n Object.defineProperty(\r\n derivedCtor.prototype,\r\n name,\r\n Object.getOwnPropertyDescriptor(constructor.prototype, name) ?? Object.getOwnPropertyDescriptor(Curve.prototype, name) ?? Object.create(null)\r\n );\r\n}\r\n","import { BufferGeometry, Face3, Geometry, Line as TLine, LineSegments, MathUtils, Matrix3, Mesh, Object3D, ShapeUtils, Vector2, Vector3 } from \"three\";\r\nimport { HostApplicationServices } from \"../../../../ApplicationServices/HostApplicationServices\";\r\nimport { arrayPushArray } from \"../../../../Common/ArrayExt\";\r\nimport { ColorMaterial } from \"../../../../Common/ColorPalette\";\r\nimport { ObjectSnapMode } from \"../../../../Editor/ObjectSnapMode\";\r\nimport { BufferGeometryUtils } from \"../../../../Geometry/BufferGeometryUtils\";\r\nimport { SubtractRange, Tape } from \"../../../../Geometry/ExtrudeMeshGeomBuilder/ExtrudeEdgeGeometry2\";\r\nimport { SplitArcParams, SplitCurvePoints } from \"../../../../Geometry/ExtrudeMeshGeomBuilder/SplitCurveParams\";\r\nimport { AsVector2, AsVector3, clampRad, equaln, updateGeometry, ZeroVec } from \"../../../../Geometry/GeUtils\";\r\nimport { RenderType } from \"../../../../GraphicsSystem/RenderType\";\r\nimport { Factory } from \"../../../CADFactory\";\r\nimport { CADFiler } from \"../../../CADFiler\";\r\nimport { Arc } from \"../../../Entity/Arc\";\r\nimport { Curve } from \"../../../Entity/Curve\";\r\nimport { Line } from \"../../../Entity/Line\";\r\nimport { Polyline } from \"../../../Entity/Polyline\";\r\nimport { GetArcParam, GetLineParam } from \"../../ParseService/GetCurveParam\";\r\nimport { applyMixins, CURVE_MESH_NAMES, RoomWallBase } from \"./RoomWallBase\";\r\nimport { WallSnapMode } from \"./WallSnapMode\";\r\n\r\nconst SnapTempLine = new Line;\r\n@Factory\r\nexport class RoomWallArc extends RoomWallBase\r\n{\r\n constructor(_Center: Vector3 = new Vector3(),\r\n private _Radius = 0.1,\r\n private _StartAngle = 0.1,\r\n private _EndAngle = 0.1,\r\n /**\r\n * 曲线为顺时针\r\n */\r\n private _Clockwise = true,\r\n _Thickness = 120\r\n\r\n )\r\n {\r\n super();\r\n this._Matrix.setPosition(_Center);\r\n this._StartAngle = clampRad(_StartAngle);\r\n this._EndAngle = clampRad(_EndAngle);\r\n this.Thickness = _Thickness;\r\n }\r\n\r\n //中心轴线\r\n override get CenterAxisCurve(): Arc | Line\r\n {\r\n if (this._Radius < (this.Thickness * 0.6) || Math.abs(this.Bul) < 0.0015)\r\n return new Line(this.StartPoint, this.EndPoint);\r\n let arc = new Arc(\r\n ZeroVec,\r\n this._Radius,\r\n this._StartAngle,\r\n this._EndAngle,\r\n this._Clockwise\r\n );\r\n arc.OCSNoClone.copy(this.OCSNoClone);\r\n return arc;\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 let pts = [];\r\n pts = pts.concat(Arc.prototype.GetObjectSnapPoints.call(this, snapMode, pickPoint, lastPoint, viewXform));\r\n const CurveSnap = (curve: Curve) =>\r\n {\r\n let bakZ = curve.Z;\r\n //底部线\r\n arrayPushArray(pts, curve.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform));\r\n\r\n //顶部线\r\n curve.Z += this._Height;\r\n arrayPushArray(pts, curve.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform));\r\n curve.Z = bakZ;\r\n\r\n let spep = [curve.StartPoint, curve.EndPoint];\r\n for (let p of spep)\r\n {\r\n let l = new Line(p, p.clone().setZ(p.z + this._Height));\r\n arrayPushArray(pts, l.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform));\r\n }\r\n };\r\n\r\n if (this.LeftCurves && (RoomWallBase.SnapMode & WallSnapMode.Out) > 0)\r\n {\r\n this.LeftCurves.forEach(CurveSnap);\r\n this.RightCurves.forEach(CurveSnap);\r\n this.LidCurves.forEach(CurveSnap);\r\n }\r\n\r\n return pts;\r\n }\r\n\r\n GetGripPoints(): Array\r\n {\r\n let pts = [\r\n this.StartPoint,\r\n this.GetPointAtParam(0.5),\r\n this.EndPoint,\r\n this.Center.clone(),\r\n ];\r\n let count = pts.length;\r\n\r\n for (let i = 0; i < count; i++)\r\n pts.push(pts[i].clone().setZ(pts[i].z + this._Height));\r\n return pts;\r\n }\r\n\r\n MoveGripPoints(indexList: Array, vec: Vector3)\r\n {\r\n if (indexList.length > 0)\r\n {\r\n let index = indexList[0];\r\n if (index >= 4) index -= 4;\r\n Arc.prototype.MoveGripPoints.call(this, [index], vec);\r\n }\r\n }\r\n\r\n GetStretchPoints(): Vector3[]\r\n {\r\n return Arc.prototype.GetStretchPoints.call(this);\r\n }\r\n MoveStretchPoints(indexList: number[], vec: Vector3): void\r\n {\r\n return Arc.prototype.MoveStretchPoints.call(this, indexList, vec);\r\n }\r\n\r\n //#region //绘制\r\n\r\n\r\n UpdateDrawGeometry()\r\n {\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\r\n private _EdgeGeometry: BufferGeometry;\r\n private _MeshGeometry: Geometry;\r\n get EdgeGeometry()\r\n {\r\n if (this._EdgeGeometry) return this._EdgeGeometry;\r\n\r\n for (let hole of this.Holes)\r\n if (hole.StartParam > hole.EndParam)\r\n [hole.StartParam, hole.EndParam] = [hole.EndParam, hole.StartParam];\r\n\r\n let pts: Vector3[];\r\n if (!this.LeftCurves)\r\n {\r\n let sign = this._Clockwise ? -1 : 1;\r\n\r\n if (this.Length > 0.1)\r\n {\r\n let left = new Arc(ZeroVec, this._Radius - sign * this.Thickness * 0.5, this._StartAngle, this._EndAngle, this._Clockwise);\r\n let right = new Arc(ZeroVec, this._Radius + sign * this.Thickness * 0.5, this._StartAngle, this._EndAngle, this._Clockwise);\r\n\r\n let leftPts = left.Shape.getPoints(this.GetDrawCount()).map(AsVector3);\r\n let rightPts = right.Shape.getPoints(this.GetDrawCount()).map(AsVector3);\r\n\r\n let leftPts2 = leftPts.map(p => p.clone().setZ(this._Height));\r\n let rightPts2 = rightPts.map(p => p.clone().setZ(this._Height));\r\n\r\n pts = [\r\n leftPts[0], leftPts[0].clone().setZ(this._Height),\r\n leftPts[leftPts.length - 1], leftPts[leftPts.length - 1].clone().setZ(this._Height),\r\n\r\n rightPts[0], rightPts[0].clone().setZ(this._Height),\r\n rightPts[rightPts.length - 1], rightPts[rightPts.length - 1].clone().setZ(this._Height),\r\n\r\n leftPts.shift()];\r\n\r\n for (let p of leftPts) pts.push(p, p);\r\n rightPts.reverse();\r\n for (let p of rightPts) pts.push(p, p);\r\n pts.push(pts[0]);\r\n\r\n //顶部\r\n pts.push(leftPts2.shift());\r\n for (let p of leftPts2) pts.push(p, p);\r\n rightPts2.reverse();\r\n for (let p of rightPts2) pts.push(p, p);\r\n }\r\n else\r\n pts = [];\r\n }\r\n else\r\n {\r\n pts = [];\r\n let inv = this.OCSInv;\r\n const DrawCurve = (curve: Curve, _leftRanges: [number, number][], _rightRanges: [number, number][]) =>\r\n {\r\n if (curve instanceof Line)\r\n {\r\n let p1 = curve.StartPoint.applyMatrix4(inv);\r\n let p2 = curve.EndPoint.applyMatrix4(inv);\r\n pts.push(p1, p2);\r\n\r\n for (let range of _leftRanges)\r\n pts.push(p1.clone().setZ(range[0]), p1.clone().setZ(range[1]));\r\n for (let range of _rightRanges)\r\n pts.push(p2.clone().setZ(range[0]), p2.clone().setZ(range[1]));\r\n\r\n pts.push(p1.clone().setZ(this._Height), p2.clone().setZ(this._Height));\r\n }\r\n else//arc\r\n {\r\n let cpts = curve.Shape.getPoints(this.GetDrawCount()).map(AsVector3);\r\n let topPts = cpts.map(p => p.clone().setZ(this._Height));\r\n\r\n //底部\r\n pts.push(cpts[0]);\r\n for (let i = 1; i < cpts.length - 1; i++)\r\n {\r\n let p = cpts[i];\r\n pts.push(p, p);\r\n }\r\n pts.push(cpts[cpts.length - 1]);\r\n\r\n //顶部\r\n pts.push(topPts[0]);\r\n for (let i = 1; i < topPts.length - 1; i++)\r\n {\r\n let p = topPts[i];\r\n pts.push(p, p);\r\n }\r\n pts.push(topPts[topPts.length - 1]);\r\n\r\n //竖线\r\n for (let range of _leftRanges)\r\n pts.push(cpts[0].clone().setZ(range[0]), cpts[0].clone().setZ(range[1]));\r\n for (let range of _rightRanges)\r\n pts.push(cpts[cpts.length - 1].clone().setZ(range[0]), cpts[cpts.length - 1].clone().setZ(range[1]));\r\n }\r\n };\r\n\r\n let lidRanges: [number, number][] = [[0, this._Height]];\r\n let leftRanges = lidRanges;\r\n let rightRanges = lidRanges;\r\n for (let hole of this.Holes)\r\n {\r\n if (equaln(hole.StartParam, 0))\r\n {\r\n let newLeftRanges = [];\r\n for (let range of leftRanges)\r\n arrayPushArray(newLeftRanges, SubtractRange(range[0], range[1], hole.Bottom, hole.Top, 1e5));\r\n leftRanges = newLeftRanges;\r\n }\r\n\r\n if (equaln(hole.EndParam, 1))\r\n {\r\n let newRightRanges = [];\r\n for (let range of rightRanges)\r\n arrayPushArray(newRightRanges, SubtractRange(range[0], range[1], hole.Bottom, hole.Top, 1e5));\r\n rightRanges = newRightRanges;\r\n }\r\n }\r\n\r\n for (let i = 0; i < this.LeftCurves.length; i++)\r\n {\r\n let curve = this.LeftCurves[i];\r\n DrawCurve(curve, i === 0 ? leftRanges : lidRanges, (i === this.LeftCurves.length - 1) ? rightRanges : lidRanges);\r\n }\r\n for (let i = 0; i < this.RightCurves.length; i++)\r\n {\r\n let curve = this.RightCurves[i];\r\n DrawCurve(curve, i === 0 ? leftRanges : lidRanges, (i === this.RightCurves.length - 1) ? rightRanges : lidRanges);\r\n }\r\n for (let i = 0; i < this.LidCurves.length; i++)\r\n {\r\n let curve = this.LidCurves[i];\r\n DrawCurve(curve, lidRanges, lidRanges);\r\n }\r\n }\r\n\r\n this._EdgeGeometry = BufferGeometryUtils.CreateFromPts(pts);\r\n return this._EdgeGeometry;\r\n }\r\n get MeshGeometry()\r\n {\r\n if (this._MeshGeometry) return this._MeshGeometry;\r\n\r\n this._MeshGeometry = new Geometry;\r\n\r\n let geo = this._MeshGeometry;\r\n let normal = this.Normal;\r\n let normaln = normal.clone().negate();\r\n let center = this.Center;\r\n let inv = this.OCSInv;\r\n\r\n let thisParam = new GetArcParam(this as unknown as Arc);\r\n\r\n const BuildLeftFace = (curve: Curve) =>\r\n {\r\n \r\n\r\n if (curve instanceof Line)\r\n {\r\n let tapes = [new Tape(0, 1, 0, this._Height)];\r\n let curveParam = new GetLineParam(curve);\r\n let holes = this.RealHoles;\r\n if (holes.length)\r\n {\r\n for (let hole of holes)\r\n {\r\n let start = equaln(hole.StartParam, 0) ? 0 : MathUtils.clamp(curveParam.GetParamAtPoint(thisParam.GetPointAtParam(hole.StartParam)), 0, 1);\r\n let end = equaln(hole.EndParam, 1) ? 1 : MathUtils.clamp(curveParam.GetParamAtPoint(thisParam.GetPointAtParam(hole.EndParam)), 0, 1);\r\n if (start > end) [start, end] = [end, start];\r\n let holeTape = new Tape(start, end, hole.Bottom, hole.Top);\r\n\r\n let newTapes: Tape[] = [];\r\n for (let tape of tapes)\r\n arrayPushArray(newTapes, tape.Clip(holeTape));\r\n\r\n tapes = newTapes;\r\n }\r\n }\r\n\r\n for (let tape of tapes)\r\n {\r\n let startIndex = geo.vertices.length;\r\n\r\n let p1 = curveParam.GetPointAtParam(tape.start).applyMatrix4(inv);\r\n let p2 = curveParam.GetPointAtParam(tape.end).applyMatrix4(inv);\r\n geo.vertices.push(p1.setZ(tape.bottom), p2.setZ(tape.bottom));\r\n geo.vertices.push(p1.clone().setZ(tape.top));\r\n geo.vertices.push(p2.clone().setZ(tape.top));\r\n\r\n let startX = curveParam.Length * 1e-3 * tape.start;\r\n let endX = curveParam.Length * 1e-3 * tape.end;\r\n\r\n let startZ = tape.bottom * 1e-3;\r\n let endZ = tape.top * 1e-3;\r\n\r\n geo.faces.push(\r\n new Face3(startIndex, startIndex + 2, startIndex + 1, curveParam.LeftDir),\r\n new Face3(startIndex + 1, startIndex + 2, startIndex + 3, curveParam.LeftDir),\r\n );\r\n\r\n geo.faceVertexUvs[0].push(\r\n [new Vector2(startX, startZ), new Vector2(startX, endZ), new Vector2(endX, startZ)],\r\n [new Vector2(endX, startZ), new Vector2(startX, endZ), new Vector2(endX, endZ)],\r\n );\r\n }\r\n }\r\n else\r\n {\r\n let arc = curve as Arc;\r\n\r\n let tapes = [new Tape(0, 1, 0, this._Height)];\r\n let curveParam = new GetArcParam(arc);\r\n\r\n let holes = this.RealHoles;\r\n if (holes.length)\r\n {\r\n for (let hole of holes)\r\n {\r\n let start = equaln(hole.StartParam, 0) ? 0 : MathUtils.clamp(curveParam.GetParamAtPoint(thisParam.GetPointAtParam(hole.StartParam)), 0, 1);\r\n let end = equaln(hole.EndParam, 1) ? 1 : MathUtils.clamp(curveParam.GetParamAtPoint(thisParam.GetPointAtParam(hole.EndParam)), 0, 1);\r\n if (start === end) continue;\r\n if (start > end) [start, end] = [end, start];\r\n let holeTape = new Tape(start, end, hole.Bottom, hole.Top);\r\n\r\n let newTapes: Tape[] = [];\r\n for (let tape of tapes)\r\n arrayPushArray(newTapes, tape.Clip(holeTape));\r\n\r\n tapes = newTapes;\r\n }\r\n }\r\n\r\n if (this.Holes.length)\r\n {\r\n let length = arc.Length;\r\n let params: number[] = SplitArcParams(arc);\r\n\r\n //需要合并顶点,所以建立一个map\r\n let cacheIndex: { [key: string]: number; } = {};\r\n const GetIndex = (param: number, z: number) =>\r\n {\r\n let key = `${param}_${z}`;\r\n let index = cacheIndex[key];\r\n if (index === undefined)\r\n {\r\n index = geo.vertices.length;\r\n cacheIndex[key] = index;\r\n geo.vertices.push(curveParam.GetPointAtParam(param).applyMatrix4(inv).setZ(z));\r\n }\r\n return index;\r\n };\r\n\r\n for (let tapeaaaaa of tapes)\r\n {\r\n for (let tape of tapeaaaaa.Split(params))\r\n {\r\n let p1Index = GetIndex(tape.start, tape.bottom);\r\n let p2Index = GetIndex(tape.end, tape.bottom);\r\n let p3Index = GetIndex(tape.start, tape.top);\r\n let p4Index = GetIndex(tape.end, tape.top);\r\n\r\n let startX = length * 1e-3 * tape.start;\r\n let endX = length * 1e-3 * tape.end;\r\n\r\n let startZ = tape.bottom * 1e-3;\r\n let endZ = tape.top * 1e-3;\r\n\r\n let dir = arc.GetPointAtParam((tape.start + tape.end) * 0.5).applyMatrix4(inv).sub(center).subScalar(arc.Radius);\r\n\r\n geo.faces.push(\r\n new Face3(p1Index, p3Index, p2Index, dir),\r\n new Face3(p2Index, p3Index, p4Index, dir),\r\n );\r\n\r\n geo.faceVertexUvs[0].push(\r\n [new Vector2(startX, startZ), new Vector2(startX, endZ), new Vector2(endX, startZ)],\r\n [new Vector2(endX, startZ), new Vector2(startX, endZ), new Vector2(endX, endZ)],\r\n );\r\n }\r\n }\r\n }\r\n else\r\n {\r\n let startIndex = geo.vertices.length;\r\n\r\n let pts = curve.Shape.getPoints(this.GetDrawCount()).map(AsVector3);\r\n let pts2 = pts.map(p => p.clone().setZ(this._Height));\r\n arrayPushArray(geo.vertices, pts);\r\n arrayPushArray(geo.vertices, pts2);\r\n\r\n let count = pts.length;\r\n let length = curve.Length * 1e-3;\r\n let divLength = length / pts.length;\r\n for (let i = 1; i < count; i++)\r\n {\r\n let pre = i - 1;\r\n\r\n let preX = pre * divLength;\r\n let nowX = i * divLength;\r\n\r\n let dir = pts[i].clone().add(pts[pre]).multiplyScalar(0.5).sub(center).subScalar(arc.Radius);\r\n geo.faces.push(\r\n new Face3(startIndex + i, startIndex + pre, startIndex + pre + count, dir),\r\n new Face3(startIndex + i + count, startIndex + i, startIndex + pre + count, dir),\r\n );\r\n geo.faceVertexUvs[0].push(\r\n [new Vector2(nowX, 0), new Vector2(preX, 0), new Vector2(preX, this._Height * 1e-3)],\r\n [new Vector2(nowX, this._Height * 1e-3), new Vector2(nowX, 0), new Vector2(preX, this._Height * 1e-3)],\r\n );\r\n }\r\n }\r\n }\r\n };\r\n const BuildRightFace = (curve: Curve) =>\r\n {\r\n \r\n\r\n if (curve instanceof Line)\r\n {\r\n let tapes = [new Tape(0, 1, 0, this._Height)];\r\n let curveParam = new GetLineParam(curve);\r\n\r\n let holes = this.RealHoles;\r\n if (holes.length)\r\n {\r\n for (let hole of holes)\r\n {\r\n let start = equaln(hole.StartParam, 0) ? 0 : curveParam.GetParamAtPoint(thisParam.GetPointAtParam(hole.StartParam));\r\n let end = equaln(hole.EndParam, 1) ? 1 : curveParam.GetParamAtPoint(thisParam.GetPointAtParam(hole.EndParam));\r\n if (start > end) [start, end] = [end, start];\r\n let holeTape = new Tape(start, end, hole.Bottom, hole.Top);\r\n\r\n let newTapes: Tape[] = [];\r\n for (let tape of tapes)\r\n arrayPushArray(newTapes, tape.Clip(holeTape));\r\n\r\n tapes = newTapes;\r\n }\r\n }\r\n\r\n for (let tape of tapes)\r\n {\r\n let startIndex = geo.vertices.length;\r\n\r\n let p1 = curveParam.GetPointAtParam(tape.start).applyMatrix4(inv);\r\n let p2 = curveParam.GetPointAtParam(tape.end).applyMatrix4(inv);\r\n geo.vertices.push(p1.setZ(tape.bottom), p2.setZ(tape.bottom));\r\n geo.vertices.push(p1.clone().setZ(tape.top));\r\n geo.vertices.push(p2.clone().setZ(tape.top));\r\n\r\n let startX = curveParam.Length * 1e-3 * tape.start;\r\n let endX = curveParam.Length * 1e-3 * tape.end;\r\n\r\n let startZ = tape.bottom * 1e-3;\r\n let endZ = tape.top * 1e-3;\r\n\r\n geo.faces.push(\r\n new Face3(startIndex, startIndex + 1, startIndex + 2, curveParam.RightDir),\r\n new Face3(startIndex + 1, startIndex + 3, startIndex + 2, curveParam.RightDir),\r\n );\r\n\r\n geo.faceVertexUvs[0].push(\r\n [new Vector2(startX, startZ), new Vector2(endX, startZ), new Vector2(startX, endZ)],\r\n [new Vector2(endX, startZ), new Vector2(endX, endZ), new Vector2(startX, endZ)],\r\n );\r\n }\r\n }\r\n else\r\n {\r\n let arc = curve as Arc;\r\n\r\n let tapes = [new Tape(0, 1, 0, this._Height)];\r\n let curveParam = new GetArcParam(arc);\r\n\r\n let holes = this.RealHoles;\r\n if (holes.length)\r\n {\r\n for (let hole of holes)\r\n {\r\n let start = equaln(hole.StartParam, 0) ? 0 : curveParam.GetParamAtPoint(thisParam.GetPointAtParam(hole.StartParam));\r\n let end = equaln(hole.EndParam, 1) ? 1 : curveParam.GetParamAtPoint(thisParam.GetPointAtParam(hole.EndParam));\r\n if (start > end) [start, end] = [end, start];\r\n let holeTape = new Tape(start, end, hole.Bottom, hole.Top);\r\n\r\n let newTapes: Tape[] = [];\r\n for (let tape of tapes)\r\n arrayPushArray(newTapes, tape.Clip(holeTape));\r\n\r\n tapes = newTapes;\r\n }\r\n\r\n let length = arc.Length;\r\n let params: number[] = SplitArcParams(arc);\r\n\r\n //需要合并顶点,所以建立一个map\r\n let cacheIndex: { [key: string]: number; } = {};\r\n const GetIndex = (param: number, z: number) =>\r\n {\r\n let key = `${param}_${z}`;\r\n let index = cacheIndex[key];\r\n if (index === undefined)\r\n {\r\n index = geo.vertices.length;\r\n cacheIndex[key] = index;\r\n geo.vertices.push(curveParam.GetPointAtParam(param).applyMatrix4(inv).setZ(z));\r\n }\r\n return index;\r\n };\r\n\r\n for (let tapeaaaaa of tapes)\r\n {\r\n for (let tape of tapeaaaaa.Split(params))\r\n {\r\n let p1Index = GetIndex(tape.start, tape.bottom);\r\n let p2Index = GetIndex(tape.end, tape.bottom);\r\n let p3Index = GetIndex(tape.start, tape.top);\r\n let p4Index = GetIndex(tape.end, tape.top);\r\n\r\n let startX = length * 1e-3 * tape.start;\r\n let endX = length * 1e-3 * tape.end;\r\n\r\n let startZ = tape.bottom * 1e-3;\r\n let endZ = tape.top * 1e-3;\r\n\r\n let dir = arc.GetPointAtParam((tape.start + tape.end) * 0.5).applyMatrix4(inv).sub(center).subScalar(arc.Radius).negate();\r\n\r\n geo.faces.push(\r\n new Face3(p1Index, p2Index, p3Index, dir),\r\n new Face3(p2Index, p4Index, p3Index, dir),\r\n );\r\n\r\n geo.faceVertexUvs[0].push(\r\n [new Vector2(startX, startZ), new Vector2(endX, startZ), new Vector2(startX, endZ)],\r\n [new Vector2(endX, startZ), new Vector2(endX, endZ), new Vector2(startX, endZ)],\r\n );\r\n }\r\n }\r\n }\r\n else\r\n {\r\n let arc = curve as Arc;\r\n let startIndex = geo.vertices.length;\r\n\r\n let pts = curve.Shape.getPoints(this.GetDrawCount()).map(AsVector3);\r\n let pts2 = pts.map(p => p.clone().setZ(this._Height));\r\n arrayPushArray(geo.vertices, pts);\r\n arrayPushArray(geo.vertices, pts2);\r\n\r\n let length = curve.Length * 1e-3;\r\n let divLength = length / pts.length;\r\n\r\n let count = pts.length;\r\n for (let i = 1; i < count; i++)\r\n {\r\n let pre = i - 1;\r\n\r\n let preX = pre * divLength;\r\n let nowX = i * divLength;\r\n\r\n let dir = pts[i].clone().add(pts[pre]).multiplyScalar(0.5).sub(center).subScalar(arc.Radius);\r\n geo.faces.push(\r\n new Face3(startIndex + pre, startIndex + i, startIndex + pre + count, dir),\r\n new Face3(startIndex + i, startIndex + i + count, startIndex + pre + count, dir),\r\n );\r\n geo.faceVertexUvs[0].push(\r\n [new Vector2(preX, 0), new Vector2(nowX, 0), new Vector2(preX, this._Height * 1e-3)],\r\n [new Vector2(nowX, 0), new Vector2(nowX, this._Height * 1e-3), new Vector2(preX, this._Height * 1e-3)],\r\n );\r\n }\r\n }\r\n }\r\n };\r\n const BuildRegionFace = (region: Polyline) =>\r\n {\r\n let ocsInv = this.OCSInv;\r\n let pts = SplitCurvePoints(region).map(p => AsVector2(p.applyMatrix4(ocsInv)));\r\n\r\n let faces = ShapeUtils.triangulateShape(pts, []);\r\n\r\n //top\r\n let startIndex = geo.vertices.length;\r\n for (let p of pts) geo.vertices.push(new Vector3(p.x, p.y, this._Height));\r\n if (HostApplicationServices.DrawWallBottomFace) for (let p of pts) geo.vertices.push(new Vector3(p.x, p.y, 0));\r\n\r\n for (let i = 0; i < faces.length; i++)\r\n {\r\n let [a, b, c] = faces[i];\r\n geo.faces.push(new Face3(startIndex + a, startIndex + b, startIndex + c, normal));\r\n let uvs = faces[i].map(index => pts[index].clone());\r\n geo.faceVertexUvs[0].push(uvs);\r\n\r\n if (HostApplicationServices.DrawWallBottomFace)\r\n {\r\n geo.faces.push(new Face3(startIndex + pts.length + c, startIndex + pts.length + b, startIndex + pts.length + a, normaln));\r\n geo.faceVertexUvs[0].push(uvs.concat().reverse().map(v => v.clone()));\r\n }\r\n }\r\n\r\n // //todo:为了优化显示 我们可以把侧面也画出来 (应该使用和酷家乐一样的技术 在视线对准时,隐藏整个墙)\r\n // let d = this._EndPoint.clone().sub(this._StartPoint).normalize();\r\n // let pre = pts[pts.length - 1];\r\n // let tempV = new Vector3;\r\n // for (let i = 0; i < pts.length; i++)\r\n // {\r\n // let p = pts[i];\r\n // tempV.set(p.x - pre.x, p.y - pre.y, 0).normalize();\r\n // //todo:盖子会重复绘制\r\n // if (!isParallelTo(d, tempV, 1e-3) && !isPerpendicularityTo(d, tempV, 1e-3))\r\n // {\r\n // startIndex = geo.vertices.length;\r\n // geo.vertices.push(AsVector3(pre), AsVector3(p));\r\n // geo.vertices.push(AsVector3(pre).setZ(this._Height));\r\n // geo.vertices.push(AsVector3(p).setZ(this._Height));\r\n\r\n // LEFT_ROTATE_MTX2.applyVector(tempV);\r\n // tempV.negate();\r\n\r\n // let n = tempV.clone();\r\n\r\n // geo.faces.push(\r\n // new Face3(startIndex, startIndex + 1, startIndex + 2, n),\r\n // new Face3(startIndex + 1, startIndex + 3, startIndex + 2, n),\r\n // );\r\n\r\n // geo.faceVertexUvs[0].push(\r\n // [new Vector2(), new Vector2(0, 0), new Vector2(0, 0)],\r\n // [new Vector2(0, 0), new Vector2(0, 0), new Vector2(0, 0)],\r\n // );\r\n // }\r\n\r\n // pre = p;\r\n // }\r\n };\r\n\r\n if (!this.LeftCurves)\r\n {\r\n let sign = this._Clockwise ? -1 : 1;\r\n if (this.Length > 0.1)\r\n {\r\n let left = new Arc(ZeroVec, this._Radius - sign * this.Thickness * 0.5, this._StartAngle, this._EndAngle, this._Clockwise);\r\n let right = new Arc(ZeroVec, this._Radius + sign * this.Thickness * 0.5, this._StartAngle, this._EndAngle, this._Clockwise);\r\n left.OCS = this.OCSNoClone;\r\n right.OCS = this.OCSNoClone;\r\n\r\n BuildLeftFace(left);\r\n BuildRightFace(right);\r\n let lid1 = new Line(left.StartPoint, right.StartPoint);\r\n let lid2 = new Line(right.EndPoint, left.EndPoint);\r\n BuildRightFace(lid1);\r\n BuildRightFace(lid2);\r\n\r\n let region = Polyline.Combine([left, lid2, right, lid1]);\r\n if (region) BuildRegionFace(region);\r\n }\r\n }\r\n else\r\n {\r\n this.LeftCurves.forEach(BuildLeftFace);\r\n this.RightCurves.forEach(BuildRightFace);\r\n this.LidCurves.forEach(BuildRightFace);\r\n\r\n if (this.Region) BuildRegionFace(this.Region);\r\n }\r\n\r\n geo.computeVertexNormals();\r\n geo.verticesNeedUpdate = true;\r\n geo.uvsNeedUpdate = true;\r\n\r\n return this._MeshGeometry;\r\n }\r\n\r\n InitDrawObject(renderType: RenderType = RenderType.Wireframe): Object3D\r\n {\r\n if (renderType === RenderType.Physical)\r\n {\r\n let mesh = new Mesh(this.MeshGeometry, this.MeshMaterial);\r\n mesh.castShadow = true;\r\n return mesh;\r\n }\r\n\r\n let obj = new Object3D;\r\n if (renderType === RenderType.Wireframe || renderType === RenderType.Jig)\r\n {\r\n let pts = this.Shape.getPoints(this.GetDrawCount()).map(AsVector3);\r\n let geo = new BufferGeometry().setFromPoints(pts);\r\n let axisLine = new TLine(geo, ColorMaterial.GetWallLineMtl(1));\r\n axisLine.computeLineDistances();\r\n obj.add(axisLine);\r\n\r\n let outline = new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(this.ColorIndex));\r\n obj.add(outline);\r\n }\r\n else if (renderType === RenderType.Conceptual)\r\n {\r\n let mesh = new Mesh(this.MeshGeometry, ColorMaterial.GetConceptualMaterial(this.ColorIndex));\r\n obj.add(mesh);\r\n\r\n let outline = new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(this.ColorIndex));\r\n obj.add(outline);\r\n }\r\n return obj;\r\n }\r\n\r\n /**\r\n * 重载:更新绘制的实体\r\n * @param {RenderType} renderType\r\n * @param {Object3D} obj\r\n */\r\n UpdateDrawObject(renderType: RenderType, obj: Object3D)\r\n {\r\n if (renderType === RenderType.Wireframe || renderType === RenderType.Jig)\r\n {\r\n let [axisLine, outline] = obj.children as [TLine, TLine];\r\n\r\n let pts = this.Shape.getPoints(this.GetDrawCount()).map(AsVector3);\r\n if (!BufferGeometryUtils.UpdatePts(axisLine.geometry, pts))\r\n updateGeometry(axisLine, BufferGeometryUtils.CreateFromPts(pts));\r\n axisLine.computeLineDistances();\r\n\r\n // if (this._Radius <= this.Thickness * 0.5)\r\n // return; //会退化成直线 所以不return了\r\n\r\n if (outline.geometry !== this.EdgeGeometry)\r\n {\r\n outline.geometry.dispose();\r\n outline.geometry = this.EdgeGeometry;\r\n }\r\n }\r\n else if (renderType === RenderType.Conceptual)\r\n {\r\n let mesh = obj.children[0] as Mesh;\r\n if (mesh.geometry !== this.MeshGeometry)\r\n {\r\n mesh.geometry.dispose();\r\n mesh.geometry = this.MeshGeometry;\r\n }\r\n\r\n let outline = obj.children[1] as LineSegments;\r\n if (outline.geometry !== this.EdgeGeometry)\r\n {\r\n outline.geometry.dispose();\r\n outline.geometry = this.EdgeGeometry;\r\n }\r\n }\r\n else if (renderType === RenderType.Physical)\r\n {\r\n let mesh = obj as Mesh;\r\n if (mesh.geometry !== this.MeshGeometry)\r\n {\r\n mesh.geometry.dispose();\r\n mesh.geometry = this.MeshGeometry;\r\n }\r\n }\r\n }\r\n //#endregion\r\n\r\n //#region -------------------------File-------------------------\r\n //对象应该实现dataIn和DataOut的方法,为了对象的序列化和反序列化\r\n\r\n //对象从文件中读取数据,初始化自身\r\n protected override _ReadFile(file: CADFiler)\r\n {\r\n super._ReadFile(file);\r\n let ver = file.Read();\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 //对象将自身数据写入到文件.\r\n override 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\nconst ARC_MEHTON_NAMES = [\r\n \"Center\",\r\n \"Normal\",\r\n \"BoundingBoxPtsInOCS\",\r\n \"Radius\",\r\n \"IsClockWise\",\r\n \"StartAngle\",\r\n \"EndAngle\",\r\n\r\n \"StartPoint\",\r\n \"EndPoint\",\r\n\r\n \"ApplyScaleMatrix\",\r\n \"ApplyMirrorMatrix\",\r\n\r\n \"GetParamAtAngle\",\r\n \"GetParamAtAngle2\",\r\n \"GetAngleAtParam\",\r\n \"GetAngleAtPoint\",\r\n\r\n \"AllAngle\",\r\n \"Bul\",\r\n\r\n \"ComputeAnlge\",\r\n \"ParseFromBul\",\r\n \"FromThreePoint\",\r\n];\r\n\r\n//@ts-ignore\r\nexport interface RoomWallArc extends RoomWallBase, Arc { }\r\napplyMixins(RoomWallArc, Arc, ARC_MEHTON_NAMES.concat(CURVE_MESH_NAMES));\r\n","import Flatbush from 'flatbush';\r\nimport { Vector2, Vector3 } from 'three';\r\nimport { CURVE_FACE_TYPE_KEY, RoomWallBase, WallFaceType } from \"../../Entity/Wall/RoomWallBase\";\r\nimport { CreateGetCurveParam, GetCurveParam } from \"../GetCurveParam\";\r\nimport { InsertSortedIndex, Intersection } from '../RangeUtils';\r\n\r\ntype Range = [number, number];\r\n\r\nexport interface WallRange extends Range\r\n{\r\n left: WallFaceType;\r\n right: WallFaceType;\r\n}\r\n\r\nexport class RoomWallPlaceIHoleHelper\r\n{\r\n protected _ParamGets: GetCurveParam[] = [];\r\n protected _ParamRanges: ([number, number][])[] = [];\r\n protected _Fb: Flatbush;\r\n\r\n constructor(public _Walls: RoomWallBase[])\r\n {\r\n this.GenFb();\r\n this.ParseWallCanPlaceHoleRange();\r\n }\r\n\r\n FindBestPlace(p: Vector3)\r\n {\r\n let ids = this._Fb.neighbors(p.x, p.y, 50, 200);//50个 200距离\r\n\r\n let minDist = Infinity;\r\n let minId = -1;\r\n let cpParam: number;\r\n for (let id of ids)\r\n {\r\n if (this._ParamRanges[id].length === 0)\r\n continue; //没有可以放置的区域\r\n\r\n let paramGet = this._ParamGets[id];\r\n let param = paramGet.GetParamAtPoint(p);\r\n if (param < 0 || param > 1) continue;//不在墙上\r\n let cp = paramGet.GetPointAtParam(param);\r\n\r\n if (p.z < cp.z - 1 || p.z > cp.z + 2800) continue;//线在上墙就行\r\n\r\n let dist = Vector2.prototype.distanceToSquared.call(cp, p);\r\n if (dist < minDist)\r\n {\r\n minDist = dist;\r\n minId = id;\r\n cpParam = param;\r\n }\r\n }\r\n if (minId === -1 || minDist > 90000)//300*300=90000\r\n return;\r\n\r\n let range = FindBestRange(cpParam, this._ParamRanges[minId]) as unknown as WallRange;\r\n if (range)\r\n return {\r\n wall: this._Walls[minId],\r\n range,\r\n cpParam,\r\n getParam: this._ParamGets[minId]\r\n };\r\n }\r\n\r\n private GenFb()\r\n {\r\n if (!this._Walls.length) return;\r\n\r\n this._Fb = new Flatbush(this._Walls.length);\r\n for (let wall of this._Walls)\r\n {\r\n let box = wall.BoundingBox;\r\n this._Fb.add(box.min.x, box.min.y, box.max.x, box.max.y);\r\n }\r\n this._Fb.finish();\r\n }\r\n\r\n ParseWallCanPlaceHoleRange()\r\n {\r\n for (let wall of this._Walls)\r\n {\r\n let param = CreateGetCurveParam(wall);\r\n this._ParamGets.push(param);\r\n this._ParamRanges.push(ParseWallRange(wall, param));\r\n }\r\n }\r\n}\r\n\r\n\r\n//找到一个合适的位置放置直线洞\r\nexport function FindBestRange(param: number, ranges: [number, number][], fuzz = 1e-5): [number, number]\r\n{\r\n //二分搜索\r\n let index = InsertSortedIndex(ranges, param, (v, range) => v - range[0] + fuzz);\r\n\r\n let range = ranges[index - 1];\r\n\r\n //参数在范围内\r\n if (range && (range[0] - fuzz) <= param && param <= (range[1] + fuzz))\r\n return range;\r\n\r\n // //参数在范围外\r\n // if (index === 0)\r\n // {\r\n // return ranges[0];\r\n // }\r\n // else if (index === ranges.length)\r\n // {\r\n // return ranges[ranges.length - 1];\r\n // }\r\n // else\r\n // {\r\n // let nextRange = ranges[index + 1];\r\n // if (nextRange[0] - param < param - range[1])\r\n // return nextRange;\r\n // else\r\n // return range;\r\n // }\r\n}\r\n\r\nexport function ParseWallRange(wall: RoomWallBase, getParam = CreateGetCurveParam(wall))\r\n{\r\n let leftParams: [number, number][] = wall.LeftCurves.map(c =>\r\n {\r\n let range = [getParam.GetParamAtPoint(c.StartPoint), getParam.GetParamAtPoint(c.EndPoint)] as [number, number];\r\n range[CURVE_FACE_TYPE_KEY] = c[CURVE_FACE_TYPE_KEY];\r\n return range;\r\n });\r\n let rightParams: [number, number][] = wall.RightCurves.map(c =>\r\n {\r\n let range = [getParam.GetParamAtPoint(c.StartPoint), getParam.GetParamAtPoint(c.EndPoint)] as [number, number];\r\n range[CURVE_FACE_TYPE_KEY] = c[CURVE_FACE_TYPE_KEY];\r\n return range;\r\n });\r\n\r\n leftParams.sort((a, b) => a[0] - b[0]);\r\n rightParams.sort((a, b) => a[0] - b[0]);\r\n\r\n let ranges: [number, number][] = [];\r\n for (let seg1 of rightParams)\r\n {\r\n let [min, max] = seg1;\r\n for (let seg2 of leftParams)\r\n {\r\n let [min2, max2] = seg2;\r\n if (min > max2) continue;\r\n if (max < min2) break;\r\n\r\n let range = Intersection(seg1, seg2);\r\n if (range)\r\n {\r\n ranges.push(range);\r\n range[\"left\"] = seg2[CURVE_FACE_TYPE_KEY];\r\n range[\"right\"] = seg1[CURVE_FACE_TYPE_KEY];\r\n }\r\n }\r\n }\r\n\r\n return ranges as unknown as WallRange[];\r\n}\r\n","import { MathUtils } from \"three\";\r\nimport { Arc } from \"../api\";\r\nimport { arrayLast } from \"../Common/ArrayExt\";\r\nimport { CADObject } from \"../DatabaseServices/CADObject\";\r\nimport { Curve } from \"../DatabaseServices/Entity/Curve\";\r\nimport { RoomHolePolyline } from \"../DatabaseServices/Room/Entity/Wall/Hole/RoomHolePolyline\";\r\nimport { RoomWallArc } from \"../DatabaseServices/Room/Entity/Wall/RoomWallArc\";\r\nimport { RoomWallBase } from \"../DatabaseServices/Room/Entity/Wall/RoomWallBase\";\r\nimport { RoomWallLine } from \"../DatabaseServices/Room/Entity/Wall/RoomWallLine\";\r\nimport { CreateGetCurveParam } from \"../DatabaseServices/Room/ParseService/GetCurveParam\";\r\nimport { FindBestRange, ParseWallRange } from \"../DatabaseServices/Room/ParseService/Hole/RoomWallPlaceIHoleHelper\";\r\nimport { RoomWallParse } from \"../DatabaseServices/Room/ParseService/RoomWallParse\";\r\nimport { CurveMap } from \"../Geometry/CurveMap\";\r\nimport { equalv2 } from \"../Geometry/GeUtils\";\r\n\r\n\r\n/**\r\n * 更新墙与洞的关联性\r\n */\r\nexport async function UpdateRelevanceWallHole(ents: CADObject[])\r\n{\r\n let updated = new Set();\r\n\r\n //更新墙,顺便更新洞\r\n const UpdateWall = (wall: RoomWallBase) =>\r\n {\r\n if (updated.has(wall)) return;\r\n updated.add(wall);//避免重入\r\n\r\n //先更新洞,因为洞可能会修复位置\r\n for (let holeId of wall.RelevancyHoles)//更新关联的洞\r\n {\r\n if (holeId.IsErase) continue;\r\n\r\n let hole = holeId.Object;\r\n if (wall.IsErase)\r\n hole.Erase();\r\n\r\n UpdateHole(hole);//这里如果只更新洞,那么有可能关联的其他的墙会逃逸\r\n }\r\n\r\n UpdateWallHolesDataAndUpdateDraw(wall);\r\n };\r\n\r\n //更新洞,顺便更新关联的墙?\r\n const UpdateHole = (hole: RoomHolePolyline) =>\r\n {\r\n if (updated.has(hole)) return;\r\n updated.add(hole);//避免重入\r\n\r\n //先更新洞,因为洞可能会修复位置\r\n UpdateHoleFakerWallsAndUpdateDraw(hole);\r\n\r\n for (let wallId of hole.RelevancyWalls)\r\n {\r\n if (wallId.IsErase) continue;\r\n\r\n let wall = wallId.Object as RoomWallBase;\r\n if (updated.has(wall)) continue;\r\n\r\n UpdateWall(wall);\r\n }\r\n };\r\n\r\n\r\n for (let en of ents)\r\n {\r\n if (en instanceof RoomWallBase)\r\n UpdateWall(en);\r\n else if (en instanceof RoomHolePolyline)\r\n UpdateHole(en);\r\n }\r\n}\r\n\r\n\r\n/**\r\n * 更新墙的洞的数据,并且更新绘制\r\n */\r\nexport function UpdateWallHolesDataAndUpdateDraw(wall: RoomWallBase)\r\n{\r\n wall.Holes = [];\r\n\r\n let getParam = CreateGetCurveParam(wall);\r\n\r\n let z = wall.OCSNoClone.elements[14];\r\n for (let hole of wall.RelevancyHoles)\r\n {\r\n if (hole.IsErase)\r\n {\r\n wall.Holes.push({ StartParam: 0, EndParam: 0, Bottom: 0, Top: 0 });\r\n continue;\r\n }\r\n\r\n let holeObj = hole.Object as RoomHolePolyline;\r\n let index = holeObj.RelevancyWalls.indexOf(wall.Id);\r\n if (index < 0) continue;\r\n\r\n let sp = holeObj.Points[index];\r\n let ep = holeObj.Points[index + 1];\r\n\r\n let startParam = getParam.GetParamAtPoint(sp);\r\n let endParam = getParam.GetParamAtPoint(ep);\r\n if (startParam > endParam) [startParam, endParam] = [endParam, startParam];\r\n let bottom = holeObj.Position.z - z;\r\n let top = holeObj.Height + bottom;\r\n\r\n wall.Holes.push({ StartParam: startParam, EndParam: endParam, Bottom: bottom, Top: top });\r\n }\r\n\r\n wall.Update();\r\n return wall;\r\n}\r\n\r\n\r\n/**\r\n * 更新网洞的绘制\r\n * 在墙移动的时候,或者网洞变化的时候 这个网洞的绘制就需要被更新\r\n */\r\nexport function UpdateHoleFakerWallsAndUpdateDraw(hole: RoomHolePolyline)\r\n{\r\n if (hole.IsErase) return;\r\n\r\n let fakerWalls = hole.RelevancyWalls.map(w => w.Object.Clone());\r\n\r\n let pts = hole.Points;\r\n if (pts.length < 2)\r\n {\r\n hole.Erase();\r\n return;\r\n }\r\n\r\n if (pts.length === 2)\r\n {\r\n\r\n let p1 = pts[0];\r\n let p2 = pts[1];\r\n\r\n let wall = fakerWalls[0];\r\n let orgWall = hole.RelevancyWalls[0].Object;\r\n let paramGet = CreateGetCurveParam(orgWall);\r\n\r\n let ranges = ParseWallRange(orgWall, paramGet);\r\n\r\n let [p1Param, p1Closeto] = paramGet.GetParamAtPoint2(p1);\r\n let [p2Param, p2Closeto] = paramGet.GetParamAtPoint2(p2);\r\n\r\n let range1 = FindBestRange(p1Param, ranges);\r\n let range2 = FindBestRange(p2Param, ranges);\r\n\r\n if (p1Closeto && p2Closeto)\r\n {\r\n if (range1 && range1 === range2)\r\n {\r\n wall.StartPoint = p1;\r\n wall.EndPoint = p2;\r\n\r\n if (wall instanceof RoomWallArc && p1Param > p2Param)\r\n (wall as unknown as Arc).IsClockWise = !wall.IsClockWise;\r\n }\r\n else\r\n {\r\n let range = range1 ?? range2 ?? FindBestRange((p1Param + p2Param) * 0.5, ranges);\r\n if (!range)\r\n {\r\n hole.Erase();\r\n return;\r\n }\r\n\r\n p1Param = MathUtils.clamp(p1Param, range[0], range[1]);\r\n p2Param = MathUtils.clamp(p2Param, range[0], range[1]);\r\n\r\n wall.StartPoint = paramGet.GetPointAtParam(p1Param);\r\n wall.EndPoint = paramGet.GetPointAtParam(p2Param);\r\n\r\n if (wall instanceof RoomWallArc && p1Param > p2Param)\r\n (wall as unknown as Arc).IsClockWise = !wall.IsClockWise;\r\n }\r\n }\r\n else\r\n {\r\n let index = orgWall.RelevancyHoles.indexOf(hole.Id);\r\n let holeData = orgWall.Holes[index];\r\n if (!holeData)\r\n {\r\n hole.Erase();\r\n return;\r\n };\r\n\r\n if (p2Param > p1Param)\r\n {\r\n p1Param = holeData.StartParam;\r\n p2Param = holeData.EndParam;\r\n }\r\n else\r\n {\r\n p1Param = holeData.EndParam;\r\n p2Param = holeData.StartParam;\r\n }\r\n\r\n let range = FindBestRange(p1Param, ranges) ?? FindBestRange(p1Param, ranges) ?? FindBestRange((p1Param + p2Param) * 0.5, ranges);\r\n if (!range)\r\n {\r\n hole.Erase();\r\n return;\r\n }\r\n\r\n p1Param = MathUtils.clamp(p1Param, range[0], range[1]);\r\n p2Param = MathUtils.clamp(p2Param, range[0], range[1]);\r\n\r\n wall.StartPoint = paramGet.GetPointAtParam(p1Param);\r\n wall.EndPoint = paramGet.GetPointAtParam(p2Param);\r\n\r\n if (wall instanceof RoomWallArc && p1Param > p2Param)\r\n (wall as unknown as Arc).IsClockWise = !wall.IsClockWise;\r\n }\r\n\r\n new RoomWallParse(false, undefined, false).Parse(fakerWalls);\r\n hole.FakerWalls = fakerWalls;\r\n\r\n let newPts = hole.FakerPoints;\r\n if (pts.some((p, i) => !equalv2(p, newPts[i], 1e-4)))\r\n hole.UpdatePoints();\r\n hole.Update();\r\n return;\r\n }\r\n\r\n //pts.length >2\r\n let curvemap = new CurveMap();\r\n for (let w of fakerWalls)\r\n curvemap.AddCurveToMap(w as unknown as Curve, false, false, false);\r\n\r\n if (curvemap._Vertices.length !== pts.length)\r\n {\r\n hole.Erase();\r\n return;\r\n }\r\n\r\n if (pts.length === 3)\r\n {\r\n let v = curvemap._Vertices.find(v => v.routes.length === 2);\r\n if (!v)//拐角点丢失\r\n {\r\n hole.Erase();\r\n return;\r\n }\r\n\r\n let r1 = v.routes.find(r => r.curve === fakerWalls[0] as unknown as Curve);\r\n let r2 = v.routes.find(r => r.curve === fakerWalls[1] as unknown as Curve);\r\n if (!r1.isReverse) fakerWalls[0].Reverse();\r\n if (r2.isReverse) fakerWalls[1].Reverse();\r\n\r\n // if (!equalv2(v.position, pts[1], 1e-4))//拐角点不再对齐\r\n // {\r\n // let length1 = GetHoleLengthOfIndex(hole, 0);\r\n // let length2 = GetHoleLengthOfIndex(hole, 1);\r\n\r\n // fakerWalls[0].StartPoint = fakerWalls[0].GetPointAtDistance(fakerWalls[0].Length - length1);\r\n // fakerWalls[1].EndPoint = fakerWalls[1].GetPointAtDistance(length2);\r\n // }\r\n // else//拐角点仍然对齐\r\n {\r\n {\r\n let length1 = GetHoleLengthOfIndex(hole, 0);\r\n let orgWall = hole.RelevancyWalls[0].Object;\r\n let ranges = ParseWallRange(orgWall);\r\n if (!r1.isReverse)\r\n length1 = Math.min(length1, orgWall.Length * ranges[0][1]);\r\n else\r\n length1 = Math.min(length1, orgWall.Length * (1 - arrayLast(ranges)[0]));\r\n\r\n fakerWalls[0].StartPoint = fakerWalls[0].GetPointAtDistance(fakerWalls[0].Length - length1);\r\n }\r\n\r\n {\r\n let length2 = GetHoleLengthOfIndex(hole, 1);\r\n let orgWall = hole.RelevancyWalls[1].Object;\r\n let ranges = ParseWallRange(orgWall);\r\n if (r2.isReverse)\r\n length2 = Math.min(length2, orgWall.Length * (1 - arrayLast(ranges)[0]));\r\n else\r\n length2 = Math.min(length2, orgWall.Length * ranges[0][1]);\r\n\r\n fakerWalls[1].EndPoint = fakerWalls[1].GetPointAtDistance(length2);\r\n }\r\n }\r\n }\r\n else if (pts.length === 4)\r\n {\r\n let v1 = curvemap._Vertices.find(v => v.routes.length === 2 && v.routes.some(r => r.curve === fakerWalls[0] as unknown as Curve));\r\n let v2 = curvemap._Vertices.find(v => v.routes.length === 2 && v.routes.some(r => r.curve === fakerWalls[2] as unknown as Curve));\r\n\r\n if (!v1 || !v2)\r\n {\r\n hole.Erase();\r\n return;\r\n }\r\n\r\n let r1 = v1.routes.find(r => r.curve === fakerWalls[0] as unknown as Curve);\r\n let r2 = v2.routes.find(r => r.curve === fakerWalls[2] as unknown as Curve);\r\n\r\n let r3 = v1.routes.find(r => r.curve === fakerWalls[1] as unknown as Curve);\r\n if (r3.isReverse) fakerWalls[1].Reverse();\r\n\r\n if (!r1.isReverse) fakerWalls[0].Reverse();\r\n if (r2.isReverse) fakerWalls[2].Reverse();\r\n\r\n {\r\n let length1 = GetHoleLengthOfIndex(hole, 0);\r\n let length2 = GetHoleLengthOfIndex(hole, 2);\r\n\r\n {\r\n let orgWall = hole.RelevancyWalls[0].Object;\r\n let ranges = ParseWallRange(orgWall);\r\n if (!r1.isReverse)\r\n length1 = Math.min(length1, orgWall.Length * ranges[0][1]);\r\n else\r\n length1 = Math.min(length1, orgWall.Length * (1 - arrayLast(ranges)[0]));\r\n\r\n fakerWalls[0].StartPoint = fakerWalls[0].GetPointAtDistance(fakerWalls[0].Length - length1);\r\n }\r\n\r\n {\r\n let orgWall = hole.RelevancyWalls[2].Object;\r\n let ranges = ParseWallRange(orgWall);\r\n if (r3.isReverse)\r\n length2 = Math.min(length2, orgWall.Length * (1 - arrayLast(ranges)[0]));\r\n else\r\n length2 = Math.min(length2, orgWall.Length * ranges[0][1]);\r\n\r\n fakerWalls[2].EndPoint = fakerWalls[2].GetPointAtDistance(length2);\r\n }\r\n }\r\n }\r\n\r\n new RoomWallParse(false, undefined, false).Parse(fakerWalls);\r\n hole.FakerWalls = fakerWalls;\r\n\r\n let newPts = hole.FakerPoints;\r\n if (pts.some((p, i) => !equalv2(p, newPts[i], 1e-4)))\r\n hole.UpdatePoints();\r\n hole.Update();\r\n}\r\n\r\n\r\nexport function GetHoleLengthOfIndex(hole: RoomHolePolyline, index: number): number\r\n{\r\n if (hole.RelevancyWalls && hole.RelevancyWalls[index]?.Object)\r\n {\r\n let wall = hole.RelevancyWalls[index].Object;\r\n\r\n if (wall instanceof RoomWallLine)\r\n return hole.Points[index].distanceTo(hole.Points[index + 1]);\r\n else if (wall instanceof RoomWallArc)\r\n {\r\n let p1 = hole.Points[index];\r\n let p2 = hole.Points[index + 1];\r\n\r\n let param1 = wall.GetParamAtPoint(p1.clone().setZ(wall.Z));\r\n let param2 = wall.GetParamAtPoint(p2.clone().setZ(wall.Z));\r\n\r\n if (!isNaN(param1) && !isNaN(param2))\r\n return Math.abs(wall.GetDistAtParam(param1) - wall.GetDistAtParam(param2));\r\n\r\n let b = p1.distanceTo(p2);\r\n if (b < 1e-4) return 0;\r\n let r = wall.Radius;\r\n let l = 2 * Math.asin(b / (2 * r)) * r;//http://zhidao.baidu.com/question/553357442/answer/1393358387\r\n return l;\r\n }\r\n }\r\n return 0;\r\n}\r\n","import { arrayRemoveIf } from \"../Common/ArrayExt\";\r\nimport { Database } from \"../DatabaseServices/Database\";\r\nimport { Entity } from \"../DatabaseServices/Entity/Entity\";\r\nimport { TemplateRecord } from \"../DatabaseServices/Template/TemplateRecord\";\r\n\r\nexport function Purge(db: Database): void\r\n{\r\n db.hm.Clear();\r\n let bakEnable = db.hm.Enable;\r\n db.hm.Enable = false;\r\n\r\n //应该避免占位空间被PU(占位空间内没有实体,也没有子层)\r\n arrayRemoveIf(db.TemplateTable.Objects, t =>\r\n {\r\n if (!t || t.IsErase) return true;\r\n\r\n let allEnts: Entity[] = [];\r\n t.Traverse(ct =>\r\n {\r\n for (let id of ct.Objects)\r\n {\r\n if (id.Object)\r\n allEnts.push(id.Object as Entity);\r\n }\r\n });\r\n\r\n if (allEnts.length && allEnts.every(e => e.IsErase))\r\n {\r\n t.Erase();\r\n t.Traverse(ct => ct.Erase());//PU所有子层\r\n return true;\r\n }\r\n\r\n //否则PU本层\r\n t.Purge();\r\n });\r\n\r\n //再次清理,避免子模块没了之后,父模块还引用它\r\n for (let t of db.TemplateTable.Objects)\r\n t.Children = t.Children.filter(c => !c.IsErase);\r\n\r\n arrayRemoveIf(db.GroupTable.Objects, g =>\r\n {\r\n if (!g || g.IsErase) return true;\r\n g.Purge();\r\n return g.Entitys.length === 0;\r\n });\r\n\r\n //由于我们现在Goodbye会将Object清空,所以为了模块能正确的pu,我们把这个延后了\r\n arrayRemoveIf(db.ModelSpace.Entitys, e =>\r\n {\r\n let isErase = e.IsErase;\r\n if (isErase) e.GoodBye();\r\n return isErase;\r\n });\r\n\r\n arrayRemoveIf(db.Lights.Entitys, e =>\r\n {\r\n let isErase = e.IsErase;\r\n if (isErase) e.GoodBye();\r\n return isErase;\r\n });\r\n\r\n arrayRemoveIf(db.LayoutSpace.Entitys, e =>\r\n {\r\n let isErase = e.IsErase;\r\n if (isErase) e.GoodBye();\r\n return isErase;\r\n });\r\n\r\n arrayRemoveIf(db.ProcessingGroupTable.Objects, e =>\r\n {\r\n if (!e || e.IsErase) return true;\r\n e.Purge();\r\n return e.Objects.length === 0;\r\n });\r\n db.hm.Enable = bakEnable;\r\n}\r\n\r\n//裁剪树 有时候会有不好的行为,仅在copy.ts中使用\r\nexport function PurgeTemplateTreeRoot(db: Database)\r\n{\r\n for (let t of db.TemplateTable.Objects)\r\n {\r\n if (t.IsRoot && t.Objects.length === 0)\r\n {\r\n t.Erase();\r\n\r\n let children = t.Children.concat();//必须备份,否则子实体设置Parent=undefined时错误\r\n t.Children = [];\r\n for (let ctId of children)\r\n {\r\n let ct = ctId.Object as TemplateRecord;\r\n ct.Parent = undefined;\r\n }\r\n }\r\n }\r\n arrayRemoveIf(db.TemplateTable.Objects, t => t.IsErase);\r\n}\r\n","import { Factory } from './CADFactory';\r\nimport { CADFiler } from './CADFiler';\r\nimport { CADObject } from './CADObject';\r\nimport { Database } from './Database';\r\n\r\n@Factory\r\nexport class CreateObjectData extends CADObject\r\n{\r\n private CADFiler: CADFiler = new CADFiler();\r\n\r\n //用于记录创建的对象\r\n CreateObject: CADObject;\r\n\r\n /**\r\n * 如果是实体新建,那么不需要调用`Save`,历史记录会在命令结束的时候调用.\r\n * 如果是实体删除,那么请自行调用`Save`.\r\n */\r\n constructor(public Object?: CADObject)\r\n {\r\n super();\r\n }\r\n\r\n //记录数据,在命令结束的时候记录\r\n Save()\r\n {\r\n if (this.Object && this.CADFiler.Data.length === 0)\r\n {\r\n this.CADFiler.Data.length = 0;\r\n this.CADFiler.WriteObject(this.Object);\r\n }\r\n return this;\r\n }\r\n\r\n GetObject(db: Database): CADObject\r\n {\r\n this.CADFiler.Reset();\r\n this.CADFiler.database = db;\r\n this.Object = this.CADFiler.ReadObject();\r\n this.CADFiler.Reset();\r\n return this.Object;\r\n }\r\n\r\n //#region -----------------------------File-----------------------------\r\n //对象应该实现dataIn和DataOut的方法,为了对象的序列化和反序列化\r\n //对象从文件中读取数据,初始化自身\r\n ReadFile(file: CADFiler)\r\n {\r\n file.Read();//ver;\r\n let data = file.Read();\r\n this.CADFiler.Data = data;\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(1);//ver\r\n file.Write(this.CADFiler.Data);\r\n }\r\n //#endregion -----------------------------File End-----------------------------\r\n}\r\n","import { Factory } from './CADFactory';\r\nimport { CADFiler } from './CADFiler';\r\nimport { CADObject } from './CADObject';\r\n\r\n@Factory\r\nexport class RemoveObjectData extends CADObject\r\n{\r\n private index: T;\r\n\r\n RemoveObject: CADObject;//用于记录被删除的对象\r\n constructor(index?: T)\r\n {\r\n super();\r\n this.index = index;\r\n }\r\n get Index()\r\n {\r\n return this.index;\r\n }\r\n\r\n //#region -----------------------------File-----------------------------\r\n //对象应该实现dataIn和DataOut的方法,为了对象的序列化和反序列化\r\n\r\n //对象从文件中读取数据,初始化自身\r\n ReadFile(file: CADFiler)\r\n {\r\n file.Read();//ver\r\n this.index = file.Read();\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(1);\r\n file.Write(this.index);\r\n }\r\n //局部撤销\r\n ApplyPartialUndo(file: CADObject)\r\n { }\r\n //#endregion -----------------------------File End-----------------------------\r\n}\r\n","import { observable } from \"mobx\";\r\nimport { Status } from \"../Common/Status\";\r\nimport { Factory } from \"./CADFactory\";\r\nimport { CADFiler } from \"./CADFiler\";\r\nimport { CADObject } from \"./CADObject\";\r\nimport { CreateObjectData } from \"./CreateObjectData\";\r\nimport { HistorycRecord } from \"./HistorycRecord\";\r\nimport { RemoveObjectData } from \"./RemoveObjectData\";\r\nimport { SymbolTableRecord } from \"./SymbolTableRecord\";\r\n\r\n@Factory\r\nexport class SymbolTable extends CADObject\r\n{\r\n /**\r\n * 符号列表,支持迭代,请勿直接修改数据\r\n */\r\n @observable Symbols = new Map();\r\n\r\n Add(record: SymbolTableRecord, isCheckObjectCleanly = true): Status\r\n {\r\n if (this.Symbols.has(record.Name))\r\n return Status.DuplicateRecordName;\r\n\r\n if (!isCheckObjectCleanly)\r\n record.SetDefaultDb(this._db);\r\n else if (this._db)\r\n record.SetOwnerDatabase(this._db);\r\n\r\n record.Owner = this.objectId;\r\n\r\n this.Symbols.set(record.Name, record);\r\n return Status.True;\r\n }\r\n\r\n Remove(record: SymbolTableRecord)\r\n {\r\n let selfRecord = this.Symbols.get(record.Name);\r\n if (selfRecord === record)\r\n {\r\n let undoRec = this.UndoRecord();\r\n if (undoRec)\r\n {\r\n let hisRec = new HistorycRecord();\r\n hisRec.undoData = new CreateObjectData(selfRecord).Save();\r\n hisRec.redoData = new RemoveObjectData(selfRecord.Name);\r\n\r\n undoRec.WriteObjectHistoryPath(this, hisRec);\r\n }\r\n\r\n this.Symbols.delete(record.Name);\r\n }\r\n }\r\n\r\n GetAt(name: string): SymbolTableRecord | undefined\r\n {\r\n return this.Symbols.get(name);\r\n }\r\n\r\n Has(name: string)\r\n {\r\n return this.Symbols.has(name);\r\n }\r\n\r\n AllocateName(name: string): string\r\n {\r\n for (let i = 1; i < this.Symbols.size + 2; i++)\r\n {\r\n let newName = `${name}${i}`;\r\n if (!this.Has(newName))\r\n return newName;\r\n }\r\n }\r\n\r\n ChangeRecordName(record: SymbolTableRecord, newName: string): boolean\r\n {\r\n if (this.Has(newName)) return false;\r\n this.Symbols.delete(record.Name);\r\n this.Symbols.set(newName, record);\r\n return true;\r\n }\r\n\r\n //#region -------------------------File-------------------------\r\n ReadFile(file: CADFiler)\r\n {\r\n super.ReadFile(file);\r\n let ver = file.Read();\r\n let count = file.Read();\r\n this.Symbols.clear();\r\n for (let i = 0; i < count; i++)\r\n {\r\n if (ver === 1)\r\n file.Read();\r\n let record = file.ReadObject() as SymbolTableRecord;\r\n if (record)\r\n this.Symbols.set(record.Name, record);\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.Symbols.size);\r\n for (let [key, record] of this.Symbols)\r\n {\r\n file.WriteObject(record);\r\n }\r\n }\r\n\r\n //局部撤销\r\n ApplyPartialUndo(undoData: CADObject)\r\n {\r\n if (undoData instanceof CreateObjectData)\r\n {\r\n let record = undoData.GetObject(this._db) as SymbolTableRecord;\r\n this.Symbols.set(record.Name, record);\r\n undoData.CreateObject = record;\r\n }\r\n else if (undoData instanceof RemoveObjectData)\r\n {\r\n let obj = this.Symbols.get(undoData.Index as string);\r\n this.Symbols.delete(undoData.Index as string);\r\n undoData.RemoveObject = obj;\r\n }\r\n // else if (undoData instanceof RenameObjectData)\r\n // {\r\n // let record = this.GetAt(undoData._oldName);\r\n // this.Symbols.delete(undoData._oldName);\r\n // this.Symbols.set(undoData._newName, record);\r\n // }\r\n }\r\n}\r\n","import { SymbolTable } from \"./SymbolTable\";\r\nimport { Factory } from \"./CADFactory\";\r\n\r\n@Factory\r\nexport class BlockTable extends SymbolTable\r\n{\r\n\r\n}\r\n","import { Factory } from './CADFactory';\r\nimport { CADFiler } from './CADFiler';\r\nimport { CADObject } from './CADObject';\r\nimport { CreateObjectData } from './CreateObjectData';\r\nimport { HistorycRecord } from './HistorycRecord';\r\nimport { RemoveObjectData } from './RemoveObjectData';\r\n\r\n@Factory\r\nexport class ObjectCollection extends CADObject\r\n{\r\n Objects: T[] = [];\r\n\r\n Destroy()\r\n {\r\n super.Destroy();\r\n this.Objects.length = 0;\r\n }\r\n\r\n /**\r\n * @param object\r\n * @param isCheckObjectCleanly 检查对象是否清白,如果对象不清白,那么将会被拒绝加入到集合.\r\n */\r\n Append(object: T, isCheckObjectCleanly = true)\r\n {\r\n if (isCheckObjectCleanly && object.Id)\r\n {\r\n console.warn(\"尝试加入已经分配id的对象!\");\r\n return;\r\n }\r\n if (this._db && !object.Id)\r\n object.SetOwnerDatabase(this._db);\r\n else\r\n object.SetDatabase(this._db);\r\n\r\n this.Objects.push(object);\r\n this.AppendEvent(object);\r\n\r\n let undoRec = this.UndoRecord();\r\n if (undoRec)\r\n {\r\n let hisRec = new HistorycRecord();\r\n hisRec.redoData = new CreateObjectData(object);\r\n hisRec.undoData = new RemoveObjectData(this.Objects.length - 1);\r\n\r\n undoRec.WriteObjectHistoryPath(this, hisRec);\r\n }\r\n\r\n return object.Id;\r\n }\r\n AppendEvent(obj: T)\r\n {\r\n\r\n }\r\n Remove(obj: T)\r\n {\r\n let index = this.Objects.indexOf(obj);\r\n this.RemoveIndex(index);\r\n }\r\n\r\n RemoveIndex(index: number)\r\n {\r\n if (index === -1)\r\n return;\r\n let obj = this.Objects[index];\r\n this.Objects.splice(index, 1);\r\n\r\n let undoRec = this.UndoRecord();\r\n if (undoRec)\r\n {\r\n let hisRec = new HistorycRecord();\r\n hisRec.undoData = new CreateObjectData(obj).Save();\r\n hisRec.redoData = new RemoveObjectData(index);\r\n\r\n undoRec.WriteObjectHistoryPath(this, hisRec);\r\n }\r\n if (obj)\r\n obj.GoodBye();\r\n\r\n return obj;\r\n }\r\n\r\n //#region -----------------------------File-----------------------------\r\n //对象应该实现dataIn和DataOut的方法,为了对象的序列化和反序列化\r\n\r\n //对象从文件中读取数据,初始化自身\r\n ReadFile(file: CADFiler)\r\n {\r\n this.Objects.length = 0;\r\n super.ReadFile(file);\r\n let cout = file.Read();\r\n for (let i = 0; i < cout; i++)\r\n {\r\n let obj = file.ReadObject() as T;\r\n if (obj) this.Objects.push(obj);\r\n }\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n super.WriteFile(file);\r\n file.Write(this.Objects.length);\r\n for (let obj of this.Objects)\r\n file.WriteObject(obj);\r\n }\r\n //局部撤销\r\n ApplyPartialUndo(undoData: CADObject)\r\n {\r\n if (undoData instanceof CreateObjectData)\r\n {\r\n let obj = undoData.GetObject(this._db) as T;\r\n this.Objects.push(obj);\r\n this.AppendEvent(obj);\r\n undoData.CreateObject = obj;\r\n }\r\n else if (undoData instanceof RemoveObjectData)\r\n {\r\n let obj = this.RemoveIndex(undoData.Index);\r\n undoData.RemoveObject = obj;\r\n }\r\n }\r\n //#endregion -----------------------------File End-----------------------------\r\n}\r\n","import { end } from 'xaop';\r\nimport { Status } from '../Common/Status';\r\nimport { Factory } from './CADFactory';\r\nimport { CADFiler } from './CADFiler';\r\nimport { Database } from './Database';\r\nimport { Entity } from './Entity/Entity';\r\nimport { ObjectCollection } from './ObjectCollection';\r\nimport { SymbolTableRecord } from './SymbolTableRecord';\r\n\r\n@Factory\r\nexport class BlockTableRecord extends SymbolTableRecord\r\n{\r\n EntityCol = new ObjectCollection();\r\n constructor()\r\n {\r\n super();\r\n end(this.EntityCol, this.EntityCol.AppendEvent, (e: Entity) => { this.AppendEvent(e); });\r\n }\r\n\r\n SetOwnerDatabase(db: Database)\r\n {\r\n super.SetOwnerDatabase(db);\r\n this.EntityCol.SetOwnerDatabase(db);\r\n return this;\r\n }\r\n\r\n get Entitys()\r\n {\r\n return this.EntityCol.Objects;\r\n }\r\n Add(obj: Entity, isCheckObjectCleanly = true): Status\r\n {\r\n this.Append(obj, isCheckObjectCleanly);\r\n return Status.True;\r\n }\r\n\r\n Append(entity: Entity, isCheckObjectCleanly = true)\r\n {\r\n this.EntityCol.Append(entity, isCheckObjectCleanly);\r\n entity.Owner = this.objectId;\r\n }\r\n\r\n AppendEvent(entity: Entity)\r\n {\r\n }\r\n\r\n Remove(entity: Entity)\r\n {\r\n this.EntityCol.Remove(entity);\r\n }\r\n\r\n Destroy()\r\n {\r\n super.Destroy();\r\n this.EntityCol.Destroy();\r\n }\r\n\r\n //#region -------------------------File-------------------------\r\n //对象从文件中读取数据,初始化自身\r\n ReadFile(file: CADFiler)\r\n {\r\n let ver = file.Read();\r\n super.ReadFile(file);\r\n this.EntityCol.ReadFile(file);\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(1);\r\n super.WriteFile(file);\r\n this.EntityCol.WriteFile(file);\r\n }\r\n //#endregion\r\n}\r\n","import { AllObjectData } from \"./AllObjectData\";\r\nimport { Factory } from './CADFactory';\r\nimport { CADFiler } from './CADFiler';\r\nimport { HistorycRecord } from './HistorycRecord';\r\nimport { ObjectId } from './ObjectId';\r\n\r\n@Factory\r\nexport class ObjectAllDataHistoryRecord extends HistorycRecord\r\n{\r\n constructor(public RecordEntityId?: ObjectId)\r\n {\r\n super();\r\n if (RecordEntityId)\r\n this.undoData = new AllObjectData(this.RecordEntityId.Object);\r\n }\r\n\r\n WriteRedo()\r\n {\r\n this.redoData = new AllObjectData(this.RecordEntityId.Object);\r\n }\r\n\r\n //#region -------------------------File-------------------------\r\n //对象从文件中读取数据,初始化自身\r\n ReadFile(file: CADFiler)\r\n {\r\n let ver = file.Read();\r\n super.ReadFile(file);\r\n this.RecordEntityId = file.ReadObjectId();\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(1);\r\n super.WriteFile(file);\r\n file.WriteObjectId(this.RecordEntityId);\r\n }\r\n //#endregion\r\n}\r\n","import { Factory } from './CADFactory';\r\nimport { CADFiler } from './CADFiler';\r\nimport { CADObject } from './CADObject';\r\nimport { CreateObjectData } from './CreateObjectData';\r\nimport { EraseEntityData } from \"./EraseEntityData\";\r\nimport { HistorycRecord } from './HistorycRecord';\r\nimport { ObjectAllDataHistoryRecord } from './ObjectAllDataHistoryRecord';\r\nimport { ObjectId } from './ObjectId';\r\n\r\n/**\r\n * 命令的历史记录\r\n */\r\n@Factory\r\nexport class CommandHistoryRecord extends CADObject\r\n{\r\n constructor(public CommandName = \"\")\r\n {\r\n super();\r\n }\r\n //历史记录表\r\n private _HistoryList = new Map();\r\n private _CreateObjects = new Map();\r\n\r\n get HistoryList(): Map\r\n {\r\n return this._HistoryList;\r\n }\r\n\r\n private GetObjectHistoryList(id: ObjectId)\r\n {\r\n if (!this._HistoryList.has(id))\r\n this._HistoryList.set(id, []);\r\n return this._HistoryList.get(id);\r\n }\r\n\r\n EndCommand()\r\n {\r\n for (let [id, hrs] of this._HistoryList)\r\n {\r\n let hr = this.GetObjectAllDataRecord(hrs);\r\n if (hr)\r\n hr.WriteRedo();\r\n }\r\n\r\n for (let [, hr] of this._CreateObjects)\r\n {\r\n let h = hr.redoData as CreateObjectData;\r\n h.Save();\r\n }\r\n }\r\n\r\n //获取对象快照记录(如果有的话)\r\n GetObjectAllDataRecord(historyList: HistorycRecord[]): ObjectAllDataHistoryRecord | undefined\r\n {\r\n if (historyList.length > 0)\r\n {\r\n let hr = historyList[historyList.length - 1];\r\n if (hr instanceof ObjectAllDataHistoryRecord)\r\n return hr;\r\n }\r\n }\r\n\r\n //对象写入历史记录\r\n WriteObjectHistoryPath(obj: CADObject, history: HistorycRecord)\r\n {\r\n if (!obj || this._CreateObjects.has(obj))//某些时候obj可能为空\r\n return;\r\n\r\n let hrs = this.GetObjectHistoryList(obj.Id);\r\n if (this.GetObjectAllDataRecord(hrs))\r\n return;\r\n\r\n if (history.redoData instanceof CreateObjectData)\r\n this._CreateObjects.set(history.redoData.Object, history);\r\n\r\n hrs.push(history);\r\n }\r\n\r\n WriteObjectSnapshoot(obj: CADObject): void\r\n {\r\n if (!obj.Id)\r\n {\r\n console.warn(\"错误!CreateObjectHistory\");\r\n return;\r\n }\r\n\r\n if (this._CreateObjects.has(obj))\r\n return;\r\n\r\n let hrs = this.GetObjectHistoryList(obj.Id);\r\n if (this.GetObjectAllDataRecord(hrs))\r\n return;\r\n\r\n let hr = new ObjectAllDataHistoryRecord(obj.Id);\r\n hrs.push(hr);\r\n }\r\n\r\n CreateEraseHistory(obj: CADObject, isErase: boolean)\r\n {\r\n let hr = new HistorycRecord();\r\n hr.undoData = new EraseEntityData(!isErase);\r\n hr.redoData = new EraseEntityData(isErase);\r\n this.WriteObjectHistoryPath(obj, hr);\r\n }\r\n\r\n //#region -------------------------File-------------------------\r\n //对象应该实现dataIn和DataOut的方法,为了对象的序列化和反序列化\r\n\r\n\r\n //对象从文件中读取数据,初始化自身\r\n ReadFile(file: CADFiler)\r\n {\r\n let ver = file.Read();\r\n this.CommandName = file.Read();\r\n let cout = file.Read();\r\n\r\n this._HistoryList.clear();\r\n for (let i = 0; i < cout; i++)\r\n {\r\n let id = file.ReadObjectId();\r\n let length = file.Read();\r\n let hrs: HistorycRecord[] = [];\r\n this._HistoryList.set(id, hrs);\r\n for (let j = 0; j < length; j++)\r\n {\r\n let hr = file.ReadObject() as HistorycRecord;\r\n hrs.push(hr);\r\n }\r\n }\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(1);\r\n file.Write(this.CommandName);\r\n file.Write(this._HistoryList.size);\r\n for (let [id, hrs] of this._HistoryList)\r\n {\r\n file.WriteObjectId(id);\r\n file.Write(hrs.length);\r\n for (let hr of hrs)\r\n {\r\n file.WriteObject(hr);\r\n }\r\n }\r\n }\r\n //#endregion\r\n}\r\n","import { RenderType } from \"../../GraphicsSystem/RenderType\";\r\nimport { Factory } from \"../CADFactory\";\r\nimport { CADFiler } from \"../CADFiler\";\r\nimport { CADObject } from \"../CADObject\";\r\n\r\n@Factory\r\nexport class CameraSnapshootRecord extends CADObject\r\n{\r\n Name: string = \"\";\r\n _CameraData = new CADFiler;\r\n\r\n get RenderType(): RenderType\r\n {\r\n return this._CameraData.Data[7];\r\n }\r\n\r\n //#region -------------------------File-------------------------\r\n\r\n //对象从文件中读取数据,初始化自身\r\n ReadFile(file: CADFiler)\r\n {\r\n let ver = file.Read();\r\n this._CameraData.Data = file.Read();\r\n this.Name = file.Read();\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(1);\r\n file.Write(this._CameraData.Data);\r\n file.Write(this.Name);\r\n }\r\n //#endregion\r\n}\r\n","import { CADFiler } from \"./CADFiler\";\r\nimport { ObjectId, RelevancyType } from \"./ObjectId\";\r\n\r\nexport class DeepCloneFiler extends CADFiler\r\n{\r\n constructor(public idMaping = new Map())\r\n {\r\n super();\r\n }\r\n\r\n ReadObjectId()\r\n {\r\n let index = this.Read();\r\n if (index <= 0) return;\r\n\r\n let id = this.idMaping.get(index);\r\n if (id) return id;\r\n\r\n id = new ObjectId();\r\n this.idMaping.set(index, id);\r\n\r\n return id;\r\n }\r\n\r\n ReadSoftObjectId()\r\n {\r\n let id = this.ReadObjectId();\r\n if (id)\r\n id._RelevancyType = RelevancyType.Soft;\r\n return id;\r\n }\r\n\r\n ReadHardObjectId()\r\n {\r\n let id = this.ReadObjectId();\r\n if (id)\r\n id._RelevancyType = RelevancyType.Hard;\r\n return id;\r\n }\r\n\r\n hardObjectIds: Set = new Set();\r\n cloned: Set = new Set();\r\n WriteHardObjectId(id: ObjectId)\r\n {\r\n if (id && id.Index >= 100 && !this.cloned.has(id.Index)) //当存在id时,表示对象正在被拷贝,或者已经拷贝完成\r\n this.hardObjectIds.add(id.Index);\r\n\r\n return this.WriteObjectId(id);\r\n }\r\n}\r\n","import { Factory } from \"./CADFactory\";\r\nimport { GroupRecord } from \"./GroupTableRecord\";\r\nimport { ObjectCollection } from \"./ObjectCollection\";\r\nimport { CADFiler } from \"./CADFiler\";\r\nimport { Status } from \"../Common/Status\";\r\n\r\n@Factory\r\nexport class GroupTable extends ObjectCollection\r\n{\r\n\r\n Append(object: GroupRecord, isCheckObjectCleanly = true)\r\n {\r\n let id = super.Append(object, isCheckObjectCleanly);\r\n\r\n if (id)\r\n object.Owner = this.Id;\r\n\r\n return id;\r\n }\r\n\r\n Add(record: GroupRecord, isCheckObjectCleanly = true): Status\r\n {\r\n let id = this.Append(record, isCheckObjectCleanly);\r\n if (id)\r\n return Status.True;\r\n else\r\n return Status.False;\r\n }\r\n\r\n //对象从文件中读取数据,初始化自身\r\n ReadFile(file: CADFiler)\r\n {\r\n let ver = file.Read();\r\n super.ReadFile(file);\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(1);\r\n super.WriteFile(file);\r\n }\r\n //#endregion\r\n\r\n}\r\n","\r\nexport let CommandState = {\r\n CommandIng: false,\r\n};\r\n","import { LogEnable, ReportErrorWrap } from '../Common/Log';\r\nimport { Intent, Toaster } from '../Common/Toaster';\r\nimport { CommandState } from '../Editor/CommandState';\r\nimport { Factory } from './CADFactory';\r\nimport { CADFiler } from './CADFiler';\r\nimport { CADObject } from './CADObject';\r\nimport { CommandHistoryRecord } from './CommandHistoryRecord';\r\n\r\n/**\r\n * 历史记录管理\r\n *\r\n * 关于子命令标记:\r\n * 当子命令标记出现的时候,才允许出现局部撤销,否则命令执行中不允许撤销,触发命令重写了撤销和重做的事件.\r\n */\r\n@Factory\r\nexport class HistoricManage extends CADObject\r\n{\r\n curIndex: number = -1; //当前执行位置,也就是当前的状态, undo时,撤销当前状态,redo时,应用下一个状态\r\n lockIndex = -1; //锁定极限撤销索引(将无法在往前撤销)\r\n historyRecord: CommandHistoryRecord[] = []; //历史记录\r\n doing: boolean = false;//正在执行工作 例如: 文件读取中 撤销中 重做中\r\n Enable: boolean = true;\r\n\r\n _SignalCommandHistory: HistoricManage;\r\n\r\n constructor(public useSubCommand = true)\r\n {\r\n super();\r\n }\r\n\r\n Clear()\r\n {\r\n this.historyRecord.length = 0;\r\n this.curIndex = -1;\r\n }\r\n\r\n //对象从文件中读取数据,初始化自身\r\n ReadFile(file: CADFiler)\r\n {\r\n let ver = file.Read();\r\n this.curIndex = file.Read();\r\n let cout = file.Read();\r\n this.historyRecord = [];\r\n for (let i = 0; i < cout; i++)\r\n {\r\n this.historyRecord.push(file.ReadObject() as CommandHistoryRecord);\r\n }\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(1);\r\n file.Write(this.curIndex);\r\n file.Write(this.historyRecord.length);\r\n for (let rec of this.historyRecord)\r\n {\r\n file.WriteObject(rec);\r\n }\r\n }\r\n\r\n //命令正在当前状态\r\n get IsNow(): boolean\r\n {\r\n return this.historyRecord.length !== 0 && this.curIndex === this.historyRecord.length - 1;\r\n }\r\n\r\n get UndoData(): CommandHistoryRecord\r\n {\r\n if (this.doing || this.Enable === false)\r\n return undefined;\r\n if (!this.IsNow)\r\n {\r\n this.StartCmd(\"\");\r\n if (LogEnable.Display)\r\n console.warn(\"未标记命令!\");\r\n }\r\n\r\n if (!CommandState.CommandIng)\r\n {\r\n //避免用户心理负担,暂时关闭这个,使用遥测\r\n if (!ReportErrorWrap.IsProduction && ReportErrorWrap.ReportError)\r\n {\r\n ReportErrorWrap.ReportError(new Error().stack, \"命令未执行中,但是却产生了错误了记录!\");\r\n Toaster({\r\n message: \"警告:命令未执行中,但是却产生了错误了历史记录! (不会造成图纸错误,但是会影响撤销(Ctrl+Z)重做(Ctrl+Y),请与我们联系,将错误报告给我们)\",\r\n timeout: 5000,\r\n intent: Intent.WARNING,\r\n key: \"no_command_his\"\r\n });\r\n }\r\n // else jest会警告这个\r\n // console.error(\"命令未执行中,但是却产生了错误了记录!\");\r\n }\r\n\r\n if (this._SignalCommandHistory && CommandState.CommandIng)\r\n return this._SignalCommandHistory.UndoData;\r\n else\r\n return this.historyRecord[this.historyRecord.length - 1];\r\n }\r\n\r\n //开始子命令标记\r\n StartMark(subCommandName = \"\")\r\n {\r\n if (!this.useSubCommand)\r\n return;\r\n\r\n if (!this._SignalCommandHistory)\r\n this._SignalCommandHistory = new HistoricManage(false);\r\n\r\n this._SignalCommandHistory.EndCmd();\r\n this._SignalCommandHistory.StartCmd(subCommandName);\r\n }\r\n\r\n /**\r\n * 不要在命令中直接调用这个函数!\r\n * 请调用 commandMachine.CommandStart\r\n */\r\n StartCmd(cmdName: string)\r\n {\r\n if (cmdName === \"REDO\" || cmdName === \"U\") return;\r\n\r\n //删除当前状态以后的所有状态\r\n this.historyRecord.splice(this.curIndex + 1, this.historyRecord.length - (this.curIndex + 1));\r\n this.historyRecord.push(new CommandHistoryRecord(cmdName));\r\n this.curIndex = this.historyRecord.length - 1;\r\n }\r\n\r\n CurrentHasHistory(): boolean\r\n {\r\n let lastRec = this.historyRecord[this.curIndex];\r\n if (!lastRec) return false;\r\n this.MergeSubCommmand(lastRec);\r\n return lastRec.HistoryList.size > 0;\r\n }\r\n\r\n //结束当前的命令,返回是否写入历史记录\r\n EndCmd(): boolean\r\n {\r\n if (!this.IsNow)\r\n return false;\r\n let lastRec = this.historyRecord[this.curIndex];\r\n if (lastRec)\r\n {\r\n this.MergeSubCommmand(lastRec);\r\n lastRec.EndCommand();\r\n if (lastRec.HistoryList.size === 0)\r\n {\r\n this.historyRecord.pop();\r\n this.curIndex--;\r\n return false;\r\n }\r\n // else if (this.historyRecord.length > 20)//最大历史记录个数为20 (如果在这边直接删除记录,会导致临时编辑器错误)\r\n // {\r\n // this.historyRecord.shift();\r\n // this.curIndex--;\r\n // }\r\n else if (this.historyRecord.length !== 0 && this.historyRecord.length % 50 === 0)\r\n Toaster({\r\n message: `警告:已经有${this.historyRecord.length}个命令历史记录了,建议您使用PU命令进行清理,避免图纸卡顿和崩溃!`,\r\n timeout: 15000,\r\n intent: Intent.WARNING,\r\n });\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n /**\r\n * 获得这个命令修改的对象列表\r\n */\r\n get ChangeObjects(): Set\r\n {\r\n let lastRec = this.historyRecord[this.curIndex];\r\n\r\n let objects = new Set();\r\n if (lastRec)\r\n {\r\n this.MergeSubCommmand(lastRec);\r\n for (let [id] of lastRec.HistoryList)\r\n {\r\n objects.add(id.Object);\r\n }\r\n }\r\n return objects;\r\n }\r\n GetRangeChangeObject(startIndex: number, endIndex: number): Set\r\n {\r\n let objects = new Set();\r\n for (let i = startIndex; i < endIndex; i++)\r\n for (let [id] of this.historyRecord[i].HistoryList)\r\n objects.add(id.Object);\r\n return objects;\r\n }\r\n\r\n /**\r\n * 合并命令历史记录,因为命令记录器允许存在子记录,所以当命令结束时,应该把子记录合并到父记录中,子记录将被摧毁.\r\n */\r\n private MergeSubCommmand(lastRec: CommandHistoryRecord)\r\n {\r\n if (this._SignalCommandHistory)\r\n {\r\n for (let rc of this._SignalCommandHistory.historyRecord)\r\n {\r\n for (let [id, hrs] of rc.HistoryList)\r\n {\r\n if (id?.Object)//某些情况下可能为空\r\n for (let hr of hrs)\r\n lastRec.WriteObjectHistoryPath(id.Object, hr);\r\n }\r\n }\r\n this._SignalCommandHistory = undefined;\r\n }\r\n }\r\n\r\n Undo(): boolean\r\n {\r\n //如果命令执行中,那么进行局部撤销.\r\n if (CommandState.CommandIng && this.useSubCommand)\r\n {\r\n if (this._SignalCommandHistory)\r\n return this._SignalCommandHistory.Undo();\r\n return;\r\n }\r\n\r\n if (this.curIndex === this.lockIndex) return;//被锁定,无法撤销\r\n\r\n this.EndCmd();\r\n let historyRec = this.historyRecord[this.curIndex];\r\n if (!historyRec)\r\n return false;\r\n this.doing = true;\r\n for (let [id, recList] of historyRec.HistoryList)\r\n {\r\n for (let i = recList.length; i--;)\r\n {\r\n id?.Object?.ApplyPartialUndo(recList[i].undoData);\r\n }\r\n }\r\n this.UndoEvent(historyRec.CommandName, historyRec);\r\n this.curIndex--;\r\n this.doing = false;\r\n return true;\r\n }\r\n Redo()\r\n {\r\n //如果命令执行中,那么进行局部重做.\r\n if (CommandState.CommandIng && this.useSubCommand)\r\n {\r\n if (this._SignalCommandHistory)\r\n return this._SignalCommandHistory.Redo();\r\n return;\r\n }\r\n\r\n let historyRec = this.historyRecord[this.curIndex + 1];\r\n if (!historyRec)\r\n return false;\r\n this.doing = true;\r\n for (let [id, recList] of historyRec.HistoryList)\r\n {\r\n for (let rec of recList)\r\n {\r\n id.Object.ApplyPartialUndo(rec.redoData);\r\n }\r\n }\r\n this.RedoEvent(historyRec.CommandName, historyRec);\r\n this.curIndex++;\r\n this.doing = false;\r\n return true;\r\n }\r\n\r\n UndoEvent(cmdName: string, historyRec: CommandHistoryRecord)\r\n {\r\n }\r\n\r\n RedoEvent(cmdName: string, historyRec: CommandHistoryRecord)\r\n {\r\n }\r\n\r\n}\r\n","import { Box3, Color, Light as TLight, Vector3 } from 'three';\r\nimport { UpdateDraw } from '../../Common/Status';\r\nimport { ObjectSnapMode } from '../../Editor/ObjectSnapMode';\r\nimport { Box3Ext } from '../../Geometry/Box';\r\nimport { MoveMatrix } from '../../Geometry/GeUtils';\r\nimport { RenderType } from '../../GraphicsSystem/RenderType';\r\nimport { equaln } from '../../Nest/Common/Util';\r\nimport { AutoRecord } from '../AutoRecord';\r\nimport { Factory } from '../CADFactory';\r\nimport { CADFiler } from '../CADFiler';\r\nimport { CADObject } from '../CADObject';\r\nimport { Entity } from '../Entity/Entity';\r\n\r\n/**\r\n * 灯光实体基类\r\n */\r\n@Factory\r\nexport class Light extends Entity\r\n{\r\n OnlyRenderType = true;\r\n protected _Intensity: number = 2; //强度\r\n protected _LightColor: Color = new Color();//光源颜色\r\n @AutoRecord Temperature = 6500;//色温\r\n @AutoRecord IndirectLightingIntensity = 1; //0-200 间接光照强度\r\n //LightComponent extends LightComponentBase\r\n @AutoRecord SpecularScale = 1;//高光度范围 默认1 (物理)\r\n protected _ShowHelper = true;// Light.DefaultShowHelpr; 默认绘制的灯光总是有助手,避免让用户困惑\r\n protected _CaseShadow = true;//投射阴影\r\n protected _OpenLight = Light.DefaultOpenLight;//开灯\r\n static DefaultOpenLight = false;\r\n static DefaultCaseShadow = false;\r\n static DefaultShowHelpr = false;\r\n\r\n Clone()\r\n {\r\n return CADObject.prototype.Clone.call(this);\r\n }\r\n\r\n get CaseShadow() { return this._CaseShadow; }\r\n\r\n set CaseShadow(v: boolean)\r\n {\r\n if (v === this._CaseShadow) return;\r\n this.WriteAllObjectRecord();\r\n this._CaseShadow = v;\r\n this.Update();\r\n }\r\n\r\n get OpenLight() { return this._OpenLight; }\r\n\r\n set OpenLight(v: boolean)\r\n {\r\n if (v === this._OpenLight) return;\r\n this._OpenLight = v;\r\n this.Update();\r\n }\r\n\r\n //因为有set 所以必须11对应\r\n get Position()\r\n {\r\n return super.Position;\r\n }\r\n\r\n set Position(v: Vector3)\r\n {\r\n super.Position = v;\r\n this.Update(UpdateDraw.Geometry);\r\n }\r\n\r\n get Color()\r\n {\r\n return this._LightColor;\r\n }\r\n set Color(color: Color)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._LightColor = color;\r\n this.Update();\r\n }\r\n get ShowHelper()\r\n {\r\n return this._ShowHelper;\r\n }\r\n set ShowHelper(v: boolean)\r\n {\r\n if (v === this._ShowHelper) return;\r\n this.WriteAllObjectRecord();\r\n this._ShowHelper = v;\r\n this.Update();\r\n }\r\n\r\n get BoundingBoxInOCS()\r\n {\r\n return new Box3Ext(new Vector3(-0.05, -0.05, -0.05), new Vector3(0.05, 0.05, 0.05));\r\n }\r\n\r\n get BoundingBox()\r\n {\r\n return new Box3().setFromCenterAndSize(this.Position, new Vector3(0.1, 0.1, 0.1));\r\n }\r\n\r\n GetObjectSnapPoints(\r\n snapMode: ObjectSnapMode,\r\n pickPoint: Vector3,\r\n lastPoint: Vector3\r\n ): Vector3[]\r\n {\r\n switch (snapMode)\r\n {\r\n case ObjectSnapMode.End:\r\n return this.GetGripPoints();\r\n }\r\n return [];\r\n }\r\n GetGripPoints(): Array\r\n {\r\n return [this.Position];\r\n }\r\n\r\n MoveGripPoints(indexList: number[], vec: Vector3)\r\n {\r\n this.ApplyMatrix(MoveMatrix(vec));\r\n this.Update();\r\n }\r\n UpdateDrawObject(type: RenderType, en: TLight)\r\n {\r\n en.intensity = this.WebIntensity;\r\n en.color = this._LightColor;\r\n en.visible = this._OpenLight;\r\n }\r\n get Intensity()\r\n {\r\n return this._Intensity;\r\n }\r\n\r\n set Intensity(v: number)\r\n {\r\n if (equaln(v, this._Intensity, 0.01)) return;\r\n this.WriteAllObjectRecord();\r\n this._Intensity = v;\r\n this.Update();\r\n }\r\n\r\n get WebIntensity()\r\n {\r\n return this._Intensity;\r\n }\r\n protected _ReadFile(file: CADFiler)\r\n {\r\n super._ReadFile(file);\r\n let ver = file.Read();\r\n this._LightColor = new Color(file.Read());\r\n this._Intensity = file.Read();\r\n if (typeof this._Intensity === \"string\")\r\n this._Intensity = parseFloat(this._Intensity);\r\n this._ShowHelper = file.Read();\r\n\r\n if (ver > 1)\r\n {\r\n this._LightColor.r = file.Read();\r\n this._LightColor.g = file.Read();\r\n this._LightColor.b = file.Read();\r\n\r\n this.Temperature = file.Read();\r\n this.IndirectLightingIntensity = file.Read();\r\n this.SpecularScale = file.Read();\r\n this._CaseShadow = file.Read();\r\n }\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._LightColor.getStyle());\r\n file.Write(this._Intensity);\r\n file.Write(this._ShowHelper);\r\n\r\n //ver2\r\n {\r\n file.Write(this._LightColor.r);\r\n file.Write(this._LightColor.g);\r\n file.Write(this._LightColor.b);\r\n\r\n file.Write(this.Temperature);\r\n file.Write(this.IndirectLightingIntensity);\r\n file.Write(this.SpecularScale);\r\n file.Write(this._CaseShadow);\r\n }\r\n }\r\n}\r\n","import { AmbientLight as TAmbientLight, Object3D } from \"three\";\r\nimport { RenderType } from \"../../GraphicsSystem/RenderType\";\r\nimport { Factory } from \"../CADFactory\";\r\nimport { Light } from \"./Light\";\r\n\r\n@Factory\r\nexport class AmbientLight extends Light\r\n{\r\n protected _Intensity = 0.9;\r\n protected _OpenLight = true;//开灯\r\n protected _CaseShadow: boolean = false;\r\n protected InitDrawObject(renderType: RenderType = RenderType.Wireframe): Object3D\r\n {\r\n let light = new TAmbientLight(this.Color, this._Intensity);\r\n return light;\r\n }\r\n}\r\n","import { Color, DirectionalLight, DirectionalLightHelper, LineBasicMaterial, Matrix4, Mesh, SphereBufferGeometry } from \"three\";\r\n\r\nexport class SunLightHelper extends DirectionalLightHelper\r\n{\r\n light: DirectionalLight;\r\n\r\n children: [Mesh];\r\n size: number;\r\n /**\r\n * @default undefined\r\n */\r\n color: Color | string | number;\r\n matrix: Matrix4;\r\n\r\n constructor(light: DirectionalLight, size: number, color?: Color)\r\n {\r\n const geometry = new SphereBufferGeometry(1, 16, 16);\r\n const material = new LineBasicMaterial({ fog: false });\r\n material.color = light.color;\r\n super(light, size, color);\r\n\r\n this.children[0].geometry = geometry.scale(400, 400, 400);\r\n this.children[0].material = material;\r\n\r\n this.light = light;\r\n this.color = color;\r\n }\r\n\r\n /**\r\n * @default false\r\n */\r\n matrixAutoUpdate: boolean;\r\n}\r\n","import { DirectionalLight as TDirectionalLight, Group, MathUtils, Matrix3, Matrix4, Object3D, Vector2, Vector3 } from \"three\";\r\nimport { UpdateDraw } from \"../../Common/Status\";\r\nimport { equalv3 } 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 { Light } from \"./Light\";\r\nimport { SunLightHelper } from \"./SunLightHelper\";\r\n\r\n/**\r\n * 平行光源\r\n */\r\n@Factory\r\nexport class DirectionalLight extends Light\r\n{\r\n protected _Intensity: number = 50; //强度\r\n //光源源角度 0-50\r\n @AutoRecord LightSourceAngle = 0.5357;\r\n //源软角度角度\r\n @AutoRecord LightSourceSoftAngle = 0;\r\n\r\n OnlyRenderType = true;\r\n private _Target = new Vector3();\r\n protected _ShowHelper = false;\r\n protected _OpenLight = true;//开灯\r\n\r\n constructor()\r\n {\r\n super();\r\n this.SpecularScale = 0;//高光度范围 默认0 关闭太阳光反射\r\n }\r\n\r\n //避免被删除\r\n Erase(isErase: boolean = true)\r\n {\r\n this.ShowHelper = !isErase;\r\n }\r\n\r\n /**\r\n * @param theta 身体旋转 角度(deg)\r\n * @param phi 头部旋转 角度(deg)\r\n */\r\n SetRotate(thetaDeg: number, phiDeg: number)\r\n {\r\n let phi = (180 - phiDeg) * MathUtils.DEG2RAD;\r\n\r\n let v = new Vector3(Math.cos(phi), 0, Math.sin(phi));\r\n\r\n let r = new Matrix3().rotate(MathUtils.DEG2RAD * thetaDeg);\r\n\r\n v.applyMatrix3(r);\r\n\r\n this.WriteAllObjectRecord();\r\n this._Target.setFromMatrixPosition(this._Matrix).sub(v);\r\n }\r\n\r\n get Target() { return this._Target.clone(); }\r\n set Target(p: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n if (!equalv3(p, this.Position))\r\n {\r\n this._Target.copy(p);\r\n this.Update();\r\n }\r\n }\r\n get WebIntensity()\r\n {\r\n let x = this._Intensity / 150;\r\n x = Math.pow(x, 0.4);\r\n return x * 1.4; // 7/5=1.25\r\n }\r\n\r\n ApplyMatrix(m: Matrix4)\r\n {\r\n super.ApplyMatrix(m);\r\n this._Target.applyMatrix4(m);\r\n this.Update(UpdateDraw.Geometry);\r\n return this;\r\n }\r\n GetGripPoints(): Array\r\n {\r\n if (this.ShowHelper)\r\n return [this.Position, this._Target];\r\n else\r\n return [];\r\n }\r\n MoveGripPoints(indexList: number[], vec: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n if (indexList[0] === 0)\r\n this.Position = this.Position.add(vec);\r\n else\r\n this.Target = this.Target.add(vec);\r\n }\r\n protected InitDrawObject(renderType: RenderType = RenderType.Wireframe): Object3D\r\n {\r\n let lightGroup = new Group();\r\n let light = new TDirectionalLight(this._LightColor, this.WebIntensity);\r\n Object.defineProperty(light, \"castShadow\", {\r\n get: () => this.CaseShadow//HostApplicationServices.isShowLightShadow //太阳光无视这个配置!\r\n });\r\n light.shadow.camera.matrixAutoUpdate = true;\r\n light.shadow.camera.near = 1;\r\n light.shadow.camera.far = 100000;\r\n light.shadow.mapSize = new Vector2(2048, 2048);\r\n let helper = new SunLightHelper(light, 500);\r\n helper.lightPlane.matrixAutoUpdate = true;\r\n lightGroup.add(light, helper);\r\n\r\n lightGroup.matrixAutoUpdate = false;\r\n lightGroup.matrix.copy(this._Matrix);\r\n lightGroup.updateMatrixWorld(true);\r\n this.UpdateDrawObject(renderType, lightGroup);\r\n return lightGroup;\r\n }\r\n UpdateDrawObject(type: RenderType, en: Object3D)\r\n {\r\n let light = en.children[0] as TDirectionalLight;\r\n super.UpdateDrawObject(type, light);\r\n light.target.position.copy(this._Target);\r\n light.target.updateMatrix();\r\n light.target.updateMatrixWorld(true);\r\n\r\n en.updateMatrixWorld(true);\r\n\r\n let helper = en.children[1] as SunLightHelper;\r\n helper.visible = this._ShowHelper;\r\n if (this._ShowHelper)\r\n {\r\n helper.update();\r\n helper.matrix = light.matrix;\r\n helper.targetLine.updateMatrix();\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();\r\n this._Target.fromArray(file.Read());\r\n\r\n if (ver > 1)\r\n {\r\n this.LightSourceAngle = file.Read();\r\n this.LightSourceSoftAngle = file.Read();\r\n }\r\n }\r\n WriteFile(file: CADFiler)\r\n {\r\n super.WriteFile(file);\r\n file.Write(2);//ver\r\n file.Write(this._Target.toArray());\r\n\r\n //ver2\r\n file.Write(this.LightSourceAngle);\r\n file.Write(this.LightSourceSoftAngle);\r\n }\r\n}\r\n","import { Color, HemisphereLight as THemisphereLight, Light as TLight, Object3D } from \"three\";\r\nimport { RenderType } from \"../../GraphicsSystem/RenderType\";\r\nimport { AutoRecord } from \"../AutoRecord\";\r\nimport { Factory } from \"../CADFactory\";\r\nimport { CADFiler } from \"../CADFiler\";\r\nimport { Light } from \"./Light\";\r\n\r\n@Factory\r\nexport class HemisphereLight extends Light\r\n{\r\n private _GroundColor = new Color(); //UE有这个属性 但是默认是黑的\r\n protected _Intensity = 1;\r\n @AutoRecord AutoExposure = false;//自动曝光\r\n @AutoRecord ExposureCompensation = 1;//默认为1\r\n protected _OpenLight = true;//开灯\r\n\r\n get GroundColor() { return this._GroundColor; }\r\n\r\n set GroundColor(color: Color)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._GroundColor = color;\r\n this.Update();\r\n }\r\n\r\n get WebIntensity()\r\n {\r\n return Math.min(this._Intensity, 4) / 5;\r\n }\r\n\r\n protected InitDrawObject(renderType: RenderType = RenderType.Wireframe): Object3D\r\n {\r\n let light = new THemisphereLight(this.Color, this._LightColor, this.WebIntensity);\r\n return light;\r\n }\r\n\r\n UpdateDrawObject(type: RenderType, en: TLight)\r\n {\r\n super.UpdateDrawObject(type, en);\r\n let lg = en as THemisphereLight;\r\n lg.groundColor = this._GroundColor;\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._GroundColor.fromArray(file.Read());\r\n\r\n if (ver > 1)\r\n {\r\n this.AutoExposure = file.Read();\r\n this.ExposureCompensation = file.Read();\r\n }\r\n\r\n }\r\n\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n super.WriteFile(file);\r\n file.Write(2);//ver\r\n file.Write(this._GroundColor.toArray());\r\n\r\n //ver2\r\n file.Write(this.AutoExposure);\r\n file.Write(this.ExposureCompensation);\r\n }\r\n}\r\n","import { SymbolTable } from \"./SymbolTable\";\r\nimport { PhysicalMaterialRecord } from \"./PhysicalMaterialRecord\";\r\n\r\nexport class MaterialTable extends SymbolTable\r\n{\r\n\r\n get Materials()\r\n {\r\n return this.Symbols as Map;\r\n }\r\n\r\n Remove(record: PhysicalMaterialRecord)\r\n {\r\n return super.Remove(record);\r\n }\r\n\r\n GetAt(name: string): PhysicalMaterialRecord | undefined\r\n {\r\n return super.GetAt(name) as PhysicalMaterialRecord;\r\n }\r\n\r\n Has(name: string)\r\n {\r\n return super.Has(name);\r\n }\r\n\r\n AllocateName(name: string = \"材质\"): string\r\n {\r\n return super.AllocateName(name);\r\n }\r\n}\r\n","import { Status } from \"../../Common/Status\";\r\nimport { Factory } from \"../CADFactory\";\r\nimport { ObjectCollection } from \"../ObjectCollection\";\r\nimport { ProcessingGroupRecord } from \"./ProcessingGroupRecord\";\r\n\r\n@Factory\r\nexport class ProcessingGroupTable extends ObjectCollection\r\n{\r\n Append(object: ProcessingGroupRecord, isCheckObjectCleanly = true)\r\n {\r\n let id = super.Append(object, isCheckObjectCleanly);\r\n\r\n if (id)\r\n object.Owner = this.Id;\r\n\r\n return id;\r\n }\r\n\r\n Add(record: ProcessingGroupRecord, isCheckObjectCleanly = true): Status\r\n {\r\n let id = this.Append(record, isCheckObjectCleanly);\r\n if (id)\r\n return Status.True;\r\n else\r\n return Status.False;\r\n }\r\n\r\n Remove(record: ProcessingGroupRecord)\r\n {\r\n return super.Remove(record);\r\n }\r\n}\r\n","import { Factory } from \"../CADFactory\";\r\nimport { ObjectCollection } from \"../ObjectCollection\";\r\nimport { TemplateRecord } from \"./TemplateRecord\";\r\nimport { Status } from \"../../Common/Status\";\r\n\r\n@Factory\r\nexport class TemplateTable extends ObjectCollection\r\n{\r\n Append(object: TemplateRecord, isCheckObjectCleanly = true)\r\n {\r\n let id = super.Append(object, isCheckObjectCleanly);\r\n\r\n if (id)\r\n object.Owner = this.Id;\r\n\r\n return id;\r\n }\r\n\r\n Add(record: TemplateRecord, isCheckObjectCleanly = true): Status\r\n {\r\n let id = this.Append(record, isCheckObjectCleanly);\r\n if (id)\r\n return Status.True;\r\n else\r\n return Status.False;\r\n }\r\n}\r\n","import { MirroredRepeatWrapping, Texture, Wrapping } from 'three';\r\nimport { AutoRecord } from './AutoRecord';\r\nimport { Factory } from './CADFactory';\r\nimport { CADFiler } from './CADFiler';\r\nimport { SymbolTableRecord } from './SymbolTableRecord';\r\n\r\n/**\r\n * 数据化的贴图类.实现了序列化.\r\n */\r\n@Factory\r\nexport class TextureTableRecord extends SymbolTableRecord\r\n{\r\n private wrapS: Wrapping = MirroredRepeatWrapping;//横向(水平)平铺\r\n private wrapT: Wrapping = MirroredRepeatWrapping;//竖向(垂直)平铺\r\n @AutoRecord repeatX: number = 1;//这里已经变成了贴图的尺寸了\r\n @AutoRecord repeatY: number = 1;\r\n @AutoRecord rotation: number = 0;//旋转 弧度deg\r\n @AutoRecord imageUrl: string = \"\";\r\n\r\n @AutoRecord moveX = 0;//材质位移\r\n @AutoRecord moveY = 0;\r\n\r\n @AutoRecord imgUrl: string = \"\";\r\n\r\n set WrapS(wrap: Wrapping)\r\n {\r\n if (wrap !== this.wrapS)\r\n {\r\n this.WriteAllObjectRecord();\r\n this.wrapS = wrap;\r\n }\r\n }\r\n get WrapS() { return this.wrapS; };\r\n get WrapT() { return this.wrapT; };\r\n\r\n set WrapT(wrap: Wrapping)\r\n {\r\n if (wrap !== this.wrapT)\r\n {\r\n this.WriteAllObjectRecord();\r\n this.wrapT = wrap;\r\n }\r\n }\r\n\r\n\r\n private texture: Texture = new Texture();\r\n async Update()\r\n {\r\n return \"\";\r\n }\r\n\r\n private waits: Function[] = [];\r\n async WaitUpdate()\r\n {\r\n if (this.texture.image) return;\r\n let p = new Promise((res, rej) =>\r\n {\r\n this.waits.push(res);\r\n });\r\n return p;\r\n }\r\n GetThreeTexture()\r\n {\r\n return this.texture;\r\n }\r\n\r\n //#region -------------------------File-------------------------\r\n ReadFile(file: CADFiler)\r\n {\r\n super.ReadFile(file);\r\n let ver = file.Read();\r\n this.wrapS = file.Read();\r\n this.wrapT = file.Read();\r\n this.repeatX = file.Read();\r\n this.repeatY = file.Read();\r\n this.rotation = file.Read();\r\n this.imageUrl = file.Read();\r\n\r\n if (ver > 1)\r\n {\r\n this.moveX = file.Read();\r\n this.moveY = file.Read();\r\n }\r\n\r\n this.Update();\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n super.WriteFile(file);\r\n file.Write(2);\r\n\r\n file.Write(this.wrapS);\r\n file.Write(this.wrapT);\r\n file.Write(this.repeatX);\r\n file.Write(this.repeatY);\r\n file.Write(this.rotation);\r\n file.Write(this.imageUrl);\r\n\r\n file.Write(this.moveX);\r\n file.Write(this.moveY);\r\n }\r\n //#endregion\r\n}\r\n","import { MathUtils } from \"three\";\r\nimport { Factory } from \"./CADFactory\";\r\nimport { SymbolTable } from \"./SymbolTable\";\r\nimport { TextureTableRecord } from \"./Texture\";\r\n\r\n@Factory\r\nexport class TextureTable extends SymbolTable\r\n{\r\n AllocateName()\r\n {\r\n do\r\n {\r\n let name = MathUtils.generateUUID();\r\n if (!this.Has(name))\r\n return name;\r\n } while (true);\r\n }\r\n get Textures(): Map\r\n {\r\n return this.Symbols as Map;\r\n }\r\n}\r\n","import { DeepCloneFiler } from \"./DeepCloneFiler\";\r\nimport { ObjectId } from \"./ObjectId\";\r\n\r\nexport class WblockCloneFiler extends DeepCloneFiler\r\n{\r\n\r\n}\r\n\r\n/**\r\n * 用于插入图纸,对所有的软引用变成硬引用,以保证所有的关联对象都能被插入进来\r\n */\r\nexport class WblockCloneFiler2 extends DeepCloneFiler\r\n{\r\n WriteObjectId(id: ObjectId): this\r\n {\r\n if (id && id.Index >= 100 && !this.cloned.has(id.Index)) //当存在id时,表示对象正在被拷贝,或者已经拷贝完成\r\n this.hardObjectIds.add(id.Index);\r\n return super.WriteObjectId(id);\r\n }\r\n}\r\n","import { MirroredRepeatWrapping, Vector3 } from 'three';\r\nimport { HostApplicationServices } from '../ApplicationServices/HostApplicationServices';\r\nimport { DuplicateRecordCloning } from '../Common/Status';\r\nimport { BlockTableRecord } from './BlockTableRecord';\r\nimport { Factory } from './CADFactory';\r\nimport { CADFiler } from './CADFiler';\r\nimport { CADObject } from './CADObject';\r\nimport { CameraSnapshootRecord } from './CameraSnapshoot/CameraSnapshootRecord';\r\nimport { DeepCloneFiler } from './DeepCloneFiler';\r\nimport { Entity } from './Entity/Entity';\r\nimport { GroupTable } from './GroupTable';\r\nimport { HistoricManage } from './HistoricManage';\r\nimport { IdMaping } from './IdMaping';\r\nimport { AmbientLight } from './Lights/AmbientLight';\r\nimport { DirectionalLight } from './Lights/DirectionalLight';\r\nimport { HemisphereLight } from './Lights/HemisphereLight';\r\nimport { Light } from './Lights/Light';\r\nimport { MaterialTable } from './MaterialTable';\r\nimport { ObjectId, RelevancyType } from './ObjectId';\r\nimport { OwnerContainer } from './OwnerContainer';\r\nimport { PhysicalMaterialRecord } from './PhysicalMaterialRecord';\r\nimport { ProcessingGroupTable } from './ProcessingGroup/ProcessingGroupTable';\r\nimport { SymbolTable } from './SymbolTable';\r\nimport { SymbolTableRecord } from './SymbolTableRecord';\r\nimport { TemplateTable } from './Template/TemplateTable';\r\nimport { TextureTableRecord } from './Texture';\r\nimport { TextureTable } from './TextureTable';\r\nimport { WblockCloneFiler } from './WblockCloneFiler';\r\n\r\n@Factory\r\nexport class Database\r\n{\r\n //历史记录(撤销重做)\r\n hm: HistoricManage;\r\n\r\n //各种表(材质 贴图 模块 编组 加工组)\r\n MaterialTable: MaterialTable;\r\n TextureTable: TextureTable;\r\n TemplateTable: TemplateTable;\r\n GroupTable: GroupTable;\r\n ProcessingGroupTable: ProcessingGroupTable;\r\n\r\n //模型空间(里面有模型空间的实体列表)\r\n ModelSpace: BlockTableRecord;\r\n //布局空间\r\n LayoutSpace: BlockTableRecord;\r\n //模型空间的灯光\r\n Lights: BlockTableRecord;\r\n\r\n //相机快照记录\r\n CameraSnapshoots: CameraSnapshootRecord[] = [];\r\n\r\n //固定灯源(天光 太阳光 环境光)\r\n AmbientLight: AmbientLight;\r\n SunLight: DirectionalLight;\r\n HemisphereLight: HemisphereLight;\r\n\r\n //默认材质\r\n DefaultMaterial: PhysicalMaterialRecord;\r\n\r\n private idIndex = 1;\r\n private idMap = new Map();\r\n constructor(buildDefaultDrawing = false, private defaultDatabase = false, disableHistoric = false)\r\n {\r\n this.ModelSpace = new BlockTableRecord().SetOwnerDatabase(this);\r\n this.MaterialTable = new MaterialTable().SetOwnerDatabase(this);\r\n this.TextureTable = new TextureTable().SetOwnerDatabase(this);\r\n this.TemplateTable = new TemplateTable().SetOwnerDatabase(this);\r\n this.GroupTable = new GroupTable().SetOwnerDatabase(this);\r\n this.Lights = new BlockTableRecord().SetOwnerDatabase(this);\r\n this.ProcessingGroupTable = new ProcessingGroupTable().SetOwnerDatabase(this);\r\n this.hm = new HistoricManage().SetDefaultDb(this);\r\n this.hm.Enable = false;\r\n this.LayoutSpace = new BlockTableRecord().SetOwnerDatabase(this);\r\n\r\n if (buildDefaultDrawing)\r\n {\r\n this.idIndex = 70;\r\n this.DefaultMaterial = new PhysicalMaterialRecord();\r\n this.DefaultMaterial.Name = \"默认\";\r\n let texture = new TextureTableRecord();\r\n texture.WrapS = MirroredRepeatWrapping;\r\n texture.WrapT = MirroredRepeatWrapping;\r\n texture.repeatX = 1;\r\n texture.repeatY = 1;\r\n this.TextureTable.Add(texture);\r\n this.DefaultMaterial.map = texture.Id;\r\n this.DefaultMaterial.roughnessMap = texture.Id;\r\n this.DefaultMaterial.bumpMap = texture.Id;\r\n\r\n this.MaterialTable.Add(this.DefaultMaterial);\r\n\r\n texture.Update();\r\n this.SettingDefaultMaterial();\r\n\r\n //初始化灯光\r\n this.InitLight();\r\n }\r\n\r\n this.hm.Enable = !disableHistoric;\r\n\r\n //100以内的id是系统保留id,默认初始化内部对象.\r\n this.idIndex = 100;\r\n }\r\n\r\n private InitLight()\r\n {\r\n this.idIndex = 80;\r\n this.AmbientLight = new AmbientLight();\r\n this.SunLight = new DirectionalLight();\r\n this.SunLight.OCSNoClone.setPosition(4000, -4000, 4000);\r\n\r\n this.HemisphereLight = new HemisphereLight();\r\n this.SunLight.Visible = true;\r\n this.HemisphereLight.Visible = true;\r\n this.Lights.Add(this.AmbientLight);\r\n this.Lights.Add(this.SunLight);\r\n this.Lights.Add(this.HemisphereLight);\r\n }\r\n\r\n SettingDefaultMaterial()\r\n {\r\n if (!this.defaultDatabase)\r\n return;\r\n\r\n this.DefaultMaterial = this.GetObjectId(71)?.Object as PhysicalMaterialRecord ?? this.DefaultMaterial;\r\n this.DefaultMaterial.Update();\r\n HostApplicationServices.DefaultMeshMaterial = this.DefaultMaterial.Material;\r\n }\r\n\r\n Destroy()\r\n {\r\n this.idMap.clear();\r\n this.ModelSpace.Destroy();\r\n this.LayoutSpace.Destroy();\r\n this.MaterialTable.Destroy();\r\n this.TextureTable.Destroy();\r\n this.TemplateTable.Destroy();\r\n this.GroupTable.Destroy();\r\n this.Lights.Destroy();\r\n this.ProcessingGroupTable.Destroy();\r\n this.hm.Destroy();\r\n this.CameraSnapshoots.length = 0;\r\n this.hm.historyRecord.length = 0;\r\n\r\n this.idIndex = 1;\r\n this.ModelSpace.SetOwnerDatabase(this);\r\n this.MaterialTable.SetOwnerDatabase(this);\r\n this.TextureTable.SetOwnerDatabase(this);\r\n this.TemplateTable.SetOwnerDatabase(this);\r\n this.GroupTable.SetOwnerDatabase(this);\r\n this.Lights.SetOwnerDatabase(this);\r\n this.ProcessingGroupTable.SetOwnerDatabase(this);\r\n this.hm.SetDefaultDb(this);\r\n this.LayoutSpace.SetOwnerDatabase(this);\r\n this.idIndex = 100;\r\n }\r\n\r\n //#region Serialize\r\n\r\n FileWrite(file = new CADFiler): CADFiler\r\n {\r\n file.Write(8);//ver;\r\n file.Write(this.idIndex);\r\n this.ModelSpace.WriteFile(file);\r\n this.TextureTable.WriteFile(file);\r\n this.MaterialTable.WriteFile(file);\r\n this.hm.WriteFile(file);\r\n this.TemplateTable.WriteFile(file);\r\n this.GroupTable.WriteFile(file);\r\n this.Lights.WriteFile(file);\r\n this.ProcessingGroupTable.WriteFile(file);\r\n\r\n this.LayoutSpace.WriteFile(file);\r\n\r\n file.Write(this.CameraSnapshoots.length);\r\n for (let r of this.CameraSnapshoots)\r\n r.WriteFile(file);\r\n\r\n return file;\r\n }\r\n FileRead(file: CADFiler)\r\n {\r\n Entity.__ReadFileIng__ = true;\r\n this.hm.doing = true;\r\n\r\n this.Destroy();\r\n file.database = this;\r\n let ver = file.Read();\r\n this.idIndex = file.Read();\r\n this.ModelSpace.ReadFile(file);\r\n this.TextureTable.ReadFile(file);\r\n this.MaterialTable.ReadFile(file);\r\n this.hm.ReadFile(file);\r\n if (ver > 1)\r\n this.TemplateTable.ReadFile(file);\r\n if (ver > 2)\r\n this.GroupTable.ReadFile(file);\r\n if (ver > 3)\r\n {\r\n this.Lights.ReadFile(file);\r\n this.AmbientLight = this.Lights.Entitys[0] as AmbientLight ?? this.AmbientLight;\r\n this.SunLight = this.Lights.Entitys[1] as DirectionalLight ?? this.SunLight;\r\n this.HemisphereLight = this.Lights.Entitys[2] as HemisphereLight ?? this.HemisphereLight;\r\n }\r\n else\r\n {\r\n let index = this.idIndex;\r\n this.InitLight();\r\n this.idIndex = index;\r\n }\r\n\r\n if (ver > 4)\r\n this.ProcessingGroupTable.ReadFile(file);\r\n\r\n if (ver > 5)\r\n this.LayoutSpace.ReadFile(file);\r\n\r\n if (ver < 8)//旧版本数据错误 修复它\r\n {\r\n for (let e of this.LayoutSpace.Entitys)\r\n e.Owner = this.LayoutSpace.Id;\r\n }\r\n\r\n if (ver > 6)\r\n {\r\n let count = file.Read();\r\n this.CameraSnapshoots.length = 0;\r\n for (let i = 0; i < count; i++)\r\n {\r\n let r = new CameraSnapshootRecord;\r\n r.ReadFile(file);\r\n this.CameraSnapshoots.push(r);\r\n }\r\n }\r\n\r\n this.SettingDefaultMaterial();\r\n\r\n this.hm.doing = false;\r\n Entity.__ReadFileIng__ = false;\r\n return this;\r\n }\r\n\r\n //#endregion\r\n\r\n //#region Clone\r\n\r\n /**\r\n * 单个数据库内克隆对象(objects),并将他们附加到指定的容器对象(owner).\r\n * @param objects 被克隆的对象\r\n * @param owner 克隆对象的容器\r\n * @param idMap id映射\r\n * @param deferXlation 指示是否应该进行ID转换\r\n * @returns 新克隆的对象列表\r\n */\r\n DeepCloneObjects(\r\n objects: CADObject[],\r\n owner: OwnerContainer,\r\n idMap: IdMaping = new Map(),\r\n deferXlation = false\r\n ): CADObject[]\r\n {\r\n let f = new DeepCloneFiler();\r\n let newObjects: CADObject[] = [];\r\n for (let e of objects)\r\n {\r\n let newE = e instanceof Light ? this.DeepCloneObject(f, e, this.Lights, idMap) : this.DeepCloneObject(f, e, owner, idMap); //灯光拷贝到Lights\r\n if (newE)\r\n newObjects.push(newE);\r\n }\r\n\r\n //对于无法新拷贝的实体,指向原先的对象(需要是软拷贝才行)\r\n for (let [index, objectId] of f.idMaping)\r\n {\r\n if (!objectId.Object && objectId._RelevancyType === RelevancyType.Soft)\r\n {\r\n let oldId = this.GetObjectId(index);\r\n if (oldId)\r\n {\r\n objectId.Index = index;\r\n objectId.Object = oldId.Object;\r\n }\r\n }\r\n }\r\n\r\n this.ClearEmptyAssoc(f);\r\n return newObjects;\r\n }\r\n\r\n /**\r\n * 清理拷贝后的实体空引用\r\n */\r\n private ClearEmptyAssoc(f: DeepCloneFiler)\r\n {\r\n let tempF = new CADFiler();\r\n tempF.database = this;\r\n for (let [index, objectId] of f.idMaping)\r\n {\r\n if (objectId.Object && objectId.Index !== index)\r\n {\r\n tempF.Clear();\r\n objectId.Object.WriteFile(tempF);\r\n tempF.Reset();\r\n if (objectId.Object instanceof Entity)\r\n objectId.Object.AutoUpdate = false;\r\n objectId.Object.ReadFile(tempF);\r\n if (objectId.Object instanceof Entity)\r\n objectId.Object.AutoUpdate = true;\r\n }\r\n }\r\n }\r\n\r\n DeepCloneObject(\r\n filer: DeepCloneFiler,\r\n object: CADObject,\r\n owner: OwnerContainer,\r\n idMap: IdMaping = new Map(),\r\n ): CADObject | undefined\r\n {\r\n if (idMap.has(object.Id))\r\n return idMap.get(object.Id).Object;\r\n\r\n if (owner instanceof SymbolTable)//应该不能直接拷贝这类型的实体,因为会直接名称重复\r\n return;\r\n\r\n filer.Data.length = 0;\r\n filer.Reset();\r\n filer.WriteObject(object);\r\n let newObject = filer.ReadObject();\r\n if (!(newObject instanceof Light) && newObject instanceof Entity)//Light类的对象不能拷贝绘制 否则出错\r\n newObject.CloneDrawObject(object as Entity);\r\n this.AllocationObjectId(newObject);\r\n owner.Add(newObject, false);\r\n idMap.set(object.Id, newObject.Id);\r\n\r\n //拷贝硬绑定对象\r\n while (filer.hardObjectIds.size > 0)\r\n {\r\n let hardObjectIds = filer.hardObjectIds;\r\n filer.hardObjectIds = new Set();\r\n for (let idIndex of hardObjectIds)\r\n {\r\n let objectId = this.GetObjectId(idIndex, false);\r\n let object = objectId?.Object;\r\n if (object === undefined)\r\n continue;//对象已经被删除\r\n if (!object.Owner)\r\n console.error(\"无主?\");\r\n if (object.Owner.Object instanceof SymbolTable)\r\n //当我们拷贝样式(图层,材质,标注样式,文字样式(这种以Name-Value对应的记录)时,由于名称不能重复,所以拷贝会失败,这时我们把它转换为软引用,我们就可以避免拷贝,并且保持引用正常)\r\n filer.idMaping.get(idIndex)._RelevancyType = RelevancyType.Soft;\r\n else\r\n this.DeepCloneObject(filer, object, object.Owner.Object as unknown as OwnerContainer, idMap);//指向新对象\r\n }\r\n }\r\n return newObject;\r\n }\r\n\r\n /**\r\n * 将来自不同数据库的对象列表拷贝到本数据库中.\r\n * 当前支持使用HardId模式来硬关联某个对象,使该对象能够在WblockClone时一起被带过来.\r\n * 当前不支持硬关联对象的Owner不是默认的容器.\r\n * 如果需要这么做,请将该对象的Owner设置为Hard关联\r\n * @param objects 对象不能属于本数据库\r\n * @param owner 克隆对象的新容器\r\n * @param idMap id映射\r\n */\r\n WblockCloneObejcts(\r\n objects: CADObject[],\r\n owner: OwnerContainer,\r\n idMap: IdMaping,\r\n drc: DuplicateRecordCloning,\r\n filer = new WblockCloneFiler\r\n ): CADObject[]\r\n {\r\n Entity.__ReadFileIng__ = true;\r\n\r\n for (let obj of objects)\r\n if (obj instanceof Light)\r\n this.WblockCloneObject(obj, this.Lights, idMap, drc, filer);\r\n else\r\n this.WblockCloneObject(obj, owner, idMap, drc, filer);\r\n\r\n this.ClearEmptyAssoc(filer);\r\n\r\n Entity.__ReadFileIng__ = false;\r\n return objects.map(o => idMap.get(o.Id).Object);\r\n }\r\n\r\n /**\r\n * 克隆引用对象 WriteHardObjectId\r\n */\r\n private WblockCloneReferenceObject(\r\n object: CADObject,\r\n f: WblockCloneFiler,\r\n idMap: Map,\r\n drc: DuplicateRecordCloning)\r\n {\r\n let oldData = f.Data;\r\n f.Data = [];\r\n\r\n let oldDb = object.Db;\r\n let hardObjectIds = f.hardObjectIds;\r\n f.hardObjectIds = new Set();\r\n for (let idIndex of hardObjectIds)\r\n {\r\n let oldId = oldDb.GetObjectId(idIndex);\r\n if (!(oldId?.Object) || oldId.IsErase) continue;//对已经被删除的对象不进行拷贝\r\n //使用旧的OwnerId得到新的OwnerId,假设所有者都是数据库默认存在的.\r\n //TODO: 当OwnerId>100时,表示这个所有者不是数据库里面默认存在的,那么应该将Owner拷贝过来.\r\n let newOwnerId = this.GetObjectId(oldId.Object.Owner.Index); //owner.Db === this\r\n let newOwner = newOwnerId.Object as SymbolTable;\r\n this.WblockCloneObject(oldId.Object, newOwner, idMap, drc, f);\r\n }\r\n\r\n f.Data = oldData;\r\n }\r\n\r\n private WblockCloneObject(\r\n object: CADObject,\r\n owner: OwnerContainer,\r\n idMap: IdMaping,\r\n drc: DuplicateRecordCloning,\r\n filer: WblockCloneFiler\r\n )\r\n {\r\n //克隆的对象有可能被其他的对象依赖并且克隆完毕了.\r\n let cloneId = filer.idMaping.get(object.Id.Index);\r\n if (cloneId && cloneId.Object)\r\n return;\r\n\r\n filer.Data.length = 0;\r\n //表示该对象已经被拷贝了\r\n filer.cloned.add(object.Id.Index);\r\n if (owner instanceof SymbolTable)\r\n {\r\n let record = object as SymbolTableRecord;\r\n let name = record.Name;\r\n if (owner.Has(name))//名称重复\r\n {\r\n let status = drc;\r\n if (status === DuplicateRecordCloning.Rename)\r\n {\r\n //new name\r\n for (let i = 1; ; i++)\r\n {\r\n let nname = `${name}(${i})`;\r\n if (!owner.Has(nname))\r\n {\r\n name = nname;\r\n break;\r\n }\r\n }\r\n\r\n filer.WriteObject(record);\r\n this.WblockCloneReferenceObject(record, filer, idMap, drc);\r\n filer.Reset();\r\n let newRecord = filer.ReadObject() as SymbolTableRecord;\r\n newRecord.Owner = undefined;\r\n newRecord.Name = name;\r\n this.AllocationObjectId(newRecord);\r\n owner.Add(newRecord, false);\r\n idMap.set(object.Id, newRecord.Id);\r\n }\r\n else if (status === DuplicateRecordCloning.Replace)\r\n {\r\n let oldRecord = owner.GetAt(name);\r\n //将f的id映射设置为旧的id\r\n filer.idMaping.set(object.Id.Index, oldRecord.Id);\r\n\r\n record.WriteFile(filer);\r\n this.WblockCloneReferenceObject(record, filer, idMap, drc);\r\n filer.Reset();\r\n\r\n //此时重新读取的话,将会得到原先的id,实现id不变\r\n oldRecord.ReadFile(filer);\r\n oldRecord.Owner = owner.Id;\r\n idMap.set(object.Id, oldRecord.Id);\r\n }\r\n else if (status === DuplicateRecordCloning.Ignore)\r\n {\r\n let oldRecord = owner.GetAt(name);\r\n filer.idMaping.set(object.Id.Index, oldRecord.Id);\r\n idMap.set(object.Id, oldRecord.Id);\r\n }\r\n return;\r\n }\r\n }\r\n\r\n filer.WriteObject(object);\r\n this.WblockCloneReferenceObject(object, filer, idMap, drc);\r\n filer.Reset();\r\n let newObject = filer.ReadObject() as SymbolTableRecord;\r\n this.AllocationObjectId(newObject); //先给予Id,避免历史记录里面没有id\r\n if (owner === this.ModelSpace && newObject instanceof Entity)\r\n (newObject).CloneDrawObject(object as Entity);\r\n owner.Add(newObject, false);\r\n idMap.set(object.Id, newObject.Id);\r\n }\r\n\r\n /**\r\n * 为拷贝出来的对象分配id索引,并在数据库中注册\r\n */\r\n private AllocationObjectId(object: CADObject)\r\n {\r\n object.Id.Index = this.idIndex++;\r\n this.idMap.set(object.Id.Index, object.Id);\r\n }\r\n\r\n Insert()\r\n {\r\n\r\n }\r\n\r\n /**\r\n * 写块\r\n * @param outputDatabase 输出到指定的数据库\r\n * @param objects\r\n * @param basePoint\r\n * @param cloning\r\n */\r\n Wblock(\r\n outputDataBase: Database,\r\n objects: CADObject[],\r\n basePoint: Vector3,\r\n cloning: any\r\n )\r\n {\r\n\r\n }\r\n\r\n //#endregion\r\n\r\n //#region IdManager\r\n\r\n //创建一个id,自动递增它的索引号,并且会自动加入到db的id列表中.\r\n AllocateId(): ObjectId\r\n {\r\n return this.GetObjectId(this.idIndex++, true);\r\n }\r\n\r\n GetObjectId(index: number, create = false): ObjectId\r\n {\r\n //id 从1开始,0被保留作为空id\r\n if (index === 0) return undefined;\r\n\r\n let id = this.idMap.get(index);\r\n if (!create || id) return id;\r\n\r\n id = new ObjectId(index);\r\n this.idMap.set(index, id);\r\n\r\n return id;\r\n }\r\n\r\n DeleteId(idIndex: number)\r\n {\r\n this.idMap.delete(idIndex);\r\n }\r\n\r\n //#endregion\r\n}\r\n","import { Face3, Geometry, Object3D, Vector3, Line } from \"three\";\r\nimport { RenderType } from \"../GraphicsSystem/RenderType\";\r\nimport { CADFiler } from \"./CADFiler\";\r\nimport { Entity } from \"./Entity/Entity\";\r\nimport { Factory } from \"./CADFactory\";\r\n\r\n@Factory\r\nexport class FaceEntity extends Entity\r\n{\r\n constructor(private p1: Vector3 = new Vector3(), private p2: Vector3 = new Vector3(), private p3: Vector3 = new Vector3(), private normal: Vector3 = new Vector3())\r\n {\r\n super();\r\n }\r\n\r\n protected InitDrawObject(renderType: RenderType = RenderType.Wireframe): Object3D\r\n {\r\n let g = new Geometry();\r\n\r\n g.vertices.push(this.p1, this.p2, this.p3);\r\n g.faces.push(new Face3(0, 1, 2));\r\n\r\n return new Line(g);\r\n }\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\r\n this.p1.fromArray(file.Read());\r\n this.p2.fromArray(file.Read());\r\n this.p3.fromArray(file.Read());\r\n\r\n this.normal.fromArray(file.Read());\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\r\n file.Write(this.p1.toArray());\r\n file.Write(this.p2.toArray());\r\n file.Write(this.p3.toArray());\r\n\r\n file.Write(this.normal.toArray());\r\n\r\n }\r\n //#endregion\r\n}\r\n","import { arrayRemoveIf } from \"../Common/ArrayExt\";\r\nimport { AutoRecord, ISPROXYKEY } from \"./AutoRecord\";\r\nimport { Factory } from \"./CADFactory\";\r\nimport { CADFiler } from \"./CADFiler\";\r\nimport { Entity } from \"./Entity/Entity\";\r\nimport { ObjectId } from \"./ObjectId\";\r\nimport { SymbolTableRecord } from \"./SymbolTableRecord\";\r\n\r\n@Factory\r\nexport class GroupRecord extends SymbolTableRecord\r\n{\r\n @AutoRecord Entitys: ObjectId[];\r\n\r\n constructor()\r\n {\r\n super();\r\n\r\n this.Entitys = new Proxy([], {\r\n set: (target, key, value, receiver) =>\r\n {\r\n if (Reflect.get(target, key, receiver) !== value)\r\n {\r\n if (this.WriteAllObjectRecord())\r\n {\r\n if (value instanceof ObjectId && value.Object instanceof Entity)\r\n {\r\n if (!this.Id)\r\n console.warn(\"请先添加到Database后在进行操作!\");\r\n else\r\n value.Object.GroupId = this.Id;\r\n }\r\n }\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 return Reflect.get(target, key, receiver);\r\n }\r\n });\r\n }\r\n get Name()\r\n {\r\n return this.name;\r\n }\r\n set Name(name: string)\r\n {\r\n if (name !== this.name)\r\n {\r\n this.WriteAllObjectRecord();\r\n this.name = name;\r\n }\r\n }\r\n\r\n Purge()\r\n {\r\n arrayRemoveIf(this.Entitys, id => !id || id.IsErase);\r\n }\r\n\r\n //对象从文件中读取数据,初始化自身\r\n ReadFile(file: CADFiler)\r\n {\r\n let ver = file.Read();\r\n super.ReadFile(file);\r\n let count = file.Read() as number;\r\n\r\n this.Entitys.length = 0;\r\n for (let i = 0; i < count; i++)\r\n {\r\n let id = file.ReadObjectId();\r\n if (id) this.Entitys.push(id);\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 id of this.Entitys)\r\n file.WriteObjectId(id);\r\n }\r\n\r\n}\r\n","import { Geometry, MathUtils, Matrix4, Mesh, Object3D, ShapeGeometry, Vector3 } from 'three';\r\nimport { ColorMaterial } from '../../Common/ColorPalette';\r\nimport { setRotationOnAxis } from '../../Common/Matrix4Utils';\r\nimport { UpdateDraw } from '../../Common/Status';\r\nimport { Box3Ext } from '../../Geometry/Box';\r\nimport { GetBox, MoveMatrix } from '../../Geometry/GeUtils';\r\nimport { RenderType } from '../../GraphicsSystem/RenderType';\r\nimport { equaln } from '../../Nest/Common/Util';\r\nimport { Factory } from '../CADFactory';\r\nimport { CADFiler } from '../CADFiler';\r\nimport { Entity } from '../Entity/Entity';\r\n\r\nexport enum TextAligen\r\n{\r\n LeftTop = 3, Top = 1, RightTop = 5,\r\n LeftMid = 2, Mid = 0, RightMid = 4,\r\n LeftDown = 10, Down = 8, RightDown = 12,\r\n}\r\n\r\nconst ShapeCache = new Map();\r\nexport function DisposeTextShapeCache()\r\n{\r\n for (let [key, geo] of ShapeCache)\r\n geo.dispose();\r\n ShapeCache.clear();\r\n};\r\n\r\n/**\r\n * 单行文字实体\r\n */\r\n@Factory\r\nexport class Text extends Entity\r\n{\r\n protected OnlyRenderType = true;\r\n\r\n private _Align: TextAligen = TextAligen.LeftDown;\r\n constructor(pos?: Vector3,\r\n private _TextString: string = \"\",\r\n public _FontName: string = \"songti\",\r\n private _Height: number = 60,\r\n private _TextRotation: number = 0,\r\n )\r\n {\r\n super();\r\n pos && this._Matrix.setPosition(pos);\r\n this._TextRotation && setRotationOnAxis(this._Matrix, this.Normal, MathUtils.degToRad(this._TextRotation));\r\n }\r\n get TextRotation()\r\n {\r\n return this._TextRotation;\r\n }\r\n set TextRotation(v: number)\r\n {\r\n if (this._TextRotation === v) return;\r\n\r\n this.WriteAllObjectRecord();\r\n this._TextRotation = v;\r\n this.UpdateTranslate();\r\n }\r\n get TextString()\r\n {\r\n return this._TextString;\r\n }\r\n set TextString(str: string)\r\n {\r\n if (str !== this._TextString)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._TextString = str;\r\n this.Update();\r\n }\r\n }\r\n\r\n set TextAligen(al: TextAligen)\r\n {\r\n if (al === this._Align) return;\r\n this.WriteAllObjectRecord();\r\n this._Align = al;\r\n this.UpdateTranslate();\r\n }\r\n get TextAligen()\r\n {\r\n return this._Align;\r\n }\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 (equaln(v, this._Height)) return;\r\n\r\n this.WriteAllObjectRecord();\r\n this._Height = v;\r\n this.Update(UpdateDraw.Geometry);\r\n }\r\n //创建字体对象\r\n async AsyncUpdateDrawObject(obj: Object3D, renderType: RenderType)\r\n {\r\n \r\n }\r\n /**大概宽度 */\r\n get Width()\r\n {\r\n let count = 0;\r\n for (let i = 0; i < this._TextString.length; i++)\r\n {\r\n let code = this._TextString.charCodeAt(i);\r\n if (code > 255)\r\n count++;\r\n else\r\n count += 0.5;\r\n }\r\n return count * this._Height * 1.35;\r\n }\r\n\r\n get HasBoundingBox() { return this._CacheDrawObject.has(RenderType.Wireframe); }\r\n\r\n get BoundingBox()\r\n {\r\n let obj = this._CacheDrawObject.get(RenderType.Wireframe);\r\n if (obj && obj.children.length === 1)\r\n return GetBox(obj);\r\n\r\n return this.BoundingBoxInOCS.applyMatrix4((this.OCSNoClone));\r\n }\r\n\r\n get BoundingBoxInOCS(): Box3Ext\r\n {\r\n let w = Math.max(Math.abs(this.Width / 2), 1);\r\n let h = Math.max(Math.abs(this.Height / 2), 1);\r\n let box = new Box3Ext(\r\n new Vector3(-w, -h, 0),\r\n new Vector3(w, h, 0)\r\n );\r\n\r\n let offset = new Vector3;\r\n if (this.TextAligen & TextAligen.LeftMid)\r\n offset.x = w;\r\n if (this.TextAligen & TextAligen.RightMid)\r\n offset.x = -w;\r\n if (this.TextAligen & TextAligen.Top)\r\n offset.y = -h;\r\n if (this.TextAligen & TextAligen.Down)\r\n offset.y = h;\r\n\r\n box.translate(offset);\r\n return box;\r\n }\r\n\r\n UpdateTranslate()\r\n {\r\n for (let [type, obj] of this._CacheDrawObject)\r\n {\r\n this.UpdateObjectTranslate(obj);\r\n }\r\n }\r\n\r\n private UpdateObjectTranslate(obj: Object3D)\r\n {\r\n if (obj.children.length === 1)\r\n {\r\n let mesh = obj.children[0] as Mesh;\r\n\r\n let box = mesh.geometry.boundingBox;\r\n\r\n let p = new Vector3();\r\n if (this._Align & TextAligen.LeftMid)\r\n p.x = box.min.x;\r\n else if (this._Align & TextAligen.RightMid)\r\n p.x = box.max.x;\r\n\r\n else\r\n p.x = (box.min.x + box.max.x) / 2;\r\n\r\n if (this._Align & TextAligen.Top)\r\n p.y = box.max.y;\r\n else if (this._Align & TextAligen.Down)\r\n p.y = box.min.y;\r\n\r\n else\r\n p.y = (box.min.y + box.max.y) / 2;\r\n\r\n mesh.matrix = new Matrix4().makeRotationZ(this.TextRotation).multiply(\r\n new Matrix4().setPosition(p.negate())\r\n );\r\n\r\n obj.updateMatrixWorld(true);\r\n }\r\n }\r\n\r\n ApplyMatrix(m: Matrix4): this\r\n {\r\n super.ApplyMatrix(m);\r\n return this;\r\n }\r\n\r\n protected ApplyScaleMatrix(m: Matrix4): this\r\n {\r\n this.WriteAllObjectRecord();\r\n let p1 = this.Position;\r\n let p2 = new Vector3(0, this._Height).applyMatrix4(this.OCS);\r\n [p1, p2].forEach(p => p.applyMatrix4(m));\r\n this.Position = p1;\r\n this.Height = p1.distanceTo(p2);\r\n return this;\r\n }\r\n\r\n InitDrawObject(renderType: RenderType = RenderType.Wireframe): Object3D\r\n {\r\n let g = new Object3D();\r\n\r\n if (renderType !== RenderType.Wireframe)\r\n {\r\n let obj = this.CacheDrawObject.get(RenderType.Wireframe);\r\n if (obj && obj.children.length === 1 && (obj.children[0] as Mesh).geometry)\r\n {\r\n let color = (renderType > 100 || renderType === RenderType.Print) ? 0 : this.ColorIndex;\r\n let mesh = new Mesh((obj.children[0] as Mesh).geometry, ColorMaterial.GetBasicMaterial(color));\r\n g.add((mesh));\r\n g.updateMatrixWorld(true);\r\n this.UpdateObjectTranslate(g);\r\n return g;\r\n }\r\n }\r\n\r\n this.AsyncUpdateDrawObject(g, renderType);\r\n return g;\r\n }\r\n UpdateDrawObject(type: RenderType, obj: Object3D)\r\n {\r\n this.AsyncUpdateDrawObject(obj, type);\r\n }\r\n UpdateDrawObjectMaterial(renderType: RenderType, en: Object3D)\r\n {\r\n if (en && en.children.length === 1)\r\n {\r\n let mesh = en.children[0] as Mesh;\r\n //因为我们是OnlyRnderType 所以Print会变成WireframePrint,所以要用下面的写法\r\n let color = (renderType > 100 || renderType === RenderType.Print) ? 0 : this.ColorIndex;\r\n mesh.material = ColorMaterial.GetBasicMaterialDoubleSide(color);\r\n }\r\n }\r\n GetGripPoints(): Array\r\n {\r\n return [this.Position, new Vector3(0, this.Height).applyMatrix4(this.OCS)];\r\n }\r\n MoveGripPoints(indexList: number[], vec: Vector3)\r\n {\r\n\r\n if (indexList[0] === 0)\r\n this.Position = this.Position.add(vec);\r\n else\r\n {\r\n let v = vec.clone().applyMatrix4(this.OCSInv.setPosition(new Vector3));\r\n this.Height = this.Height + v.y;\r\n }\r\n }\r\n\r\n GetStretchPoints(): Array\r\n {\r\n return [this.Position];\r\n }\r\n MoveStretchPoints(indexList: Array, vec: Vector3)\r\n {\r\n this.ApplyMatrix(MoveMatrix(vec));\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._TextString = file.Read();\r\n this._Height = file.Read();\r\n this.TextRotation = file.Read();\r\n this._FontName = file.Read();\r\n this._Align = 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._TextString);\r\n file.Write(this._Height);\r\n file.Write(this.TextRotation);\r\n file.Write(this._FontName);\r\n file.Write(this._Align);\r\n }\r\n //#endregion-----------------------------File End-----------------------------\r\n}\r\n","import { BufferGeometry, Float32BufferAttribute, LineSegments, Material, Matrix3, Matrix4, Mesh, Object3D, Vector3 } from \"three\";\r\nimport { ColorMaterial } from \"../Common/ColorPalette\";\r\nimport { FixedNotZero } from \"../Common/Utils\";\r\nimport { AutoRecord } from \"../DatabaseServices/AutoRecord\";\r\nimport { Factory } from \"../DatabaseServices/CADFactory\";\r\nimport { CADFiler } from \"../DatabaseServices/CADFiler\";\r\nimport { Entity } from \"../DatabaseServices/Entity/Entity\";\r\nimport { TemplateRecord } from \"../DatabaseServices/Template/TemplateRecord\";\r\nimport { Text, TextAligen } from \"../DatabaseServices/Text/Text\";\r\nimport { Box3Ext } from \"../Geometry/Box\";\r\nimport { XAxis, XAxisN, YAxis, YAxisN, ZAxis, ZeroVec } from \"../Geometry/GeUtils\";\r\nimport { GenerateBoxEdgeGeometry } from \"../Geometry/SimpleExtrudeEdgeGeometry\";\r\nimport { RenderType } from \"../GraphicsSystem/RenderType\";\r\nimport { ObjectSnapMode } from \"./ObjectSnapMode\";\r\n\r\nconst EmptyArray = [];\r\n\r\n@Factory\r\nexport class VisualSpaceBox extends Entity\r\n{\r\n OnlyRenderType = true;\r\n\r\n private _LText = new Text;\r\n private _WText = new Text;\r\n private _HText = new Text;\r\n\r\n @AutoRecord private _IsRoot = false;\r\n\r\n @AutoRecord private _DisplayLength = true;\r\n @AutoRecord private _DisplayWidth = true;\r\n @AutoRecord private _DisplayHeight = true;\r\n\r\n\r\n constructor(\r\n protected _Length: number = 1,\r\n protected _Width: number = 1,\r\n protected _Height: number = 1,\r\n )\r\n {\r\n super();\r\n this._LText.IsEmbedEntity = true;\r\n this._WText.IsEmbedEntity = true;\r\n this._HText.IsEmbedEntity = true;\r\n\r\n this._LText.TextAligen = TextAligen.Down;\r\n this._WText.TextAligen = TextAligen.Top;\r\n this._HText.TextAligen = TextAligen.Top;\r\n (this._LText)._Matrix.makeBasis(XAxis, ZAxis, YAxis);\r\n (this._WText)._Matrix.makeBasis(YAxis, XAxisN, ZAxis);\r\n (this._HText)._Matrix.makeBasis(ZAxis, XAxisN, YAxisN);\r\n }\r\n\r\n get Length() { return this._Length; }\r\n get Width() { return this._Width; }\r\n get Height() { return this._Height; }\r\n\r\n\r\n set IsRoot(b: boolean)\r\n {\r\n if (this._IsRoot !== b)\r\n {\r\n this._IsRoot = b;\r\n for (let [, obj] of this._CacheDrawObject)\r\n {\r\n let [box, edge, lobj, wobj, hobj] = obj.children;\r\n if (this._IsRoot)\r\n box.visible = false;\r\n else\r\n box.visible = true;\r\n\r\n if (this._IsRoot)\r\n {\r\n this._LText.TextAligen = TextAligen.Top;\r\n this._WText.TextAligen = TextAligen.Down;\r\n this._HText.TextAligen = TextAligen.Down;\r\n }\r\n else\r\n {\r\n this._LText.TextAligen = TextAligen.Down;\r\n this._WText.TextAligen = TextAligen.Top;\r\n this._HText.TextAligen = TextAligen.Top;\r\n }\r\n }\r\n }\r\n }\r\n\r\n set DisplayWidth(b: boolean)\r\n {\r\n for (let [, obj] of this._CacheDrawObject)\r\n {\r\n let [box, edge, lobj, wobj, hobj] = obj.children;\r\n wobj.visible = b;\r\n }\r\n this._DisplayWidth = b;\r\n }\r\n set DisplayLength(b: boolean)\r\n {\r\n for (let [, obj] of this._CacheDrawObject)\r\n {\r\n let [box, edge, lobj, wobj, hobj] = obj.children;\r\n lobj.visible = b;\r\n }\r\n this._DisplayLength = b;\r\n }\r\n set DisplayHeight(b: boolean)\r\n {\r\n for (let [, obj] of this._CacheDrawObject)\r\n {\r\n let [box, edge, lobj, wobj, hobj] = obj.children;\r\n hobj.visible = b;\r\n }\r\n this._DisplayHeight = b;\r\n }\r\n\r\n SetSize(l: number, w: number, h: number)\r\n {\r\n if (l !== this._Length || w !== this._Width || h !== this._Height)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._Length = l;\r\n this._Width = w;\r\n this._Height = h;\r\n this.Update();\r\n }\r\n }\r\n get BoundingBoxInOCS()\r\n {\r\n return new Box3Ext(new Vector3, new Vector3(this._Length, this._Width, this._Height));\r\n }\r\n\r\n get BoundingBox()\r\n {\r\n return this.BoundingBoxInOCS.applyMatrix4(this.OCSNoClone);\r\n }\r\n\r\n //#region 捕捉\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 switch (snapMode)\r\n {\r\n case ObjectSnapMode.End:\r\n {\r\n let pts: Vector3[] = [\r\n new Vector3(),\r\n new Vector3(this._Length),\r\n new Vector3(this._Length, this._Width),\r\n new Vector3(0, this._Width),\r\n\r\n new Vector3(0, 0, this._Height),\r\n new Vector3(this._Length, 0, this._Height),\r\n new Vector3(this._Length, this._Width, this._Height),\r\n new Vector3(0, this._Width, this._Height),\r\n ];\r\n\r\n for (let p of pts)\r\n p.applyMatrix4(this._Matrix);\r\n return pts;\r\n }\r\n }\r\n return EmptyArray;\r\n }\r\n //#endregion\r\n\r\n //#region Draw\r\n InitDrawObject(renderType: RenderType = RenderType.Wireframe)\r\n {\r\n let obj = new Object3D();\r\n\r\n //box\r\n obj.add(new Mesh(backGeo, ColorMaterial.GetBasicMaterialTransparent2(this.ColorIndex, 0.5)));\r\n //edge\r\n obj.add(new LineSegments(edgeGeo, ColorMaterial.GetLineMaterial(this.ColorIndex)));\r\n\r\n obj.add(this._LText.DrawObject);\r\n obj.add(this._WText.DrawObject);\r\n obj.add(this._HText.DrawObject);\r\n\r\n this.UpdateDrawObject(renderType, obj);\r\n return obj;\r\n }\r\n\r\n UpdateDrawObject(type: RenderType, obj: Object3D)\r\n {\r\n let [box, edge, lobj, wobj, hobj] = obj.children;\r\n box.scale.set(this._Length, this._Width, this._Height);\r\n box.updateMatrix();\r\n\r\n edge.scale.set(this._Length, this._Width, this._Height);\r\n edge.updateMatrix();\r\n\r\n box.visible = !this._IsRoot;\r\n\r\n if (this._IsRoot)\r\n {\r\n this._LText.TextAligen = TextAligen.Top;\r\n this._WText.TextAligen = TextAligen.Down;\r\n this._HText.TextAligen = TextAligen.Down;\r\n }\r\n else\r\n {\r\n this._LText.TextAligen = TextAligen.Down;\r\n this._WText.TextAligen = TextAligen.Top;\r\n this._HText.TextAligen = TextAligen.Top;\r\n }\r\n\r\n this._LText.TextString = FixedNotZero(this._Length, 2);\r\n this._WText.TextString = FixedNotZero(this._Width, 2);\r\n this._HText.TextString = FixedNotZero(this._Height, 2);\r\n\r\n //实体被错误的Dispose,导致需要这样的更新\r\n this._LText.Update();\r\n this._WText.Update();\r\n this._HText.Update();\r\n\r\n lobj.visible = this._DisplayLength;\r\n wobj.visible = this._DisplayWidth;\r\n hobj.visible = this._DisplayHeight;\r\n\r\n lobj.position.set(this._Length / 2, 0, 0);\r\n lobj.updateMatrix();\r\n\r\n wobj.position.set(0, this._Width / 2, 0);\r\n wobj.updateMatrix();\r\n\r\n hobj.position.set(0, 0, this._Height / 2);\r\n hobj.updateMatrix();\r\n }\r\n\r\n UpdateDrawObjectMaterial(type: RenderType, obj: Object3D, material?: Material)\r\n {\r\n let [mesh, line] = obj.children as [Mesh, LineSegments];\r\n\r\n mesh.material = ColorMaterial.GetBasicMaterialTransparent2(this.ColorIndex, 0.2);\r\n line.material = ColorMaterial.GetLineMaterial(this.ColorIndex);\r\n }\r\n\r\n //#endregion\r\n\r\n //#region -------------------------File-------------------------\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._Length = file.Read();\r\n this._Width = file.Read();\r\n this._Height = file.Read();\r\n\r\n this._IsRoot = file.Read();\r\n this._DisplayLength = file.Read();\r\n this._DisplayWidth = file.Read();\r\n this._DisplayHeight = file.Read();\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._Length);\r\n file.Write(this._Width);\r\n file.Write(this._Height);\r\n\r\n file.Write(this._IsRoot);\r\n file.Write(this._DisplayLength);\r\n file.Write(this._DisplayWidth);\r\n file.Write(this._DisplayHeight);\r\n }\r\n\r\n // //局部撤销\r\n // ApplyPartialUndo(undoData: CADObject)\r\n // {\r\n // super.ApplyPartialUndo(undoData);\r\n // }\r\n //#endregion\r\n\r\n\r\n //#region\r\n GetGripPoints(): Array\r\n {\r\n // return EmptyArray;//因为更新模块树是异步的,没办法在拽拖夹点时顺带更新,所以移除这个特性.\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 x.multiplyScalar(this._Length);\r\n y.multiplyScalar(this._Width);\r\n z.multiplyScalar(this._Height);\r\n\r\n let p = this.Position;\r\n return [p, x.add(p), y.add(p), z.add(p)];\r\n }\r\n\r\n MoveGripPoints(indexList: number[], vec: Vector3)\r\n {\r\n let template = this.Template?.Object as TemplateRecord;\r\n if (template && template !== template.Root)\r\n return;\r\n\r\n for (let i of indexList)\r\n {\r\n if (i === 0)\r\n {\r\n this.WriteAllObjectRecord();\r\n this.Position = this.Position.add(vec);\r\n return;\r\n }\r\n else\r\n {\r\n continue;\r\n let ocs = this._Matrix.clone().setPosition(ZeroVec);\r\n let ocsinv = new Matrix4().getInverse(ocs);\r\n vec.applyMatrix4(ocsinv);\r\n if (i === 1)\r\n {\r\n this._Length += vec.x;\r\n template.LParam.expr = this._Length;\r\n }\r\n else if (i === 2)\r\n {\r\n this._Width += vec.y;\r\n template.WParam.expr = this._Width;\r\n }\r\n else\r\n {\r\n this._Height += vec.z;\r\n template.HParam.expr = this._Height;\r\n }\r\n\r\n template.UpdateTemplateTree(); //TODO:可以弹出个对话框让用户更新. 或者使用反应器?\r\n\r\n this.Update();\r\n }\r\n return;\r\n }\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 //#endregion\r\n\r\n}\r\n\r\nclass BackFaceBoxBufferGeometry extends BufferGeometry\r\n{\r\n constructor(length: number = 1, width: number = 1, height: number = 1)\r\n {\r\n super();\r\n\r\n let pts: number[] = [\r\n 0, width, 0,\r\n length, width, 0,\r\n length, width, height,\r\n 0, width, height,\r\n ];\r\n let uvs: number[] = [\r\n 0, 0,\r\n 1, 0,\r\n 1, 1,\r\n\r\n 0, 0,\r\n 1, 1,\r\n 0, 1,\r\n ];\r\n\r\n let indices: number[] = [0, 1, 2, 0, 2, 3];\r\n\r\n this.setIndex(indices);\r\n this.setAttribute('position', new Float32BufferAttribute(pts, 3));\r\n // this.setAttribute('normal', new Float32BufferAttribute(normals, 3));\r\n this.setAttribute('uv', new Float32BufferAttribute(uvs, 2));\r\n\r\n }\r\n}\r\n\r\nconst backGeo = new BackFaceBoxBufferGeometry();\r\nconst edgeGeo = GenerateBoxEdgeGeometry(1, 1, 1);\r\n","import { Box3, MathUtils, OrthographicCamera, PerspectiveCamera, Vector3 } from 'three';\r\nimport { HostApplicationServices } from '../ApplicationServices/HostApplicationServices';\r\nimport { CADFiler } from '../DatabaseServices/CADFiler';\r\nimport { Orbit } from '../Geometry/Orbit';\r\n\r\nconst ViewScopeSize = 4e6;\r\n//相机活动范围\r\nconst ViewScopeMin = new Vector3(-ViewScopeSize, -ViewScopeSize * 0.7, -ViewScopeSize);\r\nconst ViewScopeMax = ViewScopeMin.clone().negate();\r\n\r\nconst ViewBoxMin = new Vector3(1, 1, 1);\r\nconst viewBoxMax = new Vector3(1e7, 1e7, 1e7);\r\n\r\nexport enum CameraType\r\n{\r\n OrthographicCamera = 1,\r\n PerspectiveCamera = 2,\r\n}\r\n\r\ntype Camera = OrthographicCamera | PerspectiveCamera;\r\n\r\n/**\r\n *\r\n * 相机的控制.\r\n * ->切换相机\r\n * ->设置视口大小\r\n * ->旋转和移动相机.\r\n */\r\nexport class CameraUpdate\r\n{\r\n private _CurCamera: Camera;\r\n private _CameraArray: Map = new Map();\r\n\r\n //视口的画布大小\r\n private _Width: number;\r\n private _Height: number;\r\n //视口显示的高度\r\n private _ViewHeight: number = 1000;\r\n\r\n //观察的位置\r\n private _Target: Vector3 = new Vector3();\r\n //观察向量\r\n private _Direction: Vector3 = new Vector3(0, 0, -1);\r\n //观察的轨道.\r\n private _Orbit: Orbit = new Orbit();\r\n\r\n DisableRotate = false;\r\n\r\n constructor()\r\n {\r\n this._CameraArray.set(OrthographicCamera, new OrthographicCamera(-2, 2, 2, -2,\r\n -ViewScopeSize, ViewScopeSize));\r\n\r\n this._CameraArray.set(PerspectiveCamera, new PerspectiveCamera(60, 1, 0.01, ViewScopeSize));\r\n\r\n this._CurCamera = this._CameraArray.get(OrthographicCamera);\r\n\r\n this._Orbit.SetFromDirection(this._Direction);\r\n\r\n this.UpdateUp();\r\n\r\n this.Update();\r\n }\r\n\r\n get Orbit() { return this._Orbit; }\r\n\r\n get Aspect(): number\r\n {\r\n return this._Width / this._Height;\r\n }\r\n\r\n get Target() { return this._Target; }\r\n\r\n get Camera(): Camera\r\n {\r\n return this._CurCamera;\r\n }\r\n get ViewHeight()\r\n {\r\n return this._ViewHeight;\r\n }\r\n set ViewHeight(height)\r\n {\r\n this._ViewHeight = MathUtils.clamp(height, HostApplicationServices.viewSize.minViewHeight, HostApplicationServices.viewSize.maxViewHeight);\r\n this.ZoomEvent();\r\n }\r\n\r\n get Direction()\r\n {\r\n return this._Direction.clone();\r\n }\r\n\r\n SetSize(width: number, height: number)\r\n {\r\n this._Width = width;\r\n this._Height = height;\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 Fov()\r\n {\r\n return (this._CameraArray.get(PerspectiveCamera) as PerspectiveCamera).fov;\r\n }\r\n\r\n set Fov(fov: number)\r\n {\r\n let camera = this._CameraArray.get(PerspectiveCamera) as PerspectiveCamera;\r\n camera.fov = fov;\r\n this.UpdateCameraMatrix();\r\n }\r\n\r\n /**\r\n * 平移相机.\r\n * @param {Vector3} mouseMove\r\n */\r\n Pan(mouseMove: Vector3)\r\n {\r\n mouseMove.y *= -1;\r\n mouseMove.multiplyScalar(-this._ViewHeight / (this._Height * window.devicePixelRatio));\r\n mouseMove.applyQuaternion(this.Camera.quaternion);\r\n this._Target.add(mouseMove);\r\n this._Target.clamp(ViewScopeMin, ViewScopeMax);\r\n this.Update();\r\n }\r\n Rotate(mouseMove: Vector3, target: Vector3)\r\n {\r\n let scale = this.CameraType === CameraType.PerspectiveCamera ? 0.002 : 0.003;\r\n this._Orbit.RoX -= mouseMove.y * scale;\r\n this._Orbit.theta -= mouseMove.x * scale;\r\n if (this.CameraType === CameraType.PerspectiveCamera && !target)//转头\r\n {\r\n if (this.DisableRotate) return;\r\n\r\n this._Orbit.UpdateDirection(this._Direction);\r\n this.UpdateUp();\r\n\r\n let camera = this.Camera as PerspectiveCamera;\r\n camera.aspect = this.Aspect;\r\n let distens = (this._ViewHeight / 2) / (Math.tan(MathUtils.degToRad(camera.fov) / 2));\r\n\r\n this._Target.copy(this._Direction).multiplyScalar(distens).add(this.Camera.position);//重新计算观察点位置\r\n\r\n this.UpdateCameraMatrix();\r\n return;\r\n }\r\n\r\n //缓存观察点\r\n let oldTargetFormCameraSpace = target.clone().applyMatrix4(this.Camera.matrixWorldInverse);\r\n\r\n this._Orbit.UpdateDirection(this._Direction);\r\n this.UpdateUp();\r\n this.Update();\r\n\r\n //-----还原观察点\r\n //得到新的观察点相对于相机的位置\r\n let newTargetFormCameraSpace = target.clone().applyMatrix4(this.Camera.matrixWorldInverse);\r\n //减去原先的位置. 得到观测点在相机内移动的向量\r\n newTargetFormCameraSpace.sub(oldTargetFormCameraSpace);\r\n //乘以相机的矩阵. 得到向量在世界坐标系的位置\r\n newTargetFormCameraSpace.applyMatrix4(this.Camera.matrix);\r\n //因为使用的是点变换,所以减去基点,得到向量\r\n newTargetFormCameraSpace.sub(this.Camera.position);\r\n //加上移动的向量. 使得观察点时钟在相机的某个位置\r\n this._Target.add(newTargetFormCameraSpace);\r\n\r\n this.Update();\r\n }\r\n\r\n UpdateCameraMatrix()\r\n {\r\n this.Camera.matrixAutoUpdate = true;\r\n // this.Camera.updateMatrix(); //如果不使用autoUpdate,那么应该还原这句\r\n this.Camera.lookAt(this._Target);\r\n this.Camera.updateProjectionMatrix();\r\n // this.Camera.updateMatrix(); //如果不使用autoUpdate,那么应该还原这句\r\n this.Camera.updateMatrixWorld(false);\r\n this.Camera.matrixAutoUpdate = false;\r\n }\r\n\r\n Zoom(scale: number, scaleCenter?: Vector3)\r\n {\r\n if (this.Camera instanceof OrthographicCamera)\r\n {\r\n this.ViewHeight *= scale;\r\n if (scaleCenter && this._ViewHeight < HostApplicationServices.viewSize.maxViewHeight)\r\n {\r\n this._Target.sub(scaleCenter);\r\n this._Target.multiplyScalar(scale);\r\n this._Target.add(scaleCenter);\r\n }\r\n }\r\n else if (this.Camera instanceof PerspectiveCamera)\r\n {\r\n let add = scale > 1 ? 1 : -1;\r\n add *= this.Camera.position.distanceTo(this._Target) / 10;\r\n this._Target.add(this._Direction.clone().multiplyScalar(-add));\r\n }\r\n this.Update();\r\n }\r\n ZoomExtentsBox3(box3: Box3)\r\n {\r\n if (!box3 || box3.isEmpty()) return;\r\n this.Camera.updateMatrixWorld(false);\r\n\r\n box3.getCenter(this._Target);\r\n\r\n //变换到相机坐标系\r\n box3.applyMatrix4(this.Camera.matrixWorldInverse);\r\n\r\n let size = box3.getSize(new Vector3());\r\n size.clamp(ViewBoxMin, viewBoxMax);\r\n\r\n // this._Target.z = box3.max.z; //使用这个代码 在变换矩阵可以使得观察点在前面,但是会导致观察距离过长\r\n\r\n //宽高比\r\n let aspectRatio = size.x / size.y;\r\n\r\n let viewAspectRatio = this.Aspect;\r\n if (aspectRatio > viewAspectRatio)\r\n this.ViewHeight = size.x / viewAspectRatio;\r\n else\r\n this.ViewHeight = size.y;\r\n this.Update();\r\n }\r\n\r\n /**\r\n * 设置相机的观察向量.\r\n * @param {Vector3} dir 方向向量,这个向量传入后会被更改为单位向量\r\n */\r\n LookAt(dir: Vector3)\r\n {\r\n this.LookAtEvent(dir);\r\n this._Orbit.SetFromDirection(dir);\r\n this._Direction.copy(dir);\r\n this.UpdateUp();\r\n this.Update();\r\n }\r\n LookAtEvent(dir: Vector3) { }\r\n\r\n UpdateUp()\r\n {\r\n Orbit.ComputUpDirection(this._Direction, this.Camera.up);\r\n }\r\n /**\r\n * 根据视口大小,设置相机视口范围.\r\n */\r\n Update()\r\n {\r\n this.Camera.position.copy(this._Target);\r\n\r\n if (this.Camera instanceof OrthographicCamera)\r\n {\r\n this.Camera.left = this.Aspect * this._ViewHeight / -2;\r\n this.Camera.right = this.Aspect * this._ViewHeight / 2;\r\n this.Camera.bottom = this._ViewHeight / -2;\r\n this.Camera.top = this._ViewHeight / 2;\r\n\r\n this.Camera.position.sub(this._Direction);\r\n }\r\n else if (this.Camera instanceof PerspectiveCamera)\r\n {\r\n this.Camera.aspect = this.Aspect;\r\n let distens = (this._ViewHeight / 2) / (Math.tan(MathUtils.degToRad(this.Camera.fov) / 2));\r\n\r\n this.Camera.position.sub(this._Direction.clone().multiplyScalar(distens));\r\n }\r\n else return;\r\n\r\n this.UpdateCameraMatrix();\r\n }\r\n\r\n ZoomEvent()\r\n {\r\n }\r\n\r\n set CameraType(type: CameraType)\r\n {\r\n if (type !== this.CameraType)\r\n this.SwitchCamera();\r\n }\r\n get CameraType()\r\n {\r\n if (this.Camera instanceof OrthographicCamera)\r\n return CameraType.OrthographicCamera;\r\n else\r\n return CameraType.PerspectiveCamera;\r\n }\r\n\r\n SwitchCamera()\r\n {\r\n if (this.Camera instanceof OrthographicCamera)\r\n this._CurCamera = this._CameraArray.get(PerspectiveCamera);\r\n else\r\n this._CurCamera = this._CameraArray.get(OrthographicCamera);\r\n this.UpdateUp();\r\n this.Update();\r\n }\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 this._ViewHeight = file.Read();\r\n this._Target.fromArray(file.Read());\r\n this._Direction.fromArray(file.Read());\r\n\r\n this._Orbit.SetFromDirection(this._Direction);\r\n this.UpdateUp();\r\n this.Update();\r\n\r\n if (ver > 1)\r\n this.CameraType = file.Read();\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(2);\r\n file.Write(this._ViewHeight);\r\n file.Write(this._Target.toArray());\r\n file.Write(this._Direction.toArray());\r\n file.Write(this.CameraType);\r\n }\r\n}\r\n","import { Box3, BufferGeometry, Color, Float32BufferAttribute, Frustum, Group, Line, Matrix3, Matrix4, Mesh, MeshBasicMaterial, Object3D, Scene, Vector3, WebGLRenderTarget } from \"three\";\r\nimport { DisposeThreeObj, Object3DRemoveAll } from \"../Common/Dispose\";\r\nimport { UpdateDraw } from \"../Common/Status\";\r\nimport { GetEntity } from \"../Common/Utils\";\r\nimport { ObjectSnapMode } from \"../Editor/ObjectSnapMode\";\r\nimport { VisualSpaceBox } from \"../Editor/VisualSpaceBox\";\r\nimport { GetBox } from \"../Geometry/GeUtils\";\r\nimport { CameraUpdate } from \"../GraphicsSystem/CameraUpdate\";\r\nimport { RenderType } from \"../GraphicsSystem/RenderType\";\r\nimport { FixIndex } from \"../Nest/Common/Util\";\r\nimport { Hole } from \"./3DSolid/Hole\";\r\nimport { Factory } from \"./CADFactory\";\r\nimport { CADFiler } from \"./CADFiler\";\r\nimport { Board } from \"./Entity/Board\";\r\nimport { Entity } from \"./Entity/Entity\";\r\nimport { HardwareCompositeEntity } from \"./Hardware/HardwareCompositeEntity\";\r\nimport { ObjectId } from \"./ObjectId\";\r\nimport { Text } from \"./Text/Text\";\r\n\r\nconst MaxSize = 2048;\r\nconst MIN_UPDATE_SIZE = 50;\r\nconst ProjScreenMatrix = new Matrix4();\r\n\r\n@Factory\r\nexport class ViewportEntity extends Entity\r\n{\r\n scene: Scene = new Scene();\r\n readonly camera: CameraUpdate = new CameraUpdate();\r\n private _renderType: RenderType = RenderType.Print;\r\n private _HideObjectIds = new Set();\r\n private _ShowObjectIds = new Set();\r\n private _RenderTarget: WebGLRenderTarget = new WebGLRenderTarget(0, 0);\r\n private _EntitysBoundingBox: Box3;\r\n ViewData = {\r\n left: 0,\r\n bottom: 0,\r\n };\r\n _Color = 0;\r\n ViewportMaterial: MeshBasicMaterial;\r\n private _Frustum: Frustum = new Frustum();\r\n constructor(\r\n private _width: number = 1,\r\n private _height: number = 1,\r\n )\r\n {\r\n super();\r\n this.scene.background = new Color(0xffffff);\r\n this.ViewportMaterial = new MeshBasicMaterial({ map: this._RenderTarget.texture, transparent: true, opacity: 1 });\r\n }\r\n get Left()\r\n {\r\n return this.Position.x;\r\n }\r\n get Bottom()\r\n {\r\n return this.Position.y;\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 (v === this._height || v < 0)\r\n return;\r\n this.WriteAllObjectRecord();\r\n this._width = v;\r\n this.Update(UpdateDraw.Geometry);\r\n }\r\n get ViewWidth()\r\n {\r\n return this.camera.Width ?? 1;\r\n }\r\n get ViewHeight()\r\n {\r\n return this.camera.Height ?? 1;\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 (v === this._height || v < 0)\r\n return;\r\n this.WriteAllObjectRecord();\r\n this._height = v;\r\n this.Update(UpdateDraw.Geometry);\r\n }\r\n IsHide(id: ObjectId)\r\n {\r\n return this._HideObjectIds.has(id);\r\n }\r\n IsShow(id: ObjectId)\r\n {\r\n return this._ShowObjectIds.has(id);\r\n }\r\n get HideObjects()\r\n {\r\n return [...this._HideObjectIds];\r\n }\r\n get ShowObjects()\r\n {\r\n return [...this._ShowObjectIds];\r\n }\r\n\r\n AppendShowObjects(ids: ObjectId[] | ObjectId)\r\n {\r\n this.WriteAllObjectRecord();\r\n if (!Array.isArray(ids))\r\n ids = [ids];\r\n for (let id of ids)\r\n {\r\n if (id?.Object)\r\n this._ShowObjectIds.add(id);\r\n }\r\n }\r\n RemoveShowObjects(ids: ObjectId[] | ObjectId)\r\n {\r\n this.WriteAllObjectRecord();\r\n if (!Array.isArray(ids))\r\n ids = [ids];\r\n ids.forEach(id => this._ShowObjectIds.delete(id));\r\n }\r\n AppendHideObjects(ids: ObjectId[] | ObjectId)\r\n {\r\n this.WriteAllObjectRecord();\r\n if (!Array.isArray(ids))\r\n ids = [ids];\r\n ids.forEach(id => this._HideObjectIds.add(id));\r\n }\r\n\r\n RemoveHideObjects(ids: ObjectId[] | ObjectId)\r\n {\r\n this.WriteAllObjectRecord();\r\n if (!Array.isArray(ids))\r\n ids = [ids];\r\n ids.forEach(id => this._HideObjectIds.delete(id));\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.GetGripPoints();\r\n case ObjectSnapMode.Mid:\r\n case ObjectSnapMode.Nea:\r\n case ObjectSnapMode.Ext:\r\n case ObjectSnapMode.Per:\r\n default:\r\n break;\r\n }\r\n return [];\r\n }\r\n SetUVs(geo: BufferGeometry)\r\n {\r\n let uvArray: number[] = [\r\n 0, 0, 1, 0, 1, 1, 1, 1, 0, 1, 0, 0\r\n ];\r\n geo.setAttribute(\"uv\", new Float32BufferAttribute(uvArray, 2));\r\n }\r\n protected OnlyRenderType = true;\r\n get Entitys()\r\n {\r\n let ens: Entity[] = [];\r\n for (let id of this._ShowObjectIds)\r\n if (id?.Object) ens.push(id.Object as Entity);\r\n\r\n for (let id of this._HideObjectIds)\r\n if (id?.Object) ens.push(id.Object as Entity);\r\n\r\n return ens;\r\n }\r\n get Points()\r\n {\r\n let z = -1;\r\n return [\r\n new Vector3(0, 0, z),\r\n new Vector3(this._width, 0, z),\r\n new Vector3(this._width, this._height, z),\r\n new Vector3(0, this._height, z),\r\n ];\r\n }\r\n\r\n NeedUpdateTexture = true;\r\n \r\n\r\n UpdateByPts(p1: Vector3, p2: Vector3)\r\n {\r\n let left = Math.min(p1.x, p2.x);\r\n let bottom = Math.min(p1.y, p2.y);\r\n this._width = Math.abs(p1.x - p2.x);\r\n this._height = Math.abs(p1.y - p2.y);\r\n this.Position = new Vector3(left, bottom);\r\n }\r\n GetGripPoints()\r\n {\r\n return this.Points.map(p => p.applyMatrix4(this.OCS).setZ(0));\r\n }\r\n MoveGripPoints(indexList: number[], moveVec: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n\r\n let pts = this.GetGripPoints();\r\n\r\n for (let index of indexList)\r\n {\r\n pts[index].add(moveVec);\r\n this.UpdateByPts(pts[index], pts[FixIndex(index + 2, 4)]);\r\n }\r\n this.Update();\r\n }\r\n ZoomAll()\r\n {\r\n let box = new Box3;\r\n for (let obj of this.scene.children)\r\n {\r\n let ent = GetEntity(obj);\r\n if (ent) box.union(ent.BoundingBox);\r\n else box.union(GetBox(obj));\r\n }\r\n\r\n if (box.isEmpty())\r\n box.set(new Vector3(), new Vector3(1000 * (this.Width / this.Height), 1000, 1000));\r\n this.camera.ZoomExtentsBox3(box);\r\n this.camera.Zoom(1.2);\r\n }\r\n\r\n ZoomtoEntitys(ens: Entity[])\r\n {\r\n let box = new Box3();\r\n ens.reduce((b, e) => b.union(e.BoundingBox), box);\r\n if (box.isEmpty())\r\n return;\r\n this.camera.ZoomExtentsBox3(box);\r\n this.camera.Zoom(1.2);\r\n }\r\n\r\n get RenderType()\r\n {\r\n return this._renderType;\r\n }\r\n set RenderType(v: RenderType)\r\n {\r\n if (v === this._renderType) return;\r\n this.WriteAllObjectRecord();\r\n this._renderType = v;\r\n for (let o of this.scene.children)\r\n {\r\n if (o instanceof Group)\r\n {\r\n DisposeThreeObj(o);\r\n Object3DRemoveAll(o);\r\n\r\n let e = o.userData.Entity as Entity;\r\n let obj = e.GetDrawObjectFromRenderType(e.IsOnlyRender ? this._renderType + 100 : this._renderType);\r\n if (obj)\r\n o.children.push(obj);\r\n }\r\n }\r\n }\r\n get BoundingBox()\r\n {\r\n return new Box3().setFromPoints(this.GetGripPoints());\r\n }\r\n CanRennder(en: Entity)\r\n {\r\n if (en?.Id\r\n && !en.IsErase && (en instanceof Entity) && !(en instanceof Hole)\r\n && !(en instanceof ViewportEntity)\r\n && !(en instanceof VisualSpaceBox))\r\n {\r\n //首个版本布局由隐藏列表控制\r\n if (this.IsFirstVersion)\r\n {\r\n if (this._HideObjectIds.has(en.Id))\r\n return false;\r\n }\r\n else\r\n {\r\n if (!this._ShowObjectIds.has(en.Id) || this._HideObjectIds.has(en.Id))\r\n return false;\r\n }\r\n if (en instanceof HardwareCompositeEntity && en.HardwareOption.name.includes(\"铰链\"))\r\n return false;\r\n return true;\r\n }\r\n return false;\r\n }\r\n AppendEntity(en: Entity)\r\n {\r\n if (!this.CanRennder(en)) return;\r\n\r\n let cloneObject = new Group();\r\n let renderType = en.IsOnlyRender ? this._renderType + 100 : this._renderType;\r\n let o = en.GetDrawObjectFromRenderType(renderType);\r\n if (!o)\r\n {\r\n console.warn(`该实体${renderType}类型不存在`);\r\n return;\r\n }\r\n cloneObject.children.push(o);\r\n cloneObject.name = en.Id.Index.toString();\r\n cloneObject.userData = { Entity: en };\r\n cloneObject.updateMatrixWorld();\r\n this.scene.add(cloneObject);\r\n this.NeedUpdateTexture = true;\r\n }\r\n GoodBye()\r\n {\r\n super.GoodBye();\r\n DisposeThreeObj(this.scene);\r\n Object3DRemoveAll(this.scene);\r\n this.ViewportMaterial?.dispose();\r\n this.ViewportMaterial = undefined;\r\n this._RenderTarget.dispose();\r\n }\r\n UpdateScene()\r\n {\r\n let hideIndexs = new Set(this.HideObjects.map(i => i.Index.toString()));\r\n let showIndexs = new Set(this.ShowObjects.map(i => i.Index.toString()));\r\n for (let o of this.scene.children)\r\n {\r\n if (!showIndexs.has(o.name) || hideIndexs.has(o.name))\r\n {\r\n if (o.type !== \"AmbientLight\")\r\n o.visible = false;\r\n }\r\n else\r\n {\r\n o.visible = true;\r\n showIndexs.delete(o.name);\r\n }\r\n }\r\n this._ShowObjectIds.forEach(i => showIndexs.has(i.Index.toString()) && this.AppendEntity(i.Object as Entity));\r\n this.NeedUpdateTexture = true;\r\n }\r\n CloneDrawObject(from: this)\r\n {\r\n super.CloneDrawObject(from);\r\n for (let [type, obj] of this._CacheDrawObject)\r\n {\r\n (obj.children[1] as Mesh).material = this.ViewportMaterial;\r\n }\r\n }\r\n IsInFrustum(obj: Object3D)\r\n {\r\n let camera = this.camera.Camera;\r\n ProjScreenMatrix.multiplyMatrices(camera.projectionMatrix, camera.matrixWorldInverse);\r\n this._Frustum.setFromProjectionMatrix(ProjScreenMatrix);\r\n let isInt = false;\r\n obj.traverse((o: Mesh | Line) =>\r\n {\r\n if (!isInt && o.geometry)\r\n isInt = this._Frustum.intersectsObject(o);\r\n });\r\n return isInt;\r\n }\r\n IsContainText(text: Entity)\r\n {\r\n if (!(text instanceof Text)) return false;\r\n if (!this._EntitysBoundingBox)\r\n {\r\n this._EntitysBoundingBox = new Box3();\r\n for (let en of this.Entitys)\r\n {\r\n if (!en.IsErase && en instanceof Board)\r\n this._EntitysBoundingBox.union(en.BoundingBox);\r\n }\r\n }\r\n if (this._EntitysBoundingBox.containsBox(text.BoundingBox))\r\n return true;\r\n else\r\n return false;\r\n }\r\n IsFirstVersion = false;\r\n protected _ReadFile(file: CADFiler)\r\n {\r\n super._ReadFile(file);\r\n let ver = file.Read();\r\n\r\n this.IsFirstVersion = ver === 1;\r\n\r\n this.camera.ReadFile(file);\r\n this._width = file.Read();\r\n this._height = file.Read();\r\n this._renderType = file.Read();\r\n let count = file.Read();\r\n this._HideObjectIds.clear();\r\n for (let i = 0; i < count; i++)\r\n {\r\n let id = file.ReadSoftObjectId();\r\n if (id)\r\n this._HideObjectIds.add(id);\r\n }\r\n\r\n if (ver > 1)\r\n {\r\n let count = file.Read();\r\n this._ShowObjectIds.clear();\r\n for (let i = 0; i < count; i++)\r\n {\r\n let id = file.ReadSoftObjectId();\r\n if (id)\r\n this._ShowObjectIds.add(id);\r\n }\r\n }\r\n if (!this._isErase)\r\n this.UpdateScene();\r\n }\r\n WriteFile(file: CADFiler)\r\n {\r\n super.WriteFile(file);\r\n file.Write(2);\r\n this.camera.WriteFile(file);\r\n file.Write(this._width);\r\n file.Write(this._height);\r\n file.Write(this._renderType);\r\n file.Write(this._HideObjectIds.size);\r\n this._HideObjectIds.forEach(id => file.WriteSoftObjectId(id));\r\n\r\n file.Write(this._ShowObjectIds.size);\r\n this._ShowObjectIds.forEach(id => file.WriteSoftObjectId(id));\r\n }\r\n}\r\n","import { ExtrudeGeometry, Geometry, Mesh, MeshNormalMaterial, Object3D, Vector3 } from \"three\";\r\nimport { RenderType } from \"../../GraphicsSystem/RenderType\";\r\nimport { Factory } from '../CADFactory';\r\nimport { CADFiler } from '../CADFiler';\r\nimport { Contour } from '../Contour';\r\nimport { Circle } from '../Entity/Circle';\r\nimport { Entity } from '../Entity/Entity';\r\n\r\n@Factory\r\nexport class Cylineder extends Entity\r\n{\r\n private m_Radius: number;\r\n private m_Height: number;\r\n private m_Center: Vector3 = new Vector3();\r\n constructor(rad?: number, height?: number)\r\n {\r\n super();\r\n this.m_Radius = rad || 1;\r\n this.m_Height = height || 1;\r\n }\r\n get Radius()\r\n {\r\n return this.m_Radius;\r\n }\r\n set Radius(v: number)\r\n {\r\n this.WriteAllObjectRecord();\r\n this.m_Radius = v;\r\n this.Update();\r\n }\r\n get Height()\r\n {\r\n return this.m_Height;\r\n }\r\n set Height(v: number)\r\n {\r\n this.WriteAllObjectRecord();\r\n this.m_Height = v;\r\n this.Update();\r\n }\r\n get Center()\r\n {\r\n return new Vector3().setFromMatrixPosition(this.OCS);\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 CreateGeometry()\r\n {\r\n let cir = Contour.CreateContour([new Circle(this.m_Center, this.m_Radius)]).Shape;\r\n let extrudeSettings = {\r\n bevelEnabled: false,\r\n depth: this.m_Height\r\n };\r\n return new ExtrudeGeometry(cir, extrudeSettings);\r\n }\r\n InitDrawObject(renderType: RenderType): Object3D\r\n {\r\n return new Mesh(this.CreateGeometry(), new MeshNormalMaterial());\r\n }\r\n UpdateDrawObject(type: RenderType, en: Object3D)\r\n {\r\n let obj = en as Mesh;\r\n obj.geometry = this.CreateGeometry();\r\n (obj.geometry as Geometry).verticesNeedUpdate = true;\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.m_Radius = file.Read();\r\n this.m_Height = file.Read();\r\n this.m_Center.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.m_Radius);\r\n file.Write(this.m_Height);\r\n file.Write(this.m_Center.toArray());\r\n }\r\n}\r\n","import { Box3, Face3, Geometry, Matrix4, Mesh, MeshNormalMaterial, Object3D, ShapeUtils, Vector2, Vector3 } from \"three\";\r\nimport { ColorMaterial } from \"../../Common/ColorPalette\";\r\nimport { Object3DRemoveAll } from \"../../Common/Dispose\";\r\nimport { clamp, FixIndex } from \"../../Common/Utils\";\r\nimport { ObjectSnapMode } from \"../../Editor/ObjectSnapMode\";\r\nimport { angle, AsVector2, equaln, equalv3, isParallelTo, YAxis, ZeroVec } from \"../../Geometry/GeUtils\";\r\nimport { Matrix2 } from \"../../Geometry/Matrix2\";\r\nimport { Orbit } from \"../../Geometry/Orbit\";\r\nimport { RenderType } from \"../../GraphicsSystem/RenderType\";\r\nimport { Factory } from \"../CADFactory\";\r\nimport { CADFiler } from \"../CADFiler\";\r\nimport { CADObject } from \"../CADObject\";\r\nimport { Arc } from \"../Entity/Arc\";\r\nimport { Entity } from \"../Entity/Entity\";\r\nimport { Polyline } from \"../Entity/Polyline\";\r\n\r\nlet r = new Matrix2;\r\nlet v = new Vector3;\r\n\r\nexport function AxisCS(n: Vector3): Matrix4\r\n{\r\n let x = new Vector3;\r\n let y = new Vector3;\r\n Orbit.ComputUpDirection(n, y, x);\r\n return new Matrix4().makeBasis(x.normalize(), y.normalize(), n);\r\n}\r\n\r\nlet _Arc = new Arc(new Vector3, 1, 0, Math.PI / 2, false);\r\n@Factory\r\nexport class RevolveSolid extends Entity\r\n{\r\n private _Contour: Polyline;\r\n constructor(\r\n axisDirection?: Vector3,\r\n axisPos?: Vector3,\r\n contour?: Polyline,\r\n private _StartAngle = 0,\r\n private _EndAngle = Math.PI / 2,\r\n )\r\n {\r\n super();\r\n if (axisDirection)\r\n {\r\n axisDirection.normalize();\r\n let x = new Vector3;\r\n let y = new Vector3;\r\n Orbit.ComputUpDirection(axisDirection, y, x);\r\n this._Matrix.makeBasis(x.normalize(), y.normalize(), axisDirection);\r\n }\r\n else\r\n axisDirection = new Vector3(0, 0, 1);\r\n\r\n if (axisPos)\r\n this._Matrix.setPosition(axisPos);\r\n else\r\n axisPos = new Vector3;\r\n\r\n if (contour)\r\n {\r\n if (contour.Id) this._Contour = contour.Clone();\r\n else this._Contour = contour;\r\n\r\n this._Contour.IsEmbedEntity = true;\r\n\r\n if (this._Contour.IsClockWise) this._Contour.Reverse();\r\n\r\n let ocs = this.OCS.setPosition(0, 0, 0);\r\n let ocsInv = this.OCSInv;\r\n let endParam = this._Contour.EndParam;\r\n\r\n let p = this._Contour.StartPoint.applyMatrix4(ocsInv);\r\n axisPos.add(axisDirection.clone().multiplyScalar(p.z));\r\n\r\n //对齐X轴\r\n for (let i = 0; i < endParam; i += 0.5)\r\n {\r\n let p = this._Contour.GetPointAtParam(i);\r\n p.applyMatrix4(ocsInv).setZ(0);\r\n\r\n if (!equalv3(p, ZeroVec))\r\n {\r\n p.applyMatrix4(ocs);\r\n p.normalize();//X轴\r\n let y = axisDirection.clone().cross(p).normalize();\r\n this._Matrix.makeBasis(p, y, axisDirection).setPosition(axisPos);\r\n break;\r\n }\r\n }\r\n this._Contour.ApplyMatrix(this.OCSInv);\r\n }\r\n }\r\n\r\n get Contour() { return this._Contour; }\r\n\r\n GetGripPoints()\r\n {\r\n let box = this._Contour.BoundingBox;\r\n let size = box.getSize(new Vector3);\r\n let p1 = new Vector3(size.x);\r\n let p2 = p1.clone();\r\n r.setRotate(this._StartAngle);\r\n r.applyVector(p1);\r\n r.setRotate(this._EndAngle);\r\n r.applyVector(p2);\r\n p1.applyMatrix4(this._Matrix);\r\n p2.applyMatrix4(this._Matrix);\r\n return [p1, p2];\r\n }\r\n\r\n GetObjectSnapPoints(snapMode: ObjectSnapMode, pickPoint: Vector3, lastPoint: Vector3)\r\n {\r\n switch (snapMode)\r\n {\r\n case ObjectSnapMode.Nea:\r\n break;\r\n case ObjectSnapMode.Cen:\r\n break;\r\n case ObjectSnapMode.Per:\r\n break;\r\n case ObjectSnapMode.Tan:\r\n break;\r\n case ObjectSnapMode.End:\r\n return this.GetGripPoints();\r\n default:\r\n break;\r\n }\r\n return [];\r\n }\r\n\r\n MoveGripPoints(indexs: number[], vec: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n for (let i of indexs)\r\n {\r\n let p = this.GetGripPoints()[i];\r\n let np = p.add(vec).applyMatrix4(this.OCSInv);\r\n let a = angle(np);\r\n if (i === 0)\r\n this._StartAngle = a;\r\n else\r\n this._EndAngle = a;\r\n\r\n this.Update();\r\n return;\r\n }\r\n }\r\n\r\n private _MeshGeometry: Geometry;\r\n\r\n get BoundingBox()\r\n {\r\n let geom = this.MeshGeometry;\r\n\r\n if (!geom)\r\n {\r\n console.error(\"RevolveSolid无法建模\");\r\n return new Box3;\r\n }\r\n\r\n if (!geom.boundingBox)\r\n geom.computeBoundingBox();\r\n\r\n return geom.boundingBox.clone().applyMatrix4(this._Matrix);\r\n }\r\n\r\n private _CacheContourPoints: Vector2[];//轮廓2D点\r\n private _CacheContourPoints3D: Vector3[];//轮廓3D点\r\n\r\n private _CacheContourPoints3DQ: Vector3[];//放样点(展开)\r\n private _CacheContourPoints3DQ2: Vector3[][] = [];//放样点集合缓存(只是避免了重复构造)\r\n\r\n private _CacheContourFaces: [number, number, number][];//Face缓存\r\n private _CacheIsRev: boolean;//方向缓存\r\n\r\n get MeshGeometry()\r\n {\r\n if (this._MeshGeometry) return this._MeshGeometry;\r\n\r\n _Arc.StartAngle = this._StartAngle;\r\n _Arc.EndAngle = this._EndAngle;\r\n\r\n if (this._CacheIsRev === undefined)\r\n {\r\n let n = this._Contour.Normal;\r\n this._CacheIsRev = n.y > 0;\r\n }\r\n\r\n if (this._CacheContourPoints === undefined)\r\n {\r\n this._CacheContourPoints3D = [];\r\n let ocsInv = this._Contour.OCSInv;\r\n for (let i = 0; i < this._Contour.EndParam; i++)\r\n {\r\n let c = this._Contour.GetCurveAtIndex(i);\r\n this._CacheContourPoints3D.push(c.StartPoint);\r\n if (c instanceof Arc)\r\n {\r\n let minCount = Math.max(2, Math.ceil((c.AllAngle) / Math.PI) * 3);\r\n let count = clamp(c.Length / 20, minCount, 30);\r\n for (let j = 0; j < count; j++)\r\n this._CacheContourPoints3D.push(c.GetPointAtParam((j + 1) / (count + 1)));\r\n }\r\n this._CacheContourPoints3D.push(c.EndPoint);\r\n }\r\n this._CacheContourPoints = this._CacheContourPoints3D.map(p => AsVector2(p.clone().applyMatrix4(ocsInv)));\r\n\r\n this._CacheContourFaces = ShapeUtils.triangulateShape(this._CacheContourPoints, []) as [number, number, number][];\r\n\r\n this._CacheContourPoints3DQ = [];\r\n if (isParallelTo(this._Contour.Normal, YAxis))\r\n this._CacheContourPoints3DQ.push(...this._CacheContourPoints3D);\r\n else\r\n for (let i = 0; i < this._CacheContourPoints3D.length; i++)\r\n {\r\n let p1 = this._CacheContourPoints3D[i];\r\n let p2 = this._CacheContourPoints3D[FixIndex(i + 1, this._CacheContourPoints3D)];\r\n let length = p1.distanceTo(p2);\r\n v.subVectors(p2, p1);\r\n let count = clamp(Math.floor(length / 50), 2, 16);//合理的控制采样精度是性能的关键\r\n v.divideScalar(count);\r\n\r\n this._CacheContourPoints3DQ.push(p1);\r\n if (equaln(p1.x, 0) && equaln(p1.y, 0)\r\n && equaln(p2.x, 0) && equaln(p2.y, 0))\r\n continue;\r\n for (let j = 1; j < count; j++)\r\n {\r\n this._CacheContourPoints3DQ.push(v.clone().multiplyScalar(j).add(p1));\r\n }\r\n }\r\n\r\n if (!this._CacheIsRev)\r\n this._CacheContourPoints3DQ.reverse();\r\n }\r\n\r\n //性能:此处用BufferGeometry可以提高性能\r\n let geo = new Geometry;\r\n\r\n\r\n if (this._StartAngle !== this._EndAngle)\r\n {\r\n //起点盖子\r\n r.setRotate(this._StartAngle);\r\n let contoursStart = this._CacheContourPoints3D.map(p =>\r\n {\r\n p = p.clone();\r\n r.applyVector(p);\r\n return p;\r\n });\r\n geo.vertices.push(...contoursStart);\r\n for (let face of this._CacheContourFaces)\r\n {\r\n if (this._CacheIsRev)\r\n geo.faces.push(new Face3(face[2], face[1], face[0]));\r\n else\r\n geo.faces.push(new Face3(face[0], face[1], face[2]));\r\n }\r\n\r\n //终点盖子\r\n r.setRotate(this._EndAngle);\r\n let contoursEnd = this._CacheContourPoints3D.map(p =>\r\n {\r\n p = p.clone();\r\n r.applyVector(p);\r\n return p;\r\n });\r\n let count = geo.vertices.length;\r\n geo.vertices.push(...contoursEnd);\r\n for (let face of this._CacheContourFaces)\r\n {\r\n if (!this._CacheIsRev)\r\n geo.faces.push(new Face3(count + face[2], count + face[1], count + face[0]));\r\n else\r\n geo.faces.push(new Face3(count + face[0], count + face[1], count + face[2]));\r\n }\r\n }\r\n\r\n let allAngle = this._StartAngle === this._EndAngle ? Math.PI * 2 : _Arc.AllAngle;\r\n\r\n RevolveLine(geo, this._CacheContourPoints3DQ, this._CacheContourPoints3DQ2, this._StartAngle, allAngle);\r\n geo.computeVertexNormals();\r\n geo.computeFaceNormals();\r\n this._MeshGeometry = geo;\r\n return geo;\r\n }\r\n\r\n //#region Draw\r\n InitDrawObject(renderType: RenderType = RenderType.Wireframe)\r\n {\r\n let obj = new Object3D();\r\n this.UpdateDrawObject(renderType, obj);\r\n return obj;\r\n }\r\n\r\n UpdateDrawGeometry()\r\n {\r\n this._MeshGeometry = undefined;\r\n }\r\n\r\n private static MeshNromal = new MeshNormalMaterial({ wireframe: true });\r\n\r\n UpdateDrawObject(type: RenderType, obj: Object3D)\r\n {\r\n Object3DRemoveAll(obj);\r\n\r\n if (type === RenderType.Wireframe)\r\n {\r\n let g = this.MeshGeometry;\r\n g.computeFaceNormals();\r\n g.computeVertexNormals();\r\n obj.add(new Mesh(g, RevolveSolid.MeshNromal));\r\n }\r\n else// if (type === RenderType.Conceptual || type===RenderType.Physical || type === RenderType.Jig)\r\n {\r\n let g = this.MeshGeometry;\r\n g.computeFaceNormals();\r\n g.computeVertexNormals();\r\n obj.add(new Mesh(g, ColorMaterial.GetConceptualMaterial(this.ColorIndex)));\r\n }\r\n return obj;\r\n }\r\n\r\n /**\r\n * 更新实体Jig状态时的材质\r\n */\r\n UpdateJigMaterial(color = 8)\r\n {\r\n for (let [type, obj] of this._CacheDrawObject)\r\n {\r\n if (obj.children.length)\r\n {\r\n let mesh = obj.children[0] as Mesh;\r\n mesh.material = ColorMaterial.GetBasicMaterialTransparent(8, 0.1);\r\n }\r\n }\r\n }\r\n RestoreJigMaterial()\r\n {\r\n for (let [type, obj] of this._CacheDrawObject)\r\n {\r\n if (obj.children.length)\r\n {\r\n let mesh = obj.children[0] as Mesh;\r\n if (type === RenderType.Wireframe)\r\n mesh.material = RevolveSolid.MeshNromal;\r\n else\r\n mesh.material = ColorMaterial.GetConceptualMaterial(this.ColorIndex);\r\n }\r\n }\r\n }\r\n\r\n //#endregion\r\n\r\n //#region -------------------------File-------------------------\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._Contour = file.ReadObject();\r\n if (ver > 1)\r\n {\r\n this._StartAngle = file.Read();\r\n this._EndAngle = file.Read();\r\n }\r\n return this;\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(2);\r\n super.WriteFile(file);\r\n file.WriteObject(this._Contour);\r\n file.Write(this._StartAngle);\r\n file.Write(this._EndAngle);\r\n return this;\r\n }\r\n //局部撤销\r\n ApplyPartialUndo(undoData: CADObject)\r\n {\r\n super.ApplyPartialUndo(undoData);\r\n }\r\n //#endregion\r\n}\r\n\r\nfunction RevolveLine(geo: Geometry, contourPoints: Vector3[], cachePoints: Vector3[][], startAngle: number, allAngle: number)\r\n{\r\n //计算圆的半径\r\n let rotateCircleRadius = 0;\r\n for (let p of contourPoints)\r\n {\r\n let r = p.x * p.x + p.y * p.y;\r\n if (r > rotateCircleRadius)\r\n rotateCircleRadius = r;\r\n }\r\n rotateCircleRadius = Math.sqrt(rotateCircleRadius);\r\n\r\n let minCount = Math.max(2, Math.ceil((allAngle) / Math.PI) * 4);\r\n let angleCount = clamp(Math.floor(rotateCircleRadius / 3.2), minCount, 30);\r\n\r\n // let angleCount = Math.max(Math.floor(allAngle / 0.2), 3);//合理的控制采样精度是性能的关键\r\n let anDiv = allAngle / angleCount;\r\n\r\n let startVerticesCount = geo.vertices.length;\r\n let contourVerticesCount = contourPoints.length;\r\n\r\n let count2 = (equaln(allAngle, Math.PI * 2) ? angleCount : angleCount + 1);\r\n //TODO:如果有必要的话,此处可以缓存0-360度的轮廓点,用空间换时间\r\n for (let i = 0; i < count2; i++)\r\n {\r\n r.setRotate(startAngle + anDiv * i);\r\n let curPoints: Vector3[];\r\n if (i < cachePoints.length)//使用已经生成的点,避免重复的生成新的Vector3造成的过多GC\r\n {\r\n curPoints = cachePoints[i];\r\n for (let j = 0; j < curPoints.length; j++)\r\n {\r\n let p = curPoints[j];\r\n p.copy(contourPoints[j]);\r\n r.applyVector(p);\r\n }\r\n }\r\n else\r\n {\r\n curPoints = contourPoints.map(p =>\r\n {\r\n p = p.clone();\r\n r.applyVector(p);\r\n return p;\r\n });\r\n cachePoints.push(curPoints);\r\n }\r\n geo.vertices.push(...curPoints);\r\n }\r\n\r\n for (let i = 0; i < angleCount; i++)\r\n {\r\n let nextI = FixIndex(i + 1, count2);\r\n\r\n let s1 = startVerticesCount + i * contourVerticesCount;\r\n let s2 = startVerticesCount + nextI * contourVerticesCount;\r\n\r\n for (let j = 0; j < contourVerticesCount; j++)\r\n {\r\n let jn = FixIndex(j + 1, contourVerticesCount);\r\n if (!IsAxis(contourPoints[j], contourPoints[jn]))\r\n {\r\n geo.faces.push(new Face3(j + s1, jn + s1, s2 + j));\r\n geo.faces.push(new Face3(j + s2, jn + s1, s2 + jn));\r\n }\r\n }\r\n }\r\n}\r\n\r\nfunction IsAxis(p1: Vector3, p2: Vector3)\r\n{\r\n return equaln(p1.x, 0) && equaln(p1.y, 0) && equaln(p2.x, 0) && equaln(p2.y, 0);\r\n}\r\n","import { HostApplicationServices } from \"../../ApplicationServices/HostApplicationServices\";\r\nimport { Factory } from \"../CADFactory\";\r\nimport { Entity } from \"../Entity/Entity\";\r\nimport { Text } from \"../Text/Text\";\r\n\r\n@Factory\r\nexport abstract class Dimension extends Entity\r\n{\r\n OnlyRenderType = true;\r\n protected _TextString: string;\r\n protected _TextSize: number = HostApplicationServices.dimTextHeight;\r\n protected _Text = new Text(undefined, undefined, \"yahei\");\r\n protected _FractionDigits: number = HostApplicationServices.fractionDigitsType;\r\n set TextString(txt: string)\r\n {\r\n let str = this.GetString();\r\n let tstr = this._TextString ? this._TextString.replace(\"<>\", str) : str;\r\n if (txt !== tstr)\r\n {\r\n this.WriteAllObjectRecord();\r\n if (txt.trim() === \"\")\r\n this._TextString = null;\r\n else\r\n this._TextString = txt.replace(str, \"<>\");\r\n this.Update();\r\n }\r\n }\r\n\r\n get TextString()\r\n {\r\n return this._TextString ? this._TextString.replace(\"<>\", this.GetString()) : this.GetString();\r\n }\r\n\r\n set TextSize(size: number)\r\n {\r\n if (this._Text.Height !== size)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._TextSize = size;\r\n this.Update();\r\n }\r\n }\r\n\r\n get TextSize()\r\n {\r\n return this._TextSize;\r\n }\r\n\r\n set FractionDigits(length: number)\r\n {\r\n if (this._FractionDigits !== length)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._FractionDigits = length;\r\n this.Update();\r\n }\r\n }\r\n\r\n get FractionDigits()\r\n {\r\n return this._FractionDigits;\r\n }\r\n\r\n protected abstract GetString(): string;\r\n}\r\n","import { LineBasicMaterial } from \"three\";\r\nimport { ColorMaterial } from \"../../Common/ColorPalette\";\r\nimport { RenderType } from \"../../GraphicsSystem/RenderType\";\r\nimport { Entity } from \"../Entity/Entity\";\r\n\r\nexport function GetDimLineMaterial(dim: Entity, renderType: RenderType): LineBasicMaterial\r\n{\r\n if (renderType === RenderType.Wireframe)\r\n return ColorMaterial.GetLineMaterial(dim.ColorIndex);\r\n else if (renderType > 100)\r\n return ColorMaterial.GetLineMaterial(0);\r\n else\r\n return ColorMaterial.GetLineMaterial(6);\r\n}\r\n","import { BufferGeometry, Line as TLine, Material, MathUtils, Matrix3, Matrix4, Mesh, Object3D, Vector3 } from \"three\";\r\nimport { Line2 } from \"three/examples/jsm/lines/Line2\";\r\nimport { HostApplicationServices } from \"../../ApplicationServices/HostApplicationServices\";\r\nimport { AddEntityDrawObject } from \"../../Common/AddEntityDrawObject\";\r\nimport { arrayRemoveDuplicateBySort, arraySortByNumber } from \"../../Common/ArrayExt\";\r\nimport { ColorMaterial } from \"../../Common/ColorPalette\";\r\nimport { reviseMirrorMatrix } from \"../../Common/Matrix4Utils\";\r\nimport { FixedNotZero, FixIndex } from \"../../Common/Utils\";\r\nimport { ObjectSnapMode } from \"../../Editor/ObjectSnapMode\";\r\nimport { BufferGeometryUtils } from \"../../Geometry/BufferGeometryUtils\";\r\nimport { angle, equaln, equalv3 } from \"../../Geometry/GeUtils\";\r\nimport { IntersectOption } from \"../../GraphicsSystem/IntersectWith\";\r\nimport { RenderType } from \"../../GraphicsSystem/RenderType\";\r\nimport { Factory } from \"../CADFactory\";\r\nimport { CADFiler } from \"../CADFiler\";\r\nimport { Arc } from \"../Entity/Arc\";\r\nimport { Line } from \"../Entity/Line\";\r\nimport { TextAligen } from \"../Text/Text\";\r\nimport { Dimension } from \"./Dimension\";\r\nimport { GetDimLineMaterial } from \"./GetDimLineMaterial\";\r\n\r\n/**\r\n * 两条直线的角度标注\r\n */\r\n@Factory\r\nexport class LineAngularDimension extends Dimension\r\n{\r\n private _Arc = new Arc();\r\n constructor(\r\n protected _L1StartPoint = new Vector3(), //第一条直线的起点\r\n protected _L1EndPoint = new Vector3(), //第一条直线的终点\r\n protected _L2StartPoint = new Vector3(), //第二条直线的起点\r\n protected _L2EndPoint = new Vector3(),\r\n protected _DimPoint = new Vector3(), //标注位置\r\n )\r\n {\r\n super();\r\n // this._Arc.ColorIndex = 3;\r\n this._Text.TextAligen = TextAligen.Down;\r\n this._Text.Height = HostApplicationServices.dimTextHeight;\r\n }\r\n\r\n protected GetString()\r\n {\r\n return FixedNotZero(MathUtils.radToDeg(this._Arc.AllAngle), this._FractionDigits) + \"°\";\r\n }\r\n\r\n UpdateDimData(l1sp: Vector3, l1ep: Vector3, l2sp: Vector3, l2ep: Vector3, dimp: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n let inv = this.OCSInv;\r\n for (let [p, pn] of [\r\n [this._L1StartPoint, l1sp],\r\n [this._L1EndPoint, l1ep],\r\n [this._L2StartPoint, l2sp],\r\n [this._L2EndPoint, l2ep],\r\n [this._DimPoint, dimp],\r\n ])\r\n {\r\n if (pn)\r\n p.copy(pn).applyMatrix4(inv);\r\n }\r\n this.Update();\r\n }\r\n\r\n get Text()\r\n {\r\n return this._Text;\r\n }\r\n get L1StartPoint()\r\n {\r\n return this._L1StartPoint.clone().applyMatrix4(this._Matrix);\r\n }\r\n get L2StartPoint()\r\n {\r\n return this._L2StartPoint.clone().applyMatrix4(this._Matrix);\r\n }\r\n get L1EndPoint()\r\n {\r\n return this._L1EndPoint.clone().applyMatrix4(this._Matrix);\r\n }\r\n get L2EndPoint()\r\n {\r\n return this._L2EndPoint.clone().applyMatrix4(this._Matrix);\r\n }\r\n get DimPoint()\r\n {\r\n return this._DimPoint.clone().applyMatrix4(this._Matrix);\r\n }\r\n get Arc()\r\n {\r\n return this._Arc.Clone().ApplyMatrix(this._Matrix);\r\n }\r\n //#region 动态拽拖\r\n GetGripPoints(): Array\r\n {\r\n return [\r\n this._L1StartPoint,\r\n this._L1EndPoint,\r\n this._L2StartPoint,\r\n this._L2EndPoint,\r\n this._DimPoint,\r\n ].map(p =>\r\n {\r\n return p.clone().applyMatrix4(this._Matrix);\r\n });\r\n }\r\n MoveGripPoints(indexList: number[], vec: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n let arr = [\r\n this._L1StartPoint,\r\n this._L1EndPoint,\r\n this._L2StartPoint,\r\n this._L2EndPoint,\r\n this._DimPoint,\r\n ];\r\n vec = vec.clone().applyMatrix4(this.OCSInv.setPosition(0, 0, 0));\r\n\r\n for (let i of indexList)\r\n arr[i].add(vec);\r\n this.Update();\r\n }\r\n GetStretchPoints(): Array\r\n {\r\n return this.GetGripPoints();\r\n }\r\n MoveStretchPoints(indexList: Array, vec: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n this.MoveGripPoints(indexList, vec);\r\n }\r\n //#endregion\r\n\r\n //#region 绘制\r\n\r\n Clone(): this\r\n {\r\n let ent = super.Clone();\r\n ent._Text.CopyFrom(this._Text);\r\n ent._Arc.CopyFrom(this._Arc);\r\n for (let [type, obj] of ent._CacheDrawObject)\r\n {\r\n for (let o of obj.children)\r\n if (o instanceof TLine)\r\n o.geometry = o.geometry.clone();\r\n }\r\n return ent;\r\n }\r\n\r\n Explode()\r\n {\r\n //为了避免Text对象没有被更新.\r\n this.GetDrawObjectFromRenderType();\r\n return [\r\n this._Arc.Clone().ApplyMatrix(this._Matrix),\r\n this._Text.Clone().ApplyMatrix(this._Matrix)\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 let arc = this._Arc.Clone().ApplyMatrix(this._Matrix);\r\n switch (snapMode)\r\n {\r\n case ObjectSnapMode.End:\r\n return this.GetStretchPoints().concat([arc.StartPoint, arc.EndPoint]);\r\n default:\r\n return arc.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform);\r\n }\r\n }\r\n InitDrawObject(renderType: RenderType = RenderType.Wireframe): Object3D\r\n {\r\n this._Text.ColorIndex = this.ColorIndex;\r\n\r\n let colorMaterial = GetDimLineMaterial(this, renderType);\r\n\r\n let arrow1 = new Mesh(BufferGeometryUtils.ArrowGeometry(), colorMaterial);\r\n let arrow2 = new Mesh(BufferGeometryUtils.ArrowGeometry(), colorMaterial);\r\n let arrowSize = 10;\r\n\r\n let l: TLine | Line2, l2: TLine | Line2;\r\n\r\n if (renderType === RenderType.WireframePrint)\r\n {\r\n l = new Line2(undefined, ColorMaterial.PrintLineMatrial);\r\n l2 = new Line2(undefined, ColorMaterial.PrintLineMatrial);\r\n arrowSize *= HostApplicationServices.lineWidth * 0.5;\r\n }\r\n else\r\n {\r\n l = new TLine(BufferGeometryUtils.CreateFromPts([new Vector3(), new Vector3()]), colorMaterial);\r\n l2 = new TLine(BufferGeometryUtils.CreateFromPts([new Vector3(), new Vector3()]), colorMaterial);\r\n }\r\n\r\n arrow1.scale.set(arrowSize, arrowSize, arrowSize);\r\n arrow2.scale.set(arrowSize, arrowSize, arrowSize);\r\n\r\n let obj = new Object3D();\r\n obj.add(arrow1, arrow2, l, l2);\r\n this.UpdateDrawObject(renderType, obj);\r\n return obj;\r\n }\r\n Update2Line(l1: Line, l2: Line, intPt: Vector3, li1: TLine, li2: TLine)\r\n {\r\n let intPar1 = l1.GetParamAtPoint(intPt);\r\n if (intPar1 >= 1)\r\n l1.Reverse();\r\n\r\n let intPar2 = l2.GetParamAtPoint(intPt);\r\n if (intPar2 >= 1)\r\n l2.Reverse();\r\n\r\n const updateLine = (l: Line, li: TLine | Line2, refPt: Vector3, refPt2?: Vector3) =>\r\n {\r\n let par = l.GetParamAtPoint(refPt);\r\n let refPar = l.GetParamAtPoint(intPt);\r\n if (par > 1)\r\n {\r\n li.visible = true;\r\n if (li instanceof TLine)\r\n {\r\n let geo = li.geometry as BufferGeometry;\r\n geo.copy(BufferGeometryUtils.CreateFromPts([l.EndPoint, refPt]));\r\n }\r\n else\r\n {\r\n let geo = li.geometry;\r\n geo.setPositions([...l.EndPoint.toArray(), ...refPt.toArray()]);\r\n }\r\n }\r\n else if (par < 0)\r\n {\r\n li.visible = true;\r\n if (li instanceof TLine)\r\n {\r\n let geo = li.geometry as BufferGeometry;\r\n\r\n geo.copy(\r\n BufferGeometryUtils.CreateFromPts([par < refPar ? intPt : l.StartPoint, refPt])\r\n );\r\n }\r\n else\r\n {\r\n let geo = li.geometry;\r\n let p = par < refPar ? intPt : l.StartPoint;\r\n geo.setPositions([...p.toArray(), ...refPt.toArray()]);\r\n }\r\n\r\n }\r\n else if (isNaN(par) && refPt2)\r\n {\r\n updateLine(l, li, refPt2);\r\n }\r\n else\r\n {\r\n li.visible = false;\r\n }\r\n };\r\n\r\n updateLine(l1, li1, this._Arc.StartPoint, this._Arc.EndPoint);\r\n updateLine(l2, li2, this._Arc.EndPoint, this._Arc.StartPoint);\r\n }\r\n\r\n UpdateDrawObject(renderType: RenderType, obj: Object3D)\r\n {\r\n let [arrow1, arrow2, li1, li2] = obj.children;\r\n obj.remove(...obj.children.slice(4));\r\n\r\n let l1 = new Line(this._L1StartPoint, this._L1EndPoint);\r\n let l2 = new Line(this._L2StartPoint, this._L2EndPoint);\r\n\r\n let insP = l1.IntersectWith(l2, IntersectOption.ExtendBoth)[0];\r\n if (insP)\r\n {\r\n this._Arc.AutoUpdate = false;//如果没有在这边关闭这个,那么Arc的盒子将错误\r\n this._Arc.Center = insP;\r\n this._Arc.Radius = insP.distanceTo(this._DimPoint);\r\n\r\n let ans = [this._L1StartPoint, this._L1EndPoint, this._L2StartPoint, this._L2EndPoint]\r\n .map(p =>\r\n {\r\n if (equalv3(p, insP))\r\n return NaN;\r\n return angle(p.clone().sub(insP));\r\n }).filter(a => !isNaN(a));\r\n ans = ans.concat(ans.map(a => (a + Math.PI) % (Math.PI * 2)));\r\n arraySortByNumber(ans);\r\n arrayRemoveDuplicateBySort(ans, (a1, a2) => equaln(a1, a2));\r\n\r\n let dimAn = angle(this._DimPoint.clone().sub(insP));\r\n\r\n for (let i = 0; i < ans.length; i++)\r\n {\r\n let ni = FixIndex(i + 1, ans.length);\r\n\r\n this._Arc.StartAngle = ans[ni];\r\n this._Arc.EndAngle = ans[i];\r\n this._Arc.ColorIndex = this._Color;\r\n\r\n if (this._Arc.ParamOnCurve(this._Arc.GetParamAtAngle(dimAn)))\r\n {\r\n this._Arc.AutoUpdate = true;\r\n this._Arc.DeferUpdate();\r\n\r\n AddEntityDrawObject(obj, this._Arc, renderType);\r\n arrow1.position.copy(this._Arc.StartPoint);\r\n arrow1.rotation.z = this._Arc.GetFistDerivAngle(0) + Math.PI / 2;\r\n arrow1.updateMatrix();\r\n\r\n arrow2.position.copy(this._Arc.EndPoint);\r\n arrow2.rotation.z = this._Arc.GetFistDerivAngle(1) - Math.PI / 2;\r\n arrow2.updateMatrix();\r\n\r\n this._Text.AutoUpdate = false;//更新标记\r\n\r\n this._Text.Height = this._TextSize;\r\n this._Text.TextString = this.TextString;\r\n this._Text.Position = this._Arc.GetPointAtParam(0.5);\r\n this._Text.TextRotation = this._Arc.GetAngleAtParam(0.5) % (Math.PI) - Math.PI / 2;\r\n\r\n this._Text.AutoUpdate = true;//更新标记\r\n this._Text.DeferUpdate();\r\n AddEntityDrawObject(obj, this._Text, renderType);\r\n break;\r\n }\r\n }\r\n\r\n this.Update2Line(l1, l2, insP, li1 as TLine, li2 as TLine);\r\n }\r\n }\r\n\r\n UpdateDrawObjectMaterial(type: RenderType, obj: Object3D, material?: Material)\r\n {\r\n let colorMaterial = GetDimLineMaterial(this, type);\r\n let count = Math.min(4, obj.children.length);\r\n for (let i = 0; i < count; i++)\r\n {\r\n let l = obj.children[i] as TLine;\r\n l.material = colorMaterial;\r\n }\r\n this._Arc.ColorIndex = this._Color;\r\n this._Text.ColorIndex = this._Color;\r\n }\r\n\r\n protected ApplyMirrorMatrix(m: Matrix4)\r\n {\r\n this.WriteAllObjectRecord();\r\n let p1 = this.L1StartPoint;\r\n let p2 = this.L1EndPoint;\r\n let p3 = this.L2StartPoint;\r\n let p4 = this.L2EndPoint;\r\n let p5 = this.DimPoint;\r\n\r\n reviseMirrorMatrix(this._Matrix, 1);\r\n\r\n this.UpdateDimData(p2, p1, p4, p3, p5);\r\n\r\n return this;\r\n }\r\n //#endregion\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._L1StartPoint.fromArray(file.Read());\r\n this._L1EndPoint.fromArray(file.Read());\r\n this._L2StartPoint.fromArray(file.Read());\r\n this._L2EndPoint.fromArray(file.Read());\r\n this._DimPoint.fromArray(file.Read());\r\n if (ver > 1) this._TextString = file.Read();\r\n if (ver > 2) this._TextSize = file.Read();\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n super.WriteFile(file);\r\n file.Write(3);\r\n file.Write(this._L1StartPoint.toArray());\r\n file.Write(this._L1EndPoint.toArray());\r\n file.Write(this._L2StartPoint.toArray());\r\n file.Write(this._L2EndPoint.toArray());\r\n file.Write(this._DimPoint.toArray());\r\n file.Write(this._TextString);\r\n file.Write(this._TextSize);\r\n }\r\n //#endregion\r\n\r\n}\r\n","import { BufferGeometry, Line as TLine, Material, Matrix3, Matrix4, Mesh, 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 { HostApplicationServices } from \"../../ApplicationServices/HostApplicationServices\";\r\nimport { AddEntityDrawObject } from \"../../Common/AddEntityDrawObject\";\r\nimport { ColorMaterial } from \"../../Common/ColorPalette\";\r\nimport { safeEval } from \"../../Common/eval\";\r\nimport { reviseMirrorMatrix } from \"../../Common/Matrix4Utils\";\r\nimport { UpdateDraw } from \"../../Common/Status\";\r\nimport { FixedNotZero } from \"../../Common/Utils\";\r\nimport { ObjectSnapMode } from \"../../Editor/ObjectSnapMode\";\r\nimport { BufferGeometryUtils } from \"../../Geometry/BufferGeometryUtils\";\r\nimport { angle, angleAndX, AsVector2, equaln, equalv3, isParallelTo, midPoint, ZAxis } from \"../../Geometry/GeUtils\";\r\nimport { RenderType } from \"../../GraphicsSystem/RenderType\";\r\nimport { Factory } from \"../CADFactory\";\r\nimport { CADFiler } from \"../CADFiler\";\r\nimport { Line } from \"../Entity/Line\";\r\nimport { Polyline } from \"../Entity/Polyline\";\r\nimport { ObjectId } from \"../ObjectId\";\r\nimport { TextAligen } from \"../Text/Text\";\r\nimport { Dimension } from \"./Dimension\";\r\nimport { GetDimLineMaterial } from \"./GetDimLineMaterial\";\r\n\r\nlet snapPolyline = new Polyline([{ pt: new Vector2, bul: 0 }, { pt: new Vector2, bul: 0 }, { pt: new Vector2, bul: 0 }, { pt: new Vector2, bul: 0 }]);\r\ninterface LeadOutLinePts\r\n{\r\n dragPt: Vector3;\r\n endPt: Vector3;\r\n}\r\ninterface DefaultValue\r\n{\r\n offset: Vector2;\r\n isFlipped: boolean;\r\n}\r\n/**\r\n * 对齐标注\r\n * 存在子类重载(线性标注 LinearDimension)\r\n * @class AlignedDimension\r\n */\r\n@Factory\r\nexport class AlignedDimension extends Dimension\r\n{\r\n //引线\r\n private _LeadOutLine = new Polyline();\r\n private _LeadOutOffsetY = 72;\r\n private _LeadOutOffsetX = 30;\r\n private _DefaultVal: DefaultValue = { offset: new Vector2(30, 72), isFlipped: false };\r\n //引线的拖拽点和终点\r\n private _LeadOutPts: LeadOutLinePts = { dragPt: midPoint(this._ArmP1, this._ArmP2), endPt: new Vector3() };\r\n //引线是否反向(往左伸/往右伸)\r\n private _LeadOutIsFlipped: boolean = false;\r\n //是否由拖拽更新_LeadOutPts.dragPt. 关系到引线的update\r\n private isDragLeadOutPt: boolean = false;\r\n constructor(\r\n //针脚\r\n protected _FootP1: Vector3 = new Vector3(),\r\n protected _FootP2: Vector3 = new Vector3(),\r\n //肩膀\r\n protected _ArmP1: Vector3 = new Vector3(),\r\n protected _ArmP2: Vector3 = new Vector3(),\r\n protected _TextRotation: number = undefined,\r\n //是否显示引线\r\n protected _LeadOutVisible: boolean = true,\r\n )\r\n {\r\n super();\r\n this._Text.TextAligen = TextAligen.Down;\r\n this._Text.Height = HostApplicationServices.dimTextHeight;\r\n }\r\n\r\n set Material(materialId: ObjectId) { }\r\n\r\n set FootP1(v: Vector3)\r\n {\r\n this._FootP1.copy(v).applyMatrix4(this.OCSInv);\r\n this.Update();\r\n }\r\n get FootP1()\r\n {\r\n return this._FootP1.clone().applyMatrix4(this._Matrix);\r\n }\r\n set FootP2(v: Vector3)\r\n {\r\n this._FootP2.copy(v).applyMatrix4(this.OCSInv);\r\n this.Update();\r\n }\r\n get FootP2()\r\n {\r\n return this._FootP2.clone().applyMatrix4(this._Matrix);\r\n }\r\n set ArmP1(v: Vector3)\r\n {\r\n this._ArmP1.copy(v).applyMatrix4(this.OCSInv);\r\n this.Update();\r\n }\r\n get ArmP1()\r\n {\r\n return this._ArmP1.clone().applyMatrix4(this._Matrix);\r\n }\r\n set ArmP2(v: Vector3)\r\n {\r\n this._ArmP2.copy(v).applyMatrix4(this.OCSInv);\r\n this.Update();\r\n }\r\n get ArmP2()\r\n {\r\n return this._ArmP2.clone().applyMatrix4(this._Matrix);\r\n }\r\n\r\n get TextPosition()\r\n {\r\n return midPoint(this._ArmP1, this._ArmP2).applyMatrix4(this._Matrix);\r\n }\r\n set TextPosition(p: Vector3)\r\n {\r\n p = p.clone().applyMatrix4(this.OCSInv);\r\n let l = new Line(this._ArmP1.clone(), this._ArmP2.clone());\r\n p.setZ(this._ArmP1.z);\r\n let cp = l.GetClosestPointTo(p, true);\r\n let v = p.clone().sub(cp);\r\n\r\n this._ArmP1.add(v);\r\n this._ArmP2.add(v);\r\n\r\n this.Update();\r\n }\r\n\r\n //创建以arm1,arm2为x轴 position在foot1的坐标系 用于定位引线\r\n get DalUcs()\r\n {\r\n let dalUcs = new Matrix4();\r\n if (!equaln(this._ArmP1.distanceTo(this._ArmP2), 0))\r\n {\r\n let vx = this._ArmP2.clone().sub(this._ArmP1);\r\n if (equaln(this._ArmP1.x, this._ArmP2.x))\r\n {\r\n if (this._ArmP1.y < this._ArmP2.y)\r\n vx.negate();\r\n }\r\n else if (this._ArmP1.x < this._ArmP2.x)\r\n vx.negate();\r\n\r\n if (isParallelTo(vx, ZAxis))\r\n return new Matrix4().setPosition(this._FootP1);\r\n\r\n let vy = vx.clone().cross(ZAxis);\r\n dalUcs = new Matrix4().makeBasis(vx.normalize(), vy.normalize(), ZAxis);\r\n dalUcs.setPosition(this._FootP1);\r\n }\r\n return dalUcs;\r\n }\r\n\r\n RaiseFooters(num: number)\r\n {\r\n let dalucs = this.DalUcs;\r\n let dalUcsInv = new Matrix4().getInverse(dalucs);\r\n\r\n let p = new Vector3(0, num, 0);\r\n let f1 = this._FootP1.clone().applyMatrix4(dalucs);\r\n let f2 = this._FootP2.clone().applyMatrix4(dalucs);\r\n let a1 = this._ArmP1.clone().applyMatrix4(dalucs);\r\n if (a1.y < f1.y)\r\n p.negate();\r\n this._FootP1 = f1.add(p).applyMatrix4(dalUcsInv);\r\n this._FootP2 = f2.add(p).applyMatrix4(dalUcsInv);\r\n\r\n this.Update();\r\n }\r\n\r\n set TextRotation(angle: number)\r\n {\r\n this._TextRotation = angle;\r\n this.Update();\r\n }\r\n\r\n set TextAligen(al: TextAligen)\r\n {\r\n if (al !== this._Text.TextAligen)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._Text.TextAligen = al;\r\n }\r\n }\r\n\r\n get Text()\r\n {\r\n if (!this._Text.TextString)\r\n this.UpdateText();\r\n\r\n return this._Text;\r\n }\r\n\r\n protected GetString(): string\r\n {\r\n return FixedNotZero(this._ArmP1.distanceTo(this._ArmP2), this._FractionDigits);\r\n }\r\n\r\n get BoundingBox()\r\n {\r\n this.SetDataToTempPolyline();\r\n if (this._Text.HasBoundingBox)\r\n return snapPolyline.BoundingBox.union(this.Text.BoundingBox);\r\n else\r\n return snapPolyline.BoundingBox;\r\n }\r\n\r\n set LeadOutVisible(visible: boolean)\r\n {\r\n if (this._LeadOutVisible === visible) return;\r\n this.WriteAllObjectRecord();\r\n this._LeadOutVisible = visible;\r\n this.Update();\r\n }\r\n\r\n //引线朝右视为未翻转\r\n set LeadOutFlipped(isFlipped: boolean)\r\n {\r\n if (this._LeadOutIsFlipped === isFlipped) return;\r\n this.WriteAllObjectRecord();\r\n this._LeadOutIsFlipped = isFlipped;\r\n this.Update();\r\n }\r\n\r\n get LeadOutFlipped()\r\n {\r\n return this._LeadOutIsFlipped;\r\n }\r\n\r\n toggleLeadOutVisible()\r\n {\r\n this.WriteAllObjectRecord();\r\n this.LeadOutVisible = !this._LeadOutVisible;\r\n }\r\n\r\n toggleLeadOutFlipped()\r\n {\r\n this.WriteAllObjectRecord();\r\n this.LeadOutFlipped = !this._LeadOutIsFlipped;\r\n }\r\n\r\n set LeadOutOffsetY(size: number)\r\n {\r\n if (this._LeadOutOffsetY === size) return;\r\n this.WriteAllObjectRecord();\r\n this._LeadOutOffsetY = size;\r\n this.Update();\r\n }\r\n\r\n get LeadOutOffsetY()\r\n {\r\n return this._LeadOutOffsetY;\r\n }\r\n\r\n set LeadOutOffsetX(size: number)\r\n {\r\n if (this._LeadOutOffsetX === size) return;\r\n this.WriteAllObjectRecord();\r\n this._LeadOutOffsetX = size;\r\n this.Update();\r\n }\r\n\r\n get LeadOutOffsetX()\r\n {\r\n return this._LeadOutOffsetX;\r\n }\r\n\r\n set DefaultValue(val: DefaultValue)\r\n {\r\n this._DefaultVal = val;\r\n this._LeadOutOffsetX = val.offset.x;\r\n this._LeadOutOffsetY = val.offset.y;\r\n this.LeadOutFlipped = val.isFlipped;\r\n }\r\n\r\n get DefaultValue()\r\n {\r\n return this._DefaultVal;\r\n }\r\n\r\n Explode()\r\n {\r\n this.UpdateText(this._Text.Position);\r\n let res =\r\n [\r\n new Line(this._FootP1.clone(), this._ArmP1.clone()),\r\n new Line(this._ArmP2.clone(), this._ArmP1.clone()),\r\n new Line(this._ArmP2.clone(), this._FootP2.clone()),\r\n this._Text.Clone()\r\n ];\r\n if (!equalv3(this._LeadOutPts.dragPt, midPoint(this._ArmP1, this._ArmP2)))\r\n res.push(\r\n new Line(midPoint(this._ArmP1, this._ArmP2), this._LeadOutPts.dragPt.clone()),\r\n new Line(this._LeadOutPts.dragPt.clone(), this._LeadOutPts.endPt.clone())\r\n );\r\n return res.map(en => en.ApplyMatrix(this._Matrix));\r\n }\r\n protected ApplyMirrorMatrix(m: Matrix4)\r\n {\r\n this.WriteAllObjectRecord();\r\n let footP1 = this.FootP1;\r\n let footP2 = this.FootP2;\r\n let armP1 = this.ArmP1;\r\n let armP2 = this.ArmP2;\r\n\r\n reviseMirrorMatrix(this._Matrix, 0);\r\n\r\n this.FootP1 = footP1;\r\n this.FootP2 = footP2;\r\n this.ArmP1 = armP1;\r\n this.ArmP2 = armP2;\r\n\r\n this.Update(UpdateDraw.Geometry);\r\n return this;\r\n }\r\n Clone(): this\r\n {\r\n let ent = super.Clone();\r\n ent._Text.CopyFrom(this._Text);\r\n for (let [type, obj] of ent._CacheDrawObject)\r\n {\r\n for (let o of obj.children)\r\n if (o instanceof TLine)\r\n o.geometry = o.geometry.clone();\r\n }\r\n return ent;\r\n }\r\n\r\n InitDrawObject(renderType: RenderType = RenderType.Wireframe): Object3D\r\n {\r\n let obj = new Object3D();\r\n let colorMaterial = GetDimLineMaterial(this, renderType);\r\n let line: TLine | Line2;\r\n if (renderType === RenderType.WireframePrint)\r\n {\r\n const geo = new LineGeometry();\r\n line = new Line2(geo, ColorMaterial.PrintLineMatrial);\r\n }\r\n else\r\n line = new TLine(\r\n BufferGeometryUtils.CreateFromPts([this._FootP1, this._FootP2, this._ArmP1, this._ArmP2]),\r\n colorMaterial\r\n );\r\n\r\n let arrow1 = new Mesh(BufferGeometryUtils.ArrowGeometry(), colorMaterial);\r\n let arrow2 = new Mesh(BufferGeometryUtils.ArrowGeometry(), colorMaterial);\r\n\r\n obj.add(line, arrow1, arrow2);\r\n\r\n this.UpdateDrawObject(renderType, obj);\r\n\r\n return obj;\r\n }\r\n\r\n UpdateDrawObject(renderType: RenderType, obj: Object3D)\r\n {\r\n obj.remove(...obj.children.slice(3));\r\n let [line, arrow1, arrow2] = obj.children;\r\n let arrowSize = 10;\r\n if (renderType === RenderType.WireframePrint)\r\n {\r\n arrowSize *= HostApplicationServices.lineWidth * 0.5;\r\n const geometry = (line).geometry;\r\n let nums: number[] = [];\r\n for (let p of [this._FootP1, this._ArmP1, this._ArmP2, this._FootP2])\r\n nums.push(p.x, p.y, p.z);\r\n geometry.setPositions(nums);\r\n }\r\n else\r\n BufferGeometryUtils.UpdatePts((line).geometry as BufferGeometry, [this._FootP1, this._ArmP1, this._ArmP2, this._FootP2], true);\r\n\r\n arrow1.scale.set(arrowSize, arrowSize, arrowSize);\r\n arrow2.scale.set(arrowSize, arrowSize, arrowSize);\r\n\r\n let armV = this._ArmP1.clone().sub(this._ArmP2);\r\n let armAn = angle(armV);\r\n\r\n arrow1.position.copy(this._ArmP1);\r\n arrow2.position.copy(this._ArmP2);\r\n if (this._ArmP1.distanceTo(this._ArmP2) < 36)\r\n {\r\n arrow1.rotation.z = armAn + Math.PI / 2;\r\n arrow2.rotation.z = armAn - Math.PI / 2;\r\n }\r\n else\r\n {\r\n arrow1.rotation.z = armAn - Math.PI / 2;\r\n arrow2.rotation.z = armAn + Math.PI / 2;\r\n }\r\n arrow1.updateMatrix();\r\n arrow2.updateMatrix();\r\n\r\n //更新引线this._LeadOutLine 并返回新的字体位置\r\n let textPos = this.UpdateLeadOutLine(renderType);\r\n if (this._LeadOutLine.EndParam > 0 && this._LeadOutLine.Visible)\r\n AddEntityDrawObject(obj, this._LeadOutLine, renderType);\r\n\r\n this.UpdateText(textPos);\r\n AddEntityDrawObject(obj, this._Text, renderType);\r\n this.isDragLeadOutPt = false;\r\n }\r\n\r\n /**\r\n * 更新引线并返回textPosition\r\n * @returns textPosition(Vector3)\r\n * @memberof AlignedDimension\r\n */\r\n UpdateLeadOutLine(renderType: RenderType): Vector3\r\n {\r\n let textPosition: Vector3 = midPoint(this._ArmP1, this._ArmP2);\r\n\r\n let distance = this._ArmP1.distanceTo(this._ArmP2);\r\n let distanceStr = FixedNotZero(distance, 2);\r\n let strWidth = distanceStr.length * (~~(Math.abs(this.TextSize) / 2));//文字总宽度\r\n let needLeadOut = (safeEval(distanceStr) < strWidth + 1e-6) && !(equaln(distance, 0));//文字宽度是否比托盘更宽 是 则需要引线\r\n\r\n if (this._LeadOutVisible && needLeadOut) //引线可见且需要引线\r\n {\r\n let dalUcs = this.DalUcs;\r\n let dalUcsInv = new Matrix4().getInverse(dalUcs);\r\n\r\n let textWidthVec = new Vector3(strWidth);\r\n let isLeft = (v) => { return v.x < midPoint(this._ArmP1, this._ArmP2).applyMatrix4(dalUcs).x; };\r\n //确定引线的点的位置\r\n if (this.isDragLeadOutPt)//是否拖拽了dragPt(拖拽dragPt需要更新endPt)\r\n {\r\n let dragPtInDalUcs = this._LeadOutPts.dragPt.clone().applyMatrix4(dalUcs);\r\n let isleft = isLeft(dragPtInDalUcs.clone());\r\n if (isleft)//已经拖过中线 更新endPt 改变IsFlipped\r\n this._LeadOutPts.endPt = dragPtInDalUcs.clone().sub(textWidthVec);\r\n else\r\n this._LeadOutPts.endPt = dragPtInDalUcs.clone().add(textWidthVec);\r\n this._LeadOutIsFlipped = !isleft;\r\n }\r\n else //没有拖拽\r\n {\r\n this._LeadOutPts.dragPt = textPosition.clone().applyMatrix4(dalUcs).add(new Vector3(this._LeadOutIsFlipped ? this._LeadOutOffsetX : -this._LeadOutOffsetX, this._LeadOutOffsetY));\r\n if (isLeft(this._LeadOutPts.dragPt))\r\n this._LeadOutPts.endPt = this._LeadOutPts.dragPt.clone().sub(textWidthVec);\r\n else\r\n this._LeadOutPts.endPt = this._LeadOutPts.dragPt.clone().add(textWidthVec);\r\n this._LeadOutPts.dragPt.applyMatrix4(dalUcsInv);\r\n }\r\n\r\n this._LeadOutPts.endPt.applyMatrix4(dalUcsInv);\r\n\r\n this._LeadOutLine.AutoUpdate = false;\r\n this._LeadOutLine.LineData = [textPosition, this._LeadOutPts.dragPt, this._LeadOutPts.endPt].map(p => { return { pt: AsVector2(p), bul: 0 }; });\r\n this._LeadOutLine.Position = new Vector3(0, 0, textPosition.z);\r\n this._LeadOutLine.ColorIndex = this.ColorIndex;\r\n this._LeadOutLine.Visible = true;\r\n this._LeadOutLine.AutoUpdate = true;\r\n this._LeadOutLine.DeferUpdate();\r\n\r\n textPosition = midPoint(this._LeadOutPts.dragPt, this._LeadOutPts.endPt);\r\n }\r\n else //引线不可见或不需要引线\r\n {\r\n //使引线不可见 并将dragPt隐藏于托盘中点\r\n this._LeadOutPts.dragPt = midPoint(this._ArmP1, this._ArmP2);\r\n this._LeadOutLine.Visible = false;\r\n }\r\n return textPosition;\r\n }\r\n\r\n UpdateText(pos?: Vector3)\r\n {\r\n this._Text.AutoUpdate = false;\r\n\r\n let textRo = this._TextRotation ?? angleAndX(this._ArmP1.clone().sub(this._ArmP2));\r\n this._Text.TextString = this.TextString;\r\n this._Text.Position = pos ?? midPoint(this._ArmP1, this._ArmP2);\r\n this._Text.TextRotation = textRo;\r\n this._Text.ColorIndex = this._Color;\r\n this._Text.Height = this._TextSize;\r\n\r\n this._Text.DeferUpdate();\r\n this._Text.AutoUpdate = true;\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 this.SetDataToTempPolyline();\r\n return snapPolyline.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform);\r\n }\r\n\r\n private SetDataToTempPolyline()\r\n {\r\n snapPolyline.OCS = this._Matrix;\r\n snapPolyline.LineData[0].pt.set(this._FootP1.x, this._FootP1.y);\r\n snapPolyline.LineData[1].pt.set(this._ArmP1.x, this._ArmP1.y);\r\n snapPolyline.LineData[2].pt.set(this._ArmP2.x, this._ArmP2.y);\r\n snapPolyline.LineData[3].pt.set(this._FootP2.x, this._FootP2.y);\r\n\r\n if (!equaln(this._FootP1.z, 0))\r\n snapPolyline.OCSNoClone.setPosition(snapPolyline.Position.add(snapPolyline.Normal.multiplyScalar(this._FootP1.z)));\r\n // snapPolyline.LineData[4].pt.set(this._LeadOutPts.dragPt.x, this._LeadOutPts.dragPt.y); //引线拖拽点\r\n // snapPolyline.LineData[5].pt.set(this._LeadOutPts.endPt.x, this._LeadOutPts.endPt.y);\r\n }\r\n\r\n UpdateDrawObjectMaterial(renderType: RenderType, obj: Object3D, material?: Material)\r\n {\r\n if (renderType === RenderType.WireframePrint)\r\n return;\r\n this.WriteAllObjectRecord();\r\n let colorMat = GetDimLineMaterial(this, renderType);\r\n this._LeadOutLine.ColorIndex = this._Color;\r\n let [line, arrow1, arrow2] = obj.children;\r\n (line).material = colorMat;\r\n (arrow1).material = colorMat;\r\n (arrow2).material = colorMat;\r\n this._Text.ColorIndex = this._Color;\r\n }\r\n\r\n GetGripPoints(): Array\r\n {\r\n return [this._FootP1, this._FootP2, this._ArmP1, this._ArmP2, midPoint(this._ArmP1, this._ArmP2), this._LeadOutPts.dragPt].map(p =>\r\n {\r\n return p.clone().applyMatrix4(this._Matrix);\r\n });\r\n }\r\n MoveGripPoints(indexList: number[], vec: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n let inv = this.OCSInv;\r\n let inv0 = inv.clone().setPosition(0, 0, 0);\r\n let vec0 = vec.clone().applyMatrix4(inv0);\r\n for (let i of indexList)\r\n {\r\n if (i === 5)\r\n {\r\n let dalucs = this.DalUcs;\r\n //开始拖拽引线dragPt\r\n this.isDragLeadOutPt = true;\r\n this._LeadOutPts.dragPt.add(vec0);\r\n let calcV = this._LeadOutPts.dragPt.clone().applyMatrix4(dalucs).sub(midPoint(this._ArmP1, this._ArmP2).applyMatrix4(dalucs));\r\n this._LeadOutOffsetY = calcV.y;\r\n this._LeadOutOffsetX = Math.abs(calcV.x);\r\n }\r\n else if (i >= 2)\r\n {\r\n let p = this.TextPosition.add(vec).applyMatrix4(inv);\r\n let l = new Line(this._ArmP1, this._ArmP2);\r\n let cp = l.GetClosestPointTo(p, true);\r\n let v = p.clone().sub(cp);\r\n\r\n this._ArmP1.add(v);\r\n this._ArmP2.add(v);\r\n this._LeadOutPts.dragPt.add(v);\r\n }\r\n else\r\n {\r\n if (i === 0)\r\n this._FootP1.add(vec0);\r\n else\r\n this._FootP2.add(vec0);\r\n\r\n this.ChangeFootPt();\r\n }\r\n }\r\n this.Update();\r\n }\r\n GetStretchPoints(): Array\r\n {\r\n return this.GetGripPoints();\r\n }\r\n MoveStretchPoints(indexList: Array, vec: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n let lst: number[] = [];\r\n let bChangeText = false;\r\n for (let i of indexList)\r\n {\r\n if (i <= 1)\r\n lst.push(i);\r\n else\r\n bChangeText = true;\r\n }\r\n if (lst.length > 0)\r\n this.MoveGripPoints(lst, vec);\r\n if (bChangeText)\r\n this.MoveGripPoints([2], vec);\r\n }\r\n protected ChangeFootPt()\r\n {\r\n let l = new Line(this._FootP1, this._FootP2);\r\n let cp = l.GetClosestPointTo(this._ArmP1, true);\r\n\r\n let v = this._ArmP1.clone().sub(cp);\r\n\r\n this._ArmP1.copy(this._FootP1.clone().add(v));\r\n this._ArmP2.copy(this._FootP2.clone().add(v));\r\n }\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._ArmP1.fromArray(file.Read());\r\n this._ArmP2.fromArray(file.Read());\r\n this._FootP1.fromArray(file.Read());\r\n this._FootP2.fromArray(file.Read());\r\n this._TextRotation = file.Read();\r\n if (ver > 2) this._TextString = file.Read();\r\n if (ver > 3)\r\n {\r\n this._LeadOutVisible = file.Read();\r\n this._LeadOutIsFlipped = file.Read();\r\n this._LeadOutPts.dragPt.fromArray(file.Read());\r\n this._LeadOutOffsetY = file.Read();\r\n this._LeadOutOffsetX = file.Read();\r\n }\r\n if (ver > 4) this._TextSize = file.Read();\r\n if (ver > 5) this._FractionDigits = file.Read() ?? HostApplicationServices.fractionDigitsType ?? 2;\r\n\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n super.WriteFile(file);\r\n file.Write(6);\r\n file.Write(this._ArmP1.toArray());\r\n file.Write(this._ArmP2.toArray());\r\n file.Write(this._FootP1.toArray());\r\n file.Write(this._FootP2.toArray());\r\n file.Write(this._TextRotation);\r\n file.Write(this._TextString);\r\n\r\n file.Write(this._LeadOutVisible);\r\n file.Write(this._LeadOutIsFlipped);\r\n file.Write(this._LeadOutPts.dragPt.toArray());\r\n file.Write(this._LeadOutOffsetY);\r\n file.Write(this._LeadOutOffsetX);\r\n\r\n file.Write(this._TextSize);\r\n file.Write(this._FractionDigits);\r\n }\r\n //#endregion\r\n}\r\n","import { BufferGeometry, Line, Material, Matrix4, Mesh, Object3D, Vector3 } from \"three\";\r\nimport { AddEntityDrawObject } from \"../../Common/AddEntityDrawObject\";\r\nimport { FixedNotZero } from \"../../Common/Utils\";\r\nimport { BufferGeometryUtils } from \"../../Geometry/BufferGeometryUtils\";\r\nimport { AsVector3 } from \"../../Geometry/GeUtils\";\r\nimport { RenderType } from \"../../GraphicsSystem/RenderType\";\r\nimport { equaln } from \"../../Nest/Common/Util\";\r\nimport { Factory } from \"../CADFactory\";\r\nimport { CADFiler } from \"../CADFiler\";\r\nimport { Arc } from \"../Entity/Arc\";\r\nimport { Text, TextAligen } from \"../Text/Text\";\r\nimport { Dimension } from \"./Dimension\";\r\nimport { GetDimLineMaterial } from \"./GetDimLineMaterial\";\r\n\r\n@Factory\r\nexport class ArcDimension extends Dimension\r\n{\r\n private _Arc = new Arc;\r\n protected _Text = new Text();\r\n\r\n constructor(\r\n private _Center: Vector3 = new Vector3,\r\n private _StartAngle: number = 0,\r\n private _EndAngle: number = 1,\r\n private _Clockwise = false,\r\n private _Radius: number = 1,\r\n private _TextRadiusAdd: number = 1,\r\n protected _TextString: string = \"⌒<>\",\r\n )\r\n {\r\n super();\r\n }\r\n\r\n get Text()\r\n {\r\n if (!this._Text.TextString)\r\n {\r\n this.PraseArc();\r\n this.ParseText();\r\n }\r\n return this._Text;\r\n }\r\n\r\n set TextRadiusAdd(ra: number)\r\n {\r\n if (equaln(ra, this._TextRadiusAdd)) return;\r\n\r\n this.WriteAllObjectRecord();\r\n this._TextRadiusAdd = ra;\r\n this.Update();\r\n }\r\n\r\n get TextRadiusAdd() { return this._TextRadiusAdd; }\r\n\r\n protected GetString(): string\r\n {\r\n return FixedNotZero(this._Arc.Length, this._FractionDigits);\r\n }\r\n\r\n //#region 拉伸相关\r\n GetGripPoints(): Vector3[]\r\n {\r\n this.PraseArc();\r\n let pts = this._Arc.GetGripPoints();\r\n for (let p of pts)\r\n p.applyMatrix4(this.OCSNoClone);\r\n return pts;\r\n }\r\n MoveGripPoints(indexList: number[], vec: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n vec = vec.clone().applyMatrix4(this.OCSInv.setPosition(0, 0, 0));\r\n\r\n this.PraseArc();\r\n this._Arc.MoveGripPoints(indexList, vec);\r\n\r\n this.UpdateArcFromThisArc();\r\n this.Update();\r\n }\r\n\r\n GetStretchPoints(): Vector3[]\r\n {\r\n this.PraseArc();\r\n let pts = this._Arc.GetStretchPoints();\r\n for (let p of pts)\r\n p.applyMatrix4(this.OCSNoClone);\r\n return pts;\r\n }\r\n\r\n MoveStretchPoints(indexList: number[], vec: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n vec = vec.clone().applyMatrix4(this.OCSInv.setPosition(0, 0, 0));\r\n\r\n this.PraseArc();\r\n this._Arc.MoveStretchPoints(indexList, vec);\r\n\r\n this.UpdateArcFromThisArc();\r\n this.Update();\r\n }\r\n\r\n private UpdateArcFromThisArc()\r\n {\r\n this._Center.copy(this._Arc.Center);\r\n this._StartAngle = this._Arc.StartAngle;\r\n this._EndAngle = this._Arc.EndAngle;\r\n this._Radius = this._Arc.Radius;\r\n this._Clockwise = this._Arc.IsClockWise;\r\n }\r\n //#endregion\r\n\r\n //#region Draw\r\n InitDrawObject(renderType: RenderType = RenderType.Wireframe)\r\n {\r\n let colorMaterial = GetDimLineMaterial(this, renderType);\r\n\r\n let obj = new Object3D();\r\n let line = new Line(new BufferGeometry, colorMaterial);\r\n obj.add(line);\r\n\r\n let arrow1 = new Mesh(BufferGeometryUtils.ArrowGeometry(), colorMaterial);\r\n let arrow2 = new Mesh(BufferGeometryUtils.ArrowGeometry(), colorMaterial);\r\n let arrowSize = 10;\r\n arrow1.scale.set(arrowSize, arrowSize, arrowSize);\r\n arrow2.scale.set(arrowSize, arrowSize, arrowSize);\r\n obj.add(arrow1, arrow2);\r\n\r\n this.UpdateDrawObject(renderType, obj);\r\n return obj;\r\n }\r\n\r\n UpdateDrawObject(renderType: RenderType, obj: Object3D)\r\n {\r\n obj.remove(...obj.children.slice(3));\r\n\r\n let [line, arrow1, arrow2] = obj.children as [Line, Mesh, Mesh];\r\n let colorMaterial = GetDimLineMaterial(this, renderType);\r\n line.material = colorMaterial;\r\n arrow1.material = colorMaterial;\r\n arrow2.material = colorMaterial;\r\n\r\n this.PraseArc();//半径设置到实际尺寸的位置,获得正确的标注尺寸\r\n let startFootPoint = this._Arc.StartPoint;//一定要在这个位置求脚点\r\n let endFootPoint = this._Arc.EndPoint;\r\n\r\n this._Text.AutoUpdate = false;\r\n\r\n this._Text.ColorIndex = this.ColorIndex;\r\n this.ParseText();\r\n\r\n this._Arc.DeferUpdate();\r\n this._Text.DeferUpdate();\r\n\r\n let linePoints: Vector3[] = [startFootPoint];\r\n for (let p of this._Arc.Shape.getPoints(8))\r\n linePoints.push(AsVector3(p).add(this._Center));\r\n linePoints.push(endFootPoint);\r\n\r\n let geo = line.geometry as BufferGeometry;\r\n if (!BufferGeometryUtils.UpdatePts(geo, linePoints))\r\n {\r\n line.geometry.dispose();\r\n line.geometry = BufferGeometryUtils.CreateFromPts(linePoints);\r\n }\r\n\r\n AddEntityDrawObject(obj, this._Text, renderType);\r\n\r\n //更新箭头的位置和旋转角度\r\n arrow1.position.copy(this._Arc.StartPoint);\r\n arrow1.rotation.z = this._Arc.GetFistDerivAngle(0) + Math.PI / 2;\r\n arrow1.updateMatrix();\r\n\r\n arrow2.position.copy(this._Arc.EndPoint);\r\n arrow2.rotation.z = this._Arc.GetFistDerivAngle(1) - Math.PI / 2;\r\n arrow2.updateMatrix();\r\n }\r\n\r\n private ParseText()\r\n {\r\n this._Text.TextString = this.TextString;\r\n\r\n this._Arc.Radius = this._Radius + this._TextRadiusAdd; //半径设置到文字的位置,获得文字的位置\r\n let textP = this._Arc.GetPointAtParam(0.5);\r\n let ang = this._Arc.GetAngleAtParam(0.5);\r\n let textOCS = new Matrix4().makeRotationZ(ang + Math.PI * 3 / 2).setPosition(textP);\r\n this._Text.TextAligen = TextAligen.Down;\r\n this._Text.OCS = textOCS;\r\n this._Text.Height = this._TextSize;\r\n }\r\n\r\n UpdateDrawObjectMaterial(type: RenderType, obj: Object3D, material?: Material)\r\n {\r\n let colorMaterial = GetDimLineMaterial(this, type);\r\n let count = Math.min(3, obj.children.length);\r\n for (let i = 0; i < count; i++)\r\n {\r\n let l = obj.children[i] as Line;\r\n l.material = colorMaterial;\r\n }\r\n\r\n this._Text.ColorIndex = this.ColorIndex;\r\n this.Text.DeferUpdate();\r\n }\r\n\r\n private PraseArc()\r\n {\r\n this._Arc.AutoUpdate = false;\r\n\r\n this._Arc.Center = this._Center;\r\n this._Arc.StartAngle = this._StartAngle;\r\n this._Arc.EndAngle = this._EndAngle;\r\n this._Arc.IsClockWise = this._Clockwise;\r\n this._Arc.Radius = this._Radius;\r\n }\r\n\r\n //#endregion\r\n\r\n //#region -------------------------File-------------------------\r\n //对象从文件中读取数据,初始化自身\r\n protected _ReadFile(file: CADFiler)\r\n {\r\n let ver = file.Read();\r\n super._ReadFile(file);\r\n this._Center.fromArray(file.Read());\r\n this._Radius = file.Read();\r\n this._TextRadiusAdd = file.Read();\r\n this._Clockwise = file.Read();\r\n this._StartAngle = file.Read();\r\n this._EndAngle = file.Read();\r\n this._TextString = file.Read();\r\n this._TextSize = file.Read();\r\n if (ver > 1) this._FractionDigits = file.Read();\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(2);\r\n super.WriteFile(file);\r\n file.Write(this._Center.toArray());\r\n file.Write(this._Radius);\r\n file.Write(this._TextRadiusAdd);\r\n file.Write(this._Clockwise);\r\n file.Write(this._StartAngle);\r\n file.Write(this._EndAngle);\r\n file.Write(this._TextString);\r\n file.Write(this._TextSize);\r\n file.Write(this._FractionDigits);\r\n }\r\n //#endregion\r\n}\r\n","import { BufferGeometry, Line as TLine, Material, Matrix3, Matrix4, Mesh, Object3D, Vector3 } from \"three\";\r\nimport { Line2 } from \"three/examples/jsm/lines/Line2\";\r\nimport { HostApplicationServices } from \"../../ApplicationServices/HostApplicationServices\";\r\nimport { AddEntityDrawObject } from \"../../Common/AddEntityDrawObject\";\r\nimport { ColorMaterial } from \"../../Common/ColorPalette\";\r\nimport { DisposeThreeObj } from \"../../Common/Dispose\";\r\nimport { reviseMirrorMatrix } from \"../../Common/Matrix4Utils\";\r\nimport { FixedNotZero } from \"../../Common/Utils\";\r\nimport { ObjectSnapMode } from \"../../Editor/ObjectSnapMode\";\r\nimport { BufferGeometryUtils } from \"../../Geometry/BufferGeometryUtils\";\r\nimport { angle, angleAndX, MoveMatrix } from \"../../Geometry/GeUtils\";\r\nimport { RenderType } from \"../../GraphicsSystem/RenderType\";\r\nimport { Factory } from \"../CADFactory\";\r\nimport { CADFiler } from \"../CADFiler\";\r\nimport { Circle } from \"../Entity/Circle\";\r\nimport { Line } from \"../Entity/Line\";\r\nimport { ObjectId } from \"../ObjectId\";\r\nimport { Dimension } from \"./Dimension\";\r\nimport { GetDimLineMaterial } from \"./GetDimLineMaterial\";\r\n\r\n@Factory\r\nexport class RadiusDimension extends Dimension\r\n{\r\n\r\n OnlyRenderType = true;\r\n protected _TextString: string = \"R<>\";\r\n\r\n constructor(\r\n protected _Center = new Vector3(),\r\n protected _DiameterOrRadiusPoint = new Vector3(),\r\n protected _TextPoint = new Vector3(),\r\n )\r\n {\r\n super();\r\n this._Text.Height = HostApplicationServices.dimTextHeight;\r\n }\r\n\r\n get Text()\r\n {\r\n if (!this._Text.TextString)\r\n this.UpdateText();\r\n\r\n return this._Text;\r\n }\r\n\r\n protected GetString(): string\r\n {\r\n return FixedNotZero(this._Center.distanceTo(this._DiameterOrRadiusPoint), this._FractionDigits);\r\n }\r\n\r\n set Material(materialId: ObjectId) { }\r\n\r\n get Center()\r\n {\r\n return this._Center.clone().applyMatrix4(this._Matrix);\r\n }\r\n set Center(v: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._Center.copy(v).applyMatrix4(this.OCSInv);\r\n this.Update();\r\n }\r\n get DiameterOrRadiusPoint()\r\n {\r\n return this._DiameterOrRadiusPoint.clone().applyMatrix4(this._Matrix);\r\n }\r\n set DiameterOrRadiusPoint(v: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._DiameterOrRadiusPoint.copy(v).applyMatrix4(this.OCSInv);\r\n this.Update();\r\n }\r\n get TextPoint()\r\n {\r\n return this._TextPoint.clone().applyMatrix4(this._Matrix);\r\n }\r\n set TextPoint(v: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._TextPoint.copy(v).applyMatrix4(this.OCSInv);\r\n this.Update();\r\n }\r\n Explode()\r\n {\r\n this.UpdateText();\r\n return [\r\n new Line(this._Center, this._DiameterOrRadiusPoint),\r\n new Line(this._DiameterOrRadiusPoint, this._TextPoint),\r\n this._Text.Clone()\r\n ].map(en => en.ApplyMatrix(this._Matrix));\r\n }\r\n\r\n Clone(): this\r\n {\r\n let ent = super.Clone();\r\n ent._Text.CopyFrom(this._Text);\r\n for (let [type, obj] of ent._CacheDrawObject)\r\n {\r\n for (let o of obj.children)\r\n if (o instanceof TLine)\r\n o.geometry = o.geometry.clone();\r\n }\r\n return ent;\r\n }\r\n\r\n InitDrawObject(renderType: RenderType = RenderType.Wireframe): Object3D\r\n {\r\n this._Text.ColorIndex = this.ColorIndex;\r\n let obj = new Object3D();\r\n\r\n let colorMaterial = GetDimLineMaterial(this, renderType);\r\n\r\n let line: TLine | Line2;\r\n\r\n if (renderType === RenderType.WireframePrint)\r\n line = new Line2(undefined, ColorMaterial.PrintLineMatrial);\r\n else\r\n line = new TLine(\r\n BufferGeometryUtils.CreateFromPts([this._Center, this._DiameterOrRadiusPoint, this._TextPoint]),\r\n colorMaterial\r\n );\r\n\r\n let arrow = new Mesh(BufferGeometryUtils.ArrowGeometry(), colorMaterial);\r\n\r\n obj.add(line, arrow);\r\n\r\n AddEntityDrawObject(obj, this._Text, renderType);\r\n this.UpdateDrawObject(renderType, obj);\r\n\r\n return obj;\r\n }\r\n\r\n UpdateDrawObject(renderType: RenderType, obj: Object3D)\r\n {\r\n let [line, arrow, textObj] = obj.children;\r\n\r\n let arrowSize = 10;\r\n\r\n if (renderType === RenderType.WireframePrint)\r\n {\r\n arrowSize *= HostApplicationServices.lineWidth * 0.5;\r\n let geo = (line as Line2).geometry;\r\n geo.setPositions([...this._Center.toArray(), ...this._DiameterOrRadiusPoint.toArray(), ...this._TextPoint.toArray()]);\r\n }\r\n else\r\n BufferGeometryUtils.UpdatePts((line).geometry as BufferGeometry, [this._Center, this._DiameterOrRadiusPoint, this._TextPoint], true);\r\n\r\n arrow.scale.set(arrowSize, arrowSize, arrowSize);\r\n\r\n let armV = this._TextPoint.clone().sub(this._DiameterOrRadiusPoint);\r\n let armAn = angle(armV);\r\n\r\n arrow.position.copy(this._DiameterOrRadiusPoint);\r\n arrow.rotation.z = armAn + Math.PI / 2;\r\n arrow.updateMatrix();\r\n\r\n obj.remove(textObj);\r\n DisposeThreeObj(textObj);\r\n\r\n this.UpdateText();\r\n\r\n AddEntityDrawObject(obj, this._Text, renderType);\r\n }\r\n\r\n UpdateDrawObjectMaterial(renderType: RenderType, obj: Object3D, material?: Material)\r\n {\r\n if (renderType === RenderType.WireframePrint)\r\n return;\r\n let [line, arrow, textObj] = obj.children as [TLine, Mesh, Object3D];\r\n let lineMaterial = GetDimLineMaterial(this, renderType);\r\n\r\n line.material = lineMaterial;\r\n arrow.material = line.material;\r\n this._Text.ColorIndex = this.ColorIndex;\r\n\r\n //如果实体是拷贝的,那么可能修改材质失败\r\n if (textObj.children[0])\r\n {\r\n let mesh = textObj.children[0] as Mesh;\r\n mesh.material = ColorMaterial.GetBasicMaterialDoubleSide(this.ColorIndex);//TODO:在布局时应该如何渲染?\r\n }\r\n }\r\n\r\n UpdateText()\r\n {\r\n this._Text.AutoUpdate = false;\r\n\r\n let armV = this._TextPoint.clone().sub(this._DiameterOrRadiusPoint);\r\n this._Text.TextString = this.TextString;\r\n this._Text.Position = this._TextPoint;\r\n this._Text.TextRotation = angleAndX(armV);\r\n this._Text.Height = this._TextSize;\r\n\r\n this._Text.DeferUpdate();\r\n this._Text.AutoUpdate = true;\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 l = new Line(this.Center, this.TextPoint);\r\n switch (snapMode)\r\n {\r\n case ObjectSnapMode.End:\r\n return this.GetStretchPoints();\r\n default:\r\n return l.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform);\r\n }\r\n }\r\n GetGripPoints(): Array\r\n {\r\n return [this.Center, this.DiameterOrRadiusPoint, this.TextPoint];\r\n }\r\n MoveGripPoints(indexList: number[], vec: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n let inv = this.OCSInv;\r\n let vec0 = vec.clone().applyMatrix4(inv.clone().setPosition(0, 0, 0));\r\n let rad = this._Center.distanceTo(this._DiameterOrRadiusPoint);\r\n\r\n for (let i of indexList)\r\n {\r\n if (i === 1)\r\n {\r\n let center = this.DiameterOrRadiusPoint.add(vec).applyMatrix4(inv);\r\n let cir = new Circle(this._Center, rad);\r\n let cp = cir.GetClosestPointTo(center, true);\r\n this._DiameterOrRadiusPoint.copy(cp);\r\n let dist = this._Center.distanceTo(this._TextPoint);\r\n let dir = this._DiameterOrRadiusPoint.clone().sub(this._Center).normalize().multiplyScalar(dist);\r\n this._TextPoint.copy(this._Center.clone().add(dir));\r\n }\r\n else\r\n {\r\n if (i === 0)\r\n this._Center.add(vec0);\r\n else\r\n this._TextPoint.add(vec0);\r\n let dir = this._TextPoint.clone().sub(this._Center).normalize().multiplyScalar(rad);\r\n this._DiameterOrRadiusPoint.copy(this._Center.clone().add(dir));\r\n }\r\n }\r\n this.Update();\r\n }\r\n GetStretchPoints(): Array\r\n {\r\n return this.GetGripPoints();\r\n }\r\n MoveStretchPoints(indexList: Array, vec: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n if (indexList.length >= 2)\r\n this.ApplyMatrix(MoveMatrix(vec));\r\n else\r\n this.MoveGripPoints(indexList, vec);\r\n }\r\n protected ApplyMirrorMatrix(m: Matrix4)\r\n {\r\n this.WriteAllObjectRecord();\r\n let p1 = this.Center;\r\n let p2 = this.DiameterOrRadiusPoint;\r\n let p3 = this.TextPoint;\r\n\r\n reviseMirrorMatrix(this._Matrix);\r\n\r\n this.Center = p1;\r\n this.DiameterOrRadiusPoint = p2;\r\n this.TextPoint = p3;\r\n\r\n return this;\r\n }\r\n protected _ReadFile(file: CADFiler)\r\n {\r\n super._ReadFile(file);\r\n let ver = file.Read();\r\n this._Center.fromArray(file.Read());\r\n this._DiameterOrRadiusPoint.fromArray(file.Read());\r\n this._TextPoint.fromArray(file.Read());\r\n if (ver > 1) this._TextString = file.Read();\r\n if (ver > 2) this._TextSize = file.Read();\r\n if (ver > 3) this._FractionDigits = file.Read();\r\n }\r\n WriteFile(file: CADFiler)\r\n {\r\n super.WriteFile(file);\r\n file.Write(4);\r\n file.Write(this._Center.toArray());\r\n file.Write(this._DiameterOrRadiusPoint.toArray());\r\n file.Write(this._TextPoint.toArray());\r\n file.Write(this._TextString);\r\n file.Write(this._TextSize);\r\n file.Write(this._FractionDigits);\r\n }\r\n}\r\n","import { BufferGeometry, Line as TLine, Material, Mesh, Object3D, Vector3 } from \"three\";\r\nimport { Line2 } from \"three/examples/jsm/lines/Line2\";\r\nimport { HostApplicationServices } from \"../../ApplicationServices/HostApplicationServices\";\r\nimport { AddEntityDrawObject } from \"../../Common/AddEntityDrawObject\";\r\nimport { ColorMaterial } from \"../../Common/ColorPalette\";\r\nimport { DisposeThreeObj } from \"../../Common/Dispose\";\r\nimport { BufferGeometryUtils } from \"../../Geometry/BufferGeometryUtils\";\r\nimport { angle, midPoint } from \"../../Geometry/GeUtils\";\r\nimport { RenderType } from \"../../GraphicsSystem/RenderType\";\r\nimport { Factory } from \"../CADFactory\";\r\nimport { Circle } from \"../Entity/Circle\";\r\nimport { GetDimLineMaterial } from \"./GetDimLineMaterial\";\r\nimport { RadiusDimension } from \"./RadiusDimension\";\r\n\r\n\r\nconst LINE_EXTEND_VAL = 40; //尺寸线延长值\r\n\r\n@Factory\r\nexport class DiameterDimension extends RadiusDimension\r\n{\r\n protected _TextString: string = \"D<>\";\r\n InitDrawObject(renderType: RenderType = RenderType.Wireframe): Object3D\r\n {\r\n this._Text.ColorIndex = this.ColorIndex;\r\n let obj = new Object3D();\r\n\r\n let colorMaterial = GetDimLineMaterial(this, renderType);\r\n\r\n let vec = this._DiameterOrRadiusPoint.clone().sub(this._Center).normalize().multiplyScalar(-LINE_EXTEND_VAL);\r\n\r\n let line: TLine | Line2;\r\n\r\n if (renderType === RenderType.WireframePrint)\r\n line = new Line2(undefined, ColorMaterial.PrintLineMatrial);\r\n else\r\n line = new TLine(\r\n BufferGeometryUtils.CreateFromPts([this._Center.clone().add(vec), this._DiameterOrRadiusPoint, this._TextPoint]),\r\n colorMaterial\r\n );\r\n\r\n let arrow = new Mesh(BufferGeometryUtils.ArrowGeometry(), colorMaterial);\r\n let arrow2 = new Mesh(BufferGeometryUtils.ArrowGeometry(), colorMaterial);\r\n\r\n obj.add(line, arrow, arrow2);\r\n AddEntityDrawObject(obj, this._Text, renderType);\r\n\r\n this.UpdateDrawObject(renderType, obj);\r\n\r\n return obj;\r\n }\r\n UpdateDrawObject(renderType: RenderType, obj: Object3D)\r\n {\r\n let [line, arrow, arrow2, textObj] = obj.children;\r\n\r\n let vec = this._DiameterOrRadiusPoint.clone().sub(this._Center).normalize().multiplyScalar(-LINE_EXTEND_VAL);\r\n\r\n let arrowSize = 10;\r\n\r\n let sp = this._Center.clone().add(vec);\r\n\r\n if (renderType === RenderType.WireframePrint)\r\n {\r\n arrowSize *= HostApplicationServices.lineWidth * 0.5;\r\n let geo = (line as Line2).geometry;\r\n geo.setPositions([...sp.toArray(), ...this._DiameterOrRadiusPoint.toArray(), ...this._TextPoint.toArray()]);\r\n }\r\n else\r\n BufferGeometryUtils.UpdatePts((line).geometry as BufferGeometry, [sp, this._DiameterOrRadiusPoint, this._TextPoint], true);\r\n\r\n arrow.scale.set(arrowSize, arrowSize, arrowSize);\r\n arrow2.scale.set(arrowSize, arrowSize, arrowSize);\r\n\r\n let armV = this._TextPoint.clone().sub(this._DiameterOrRadiusPoint);\r\n let armAn = angle(armV);\r\n\r\n arrow.position.copy(this._DiameterOrRadiusPoint);\r\n arrow.rotation.z = armAn + Math.PI / 2;\r\n arrow.updateMatrix();\r\n\r\n arrow2.position.copy(this._Center);\r\n arrow2.rotation.z = armAn - Math.PI / 2;\r\n arrow2.updateMatrix();\r\n\r\n this.UpdateText();\r\n\r\n obj.remove(textObj);\r\n DisposeThreeObj(textObj);\r\n AddEntityDrawObject(obj, this._Text, renderType);\r\n }\r\n\r\n UpdateDrawObjectMaterial(renderType: RenderType, obj: Object3D, material?: Material)\r\n {\r\n if (renderType === RenderType.WireframePrint)\r\n return;\r\n\r\n let [line, arrow, arrow2, textObj] = obj.children as [TLine, Mesh, Mesh, Object3D];\r\n let lineMaterial = GetDimLineMaterial(this, renderType);\r\n\r\n line.material = lineMaterial;\r\n arrow.material = line.material;\r\n arrow2.material = lineMaterial;\r\n\r\n this._Text.ColorIndex = this.ColorIndex;\r\n\r\n //如果实体是拷贝的,那么可能修改材质失败\r\n if (textObj.children[0])\r\n {\r\n let mesh = textObj.children[0] as Mesh;\r\n mesh.material = ColorMaterial.GetBasicMaterialDoubleSide(this.ColorIndex);//TODO:在布局时应该如何渲染?\r\n }\r\n }\r\n\r\n MoveGripPoints(indexList: number[], vec: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n let v = vec.clone().applyMatrix4(this.OCSInv.setPosition(new Vector3()));\r\n let dia = this._Center.distanceTo(this._DiameterOrRadiusPoint);\r\n let cirCenter = midPoint(this._Center, this._DiameterOrRadiusPoint);\r\n for (let i of indexList)\r\n {\r\n if (i === 0)\r\n {\r\n this._Center.add(v);\r\n let dist = this._TextPoint.distanceTo(this._DiameterOrRadiusPoint);\r\n let v1 = cirCenter.clone().sub(this._Center);\r\n this._DiameterOrRadiusPoint.copy(cirCenter.clone().add(v1));\r\n this._TextPoint.copy(this._DiameterOrRadiusPoint.clone().add(v1.normalize().multiplyScalar(dist)));\r\n }\r\n else if (i === 1)\r\n {\r\n let dist = this._TextPoint.distanceTo(this._DiameterOrRadiusPoint);\r\n let center = this.DiameterOrRadiusPoint.add(vec).applyMatrix4(this.OCSInv);\r\n let cir = new Circle(cirCenter, dia / 2);\r\n this._DiameterOrRadiusPoint.copy(cir.GetClosestPointTo(center, true));\r\n let v1 = this._DiameterOrRadiusPoint.clone().sub(cirCenter).normalize().multiplyScalar(-dia);\r\n this._Center.copy(this._DiameterOrRadiusPoint.clone().add(v1));\r\n this._TextPoint.copy(this._DiameterOrRadiusPoint.clone().add(v1.normalize().multiplyScalar(-dist)));\r\n }\r\n else\r\n {\r\n this._TextPoint.add(v);\r\n let v1 = this._TextPoint.clone().sub(cirCenter).normalize().multiplyScalar(dia / 2);\r\n this._DiameterOrRadiusPoint.copy(cirCenter.clone().add(v1));\r\n this._Center.copy(cirCenter.add(v1.negate()));\r\n }\r\n }\r\n this.Update();\r\n }\r\n}\r\n","import { Vector3 } from \"three\";\r\nimport { isBetweenNums } from \"../../Common/Utils\";\r\nimport { equaln } from \"../../Geometry/GeUtils\";\r\nimport { Factory } from \"../CADFactory\";\r\nimport { Line } from \"../Entity/Line\";\r\nimport { AlignedDimension } from \"./AlignedDimension\";\r\n\r\nenum DimDir\r\n{\r\n /**\r\n * 水平\r\n */\r\n H = 0,\r\n /**\r\n * 垂直\r\n */\r\n V = 1\r\n}\r\n\r\n@Factory\r\nexport class LinearDimension extends AlignedDimension\r\n{\r\n private _DimDir = DimDir.H;\r\n\r\n get TextPosition()\r\n {\r\n return super.TextPosition;\r\n }\r\n set TextPosition(p: Vector3)\r\n {\r\n p = p.clone().applyMatrix4(this.OCSInv);\r\n let bit = 0;//x 1 y 2\r\n if (isBetweenNums(this._FootP1.x, this._FootP2.x, p.x))\r\n bit |= 1;\r\n if (isBetweenNums(this._FootP1.y, this._FootP2.y, p.y))\r\n bit |= 2;\r\n\r\n if (bit === 1)\r\n this._DimDir = DimDir.H;\r\n else if (bit === 2)\r\n this._DimDir = DimDir.V;\r\n\r\n if (this._DimDir === DimDir.H)\r\n {\r\n this._ArmP1.copy(this._FootP1).setY(p.y);\r\n this._ArmP2.copy(this._FootP2).setY(p.y);\r\n }\r\n else\r\n {\r\n this._ArmP1.copy(this._FootP1).setX(p.x);\r\n this._ArmP2.copy(this._FootP2).setX(p.x);\r\n }\r\n this.Update();\r\n }\r\n ChangeFootPt()\r\n {\r\n let l = new Line(this._ArmP1, this._ArmP2);\r\n if (!equaln(this._FootP1.x, this._ArmP1.x) && !equaln(this._FootP1.y, this._ArmP1.y))\r\n {\r\n let cp1 = l.GetClosestPointTo(this._FootP1, true);\r\n this._ArmP1.copy(cp1);\r\n }\r\n if (!equaln(this._FootP2.x, this._ArmP2.x) && !equaln(this._FootP2.y, this._ArmP2.y))\r\n {\r\n let cp2 = l.GetClosestPointTo(this._FootP2, true);\r\n this._ArmP2.copy(cp2);\r\n }\r\n }\r\n}\r\n","import { Factory } from \"../CADFactory\";\r\nimport { Entity } from \"./Entity\";\r\nimport { BoxBufferGeometry, Mesh, Object3D, Vector3, MeshBasicMaterial } from \"three\";\r\nimport { ColorMaterial } from \"../../Common/ColorPalette\";\r\nimport { RenderType } from \"../../GraphicsSystem/RenderType\";\r\n\r\n\r\nlet boxGeo: BoxBufferGeometry;\r\nexport function GetBoxGeoBufferGeometry()\r\n{\r\n if (!boxGeo)\r\n boxGeo = new BoxBufferGeometry(1, 1, 1);\r\n return boxGeo;\r\n}\r\n\r\n@Factory\r\nexport class BoxSolid extends Entity\r\n{\r\n OnlyRenderType = true;\r\n private _opacity = 0.5;\r\n constructor(private _length = 1, private _width = 1, private _height = 1)\r\n {\r\n super();\r\n }\r\n set Opacity(o: number)\r\n {\r\n if (o !== this._opacity)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._opacity = o;\r\n this.Update();\r\n }\r\n }\r\n InitDrawObject(renderType: RenderType = RenderType.Wireframe)\r\n {\r\n let box = new Object3D();\r\n let geo = GetBoxGeoBufferGeometry();\r\n let mat = ColorMaterial.GetBasicMaterialTransparent(7, this._opacity);\r\n box.add(new Mesh(geo, mat));\r\n this.UpdateDrawObject(renderType, box);\r\n return box;\r\n }\r\n UpdateDrawObject(type: RenderType, obj: Object3D)\r\n {\r\n obj.children[0].scale.set(this._length, this._width, this._height);\r\n ((obj.children[0] as Mesh).material as MeshBasicMaterial).opacity = this._opacity;\r\n obj.children[0].position.copy(new Vector3(this._length / 2, this._width / 2, this._height / 2));\r\n obj.children[0].updateMatrix();\r\n }\r\n}\r\n","import { Box3, Vector3 } from \"three\";\r\nimport { Line } from \"../../DatabaseServices/Entity/Line\";\r\nimport { equalv3 } from \"../../Geometry/GeUtils\";\r\n\r\n\r\nexport function BoxLine(box: Box3): Line[]\r\n{\r\n if (box.isEmpty())\r\n return [];\r\n let pts = [\r\n new Vector3(box.min.x, box.min.y, box.min.z),\r\n new Vector3(box.min.x, box.min.y, box.max.z),\r\n new Vector3(box.min.x, box.max.y, box.min.z),\r\n new Vector3(box.min.x, box.max.y, box.max.z),\r\n\r\n new Vector3(box.max.x, box.min.y, box.min.z),\r\n new Vector3(box.max.x, box.min.y, box.max.z),\r\n new Vector3(box.max.x, box.max.y, box.min.z),\r\n new Vector3(box.max.x, box.max.y, box.max.z),\r\n ];\r\n\r\n let lines: Line[] = [];\r\n for (let line of [\r\n [0, 1], [2, 3], [0, 2], [1, 3],\r\n [4, 5], [6, 7], [4, 6], [5, 7],\r\n\r\n [0, 4], [2, 6],\r\n\r\n [1, 5], [3, 7],\r\n ])\r\n {\r\n let p1 = pts[line[0]];\r\n let p2 = pts[line[1]];\r\n if (!equalv3(p1, p2))\r\n lines.push(new Line(p1, p2));\r\n }\r\n return lines;\r\n}\r\n","import { Box3, Matrix3, Matrix4, Vector3 } from \"three\";\r\nimport { BoxLine } from \"../../Add-on/testEntity/BoxLine\";\r\nimport { UpdateDraw } from \"../../Common/Status\";\r\nimport { ObjectSnapMode } from \"../../Editor/ObjectSnapMode\";\r\nimport { Box3Ext } from \"../../Geometry/Box\";\r\nimport { equalv3 } from \"../../Geometry/GeUtils\";\r\nimport { Factory } from \"../CADFactory\";\r\nimport { CADFiler } from \"../CADFiler\";\r\nimport { ObjectId } from \"../ObjectId\";\r\nimport { Entity } from \"./Entity\";\r\n\r\nconst TempBox = new Box3;\r\n\r\n/**\r\n * 外部引用的实体,比如glTF\r\n */\r\n@Factory\r\nexport class EntityRef extends Entity\r\n{\r\n OnlyRenderType = true;\r\n\r\n private _Size = new Vector3;//原始尺寸\r\n private _ScaleSize = new Vector3;//缩放后的尺寸\r\n private _Center = new Vector3;//盒子中心\r\n\r\n private _OverWriteMaterial = new Map();//section index -> materialId\r\n\r\n // `/Data/ASSETS/DXAA_0001`\r\n constructor(private _url?: string)\r\n {\r\n super();\r\n }\r\n\r\n get Url() { return this._url; }\r\n\r\n get CurSize() { return this.ScaleSize.x ? this.ScaleSize.clone() : this._Size.clone(); }\r\n\r\n get ScaleSize() { return this._ScaleSize; }\r\n set ScaleSize(size: Vector3)\r\n {\r\n if (!equalv3(size, this._ScaleSize))\r\n {\r\n this.WriteAllObjectRecord();\r\n this._ScaleSize.copy(size);\r\n this.Update();\r\n }\r\n }\r\n\r\n get Scale()\r\n {\r\n if (this._ScaleSize.x && this._Size.x)\r\n return this._ScaleSize.clone().divide(this._Size);\r\n return new Vector3(1, 1, 1);\r\n }\r\n\r\n get BoundingBoxInOCS()\r\n {\r\n let size = this.ScaleSize.x ? this.ScaleSize : this._Size;\r\n return new Box3Ext(\r\n size.clone().multiplyScalar(-0.5).add(this._Center),\r\n size.clone().multiplyScalar(0.5).add(this._Center));\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;//因为这个实体不需要修改内部的geom 所以我们可以复用她\r\n\r\n newObj.matrix = this._Matrix;\r\n newObj.userData = { Entity: this };\r\n // newObj.userData.IsClone = true; //因为这个实体不需要修改内部的geom 所以我们可以复用她\r\n this._CacheDrawObject.set(type, newObj);\r\n }\r\n this.NeedUpdateFlag = UpdateDraw.None;\r\n }\r\n\r\n ApplyScaleMatrix(m: Matrix4)\r\n {\r\n this.WriteAllObjectRecord();\r\n let p = this.Position;\r\n p.applyMatrix4(m);\r\n\r\n m.extractBasis(Entity._xa, Entity._ya, Entity._za);\r\n\r\n let scaleX = Entity._xa.length();\r\n let scaleY = Entity._ya.length();\r\n let scaleZ = Entity._za.length();\r\n\r\n if (!this._ScaleSize.x) this._ScaleSize.copy(this._Size);\r\n\r\n this._ScaleSize.x *= scaleX;\r\n this._ScaleSize.y *= scaleY;\r\n this._ScaleSize.z *= scaleZ;\r\n\r\n Entity._xa.normalize();\r\n Entity._ya.normalize();\r\n Entity._za.normalize();\r\n m = new Matrix4().makeBasis(Entity._xa, Entity._ya, Entity._za);\r\n this.ApplyMatrix(m);\r\n\r\n this.Position = p;\r\n this.Update();\r\n return this;\r\n }\r\n\r\n // //与网络相关,如果模型没请求下来 这个盒子数据也是错误的()\r\n // // if (this._Size.x)//我们使用缓存的数据直接求盒子? 这样是不行的 因为旋转后的盒子似乎不对!\r\n // // {\r\n // // let size2 = (this._ScaleSize.x ? this._ScaleSize : this._Size).clone().multiplyScalar(0.5);\r\n // // return new Box3(this._Center.clone().sub(size2), size2.add(this._Center));\r\n // // }\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 let box = this.BoundingBox;\r\n let [x1, y1, z1] = [box.min.x, box.min.y, box.min.z];\r\n let [x2, y2, z2] = [box.max.x, box.max.y, box.max.z];\r\n switch (snapMode)\r\n {\r\n case ObjectSnapMode.End:\r\n return this.GetGripPoints();\r\n case ObjectSnapMode.Mid:\r\n let mid = [\r\n new Vector3(x1, y1, (z1 + z2) / 2),\r\n new Vector3(x1, y2, (z1 + z2) / 2),\r\n new Vector3(x2, y2, (z1 + z2) / 2),\r\n new Vector3(x2, y1, (z1 + z2) / 2),\r\n ];\r\n let midline = [\r\n new Vector3(x1, (y1 + y2) / 2, z1),\r\n new Vector3(x2, (y1 + y2) / 2, z1),\r\n new Vector3((x1 + x2) / 2, y2, z1),\r\n new Vector3((x1 + x2) / 2, y1, z1),\r\n ];\r\n let v = new Vector3(0, 0, z2);\r\n let mids: Vector3[] = [];\r\n mids.push(...mid, ...midline, ...midline.map(p => p.clone().add(v)));\r\n return mids;\r\n case ObjectSnapMode.Nea:\r\n let lines = BoxLine(this.BoundingBox);\r\n let neas: Vector3[] = [];\r\n for (let l of lines)\r\n neas.push(...l.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform));\r\n return neas;\r\n default:\r\n break;\r\n }\r\n return [];\r\n }\r\n\r\n GetGripPoints(): Array\r\n {\r\n return [];//这些点必须按照boxInOcs矩阵显示 并且这个点太多了 太烦了 暂时关闭\r\n let box = this.BoundingBox;\r\n let [x1, y1, z1] = [box.min.x, box.min.y, box.min.z];\r\n let [x2, y2, z2] = [box.max.x, box.max.y, box.max.z];\r\n let ends = [\r\n new Vector3(x1, y1, z1),\r\n new Vector3(x1, y1, z2),\r\n new Vector3(x1, y2, z1),\r\n new Vector3(x1, y2, z2),\r\n\r\n new Vector3(x2, y1, z1),\r\n new Vector3(x2, y1, z2),\r\n new Vector3(x2, y2, z1),\r\n new Vector3(x2, y2, z2),\r\n\r\n new Vector3((x1 + x2) / 2, (y1 + y2) / 2, z1),\r\n new Vector3((x1 + x2) / 2, (y1 + y2) / 2, z2),\r\n new Vector3((x1 + x2) / 2, y1, (z1 + z2) / 2),\r\n new Vector3((x1 + x2) / 2, y2, (z1 + z2) / 2),\r\n new Vector3(x1, (y1 + y2) / 2, (z1 + z2) / 2),\r\n new Vector3(x2, (y1 + y2) / 2, (z1 + z2) / 2),\r\n ];\r\n return ends;\r\n }\r\n MoveGripPoints(indexList: Array, vec: Vector3)\r\n {\r\n if (indexList.length)\r\n {\r\n this.WriteAllObjectRecord();\r\n this.Position = this.Position.add(vec);\r\n }\r\n }\r\n //#endregion\r\n\r\n //#region -------------------------File-------------------------\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._url = file.Read();\r\n\r\n if (ver > 1)\r\n {\r\n this._Size.x = file.Read();\r\n this._Size.y = file.Read();\r\n this._Size.z = file.Read();\r\n\r\n this._Center.x = file.Read();\r\n this._Center.y = file.Read();\r\n this._Center.z = file.Read();\r\n\r\n this._ScaleSize.x = file.Read();\r\n this._ScaleSize.y = file.Read();\r\n this._ScaleSize.z = file.Read();\r\n }\r\n\r\n this._OverWriteMaterial.clear();\r\n if (ver > 2)\r\n {\r\n let size = file.Read();\r\n for (let i = 0; i < size; i++)\r\n {\r\n let index = file.Read();\r\n let id = file.ReadHardObjectId();\r\n this._OverWriteMaterial.set(index, id);\r\n }\r\n }\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(3);\r\n super.WriteFile(file);\r\n file.Write(this._url);\r\n\r\n //2\r\n file.Write(this._Size.x);\r\n file.Write(this._Size.y);\r\n file.Write(this._Size.z);\r\n\r\n file.Write(this._Center.x);\r\n file.Write(this._Center.y);\r\n file.Write(this._Center.z);\r\n\r\n file.Write(this._ScaleSize.x);\r\n file.Write(this._ScaleSize.y);\r\n file.Write(this._ScaleSize.z);\r\n\r\n //ver3\r\n file.Write(this._OverWriteMaterial.size);\r\n for (let [index, id] of this._OverWriteMaterial)\r\n {\r\n file.Write(index);\r\n file.WriteHardObjectId(id);\r\n }\r\n }\r\n //#endregion\r\n}\r\n","import { Vector3 } from \"three\";\r\nimport { ObjectSnapMode } from \"../../Editor/ObjectSnapMode\";\r\nimport { MoveMatrix } from \"../../Geometry/GeUtils\";\r\nimport { Factory } from \"../CADFactory\";\r\nimport { Entity } from \"./Entity\";\r\n\r\n\r\n\r\n@Factory\r\nexport class Point extends Entity\r\n{\r\n constructor(position: Vector3 = new Vector3())\r\n {\r\n super();\r\n this._Matrix.setPosition(position);\r\n }\r\n\r\n \r\n\r\n GetObjectSnapPoints(\r\n snapMode: ObjectSnapMode,\r\n pickPoint: Vector3,\r\n lastPoint: Vector3\r\n ): Vector3[]\r\n {\r\n if (snapMode === ObjectSnapMode.End)\r\n return [this.Position];\r\n return [];\r\n }\r\n\r\n GetGripPoints(): Array\r\n {\r\n return [this.Position];\r\n }\r\n MoveGripPoints(indexList: number[], vec: Vector3)\r\n {\r\n if (indexList.length === 1)\r\n {\r\n this.WriteAllObjectRecord();\r\n this.ApplyMatrix(MoveMatrix(vec));\r\n }\r\n }\r\n\r\n GetStretchPoints(): Array\r\n {\r\n return this.GetGripPoints();\r\n }\r\n\r\n /**\r\n * 拉伸夹点,用于Stretch命令\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.MoveGripPoints(indexList, vec);\r\n }\r\n}\r\n","\r\nimport { BufferGeometry, Color, CylinderBufferGeometry, Float32BufferAttribute, LineBasicMaterial, LineSegments, MathUtils, Matrix4, Mesh, MeshBasicMaterial, Object3D, PointLight, SphereBufferGeometry, Vector3 } from 'three';\r\n\r\nexport class PointLightHelper extends Object3D\r\n{\r\n light: PointLight;\r\n color: Color | string | number;\r\n material: LineBasicMaterial;\r\n cone: LineSegments[];\r\n mesh: Mesh[];\r\n constructor(distance: number, color?: Color | string | number)\r\n {\r\n\r\n const geometry = new BufferGeometry();\r\n const positions = [];\r\n for (let i = 0, j = 1, l = 32; i < l; i++, j++)\r\n {\r\n\r\n const p1 = (i / l) * Math.PI * 2;\r\n const p2 = (j / l) * Math.PI * 2;\r\n\r\n positions.push(\r\n Math.cos(p1) * distance, Math.sin(p1) * distance, 0,\r\n Math.cos(p2) * distance, Math.sin(p2) * distance, 0\r\n );\r\n\r\n }\r\n geometry.setAttribute('position', new Float32BufferAttribute(positions, 3));\r\n\r\n super();\r\n this.color = color;\r\n this.matrixAutoUpdate = false;\r\n this.material = new LineBasicMaterial({ fog: false });;\r\n\r\n this.cone = [];\r\n this.mesh = [];\r\n\r\n this.cone[0] = new LineSegments(geometry, this.material[0]);\r\n this.cone[1] = this.cone[0].clone();\r\n\r\n let moveMatInv = new Matrix4().getInverse(this.matrix);\r\n let roMat = new Matrix4().makeRotationAxis(new Vector3(0, 1, 0), MathUtils.degToRad(60));\r\n let mtx = this.matrix.clone().multiply(roMat).multiply(moveMatInv);\r\n\r\n this.cone[1].applyMatrix4(mtx);\r\n this.cone[2] = this.cone[1].clone();\r\n this.cone[2].applyMatrix4(mtx);\r\n\r\n let cylinderRoMat = new Matrix4().makeRotationAxis(new Vector3(1, 0, 0), MathUtils.degToRad(90));\r\n let cylinderMtx = this.matrix.clone().multiply(cylinderRoMat).multiply(moveMatInv);\r\n\r\n let cylinderGeometry = new CylinderBufferGeometry(40, 40, 80, 32); //灯泡圆柱\r\n this.mesh[0] = new Mesh(cylinderGeometry, new MeshBasicMaterial({ color: 0xFFEAAD }));\r\n this.mesh[0].applyMatrix4(cylinderMtx);\r\n this.mesh[0].position.add(new Vector3(0, 0, 50));\r\n this.mesh[0].updateMatrix();\r\n\r\n let sphereBufferGeometry = new SphereBufferGeometry(75, 32, 32); //灯泡球体\r\n this.mesh[1] = new Mesh(sphereBufferGeometry, this.material);\r\n this.mesh[1].position.sub(new Vector3(0, 0, 30));\r\n this.mesh[1].updateMatrix();\r\n\r\n this.add(this.cone[0], this.cone[1], this.cone[2], this.mesh[0], this.mesh[1]);\r\n }\r\n\r\n dispose()\r\n {\r\n this.material.dispose();\r\n\r\n this.cone[0].geometry.dispose();\r\n //@ts-ignore\r\n this.cone[0].material.dispose();\r\n\r\n this.cone[1].geometry.dispose();\r\n //@ts-ignore\r\n this.cone[1].material.dispose();\r\n\r\n this.cone[2].geometry.dispose();\r\n //@ts-ignore\r\n this.cone[2].material.dispose();\r\n\r\n this.mesh[0].geometry.dispose();\r\n //@ts-ignore\r\n this.mesh[0].material.dispose();\r\n\r\n this.mesh[1].geometry.dispose();\r\n //@ts-ignore\r\n this.mesh[1].material.dispose();\r\n }\r\n\r\n update()\r\n {\r\n //@ts-ignore\r\n this.mesh[1].material.color.set(this.color).multiplyScalar(0.9);\r\n }\r\n}\r\n","import { Group, LineBasicMaterial, Mesh, MeshBasicMaterial, Object3D, PointLight as TPointLight, SphereGeometry } from 'three';\r\nimport { HostApplicationServices } from '../../ApplicationServices/HostApplicationServices';\r\nimport { RenderType } from '../../GraphicsSystem/RenderType';\r\nimport { AutoRecord } from '../AutoRecord';\r\nimport { Factory } from '../CADFactory';\r\nimport { CADFiler } from '../CADFiler';\r\nimport { Light } from './Light';\r\nimport { PointLightHelper } from './PointLightHelper';\r\n\r\n/**\r\n * 点光源\r\n */\r\n@Factory\r\nexport class PointLight extends Light\r\n{\r\n /**\r\n * 光照长度,如果为0那么为无穷大\r\n */\r\n private _Distance: number = 20000;//20米\r\n protected _Intensity: number = 100; //强度\r\n\r\n // 光线沿着光线的距离变暗的量\r\n // 在物理上正确的模式下,衰减 = 2会导致物理上真实的光线衰减。\r\n // 缺省值是1。\r\n private _Decay: number = 0.45;\r\n\r\n //PointLightComponent\r\n @AutoRecord SourceRadius = 10;//源半径 范围0-300\r\n @AutoRecord SoftSourceRadius = 0;//软源半径 范围0-300\r\n @AutoRecord SourceLength = 0;//源长度 默认0 范围0-1000\r\n\r\n //LocalLightComponent\r\n //Radius:number 没设置这个\r\n @AutoRecord AttenuationRadius = 300; //衰减半径 10-1000\r\n\r\n constructor()\r\n {\r\n super();\r\n }\r\n\r\n get Decay(): number\r\n {\r\n return this._Decay;\r\n }\r\n set Decay(decay: number)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._Decay = decay;\r\n this.Update();\r\n }\r\n\r\n get Distance()\r\n {\r\n return this._Distance;\r\n }\r\n set Distance(dist: number)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._Distance = dist;\r\n this.Update();\r\n }\r\n\r\n get WebIntensity()\r\n {\r\n let x = this._Intensity / 2000;\r\n x = Math.pow(x, 0.7);\r\n return (x * 2000) / (4 * Math.PI);//流明转cd 文档是4pi\r\n }\r\n\r\n protected InitDrawObject(renderType: RenderType = RenderType.Wireframe): Object3D\r\n {\r\n let lightGroup = new Group();\r\n let ptLight = new TPointLight(this._LightColor, this.WebIntensity, this._Distance, this._Decay);\r\n\r\n Object.defineProperty(ptLight, \"castShadow\", { get: () => HostApplicationServices.isShowLightShadow && this.CaseShadow });\r\n\r\n ptLight.shadow.camera.matrixAutoUpdate = true;\r\n ptLight.shadow.camera.far = 10000;\r\n //绘制灯光助手\r\n let lightGeo = new SphereGeometry(50);\r\n let geoMat = new MeshBasicMaterial({ color: this._LightColor });\r\n ptLight.add(new Mesh(lightGeo, geoMat));\r\n\r\n let helper = new PointLightHelper(ptLight.distance / 4, this.Color);\r\n\r\n lightGroup.add(ptLight, helper);\r\n lightGroup.matrixAutoUpdate = false;\r\n lightGroup.matrix.copy(this._Matrix);\r\n lightGroup.updateMatrixWorld(true);\r\n this.UpdateDrawObject(renderType, lightGroup);\r\n return lightGroup;\r\n }\r\n UpdateDrawObject(type: RenderType, en: Object3D)\r\n {\r\n let ptLight = en.children[0] as TPointLight;\r\n super.UpdateDrawObject(type, ptLight);\r\n\r\n ptLight.distance = this._Distance;\r\n ptLight.decay = this._Decay;\r\n\r\n let con = ptLight.children[0] as Mesh;\r\n con.material = new LineBasicMaterial({ color: this.Color });\r\n\r\n let helper = en.children[1] as PointLightHelper;\r\n helper.visible = this._ShowHelper;\r\n if (this._ShowHelper)\r\n helper.color = this.Color;\r\n helper.update();\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();\r\n // this._Distance = file.Read();\r\n // this._Decay = file.Read();\r\n //屏蔽原先的2个属性\r\n file.Read();\r\n file.Read();\r\n\r\n if (ver > 1)\r\n {\r\n this.SourceRadius = file.Read();\r\n this.SoftSourceRadius = file.Read();\r\n this.SourceLength = file.Read();\r\n this.AttenuationRadius = 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._Distance);\r\n file.Write(this._Decay);\r\n\r\n //ver 2\r\n file.Write(this.SourceRadius);\r\n file.Write(this.SoftSourceRadius);\r\n file.Write(this.SourceLength);\r\n file.Write(this.AttenuationRadius);\r\n }\r\n}\r\n","import { BackSide, BufferGeometry, Color, Float32BufferAttribute, Line, LineBasicMaterial, Mesh, MeshBasicMaterial, RectAreaLight as TRectAreaLight } from \"three\";\r\n\r\n/**\r\n * This helper must be added as a child of the light (移植threejs最新的版本)\r\n */\r\nexport class RectAreaLightHelper extends Line\r\n{\r\n light: TRectAreaLight;\r\n color: Color;\r\n material: LineBasicMaterial;\r\n children: [Mesh];\r\n BarnDoorLength: number;\r\n BarnDoorAngle: number;\r\n\r\n private _posAtt: Float32BufferAttribute;\r\n private _indexAtt: Float32BufferAttribute;\r\n\r\n constructor(light: TRectAreaLight, color: Color)\r\n {\r\n const positions = [1, 1, 0, -1, 1, 0, -1, -1, 0, 1, -1, 0, 1, 1, 0,\r\n 0.618, 0.618, 0,\r\n // 0.618, 0.618, -100,\r\n // 0.618, 0.618, 0,\r\n\r\n -0.618, 0.618, 0,\r\n -1, 1, 0,\r\n -0.618, 0.618, 0,\r\n // -0.618, 0.618, -100,\r\n // -0.618, 0.618, 0,\r\n\r\n -0.618, -0.618, 0,\r\n -1, -1, 0,\r\n -0.618, -0.618, 0,\r\n // -0.618, -0.618, -100,\r\n // -0.618, -0.618, 0,\r\n\r\n 0.618, -0.618, 0,\r\n 1, -1, 0,\r\n 0.618, -0.618, 0,\r\n // 0.618, -0.618, -100,\r\n // 0.618, -0.618, 0,\r\n\r\n 0.618, 0.618, 0\r\n ];\r\n\r\n const geometry = new BufferGeometry();\r\n let posatt = new Float32BufferAttribute(positions, 3);\r\n geometry.setAttribute('position', posatt);\r\n geometry.computeBoundingSphere();\r\n\r\n const material = new LineBasicMaterial({ fog: false });\r\n\r\n super(geometry, material);\r\n\r\n this._posAtt = posatt;\r\n\r\n this.light = light;\r\n this.color = color; // optional hardwired color for the helper\r\n this.type = 'RectAreaLightHelper';\r\n\r\n //\r\n const positions2 = [1, 1, 0, -1, 1, 0, -1, -1, 0, 1, 1, 0, -1, -1, 0, 1, -1, 0];\r\n\r\n const geometry2 = new BufferGeometry();\r\n this._indexAtt = new Float32BufferAttribute(positions2, 3);\r\n geometry2.setAttribute('position', this._indexAtt);\r\n geometry2.computeBoundingSphere();\r\n\r\n this.add(new Mesh(geometry2, new MeshBasicMaterial({ side: BackSide, fog: false, transparent: true, opacity: 0.8 })));\r\n }\r\n\r\n updateMatrixWorld()\r\n {\r\n this.scale.set(0.5 * this.light.width, 0.5 * this.light.height, 1);\r\n\r\n if (this.color !== undefined)\r\n {\r\n this.material.color.set(this.color);\r\n //@ts-ignore\r\n this.children[0].material.color.set(this.color);\r\n }\r\n else\r\n {\r\n this.material.color.copy(this.light.color).multiplyScalar(this.light.intensity);\r\n\r\n // prevent hue shift\r\n const c = this.material.color;\r\n const max = Math.max(c.r, c.g, c.b);\r\n if (max > 1)\r\n c.multiplyScalar(1 / max);\r\n //@ts-ignore\r\n this.children[0].material.color.copy(this.material.color);\r\n }\r\n\r\n // ignore world scale on light\r\n this.matrixWorld.extractRotation(this.light.matrixWorld).scale(this.scale).copyPosition(this.light.matrixWorld);\r\n\r\n this.children[0].matrixWorld.copy(this.matrixWorld);\r\n }\r\n\r\n updataRange()\r\n {\r\n let [n, w, h] = [1, 1, 1];\r\n let t = Math.sin(this.BarnDoorAngle * Math.PI / 180) * this.BarnDoorLength;\r\n let cosAngle = Math.cos(this.BarnDoorAngle * Math.PI / 180);\r\n if (Math.floor(cosAngle * 1e5))\r\n {\r\n w = ((this.light.width + this.BarnDoorLength * 2) / this.light.width - 1) * cosAngle + 1;\r\n h = ((this.light.height + this.BarnDoorLength * 2) / this.light.height - 1) * cosAngle + 1;\r\n }\r\n\r\n let positions = [w, h, -t, -w, h, -t, -w, -h, -t, w, -h, -t, w, h, -t,\r\n n, n, 0,\r\n\r\n -n, n, 0,\r\n -w, h, -t,\r\n -n, n, 0,\r\n\r\n -n, -n, 0,\r\n -w, -h, -t,\r\n -n, -n, 0,\r\n\r\n n, -n, 0,\r\n w, -h, -t,\r\n n, -n, 0,\r\n\r\n n, n, 0\r\n ];\r\n\r\n let positions2 = [w, h, -t, -w, h, -t, -w, -h, -t, w, h, -t, -w, -h, -t, w, -h, -t];\r\n\r\n this._posAtt.copyArray(positions);\r\n this._posAtt.needsUpdate = true;\r\n\r\n this._indexAtt.copyArray(positions2);\r\n this._indexAtt.needsUpdate = true;\r\n }\r\n\r\n dispose()\r\n {\r\n this.geometry.dispose();\r\n this.material.dispose();\r\n this.children[0].geometry.dispose();\r\n //@ts-ignore\r\n this.children[0].material.dispose();\r\n }\r\n}\r\n","import { Box3, Group, Object3D, RectAreaLight as TRectAreaLight, Vector3 } from \"three\";\r\nimport { UpdateDraw } from \"../../Common/Status\";\r\nimport { Box3Ext } from \"../../Geometry/Box\";\r\nimport { equalv3, YAxis, ZeroVec } from \"../../Geometry/GeUtils\";\r\nimport { RenderType } from \"../../GraphicsSystem/RenderType\";\r\nimport { equaln } from \"../../Nest/Common/Util\";\r\nimport { AutoRecord } from \"../AutoRecord\";\r\nimport { Factory } from \"../CADFactory\";\r\nimport { CADFiler } from \"../CADFiler\";\r\nimport { ObjectId } from \"../ObjectId\";\r\nimport { Light } from \"./Light\";\r\nimport { RectAreaLightHelper } from \"./RectAreaLightHelper\";\r\n\r\nconst TARGET_DISTANCE = -100;\r\n\r\n@Factory\r\nexport class RectAreaLight extends Light\r\n{\r\n protected _Intensity = 100;\r\n\r\n private _Width: number = 1;//UE SourceWidth\r\n private _Height: number = 1;//UE SourceHeight\r\n\r\n //LocalLightComponent\r\n //Radius:number 没设置这个\r\n @AutoRecord AttenuationRadius = 300; //衰减半径 10-1000\r\n\r\n //RectLightComponent extends LocalLightComponent\r\n private _BarnDoorAngle: number = 0; //0-90 挡光板角度\r\n private _BarnDoorLength: number = 0; //0-100 挡光板长度\r\n @AutoRecord SourceTexture: ObjectId;//Texture 源纹理 默认无 可以追加一张贴图\r\n\r\n get Target()\r\n {\r\n return this.Position.add(this.Normal.multiplyScalar(TARGET_DISTANCE));\r\n }\r\n\r\n set Target(p: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._Matrix.lookAt(this.Position, p, YAxis);\r\n this.Update(UpdateDraw.Geometry);\r\n }\r\n\r\n get Height() { return this._Height; }\r\n\r\n set Height(v: number)\r\n {\r\n if (equaln(v, this._Height, 1e-2)) return;\r\n this.WriteAllObjectRecord();\r\n this._Height = v;\r\n this.Update();\r\n }\r\n\r\n get Width() { return this._Width; }\r\n\r\n set Width(v: number)\r\n {\r\n if (equaln(v, this._Width, 1e-2)) return;\r\n this.WriteAllObjectRecord();\r\n this._Width = v;\r\n this.Update();\r\n }\r\n\r\n get BarnDoorAngle() { return this._BarnDoorAngle; }\r\n\r\n set BarnDoorAngle(v: number)\r\n {\r\n if (equaln(this._BarnDoorAngle, v, 1e-2)) return;\r\n this.WriteAllObjectRecord();\r\n this._BarnDoorAngle = v;\r\n this.Update();\r\n }\r\n\r\n get BarnDoorLength() { return this._BarnDoorLength; }\r\n\r\n set BarnDoorLength(v: number)\r\n {\r\n if (equaln(this._BarnDoorLength, v, 1e-2)) return;\r\n this.WriteAllObjectRecord();\r\n this._BarnDoorLength = v;\r\n this.Update();\r\n }\r\n\r\n get WebIntensity()\r\n {\r\n let x = this._Intensity / 2000;\r\n x = Math.pow(x, 0.5);\r\n return (x * 50) / (Math.PI);//流明转cd 文档是4pi\r\n }\r\n\r\n get BoundingBoxInOCS()\r\n {\r\n return new Box3Ext(new Vector3(-this._Width * 0.5, -this._Height * 0.5, 0), new Vector3(this._Width * 0.5, this._Height * 0.5, 0.01));\r\n }\r\n\r\n get BoundingBox()\r\n {\r\n return new Box3().setFromCenterAndSize(new Vector3(), new Vector3(this._Width, this._Height)).applyMatrix4(this._Matrix);\r\n }\r\n\r\n GetGripPoints(): Array\r\n {\r\n let heightHalf = this._Height * 0.5;\r\n let widthHalf = this.Width * 0.5;\r\n let pos = this.Position;\r\n\r\n let pts: Vector3[] = [\r\n new Vector3(-widthHalf, -heightHalf, 0).applyMatrix4(this.OCSNoClone),//左下\r\n new Vector3(widthHalf, -heightHalf, 0).applyMatrix4(this.OCSNoClone),//右下\r\n new Vector3(widthHalf, heightHalf, 0).applyMatrix4(this.OCSNoClone),//右上\r\n new Vector3(-widthHalf, heightHalf, 0).applyMatrix4(this.OCSNoClone),//左上\r\n pos,\r\n pos.clone().add(this.Normal.multiplyScalar(TARGET_DISTANCE))\r\n ];\r\n return pts;\r\n }\r\n\r\n MoveGripPoints(indexList: number[], vec: Vector3)\r\n {\r\n let vecInv = vec.clone().applyMatrix4(this.OCSInv.setPosition(0, 0, 0));\r\n if (equalv3(vecInv, ZeroVec, 1e-4)) return;\r\n\r\n this.WriteAllObjectRecord();\r\n\r\n let heightHalf = this._Height * 0.5;\r\n let widthHalf = this.Width * 0.5;\r\n let pts: Vector3[] = [\r\n new Vector3(-widthHalf, -heightHalf, 0),\r\n new Vector3(widthHalf, -heightHalf, 0),\r\n new Vector3(widthHalf, heightHalf, 0),\r\n new Vector3(-widthHalf, heightHalf, 0),\r\n ];\r\n\r\n let i = indexList[0];\r\n if (i < 4)\r\n {\r\n pts[i].add(vecInv);\r\n\r\n let newBox = new Box3;\r\n if (i === 0 || i === 2)\r\n newBox.setFromPoints([pts[0], pts[2]]);\r\n else\r\n newBox.setFromPoints([pts[1], pts[3]]);\r\n\r\n //变量复用\r\n let size = newBox.getSize(new Vector3);\r\n this._Width = size.x;\r\n this._Height = size.y;\r\n\r\n //新的中心\r\n let center = newBox.getCenter(size);\r\n center.setZ(0);\r\n\r\n center.applyMatrix4(this.OCSNoClone);\r\n\r\n this._Matrix.setPosition(center);\r\n this.Update();\r\n }\r\n else if (i === 4)\r\n {\r\n this.Position = this.Position.add(vec);\r\n this.Update(UpdateDraw.Matrix);\r\n }\r\n else if (i === 5)\r\n {\r\n let target = this.Position.add(this.Normal.multiplyScalar(TARGET_DISTANCE)).add(vec);\r\n this.Target = target;\r\n }\r\n }\r\n\r\n GetStretchPoints()\r\n {\r\n let heightHalf = this._Height * 0.5;\r\n let widthHalf = this.Width * 0.5;\r\n let pos = this.Position;\r\n\r\n let pts: Vector3[] = [\r\n new Vector3(-widthHalf, -heightHalf, 0).applyMatrix4(this.OCSNoClone),//左下\r\n new Vector3(widthHalf, -heightHalf, 0).applyMatrix4(this.OCSNoClone),//右下\r\n new Vector3(widthHalf, heightHalf, 0).applyMatrix4(this.OCSNoClone),//右上\r\n new Vector3(-widthHalf, heightHalf, 0).applyMatrix4(this.OCSNoClone),//左上\r\n pos.clone().add(this.Normal.multiplyScalar(TARGET_DISTANCE))\r\n ];\r\n return pts;\r\n }\r\n\r\n MoveStretchPoints(ids: number[], vec: Vector3)\r\n {\r\n if (ids.length === 4)\r\n {\r\n this.Move(vec);\r\n return;\r\n }\r\n\r\n const MoveOneGrip = () =>\r\n {\r\n let i = ids[0];\r\n if (i < 4)\r\n this.MoveGripPoints(ids, vec);\r\n else\r\n this.MoveGripPoints([5], vec);\r\n };\r\n\r\n if (ids.length === 1)\r\n {\r\n MoveOneGrip();\r\n return;\r\n }\r\n\r\n //ids.length === 2,3\r\n ids = ids.filter(i => i !== 4);//移除中心\r\n if (ids.length === 1)\r\n {\r\n MoveOneGrip();\r\n return;\r\n }\r\n\r\n //ids.length === 2\r\n ids.sort((a1, a2) => a1 - a2);\r\n let inv = this.OCSInv.setPosition(0, 0, 0);\r\n vec = vec.clone().applyMatrix4(inv);\r\n let ocs = inv.copy(this._Matrix).setPosition(0, 0, 0);\r\n\r\n if (ids[0] === 0)\r\n {\r\n if (ids[1] === 1)//下\r\n {\r\n vec.x = 0;\r\n vec.z = 0;\r\n vec.applyMatrix4(ocs);\r\n\r\n this.MoveGripPoints([0], vec);\r\n }\r\n else if (ids[1] === 3)//左\r\n {\r\n vec.y = 0;\r\n vec.z = 0;\r\n vec.applyMatrix4(ocs);\r\n this.MoveGripPoints([0], vec);\r\n }\r\n }\r\n else if (ids[0] === 1)\r\n {\r\n if (ids[1] === 2)//右\r\n {\r\n vec.y = 0;\r\n vec.z = 0;\r\n vec.applyMatrix4(ocs);\r\n this.MoveGripPoints([1], vec);\r\n }\r\n }\r\n else if (ids[0] === 2)\r\n {\r\n if (ids[1] === 3)//上\r\n {\r\n vec.x = 0;\r\n vec.z = 0;\r\n vec.applyMatrix4(ocs);\r\n\r\n this.MoveGripPoints([2], vec);\r\n }\r\n }\r\n }\r\n\r\n protected InitDrawObject(renderType: RenderType = RenderType.Wireframe): Object3D\r\n {\r\n let lightGroup = new Group();\r\n let light = new TRectAreaLight(this.Color, this.WebIntensity, this._Width, this._Height);\r\n lightGroup.add(light);\r\n this.UpdateDrawObject(renderType, lightGroup);\r\n return lightGroup;\r\n }\r\n\r\n UpdateDrawObject(type: RenderType, obj: Object3D)\r\n {\r\n let light = obj.children[0] as TRectAreaLight;\r\n super.UpdateDrawObject(type, light);\r\n light.width = this._Width;\r\n light.height = this._Height;\r\n light.color.copy(this.Color);\r\n // light.castShadow = true;//threejs没有支持这个影子\r\n\r\n let help: RectAreaLightHelper;\r\n if (obj.children.length === 1)\r\n {\r\n help = new RectAreaLightHelper(light, light.color);\r\n obj.add(help);\r\n }\r\n else\r\n help = obj.children[1] as RectAreaLightHelper;\r\n\r\n help.BarnDoorAngle = 90 - this.BarnDoorAngle;\r\n help.BarnDoorLength = this.BarnDoorLength;\r\n help.color = this.Color;\r\n help.updataRange();\r\n\r\n help.updateMatrixWorld();\r\n\r\n help = obj.children[1] as RectAreaLightHelper;\r\n help.visible = this._ShowHelper;\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._Height = file.Read();\r\n this._Width = file.Read();\r\n new Vector3().fromArray(file.Read());\r\n\r\n //ver2\r\n if (ver > 1)\r\n {\r\n this.AttenuationRadius = file.Read();\r\n this._BarnDoorAngle = file.Read();\r\n this._BarnDoorLength = file.Read();\r\n this.SourceTexture = file.Read();\r\n }\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._Height);\r\n file.Write(this._Width);\r\n file.Write([0, 0, 0]);\r\n\r\n //ver2\r\n file.Write(this.AttenuationRadius);\r\n file.Write(this._BarnDoorAngle);\r\n file.Write(this._BarnDoorLength);\r\n file.Write(this.SourceTexture);\r\n }\r\n}\r\n","import { BufferGeometry, Float32BufferAttribute, LineBasicMaterial, LineSegments, MathUtils, Object3D } from 'three';\r\nimport { SpotLight } from './SpotLight';\r\n\r\nexport class SpotLightHelper extends Object3D\r\n{\r\n cone: LineSegments[] = [];\r\n constructor(private light: SpotLight)\r\n {\r\n super();\r\n\r\n const geometry = new BufferGeometry();\r\n const positions = [\r\n 0, 0, 0, 0, 0, 1,\r\n 0, 0, 0, 1, 0, 1,\r\n 0, 0, 0, - 1, 0, 1,\r\n 0, 0, 0, 0, 1, 1,\r\n 0, 0, 0, 0, - 1, 1\r\n ];\r\n for (let i = 0, j = 1, l = 32; i < l; i++, j++)\r\n {\r\n const p1 = (i / l) * Math.PI * 2;\r\n const p2 = (j / l) * Math.PI * 2;\r\n\r\n positions.push(\r\n Math.cos(p1), Math.sin(p1), 1,\r\n Math.cos(p2), Math.sin(p2), 1\r\n );\r\n\r\n }\r\n geometry.setAttribute('position', new Float32BufferAttribute(positions, 3));\r\n\r\n this.cone[0] = new LineSegments(geometry, new LineBasicMaterial({ fog: false }));\r\n this.cone[1] = new LineSegments(geometry, new LineBasicMaterial({ fog: false }));\r\n\r\n this.cone[0].rotation.x = Math.PI;\r\n this.cone[1].rotation.x = Math.PI;\r\n\r\n this.add(this.cone[0], this.cone[1]);\r\n }\r\n\r\n dispose()\r\n {\r\n this.cone[0].geometry.dispose();\r\n this.cone[1].geometry.dispose();\r\n this.cone[0].material.dispose();\r\n this.cone[1].material.dispose();\r\n }\r\n\r\n update()\r\n {\r\n const coneLength = this.light.Distance ? this.light.Distance : 1000;\r\n const coneWidth1 = coneLength * Math.tan(this.light.Angle);\r\n const coneWidth2 = coneLength * Math.tan(MathUtils.degToRad(this.light.InnerConeAngle));\r\n\r\n this.cone[0].scale.set(coneWidth1, coneWidth1, coneLength);\r\n this.cone[1].scale.set(coneWidth2, coneWidth2, coneLength);\r\n this.cone[0].updateMatrix();\r\n this.cone[1].updateMatrix();\r\n\r\n this.cone[0].material.color.set(this.light.Color).multiplyScalar(0.3);\r\n this.cone[1].material.color.set(this.light.Color);\r\n }\r\n}\r\n","import { ConeGeometry, Group, MathUtils, Mesh, MeshBasicMaterial, Object3D, SpotLight as TSpotLight, Vector3 } from \"three\";\r\nimport { HostApplicationServices } from \"../../ApplicationServices/HostApplicationServices\";\r\nimport { UpdateDraw } from \"../../Common/Status\";\r\nimport { ObjectSnapMode } from \"../../Editor/ObjectSnapMode\";\r\nimport { equalv3, YAxis } from \"../../Geometry/GeUtils\";\r\nimport { RenderType } from \"../../GraphicsSystem/RenderType\";\r\nimport { equaln } from \"../../Nest/Common/Util\";\r\nimport { AutoRecord } from \"../AutoRecord\";\r\nimport { Factory } from \"../CADFactory\";\r\nimport { CADFiler } from \"../CADFiler\";\r\nimport { Light } from \"./Light\";\r\nimport { SpotLightHelper } from \"./SpotLightHelper\";\r\n\r\n@Factory\r\nexport class SpotLight extends Light\r\n{\r\n /**\r\n * If non-zero, light will attenuate linearly from maximum intensity at light position down to zero at distance.\r\n * Default — 0.0.\r\n */\r\n private _Distance: number = 5000;\r\n protected _Intensity: number = 100; //强度\r\n\r\n // 光线沿着光线的距离变暗的量\r\n // 在物理上正确的模式下,衰减 = 2会导致物理上真实的光线衰减。\r\n // 缺省值是1。\r\n private _Decay: number = 0.2;\r\n // 光线散射角度,最大为Math.PI/2\r\n private _Angle: number = Math.PI / 4;//默认\r\n\r\n // 聚光锥的半影衰减百分比。在0和1之间的值。 默认值 — 0.0。\r\n private _Penumbra: number = 0;\r\n\r\n //SpotLightComponent extends PointLightComponent\r\n @AutoRecord InnerConeAngle: number = 0;//椎体内部角度 默认0 范围0-90\r\n @AutoRecord OuterConeAngle: number = 40;//椎体外部角度 默认40 范围0-90 (弃用,使用Angle)\r\n\r\n //PointLightComponent\r\n @AutoRecord SourceRadius = 0;//源半径 范围0-300\r\n @AutoRecord SoftSourceRadius = 0;//软源半径 范围0-300\r\n @AutoRecord SourceLength = 0;//源长度 默认0 范围0-1000\r\n\r\n //LocalLightComponent\r\n //Radius:number 没设置这个\r\n @AutoRecord AttenuationRadius = 300; //衰减半径 10-1000\r\n\r\n get Target()\r\n {\r\n return this.Position.add(this.Normal.multiplyScalar(-this._Distance * 0.5));\r\n }\r\n set Target(p: Vector3)\r\n {\r\n if (!equalv3(p, this.Position))\r\n {\r\n this.WriteAllObjectRecord();\r\n this._Matrix.lookAt(this.Position, p, YAxis);\r\n this.Update(UpdateDraw.Matrix);\r\n }\r\n }\r\n\r\n get Angle()\r\n {\r\n return this._Angle;\r\n }\r\n set Angle(rad: number)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._Angle = rad;\r\n this.Update();\r\n }\r\n get Decay(): number\r\n {\r\n return this._Decay;\r\n }\r\n set Decay(decay: number)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._Decay = decay;\r\n this.Update();\r\n }\r\n get Distance()\r\n {\r\n return this._Distance;\r\n }\r\n set Distance(dist: number)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._Distance = dist;\r\n this.Update();\r\n }\r\n get Penumbra()\r\n {\r\n return this._Penumbra;\r\n }\r\n set Penumbra(v: number)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._Penumbra = v;\r\n this.Update();\r\n }\r\n\r\n get EndPoint()\r\n {\r\n return this.Position.add(this.Target.sub(this.Position).normalize().multiplyScalar(this._Distance));\r\n }\r\n\r\n get WebIntensity()\r\n {\r\n let x = this._Intensity / 2000;\r\n x = Math.pow(x, 0.45);\r\n return (x * 125) / Math.PI;//流明转cd 文档是4pi\r\n }\r\n\r\n GetGripPoints(): Vector3[]\r\n {\r\n let radius = this.Distance * Math.tan(this._Angle);\r\n let pts: Vector3[] = [\r\n this.Position, this.Target,\r\n new Vector3(radius, 0, -this._Distance).applyMatrix4(this._Matrix),\r\n new Vector3(-radius, 0, -this._Distance).applyMatrix4(this._Matrix),\r\n new Vector3(0, radius, -this._Distance).applyMatrix4(this._Matrix),\r\n new Vector3(0, -radius, -this._Distance).applyMatrix4(this._Matrix),\r\n ];\r\n\r\n let a2 = MathUtils.degToRad(this.InnerConeAngle);\r\n if (this.InnerConeAngle >= 1 && !equaln(this._Angle, a2))\r\n {\r\n let radius2 = this.Distance * Math.tan(a2);\r\n pts.push(\r\n new Vector3(radius2, 0, -this._Distance).applyMatrix4(this._Matrix),\r\n new Vector3(-radius2, 0, -this._Distance).applyMatrix4(this._Matrix),\r\n new Vector3(0, radius2, -this._Distance).applyMatrix4(this._Matrix),\r\n new Vector3(0, -radius2, -this._Distance).applyMatrix4(this._Matrix),\r\n );\r\n }\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 if (indexList[0] === 0)\r\n {\r\n this.Move(vec);\r\n }\r\n else if (indexList[0] === 1)\r\n this.Target = this.Target.add(vec);\r\n else\r\n {\r\n let pts = this.GetGripPoints();\r\n let p = pts[indexList[0]].add(vec);\r\n let pos = this.Position;\r\n\r\n let dir = this.EndPoint.sub(pos).normalize();\r\n let dir2 = p.sub(pos).normalize();\r\n\r\n let angle = dir.angleTo(dir2);\r\n if (indexList[0] < 6)\r\n {\r\n this.Angle = angle;\r\n this.InnerConeAngle = Math.min(this.InnerConeAngle, MathUtils.radToDeg(angle));\r\n }\r\n else\r\n {\r\n this.InnerConeAngle = MathUtils.radToDeg(angle);\r\n this.Angle = Math.max(angle, this.Angle);\r\n }\r\n\r\n this.Update();\r\n }\r\n }\r\n\r\n GetStretchPoints(): Vector3[]\r\n {\r\n return this.GetGripPoints();\r\n }\r\n\r\n MoveStretchPoints(indexList: Array, vec: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n if (indexList.length === 1)\r\n return this.MoveGripPoints(indexList, vec);\r\n else if (indexList.length === 7)\r\n this.Move(vec);\r\n else if (indexList.length > 1)\r\n {\r\n if (indexList.indexOf(0) === -1)\r\n this.MoveGripPoints([1], vec);\r\n else\r\n this.Move(vec);\r\n }\r\n }\r\n\r\n GetObjectSnapPoints(\r\n snapMode: ObjectSnapMode,\r\n pickPoint: Vector3,\r\n lastPoint: Vector3\r\n ): Vector3[]\r\n {\r\n switch (snapMode)\r\n {\r\n case ObjectSnapMode.End:\r\n return this.GetGripPoints();\r\n default:\r\n break;\r\n }\r\n return [];\r\n }\r\n\r\n protected InitDrawObject(renderType: RenderType = RenderType.Wireframe): Object3D\r\n {\r\n // if (renderType !== RenderType.Physical) return;\r\n\r\n let group = new Group();\r\n\r\n let light = new TSpotLight(this._LightColor, this.WebIntensity, this._Distance, this._Angle, this._Penumbra, this._Decay);\r\n light.position.set(0, 0, 0);\r\n light.updateMatrix();\r\n\r\n light.target.position.set(0, 0, -1);\r\n light.target.updateMatrix();\r\n light.add(light.target);\r\n\r\n Object.defineProperty(light, \"castShadow\", { get: () => HostApplicationServices.isShowLightShadow && this.CaseShadow });\r\n light.shadow.camera.matrixAutoUpdate = true;\r\n light.shadow.camera.far = this._Distance;\r\n\r\n group.add(light);//灯光\r\n\r\n //灯光圆锥\r\n let con = new Mesh(new ConeGeometry(50, 80, 30, 1), new MeshBasicMaterial({ color: this._LightColor }));\r\n con.rotation.x = Math.PI * 0.5;\r\n con.position.z = -40;\r\n con.castShadow = false;\r\n con.updateMatrix();\r\n\r\n group.add(con);//椎体\r\n\r\n this.UpdateDrawObject(renderType, group);\r\n return group;\r\n }\r\n\r\n UpdateDrawObject(type: RenderType, en: Object3D)\r\n {\r\n // if (type !== RenderType.Physical) return;\r\n\r\n let [light, con, helper] = en.children as [TSpotLight, Mesh, SpotLightHelper];\r\n\r\n super.UpdateDrawObject(type, light);\r\n light.distance = this._Distance;\r\n light.decay = this._Decay;\r\n light.angle = this._Angle;\r\n light.penumbra = this._Penumbra;\r\n\r\n con.material.color.copy(this.Color);\r\n\r\n if (this._ShowHelper)\r\n {\r\n if (!helper)\r\n {\r\n helper = new SpotLightHelper(this);\r\n en.add(helper);\r\n }\r\n else\r\n helper.visible = true;\r\n\r\n helper.update();\r\n }\r\n else\r\n if (helper) helper.visible = this._ShowHelper;\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._Distance = file.Read();\r\n this._Decay = file.Read();\r\n this._Angle = file.Read();\r\n this._Penumbra = file.Read();\r\n\r\n let target = new Vector3();\r\n target.fromArray(file.Read());\r\n if (ver < 3)\r\n this.Target = target;\r\n\r\n if (ver > 1)\r\n {\r\n this.InnerConeAngle = file.Read();\r\n this.OuterConeAngle = file.Read();\r\n this.SourceRadius = file.Read();\r\n this.SoftSourceRadius = file.Read();\r\n this.SourceLength = file.Read();\r\n this.AttenuationRadius = file.Read();\r\n }\r\n }\r\n WriteFile(file: CADFiler)\r\n {\r\n super.WriteFile(file);\r\n file.Write(3);\r\n file.Write(this._Distance);\r\n file.Write(this._Decay);\r\n file.Write(this._Angle);\r\n file.Write(this._Penumbra);\r\n file.Write([0, 0, 0]);\r\n\r\n //ver2\r\n file.Write(this.InnerConeAngle);\r\n file.Write(this.OuterConeAngle);\r\n file.Write(this.SourceRadius);\r\n file.Write(this.SoftSourceRadius);\r\n file.Write(this.SourceLength);\r\n file.Write(this.AttenuationRadius);\r\n }\r\n}\r\n","import { arrayRemoveIf } from \"../../Common/ArrayExt\";\r\nimport { AutoRecord } from \"../AutoRecord\";\r\nimport { Factory } from \"../CADFactory\";\r\nimport { CADFiler } from \"../CADFiler\";\r\nimport { ObjectId } from \"../ObjectId\";\r\nimport { SymbolTableRecord } from \"../SymbolTableRecord\";\r\n\r\n/**\r\n * 加工组信息设置.\r\n * 为了保证加工组的信息得到正确的添加和删除.\r\n * 请保证更新Entity的加工组数据,并更新ProcessingGroup的数据.\r\n */\r\n@Factory\r\nexport class ProcessingGroupRecord extends SymbolTableRecord\r\n{\r\n @AutoRecord Objects: ObjectId[] = [];\r\n constructor()\r\n {\r\n super();\r\n }\r\n\r\n get Name()\r\n {\r\n return this.name;\r\n }\r\n set Name(name: string)\r\n {\r\n if (name !== this.name)\r\n {\r\n this.WriteAllObjectRecord();\r\n this.name = name;\r\n }\r\n }\r\n\r\n Purge()\r\n {\r\n arrayRemoveIf(this.Objects, id => !id || id.IsErase);\r\n }\r\n\r\n //#region -------------------------File-------------------------\r\n\r\n //对象从文件中读取数据,初始化自身\r\n ReadFile(file: CADFiler)\r\n {\r\n let ver = file.Read();\r\n super.ReadFile(file);\r\n let count = file.Read();\r\n this.Objects.length = 0;\r\n for (let i = 0; i < count; i++)\r\n {\r\n let id = file.ReadObjectId();\r\n if (id) this.Objects.push(id);\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.Objects.length);\r\n for (let id of this.Objects)\r\n file.WriteObjectId(id);\r\n }\r\n //#endregion\r\n}\r\n","import { Box3, BufferGeometry, Geometry, Line as TLine, LineSegments, Mesh, Object3D, ShapeGeometry, Vector2, Vector3 } from \"three\";\r\nimport { ColorMaterial } from \"../../../../Common/ColorPalette\";\r\nimport { Box3Ext } from \"../../../../Geometry/Box\";\r\nimport { BufferGeometryUtils } from \"../../../../Geometry/BufferGeometryUtils\";\r\nimport { AsVector3 } from \"../../../../Geometry/GeUtils\";\r\nimport { ScaleUV } from \"../../../../Geometry/UVUtils\";\r\nimport { RenderType } from \"../../../../GraphicsSystem/RenderType\";\r\nimport { Factory } from \"../../../CADFactory\";\r\nimport { CADFiler } from \"../../../CADFiler\";\r\nimport { Polyline } from \"../../../Entity/Polyline\";\r\nimport { ObjectId } from \"../../../ObjectId\";\r\nimport { RoomBase } from \"../RoomBase\";\r\n\r\nconst TempPolyline = new Polyline;\r\nexport function UpdateTempPolyline(_ContourData: { pts: Vector2[], buls: number[]; })\r\n{\r\n TempPolyline.LineData.length = 0;;\r\n for (let i = 0; i < _ContourData.pts.length; i++)\r\n TempPolyline.LineData.push({ pt: _ContourData.pts[i], bul: _ContourData.buls[i] });\r\n return TempPolyline;\r\n}\r\n\r\n/**\r\n * 平面实体基类\r\n * 子类:地板 天花\r\n */\r\n@Factory\r\nexport class RoomFlatBase extends RoomBase\r\n{\r\n protected _RegionId: ObjectId;\r\n protected _ContourData: { pts: Vector2[]; buls: number[]; };\r\n\r\n protected _HoleDatas: { pts: Vector2[]; buls: number[]; }[];\r\n\r\n constructor(\r\n _Contour?: Polyline,//为了防止contour被删除(所以我们直接备份这个)\r\n _Holes: Polyline[] = []\r\n )\r\n {\r\n super();\r\n if (_Contour) this.Contour = _Contour;\r\n\r\n this._HoleDatas = _Holes.map(h => h.MatrixAlignTo2(this.OCSNoClone));\r\n }\r\n\r\n get ContourData(): { pts: Vector2[]; buls: number[]; }\r\n {\r\n return this._ContourData;\r\n }\r\n\r\n set ContourData(value: { pts: Vector2[]; buls: number[]; })\r\n {\r\n }\r\n\r\n get HoleDatas(): { pts: Vector2[]; buls: number[]; }[]\r\n {\r\n return this._HoleDatas;\r\n }\r\n set HoleDatas(value: { pts: Vector2[]; buls: number[]; }[])\r\n {\r\n }\r\n\r\n get Area()\r\n {\r\n let area = this.Contour.Area;\r\n\r\n for (let hole of this._HoleDatas)\r\n area -= UpdateTempPolyline(hole).Area;\r\n\r\n return area;\r\n }\r\n\r\n get BoundingBoxInOCS(): Box3Ext\r\n {\r\n return this.Contour.BoundingBoxInOCS;\r\n }\r\n\r\n get BoundingBox(): Box3\r\n {\r\n return this.BoundingBoxInOCS.applyMatrix4(this._Matrix);\r\n }\r\n\r\n public UpdateContourHoles(_Contour: Polyline, _Holes: Polyline[])\r\n {\r\n let conData = _Contour.MatrixAlignTo2(this.OCSNoClone);\r\n let holeData = _Holes.map(h => h.MatrixAlignTo2(this.OCSNoClone));\r\n\r\n this.WriteAllObjectRecord();\r\n this._ContourData = conData;\r\n this._HoleDatas = holeData;\r\n this.Update();\r\n }\r\n\r\n\r\n public set Contour(_Contour: Polyline)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._ContourData = _Contour.MatrixAlignTo2(this.OCSNoClone);\r\n this.Update();\r\n }\r\n public get Contour()\r\n {\r\n return UpdateTempPolyline(this._ContourData);\r\n }\r\n\r\n public set Holes(_Holes: Polyline[])\r\n {\r\n this.WriteAllObjectRecord();\r\n this._HoleDatas = _Holes.map(h => h.MatrixAlignTo2(this.OCSNoClone));\r\n this.Update();\r\n }\r\n\r\n public get RegionId(): ObjectId\r\n {\r\n return this._RegionId;\r\n }\r\n public set RegionId(value: ObjectId)\r\n {\r\n if (value === this._RegionId) return;\r\n this.WriteAllObjectRecord();\r\n this._RegionId = value;\r\n }\r\n\r\n override GetGripPoints(): Vector3[]\r\n {\r\n let pts: Vector3[] = [];\r\n const Add2Pts = (p: Vector2) => { pts.push(AsVector3(p).applyMatrix4(this.OCSNoClone)); };\r\n this._ContourData.pts.forEach(Add2Pts);\r\n this._HoleDatas.forEach(h => h.pts.forEach(Add2Pts));\r\n return pts;\r\n }\r\n override MoveGripPoints(indexList: number[], vec: Vector3): void\r\n {\r\n }\r\n\r\n override GetStretchPoints(): Vector3[]\r\n {\r\n return this.GetGripPoints();\r\n // return [new Vector3(1e10, 1e10, 1e10)];//我们允许拉伸内部轮廓 但是不允许拉伸外部轮廓\r\n }\r\n\r\n override MoveStretchPoints(indexList: number[], vec: Vector3): void\r\n {\r\n\r\n }\r\n\r\n //绘制\r\n override UpdateDrawGeometry()\r\n {\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 protected _EdgeGeometry: BufferGeometry;\r\n protected get EdgeGeometry()\r\n {\r\n if (this._EdgeGeometry)\r\n return this._EdgeGeometry;\r\n\r\n let pts = this.Contour.Shape.getPoints(30).map(AsVector3);\r\n this._EdgeGeometry = BufferGeometryUtils.CreateFromPts(pts);\r\n return this._EdgeGeometry;\r\n }\r\n\r\n protected _MeshGeometry: Geometry;\r\n protected get MeshGeometry(): Geometry\r\n {\r\n if (!this._MeshGeometry)\r\n {\r\n let shape = this.Contour.Shape;\r\n for (let hole of this._HoleDatas)\r\n shape.holes.push(UpdateTempPolyline(hole).Shape);\r\n this._MeshGeometry = new ShapeGeometry(shape);\r\n ScaleUV(this.MeshGeometry, 1e-3);\r\n }\r\n return this._MeshGeometry;\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 override InitDrawObject(renderType: RenderType = RenderType.Wireframe): Object3D\r\n {\r\n if (renderType === RenderType.Wireframe)\r\n {\r\n // return new Object3D;//在二维线框中,如果显示这个线框,操作时会选到这个,所以不绘制\r\n\r\n //避免在二维线框下无法选中!\r\n return new TLine(BufferGeometryUtils.CreateFromPts([AsVector3(this.ContourData.pts[0]), AsVector3(this.ContourData.pts[0])]), 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.GetBasicMaterialTransparent2(this.ColorIndex, 0.1)),\r\n new TLine(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\r\n Object.defineProperty(mesh, \"castShadow\", {\r\n get: () => this.CaseShadow\r\n });\r\n Object.defineProperty(mesh, \"receiveShadow\", {\r\n get: () => this.CaseShadow\r\n });\r\n\r\n return mesh;\r\n }\r\n else if (renderType === RenderType.Jig)\r\n {\r\n return new Object3D;\r\n }\r\n }\r\n\r\n override UpdateDrawObject(renderType: RenderType, obj: Object3D)\r\n {\r\n if (renderType === RenderType.Wireframe)\r\n {\r\n let l = obj as TLine;\r\n BufferGeometryUtils.UpdatePts(l.geometry, [AsVector3(this.ContourData.pts[0]), AsVector3(this.ContourData.pts[0])]);\r\n\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 let mesh = obj.children[0] as Mesh;\r\n if (mesh.geometry !== this.MeshGeometry)\r\n {\r\n mesh.geometry.dispose();\r\n mesh.geometry = this.MeshGeometry;\r\n }\r\n\r\n let line = obj.children[1] as LineSegments;\r\n if (line.geometry !== this.EdgeGeometry)\r\n {\r\n line.geometry.dispose();\r\n line.geometry = this.EdgeGeometry;\r\n }\r\n }\r\n else if (renderType === RenderType.Physical)\r\n {\r\n let mesh = obj as Mesh;\r\n if (mesh.geometry !== this.MeshGeometry)\r\n {\r\n mesh.geometry.dispose();\r\n mesh.geometry = this.MeshGeometry;\r\n }\r\n }\r\n }\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\r\n this._RegionId = file.ReadObjectId();\r\n\r\n this._ContourData = ReadContour();\r\n\r\n let count = file.Read();\r\n this._HoleDatas = [];\r\n for (let i = 0; i < count; i++)\r\n this._HoleDatas.push(ReadContour());\r\n\r\n function ReadContour()\r\n {\r\n let count = file.Read() as number;\r\n let conData = { pts: [], buls: [] };\r\n for (let i = 0; i < count; i++)\r\n {\r\n conData.pts.push(new Vector2(file.Read(), file.Read()));\r\n conData.buls.push(file.Read());\r\n }\r\n return conData;\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.WriteObjectId(this._RegionId);\r\n\r\n WriteContour(this._ContourData);\r\n file.Write(this._HoleDatas.length);\r\n for (let h of this._HoleDatas)\r\n WriteContour(h);\r\n\r\n function WriteContour(conData: { pts: Vector2[], buls: number[]; })\r\n {\r\n file.Write(conData.pts.length);\r\n for (let i = 0; i < conData.pts.length; i++)\r\n {\r\n let p = conData.pts[i];\r\n file.Write(p.x);\r\n file.Write(p.y);\r\n file.Write(conData.buls[i]);\r\n }\r\n }\r\n }\r\n}\r\n","import { Factory } from \"../../../CADFactory\";\r\nimport { CADFiler } from \"../../../CADFiler\";\r\nimport { RoomFlatBase } from \"./RoomFlatBase\";\r\n\r\n\r\n/**\r\n * 地板\r\n */\r\n@Factory\r\nexport class RoomFlatFloor extends RoomFlatBase\r\n{\r\n //#region -----------------------------File-----------------------------\r\n //对象应该实现dataIn和DataOut的方法,为了对象的序列化和反序列化\r\n\r\n //对象从文件中读取数据,初始化自身\r\n protected override _ReadFile(file: CADFiler)\r\n {\r\n super._ReadFile(file);\r\n let ver = file.Read();//1\r\n }\r\n //对象将自身数据写入到文件.\r\n override WriteFile(file: CADFiler)\r\n {\r\n super.WriteFile(file);\r\n file.Write(1);//ver\r\n }\r\n}\r\n","import { Face3, Geometry, ShapeUtils, Vector3 } from \"three\";\r\nimport { arrayPushArray } from \"../../../../Common/ArrayExt\";\r\nimport { AsVector3 } from \"../../../../Geometry/GeUtils\";\r\nimport { Factory } from \"../../../CADFactory\";\r\nimport { RoomFlatBase, UpdateTempPolyline } from \"./RoomFlatBase\";\r\n\r\n\r\n/**\r\n * 天花板\r\n */\r\n@Factory\r\nexport class RoomFlatTop extends RoomFlatBase\r\n{\r\n protected override get MeshGeometry(): Geometry\r\n {\r\n if (!this._MeshGeometry)\r\n {\r\n this._MeshGeometry = new Geometry;\r\n let shape = this.Contour.Shape;\r\n for (let hole of this._HoleDatas)\r\n shape.holes.push(UpdateTempPolyline(hole).Shape);\r\n\r\n const points = shape.extractPoints(30);\r\n let shapeVertices = points.shape;\r\n const shapeHoles = points.holes;\r\n\r\n const faces = ShapeUtils.triangulateShape(shapeVertices, shapeHoles);\r\n\r\n for (let hole of shapeHoles)\r\n arrayPushArray(shapeVertices, hole);\r\n\r\n for (let p of shapeVertices)\r\n {\r\n this._MeshGeometry.vertices.push(AsVector3(p));\r\n p.multiplyScalar(1e-3);\r\n }\r\n\r\n let normal = new Vector3(0, 0, -1);\r\n // incides\r\n for (let i = 0, l = faces.length; i < l; i++)\r\n {\r\n const face = faces[i];\r\n\r\n const a = face[2];\r\n const b = face[1];\r\n const c = face[0];\r\n\r\n this._MeshGeometry.faces.push(new Face3(a, b, c, normal));\r\n this._MeshGeometry.faceVertexUvs[0].push([shapeVertices[a], shapeVertices[b], shapeVertices[c]]);\r\n }\r\n }\r\n return this._MeshGeometry;\r\n }\r\n\r\n protected override get CaseShadow()\r\n {\r\n return true;\r\n }\r\n protected override get ReceiveShadow()\r\n {\r\n return false;\r\n }\r\n}\r\n","import { BufferGeometry, Line, Object3D, Vector2, Vector3 } from \"three\";\r\nimport { AddEntityDrawObject } from \"../../../../Common/AddEntityDrawObject\";\r\nimport { FixedNotZero } from \"../../../../Common/Utils\";\r\nimport { BufferGeometryUtils } from \"../../../../Geometry/BufferGeometryUtils\";\r\nimport { AsVector3, equaln } from \"../../../../Geometry/GeUtils\";\r\nimport { RenderType } from \"../../../../GraphicsSystem/RenderType\";\r\nimport { Factory } from \"../../../CADFactory\";\r\nimport { CADFiler } from \"../../../CADFiler\";\r\nimport { ObjectId } from \"../../../ObjectId\";\r\nimport { Text, TextAligen } from \"../../../Text/Text\";\r\nimport { RoomFlatBase } from \"../Flat/RoomFlatBase\";\r\nimport { RoomBase } from \"../RoomBase\";\r\n\r\n/**\r\n * 户型区域:厨房,客厅,主卧,卫生间\r\n * 绑定了天花板和地板对象\r\n */\r\n@Factory\r\nexport class RoomRegion extends RoomBase\r\n{\r\n _Text: Text;\r\n constructor(\r\n private _Name: string = \"\",//名称\r\n\r\n private _Top: ObjectId,//天花板\r\n\r\n private _Floor: ObjectId,//地板\r\n private _Area = 0,\r\n )\r\n {\r\n super();\r\n }\r\n\r\n public get Area()\r\n {\r\n return this._Area;\r\n }\r\n\r\n public set Area(value)\r\n {\r\n if (equaln(value, this._Area, 1e-3)) return;\r\n\r\n this.WriteAllObjectRecord();\r\n this._Area = value;\r\n this.Update();\r\n }\r\n\r\n get TextString() { return this._Name; }\r\n set TextString(name: string)\r\n {\r\n if (name === this._Name) return;\r\n this._Name = name;\r\n this.Update();\r\n }\r\n\r\n public get Top(): ObjectId\r\n {\r\n return this._Top;\r\n }\r\n\r\n public set Top(value: ObjectId)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._Top = value;\r\n }\r\n\r\n public get Floor(): ObjectId\r\n {\r\n return this._Floor;\r\n }\r\n public set Floor(value: ObjectId)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._Floor = value;\r\n }\r\n\r\n private get Text()\r\n {\r\n if (!this._Text)\r\n this._Text = new Text(undefined, undefined, \"yahei\", 100);\r\n\r\n return this._Text;\r\n }\r\n\r\n GetGripPoints(): Vector3[]\r\n {\r\n let pts: Vector3[] = [];\r\n let obj = (this._Floor?.Object ?? this._Top?.Object) as RoomFlatBase;\r\n if (obj)\r\n {\r\n const Add2Pts = (p: Vector2) => { pts.push(AsVector3(p).applyMatrix4(obj.OCSNoClone)); };\r\n obj.ContourData.pts.forEach(Add2Pts);\r\n obj.HoleDatas.forEach(h => h.pts.forEach(Add2Pts));\r\n }\r\n return pts;\r\n }\r\n\r\n //TODO:绘制时只绘制文字对象\r\n InitDrawObject(renderType: RenderType = RenderType.Wireframe): Object3D\r\n {\r\n let obj = new Object3D;\r\n this.UpdateDrawObject(renderType, obj);\r\n return obj;\r\n }\r\n\r\n /**\r\n * 重载:更新绘制的实体\r\n * @param {RenderType} type\r\n * @param {Object3D} obj\r\n */\r\n UpdateDrawObject(renderType: RenderType, obj: Object3D)\r\n {\r\n if (renderType === RenderType.Wireframe || renderType === RenderType.Conceptual)\r\n {\r\n obj.remove(...obj.children.slice(0));\r\n this.Text.TextAligen = TextAligen.Mid;\r\n this._Text.TextString = `${this.TextString || \"未命名\"} ${FixedNotZero(this._Area * 1e-6, 2)}m²`;\r\n AddEntityDrawObject(obj, this._Text, renderType);\r\n }\r\n else\r\n {\r\n //避免在真实视图无法选中!\r\n let line = obj.children[0] as Line;\r\n let pts = this.GetGripPoints();\r\n if (pts.length)\r\n {\r\n let p = pts[0].applyMatrix4(this.OCSInv);\r\n if (!line)\r\n obj.add(new Line(BufferGeometryUtils.CreateFromPts([p, p])));\r\n else\r\n BufferGeometryUtils.UpdatePts(line.geometry, [p, p]);\r\n }\r\n }\r\n }\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._Name = file.Read();\r\n this._Top = file.ReadObjectId();\r\n this._Floor = file.ReadObjectId();\r\n if (ver > 1)\r\n this._Area = file.Read();\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n super.WriteFile(file);\r\n file.Write(2);//ver\r\n file.Write(this._Name);\r\n file.WriteObjectId(this._Top);\r\n file.WriteObjectId(this._Floor);\r\n file.Write(this._Area);\r\n }\r\n //#endregion\r\n}\r\n","import { Object3D, Vector3 } from \"three\";\r\nimport { equalv3 } from \"../../../../../Geometry/GeUtils\";\r\nimport { RenderType } from \"../../../../../GraphicsSystem/RenderType\";\r\nimport { Factory } from \"../../../../CADFactory\";\r\nimport { CADFiler } from \"../../../../CADFiler\";\r\nimport { CADObject } from \"../../../../CADObject\";\r\nimport { Line } from \"../../../../Entity/Line\";\r\nimport { RoomBase } from \"../../RoomBase\";\r\nimport { applyMixins } from \"../RoomWallBase\";\r\nimport { RoomHoleBase } from \"./RoomHoleBase\";\r\n\r\nconst TempP = new Vector3;\r\n\r\n\r\n/**\r\n * 直线洞 2点(暂时不要用这个 全部使用RoomHolePolyline)\r\n */\r\n@Factory\r\nexport class RoomHoleLine extends RoomHoleBase\r\n{\r\n //虽然使用了三维的点,但是我们实际使用的是二维的点 z总是等于0\r\n constructor(private _StartPoint = new Vector3,\r\n private _EndPoint = new Vector3,\r\n )\r\n {\r\n super();\r\n }\r\n\r\n get StartPoint(): Vector3\r\n {\r\n return this._StartPoint.clone().applyMatrix4(this.OCSNoClone);\r\n }\r\n\r\n get EndPoint(): Vector3\r\n {\r\n return this._EndPoint.clone().applyMatrix4(this.OCSNoClone);\r\n }\r\n\r\n set StartPoint(p: Vector3)\r\n {\r\n p = TempP.copy(p).applyMatrix4(this.OCSInv).setZ(0);\r\n if (!equalv3(p, this._StartPoint, 1e-4))\r\n {\r\n this.WriteAllObjectRecord();\r\n this._StartPoint.copy(p);\r\n this.Update();\r\n }\r\n }\r\n\r\n set EndPoint(p: Vector3)\r\n {\r\n p = TempP.copy(p).applyMatrix4(this.OCSInv).setZ(0);\r\n if (!equalv3(p, this._EndPoint, 1e-4))\r\n {\r\n this.WriteAllObjectRecord();\r\n this._EndPoint.copy(p);\r\n this.Update();\r\n }\r\n }\r\n\r\n //#region Draw\r\n InitDrawObject(renderType: RenderType = RenderType.Wireframe)\r\n {\r\n let obj = new Object3D();\r\n return obj;\r\n }\r\n\r\n UpdateDrawObject(type: RenderType, obj: Object3D)\r\n {\r\n }\r\n //#endregion\r\n\r\n //#region -------------------------File-------------------------\r\n //对象从文件中读取数据,初始化自身\r\n protected _ReadFile(file: CADFiler)\r\n {\r\n let ver = file.Read();\r\n super._ReadFile(file);\r\n\r\n this._StartPoint.set(file.Read(), file.Read(), 0);\r\n this._EndPoint.set(file.Read(), file.Read(), 0);\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(1);\r\n super.WriteFile(file);\r\n\r\n file.Write(this._StartPoint.x);\r\n file.Write(this._StartPoint.y);\r\n\r\n file.Write(this._EndPoint.x);\r\n file.Write(this._EndPoint.y);\r\n }\r\n //局部撤销\r\n ApplyPartialUndo(undoData: CADObject)\r\n {\r\n super.ApplyPartialUndo(undoData);\r\n }\r\n //#endregion\r\n\r\n}\r\n\r\n//@ts-ignore\r\nexport interface RoomHoleLine extends RoomBase, Line { }\r\n\r\napplyMixins(RoomHoleLine, Line);\r\n","import { Matrix4, Vector3 } from \"three\";\r\nimport { arrayRemoveDuplicateBySort } from \"../../Common/ArrayExt\";\r\nimport { Board } from \"../../DatabaseServices/Entity/Board\";\r\nimport { BoardType } from \"../../UI/Store/BoardInterface\";\r\nimport { Box3Ext, SplitType } from \"../Box\";\r\nimport { equaln, isParallelTo, XAxis, YAxis, ZAxis } from \"../GeUtils\";\r\nimport { VisualSpaceBox } from './../../Editor/VisualSpaceBox';\r\n\r\nexport class ISpaceParse\r\n{\r\n /**\r\n * 解析空间成功\r\n */\r\n ParseOK = false;\r\n\r\n /**\r\n * 空间占地盒子\r\n */\r\n SpaceBox: Box3Ext;\r\n\r\n /**\r\n * 空间盒子所在的位置矩阵\r\n */\r\n SpaceOCS: Matrix4;\r\n SpaceOCSInv: Matrix4;\r\n\r\n /**\r\n * 板件映射表\r\n */\r\n BoardMap: Map = new Map();\r\n\r\n /**\r\n * 解析空间所用的板件列表\r\n */\r\n Boards: Board[];\r\n\r\n LeftBoard: Board;\r\n RightBoard: Board;\r\n\r\n /**\r\n * 动态中,禁止执行二次操作\r\n */\r\n IsDynamic: Boolean = false;\r\n /**选到的虚拟空间 */\r\n VisualSpaceBox: VisualSpaceBox;\r\n Rotation = { x: 0, y: 0, z: 0 };\r\n\r\n /**\r\n * # 构造后请手动调用Parse()方法.\r\n * @param boards 板件列表\r\n * @param [spaceOCS] 默认空间矩阵,如果不设置将使用第一块板作为空间矩阵\r\n */\r\n constructor(boards?: Board[], spaceOCS?: Matrix4)\r\n {\r\n this.Boards = boards;\r\n if (spaceOCS)\r\n this.SpaceOCS = spaceOCS;\r\n else if (boards && boards.length > 0)\r\n this.SpaceOCS = boards[0].SpaceOCS;\r\n else\r\n this.SpaceOCS = new Matrix4();\r\n\r\n this.SpaceOCSInv = new Matrix4().getInverse(this.SpaceOCS);\r\n\r\n this.GeneralBoardMap();\r\n }\r\n\r\n async Parse()\r\n {\r\n }\r\n\r\n get Size()\r\n {\r\n if (this.SpaceBox)\r\n return this.SpaceBox.getSize(new Vector3());\r\n return new Vector3();\r\n }\r\n\r\n get DrawCS(): Matrix4\r\n {\r\n if (!this.ParseOK) return new Matrix4();\r\n let scs = this.SpaceOCS.clone();\r\n let p = this.SpaceBox.min.clone().applyMatrix4(scs);\r\n scs.setPosition(p);\r\n return scs;\r\n }\r\n\r\n protected GetBoardInSpaceType(br: Board): BoardType\r\n {\r\n //使用板件向量判断类型,而不是板件类型\r\n let normal = br.Normal.transformDirection(this.SpaceOCSInv);\r\n let type: BoardType;\r\n if (isParallelTo(XAxis, normal, 1e-3))\r\n type = BoardType.Vertical;\r\n else if (isParallelTo(YAxis, normal, 1e-3))\r\n type = BoardType.Behind;\r\n else if (isParallelTo(ZAxis, normal, 1e-3))\r\n type = BoardType.Layer;\r\n\r\n return type;\r\n }\r\n\r\n /**\r\n * 构造板件类型Map\r\n */\r\n protected GeneralBoardMap()\r\n {\r\n if (this.Boards && this.Boards.length > 0)\r\n {\r\n this.BoardMap.clear();\r\n\r\n for (let br of this.Boards)\r\n {\r\n let type = this.GetBoardInSpaceType(br);\r\n if (type === undefined) continue;\r\n\r\n let brs = this.BoardMap.get(type);\r\n if (brs)\r\n brs.push(br);\r\n else\r\n this.BoardMap.set(type, [br]);\r\n }\r\n }\r\n }\r\n /**\r\n * 解析板件的盒子,并且(排序,归并)\r\n * @param boardCol\r\n * @param splitType\r\n */\r\n protected ParseBoardBox(boardCol: Board[], splitType: SplitType): Box3Ext[]\r\n {\r\n let boxCol = boardCol.map(b => b.GetBoundingBoxInMtx(this.SpaceOCSInv));\r\n\r\n //查找最左的板和最右的板\r\n if (splitType === SplitType.X)\r\n {\r\n let minX = Infinity;\r\n let leftIndex = 0;\r\n let maxX = -Infinity;\r\n let rightIndex = 0;\r\n\r\n for (let i = 0; i < boxCol.length; i++)\r\n {\r\n let box = boxCol[i];\r\n if (box.min.x < minX)\r\n {\r\n minX = box.min.x;\r\n leftIndex = i;\r\n }\r\n\r\n if (box.max.x > maxX)\r\n {\r\n maxX = box.max.x;\r\n rightIndex = i;\r\n }\r\n }\r\n\r\n this.LeftBoard = boardCol[leftIndex];\r\n this.RightBoard = boardCol[rightIndex];\r\n }\r\n\r\n //根据分割类型排序\r\n boxCol.sort((b1, b2) =>\r\n {\r\n return b1.min.getComponent(splitType) - b2.min.getComponent(splitType);\r\n });\r\n\r\n //归并盒子\r\n arrayRemoveDuplicateBySort(boxCol,\r\n (b1, b2) =>\r\n {\r\n if (\r\n //对齐\r\n equaln(\r\n b1.min.getComponent(splitType),\r\n b2.min.getComponent(splitType),\r\n 1e-3\r\n )\r\n &&\r\n //厚度相等\r\n equaln(\r\n b1.getSize(new Vector3()).getComponent(splitType),\r\n b2.getSize(new Vector3()).getComponent(splitType),\r\n 1e-3\r\n )\r\n )\r\n {\r\n b1.union(b2);\r\n return true;\r\n }\r\n return false;\r\n }\r\n );\r\n\r\n return boxCol;\r\n }\r\n}\r\n","import { safeEval } from \"../../../Common/eval\";\r\nimport { AutoRecord } from \"../../AutoRecord\";\r\nimport { Factory } from \"../../CADFactory\";\r\nimport { CADFiler } from \"../../CADFiler\";\r\nimport { TemplateParam } from \"../Param/TemplateParam\";\r\n\r\n/**\r\n * 模版动作\r\n */\r\n@Factory\r\nexport class TemplateAction\r\n{\r\n @AutoRecord Name: string = \"动作\";\r\n /** 表达式应该只能依赖自身 */\r\n @AutoRecord Expr: string;\r\n @AutoRecord Description: string;\r\n parent: TemplateParam;\r\n WriteAllObjectRecord()\r\n {\r\n if (this.parent)\r\n this.parent.WriteAllObjectRecord();\r\n }\r\n Update(paramDiff: number | string, newValue: number | string)\r\n {\r\n if (this.Expr)\r\n {\r\n let varDefines = {};\r\n varDefines[this.parent.name] = newValue;\r\n newValue = safeEval(this.Expr, varDefines) || newValue;\r\n\r\n varDefines[this.parent.name] = paramDiff;\r\n paramDiff = safeEval(this.Expr, varDefines) || paramDiff;\r\n }\r\n\r\n this._Update(paramDiff, newValue);\r\n }\r\n\r\n\r\n /**\r\n * @重载\r\n */\r\n protected _Update(paramDiff: number | string, newValue: number | string)\r\n {\r\n\r\n }\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 this.Name = file.Read();\r\n if (ver > 2)\r\n {\r\n this.Expr = file.Read();\r\n this.Description = file.Read();\r\n }\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(3);\r\n file.Write(this.Name);\r\n file.Write(this.Expr);\r\n file.Write(this.Description);\r\n }\r\n}\r\n","import { Intersection, Object3D, Vector3 } from 'three';\r\nimport { Entity } from '../DatabaseServices/Entity/Entity';\r\nimport { ObjectSnapMode } from './ObjectSnapMode';\r\nimport { SelectSet } from './SelectSet';\r\n\r\nexport enum PromptStatus\r\n{\r\n None = 0,\r\n Cancel = -1,\r\n OK = 1,\r\n Keyword = 2,\r\n Other = 4,\r\n String = 8,\r\n Error = -2\r\n}\r\n\r\n// export enum Errno 未来某一天我们可能需要这个东西\r\n// {\r\n// Space = 0,\r\n// Enter = 1,\r\n// Esc = 2,\r\n// Left = 3,\r\n// Right = 4,\r\n// }\r\n\r\nexport class PromptResult\r\n{\r\n Status: PromptStatus = PromptStatus.None;\r\n\r\n StringResult?: string;\r\n //是否为子级菜单\r\n isChild?: boolean = false;\r\n Parent?: string;\r\n //当用户选择失败的时候,提供当前选择失败的原因\r\n // Errno?: Errno;\r\n}\r\n\r\nexport class PromptPointResult extends PromptResult\r\n{\r\n SnaoMode: ObjectSnapMode;\r\n intersection: Intersection;\r\n private _point: Vector3;\r\n /**\r\n * 返回三维点\r\n *\r\n * @readonly\r\n * @memberof PromptPointResult\r\n */\r\n get Point()\r\n {\r\n return this._point.clone();\r\n }\r\n set Point(pt: Vector3)\r\n {\r\n this._point = pt.clone();\r\n }\r\n constructor()\r\n {\r\n super();\r\n this._point = new Vector3();\r\n }\r\n}\r\n\r\nexport class PromptDistendResult extends PromptResult\r\n{\r\n private _value: number;\r\n get Distance()\r\n {\r\n return this._value;\r\n }\r\n set Distance(v: number)\r\n {\r\n this._value = v;\r\n }\r\n}\r\n\r\nexport class PromptRectResult extends PromptResult\r\n{\r\n Point1UCS: Vector3;\r\n Point2UCS: Vector3;\r\n\r\n Point1WCS: Vector3;\r\n Point2WCS: Vector3;\r\n\r\n get Width()\r\n {\r\n return this.Point1UCS.x - this.Point2UCS.x;\r\n }\r\n\r\n get Height()\r\n {\r\n return this.Point1UCS.y - this.Point2UCS.y;\r\n }\r\n}\r\n\r\nexport class PromptEntityResult extends PromptResult\r\n{\r\n constructor(\r\n //选择到的图形\r\n public Entity?: Entity,\r\n //点取的点\r\n public Point?: Vector3,\r\n public Object?: Object3D,\r\n public IsCircle?: boolean,\r\n )\r\n {\r\n super();\r\n }\r\n}\r\n\r\nexport class PromptSsgetResult extends PromptResult\r\n{\r\n SelectSet?: SelectSet;\r\n}\r\n","import { Matrix4, Vector3 } from \"three\";\r\nimport { GetPointAtCurveDir } from \"../Common/CurveUtils\";\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 { Ellipse } from \"../DatabaseServices/Entity/Ellipse\";\r\nimport { Line } from \"../DatabaseServices/Entity/Line\";\r\nimport { Polyline } from \"../DatabaseServices/Entity/Polyline\";\r\nimport { Spline } from \"../DatabaseServices/Spline\";\r\nimport { PromptEntityResult, PromptPointResult } from \"../Editor/PromptResult\";\r\nimport { angle, AsVector2, equaln, equalv3, isIntersect2, isParallelTo, midPoint } from \"../Geometry/GeUtils\";\r\nimport { Orbit } from \"../Geometry/Orbit\";\r\nimport { IntersectOption } from \"../GraphicsSystem/IntersectWith\";\r\n\r\nfunction Encode(res: PromptEntityResult, enMap: (PromptEntityResult[])[])\r\n{\r\n if (res.Entity instanceof Line || res.Entity.constructor.name === \"RoomWallLine\")\r\n {\r\n enMap[0].push(res);\r\n return 1;\r\n }\r\n else if (res.Entity instanceof Arc || res.constructor.name === \"RoomWallArc\")\r\n {\r\n enMap[1].push(res);\r\n return 2;\r\n }\r\n else if (res.Entity instanceof Polyline)\r\n {\r\n enMap[2].push(res);\r\n return 4;\r\n }\r\n else if (res.Entity instanceof Spline)\r\n {\r\n enMap[3].push(res);\r\n return 8;\r\n }\r\n else if (res.Entity instanceof Ellipse)\r\n {\r\n enMap[4].push(res);\r\n return 16;\r\n }\r\n}\r\n\r\n//把圆转换成圆弧,避免圆参与计算.\r\nfunction CircleEnResToArc(enRes: PromptEntityResult)\r\n{\r\n if (enRes.Entity instanceof Circle)\r\n {\r\n let an = angle(enRes.Point.clone().applyMatrix4(enRes.Entity.OCSInv)) + Math.PI;\r\n let arc = new Arc(new Vector3(), enRes.Entity.Radius, an, an + 0.1);\r\n arc.ApplyMatrix(enRes.Entity.OCS);\r\n arc.Center = enRes.Entity.Center;\r\n enRes.Entity = arc;\r\n enRes.IsCircle = true;\r\n }\r\n}\r\n\r\nfunction GetFilletCurve(enRes: PromptEntityResult): [Curve, number]\r\n{\r\n if (enRes.Entity instanceof Polyline)\r\n {\r\n let pl = enRes.Entity;\r\n let param = pl.GetParamAtPoint(pl.GetClosestPointTo(enRes.Point, false));\r\n let paramF = Math.floor(param);\r\n return [pl.GetCurveAtParam(param), paramF];\r\n }\r\n else\r\n return [enRes.Entity as Curve, NaN];\r\n}\r\n\r\nenum ExtendType\r\n{\r\n Start = 1,\r\n End = 2,\r\n}\r\n\r\nexport interface FilletRes\r\n{\r\n cu1?: Curve;\r\n cu1Extend?: ExtendType;\r\n cu2?: Curve;\r\n cu2Extend?: ExtendType;\r\n arc?: Arc;\r\n}\r\n\r\ntype CurveExtend = { Curve: Curve, ExtType: ExtendType; };\r\n\r\nexport class FilletUtils\r\n{\r\n FilletRadius: number;\r\n Fillet(enRes1: PromptEntityResult, enRes2: PromptEntityResult): FilletRes\r\n {\r\n CircleEnResToArc(enRes1);\r\n CircleEnResToArc(enRes2);\r\n\r\n let { enType, enMap } = this.EnCode(enRes1, enRes2);\r\n if (enType === 4 && enRes1.Entity === enRes2.Entity)\r\n return this.FilletPolyLineSelf(enRes1, enRes2);\r\n else if (enType >= 4 && enType < 8)\r\n return this.FilletPolylineAndCurve(enRes1, enRes2);\r\n\r\n let interPts = this.GetIntersectAndSort(enRes1, enRes2, enType, enMap);\r\n if (interPts.length === 0\r\n || (interPts.length === 1 && (enType & 2)))//圆弧相切\r\n {\r\n if (enType === 1)\r\n return this.FilletParallelLine(enRes1, enRes2);\r\n else if (enType === 3)\r\n return this.FilletLineAndArc(enMap, enRes1);\r\n else if (enType === 2)\r\n return this.FilletArcAndArc(enRes1, enRes2);\r\n return;\r\n }\r\n\r\n return this.FilletLineOrArc(enRes1, enRes2, interPts);\r\n }\r\n\r\n private FilletLineOrArc(enRes1: PromptEntityResult, enRes2: PromptEntityResult, interPts: Vector3[]): FilletRes\r\n {\r\n let iPt = interPts[0];\r\n\r\n //裁剪延伸,使两条线组成一个尖角\r\n let splitedCu1 = this.SplitCurve(enRes1, iPt, interPts);\r\n let splitedCu2 = this.SplitCurve(enRes2, iPt, interPts);\r\n\r\n let fRadius = this.FilletRadius;\r\n\r\n\r\n let res: FilletRes = { cu1: splitedCu1.Curve, cu2: splitedCu2.Curve, arc: undefined };\r\n\r\n if (fRadius > 0)\r\n {\r\n //角平分线向量.\r\n let bisectorVec: Vector3 = new Vector3();\r\n let c1Derv = this.ComputerDerv(splitedCu1, bisectorVec);\r\n let c2Derv = this.ComputerDerv(splitedCu2, bisectorVec);\r\n\r\n //方向相反\r\n if (equalv3(bisectorVec, new Vector3()))\r\n return;\r\n\r\n //相切\r\n if (equalv3(c2Derv, c1Derv))\r\n {\r\n bisectorVec.set(0, 0, 0);\r\n c1Derv = this.ComputerDerv2(splitedCu1, bisectorVec);\r\n c2Derv = this.ComputerDerv2(splitedCu2, bisectorVec);\r\n }\r\n let cu1RoOcsInv = new Matrix4().extractRotation(splitedCu1.Curve.OCSInv);\r\n\r\n [c1Derv, c2Derv, bisectorVec].forEach(v => v.applyMatrix4(cu1RoOcsInv));\r\n\r\n let offCu1 = splitedCu1.Curve.GetOffsetCurves(\r\n fRadius * -Math.sign(c1Derv.cross(bisectorVec).z))[0];\r\n let offCu2 = splitedCu2.Curve.GetOffsetCurves(\r\n fRadius * -Math.sign(c2Derv.cross(bisectorVec).z))[0];\r\n\r\n if (!offCu1 || !offCu2)\r\n return;\r\n\r\n // JigUtils.Draw(new Line(iPt, iPt.clone().add(c1Derv.clone().multiplyScalar(10)))).ColorIndex = 1;\r\n // JigUtils.Draw(new Line(iPt, iPt.clone().add(c2Derv.clone().multiplyScalar(10)))).ColorIndex = 2;\r\n // JigUtils.Draw(new Line(iPt, iPt.clone().add(bisectorVec))).ColorIndex = 3;\r\n // offCu1.ColorIndex = 6;\r\n // offCu2.ColorIndex = 6;\r\n // JigUtils.Draw(offCu1.Clone());\r\n // JigUtils.Draw(offCu2.Clone());\r\n\r\n let center = offCu1.IntersectWith(offCu2, IntersectOption.ExtendNone)\r\n .sort((p1, p2) =>\r\n {\r\n return p1.distanceToSquared(iPt) - p2.distanceToSquared(iPt);\r\n })[0];\r\n\r\n if (!center)\r\n return;\r\n\r\n let arcP1 = splitedCu1.Curve.GetClosestPointTo(center, true);\r\n let arcP2 = splitedCu2.Curve.GetClosestPointTo(center, true);\r\n if (!splitedCu1.Curve.PtOnCurve(arcP1) || !splitedCu2.Curve.PtOnCurve(arcP2))\r\n return;\r\n\r\n //时针校验\r\n let v1 = arcP1.clone().sub(center).applyMatrix4(cu1RoOcsInv);\r\n let v2 = arcP2.clone().sub(center).applyMatrix4(cu1RoOcsInv);\r\n\r\n //绘制圆弧\r\n let arc = new Arc(new Vector3(), this.FilletRadius, angle(v1), angle(v2), v1.cross(v2).z < 0);\r\n arc.ApplyMatrix(splitedCu1.Curve.OCS);\r\n arc.Center = center;\r\n res.arc = arc;\r\n //延伸或者裁剪到圆弧点\r\n this.ExtendPt(splitedCu1, arcP1);\r\n this.ExtendPt(splitedCu2, arcP2);\r\n }\r\n\r\n res.cu1Extend = splitedCu1.ExtType;\r\n res.cu2Extend = splitedCu2.ExtType;\r\n\r\n return res;\r\n }\r\n FilletPolyLineSelf(enRes1: PromptEntityResult, enRes2: PromptEntityResult): FilletRes\r\n {\r\n let pl = enRes1.Entity as Polyline;\r\n\r\n let param1 = pl.GetParamAtPoint(pl.GetClosestPointTo(enRes1.Point, false));\r\n let param2 = pl.GetParamAtPoint(pl.GetClosestPointTo(enRes2.Point, false));\r\n\r\n if (param1 > param2)\r\n {\r\n [param1, param2] = [param2, param1];\r\n [enRes1, enRes2] = [enRes2, enRes1];\r\n }\r\n\r\n let parF1 = Math.floor(param1);\r\n let parF2 = Math.floor(param2);\r\n\r\n //共线\r\n if (parF1 === parF2)\r\n return;\r\n\r\n let c1 = pl.GetCurveAtParam(param1);\r\n let c2 = pl.GetCurveAtParam(param2);\r\n\r\n if (equalv3(c1.GetFistDeriv(1).normalize(), c2.GetFistDeriv(0).normalize()))\r\n return;\r\n\r\n let es1 = new PromptEntityResult();\r\n es1.Entity = c1;\r\n es1.Point = enRes1.Point;\r\n\r\n let es2 = new PromptEntityResult();\r\n es2.Entity = c2;\r\n es2.Point = enRes2.Point;\r\n let fres = this.Fillet(es1, es2);\r\n\r\n if (!fres)\r\n return;\r\n\r\n let pln = pl.Clone();\r\n\r\n if (fres.cu1 instanceof Arc)\r\n pln.SetBulgeAt(parF1, fres.cu1.Bul);\r\n\r\n if (fres.cu2 instanceof Arc)\r\n pln.SetBulgeAt(parF2, fres.cu2.Bul);\r\n\r\n let splitType1 = fres.cu1Extend;\r\n let splitType2 = fres.cu2Extend;\r\n\r\n if (splitType1 === splitType2)\r\n return;\r\n if (!fres.arc)\r\n {\r\n if (splitType1 === ExtendType.End)\r\n {\r\n let ep = AsVector2(fres.cu1.EndPoint.applyMatrix4(pln.OCSInv));\r\n pln.SetPointAt(parF1 + 1, ep);\r\n\r\n let sp = AsVector2(fres.cu2.StartPoint.applyMatrix4(pln.OCSInv));\r\n pln.SetPointAt(parF2, sp);\r\n //移除多余的点\r\n pln.LineData.splice(parF1 + 1, parF2 - parF1 - 1);\r\n pln.Update();\r\n return { cu1: pln };\r\n }\r\n else\r\n {\r\n let ep = AsVector2(fres.cu1.StartPoint.applyMatrix4(pln.OCSInv));\r\n pln.SetPointAt(parF1, ep);\r\n\r\n let sp = AsVector2(fres.cu2.EndPoint.applyMatrix4(pln.OCSInv));\r\n pln.SetPointAt(parF2 + 1, sp);\r\n\r\n pln.LineData.splice(parF2 + 2);\r\n pln.LineData.splice(0, parF1);\r\n pln.Update();\r\n return { cu1: pln };\r\n }\r\n }\r\n\r\n if (splitType1 === ExtendType.End)//没有经过起点\r\n {\r\n let sp = AsVector2(fres.cu1.EndPoint.applyMatrix4(pln.OCSInv));\r\n if (parF2 - parF1 === 1)\r\n {\r\n pln.AddVertexAt(parF1 + 1, sp);\r\n parF2++;\r\n }\r\n else\r\n pln.SetPointAt(parF1 + 1, sp);\r\n pln.SetBulgeAt(parF1 + 1, fres.arc.Bul);\r\n\r\n let ep = AsVector2(fres.cu2.StartPoint.applyMatrix4(pln.OCSInv));\r\n pln.SetPointAt(parF2, ep);\r\n\r\n //移除多余的点\r\n pln.LineData.splice(parF1 + 2, parF2 - parF1 - 2);\r\n pln.Update();\r\n return { cu1: pln };\r\n }\r\n else//经过起点\r\n {\r\n let sp = AsVector2(fres.arc.EndPoint.applyMatrix4(pln.OCSInv));\r\n\r\n let keepF1 = 0;\r\n if (parF2 + 1 <= pln.LineData.length)\r\n {\r\n if (parF1 === 0 || equaln(pln.GetBulgeAt(parF1 - 1), 0))\r\n pln.AddVertexAt(parF2 + 1, sp);\r\n else\r\n {\r\n pln.SetPointAt(parF1 - 1, sp);\r\n keepF1 = -1;//保留圆弧位\r\n }\r\n }\r\n else\r\n pln.SetPointAt(parF2 + 1, sp);\r\n\r\n if (keepF1 === 0)\r\n pln.SetBulgeAt(parF2 + 1, -fres.arc.Bul);\r\n else\r\n pln.SetBulgeAt(parF1 - 1, -fres.arc.Bul);\r\n\r\n let ep = AsVector2(fres.cu1.StartPoint.applyMatrix4(pln.OCSInv));\r\n pln.SetPointAt(parF1, ep);\r\n pln.CloseMark = true;\r\n\r\n pln.LineData.splice(parF2 + 2 + keepF1);\r\n pln.LineData.splice(0, parF1 + keepF1);\r\n pln.Update();\r\n return { cu1: pln };\r\n }\r\n }\r\n\r\n private FilletPolylineAndCurve(enRes1: PromptEntityResult, enRes2: PromptEntityResult): FilletRes\r\n {\r\n let arr1 = GetFilletCurve(enRes1);\r\n let arr2 = GetFilletCurve(enRes2);\r\n\r\n let [cu1, paramF1] = arr1;\r\n let [cu2, paramF2] = arr2;\r\n\r\n let es1 = new PromptEntityResult();\r\n es1.Entity = cu1;\r\n es1.Point = enRes1.Point;\r\n\r\n let es2 = new PromptEntityResult();\r\n es2.Entity = cu2;\r\n es2.Point = enRes2.Point;\r\n\r\n let fres = this.Fillet(es1, es2);\r\n if (fres)\r\n {\r\n let cus: Curve[] = [];\r\n\r\n let isFirst = false;\r\n\r\n if (fres.cu1)\r\n {\r\n if (enRes1.Entity instanceof Polyline)\r\n {\r\n isFirst = true;\r\n let pln = enRes1.Entity.Clone();\r\n pln.DigestionCloseMark();\r\n\r\n if (fres.cu1 instanceof Arc)\r\n pln.SetBulgeAt(paramF1, fres.cu1.Bul);\r\n\r\n if (fres.cu1Extend === ExtendType.End)\r\n {\r\n pln.LineData.splice(paramF1 + 2);\r\n\r\n let ep = AsVector2(fres.cu1.EndPoint.applyMatrix4(pln.OCSInv));\r\n pln.SetPointAt(paramF1 + 1, ep);\r\n }\r\n else\r\n {\r\n pln.LineData.splice(0, paramF1);\r\n let sp = AsVector2(fres.cu1.StartPoint.applyMatrix4(pln.OCSInv));\r\n pln.SetPointAt(0, sp);\r\n }\r\n\r\n cus.push(pln);\r\n }\r\n else if (!enRes1.IsCircle)\r\n cus.push(fres.cu1);\r\n }\r\n\r\n if (fres.arc)\r\n cus.push(fres.arc);\r\n\r\n if (fres.cu2)\r\n {\r\n if (enRes2.Entity instanceof Polyline)\r\n {\r\n let pln = enRes2.Entity.Clone();\r\n pln.DigestionCloseMark();\r\n\r\n if (fres.cu2 instanceof Arc)\r\n pln.SetBulgeAt(paramF2, fres.cu2.Bul);\r\n\r\n if (fres.cu2Extend === ExtendType.End)\r\n {\r\n pln.LineData.splice(paramF2 + 2);\r\n\r\n let ep = AsVector2(fres.cu2.EndPoint.applyMatrix4(pln.OCSInv));\r\n pln.SetPointAt(paramF2 + 1, ep);\r\n }\r\n else\r\n {\r\n pln.LineData.splice(0, paramF2);\r\n let sp = AsVector2(fres.cu2.StartPoint.applyMatrix4(pln.OCSInv));\r\n pln.SetPointAt(0, sp);\r\n }\r\n\r\n cus.push(pln);\r\n cus.reverse();\r\n }\r\n else if (!enRes2.IsCircle)\r\n cus.push(fres.cu2);\r\n }\r\n\r\n if (cus.length > 0)\r\n {\r\n let pl = cus[0] as Polyline;\r\n if (!(pl instanceof Polyline))\r\n return;\r\n\r\n for (let i = 1; i < cus.length; i++)\r\n pl.Join(cus[i]);\r\n\r\n if (isFirst)\r\n return { cu1: pl };\r\n else\r\n return { cu2: pl };\r\n }\r\n\r\n }\r\n\r\n return undefined;\r\n }\r\n\r\n FilletPolyLineAllAngular(enRes1: PromptEntityResult): FilletRes\r\n {\r\n let pl = enRes1.Entity as Polyline;\r\n\r\n let cus = pl.Explode();\r\n let count = cus.length;\r\n if (pl.IsClose)\r\n cus.push(cus[0]);\r\n\r\n let ncus = [];\r\n\r\n for (let i = 0; i < count; i++)\r\n {\r\n let c1 = cus[i];\r\n let c2 = cus[i + 1];\r\n\r\n ncus.push(c1);\r\n\r\n if (!c2)\r\n break;\r\n\r\n if (equalv3(c1.GetFistDeriv(1).normalize(), c2.GetFistDeriv(0).normalize()))\r\n continue;\r\n\r\n let es1 = new PromptEntityResult();\r\n es1.Entity = c1;\r\n es1.Point = c1.EndPoint;\r\n\r\n let es2 = new PromptEntityResult();\r\n es2.Entity = c2;\r\n es2.Point = c2.StartPoint;\r\n\r\n let fres = this.Fillet(es1, es2);\r\n if (fres)\r\n {\r\n if (fres.cu1)\r\n c1.CopyFrom(fres.cu1);\r\n if (fres.cu2)\r\n c2.CopyFrom(fres.cu2);\r\n\r\n if (fres.arc)\r\n ncus.push(fres.arc);\r\n }\r\n }\r\n\r\n let pln = pl.Clone();\r\n pln.LineData = [];\r\n pln.ApplyMatrix(pln.OCSInv);\r\n pln.CloseMark = false;\r\n for (let cu of ncus)\r\n pln.Join(cu);\r\n\r\n pln.CloseMark = pl.CloseMark;\r\n\r\n return {\r\n cu1: pln,\r\n cu2: undefined,\r\n arc: undefined\r\n };\r\n }\r\n\r\n FindNearestPt(pts: Vector3[], target: Vector3): Vector3\r\n {\r\n let res = pts[0];\r\n let dis = Infinity;\r\n for (let p of pts)\r\n {\r\n let d = p.distanceTo(target);\r\n if (d < dis)\r\n {\r\n res = p;\r\n dis = d;\r\n }\r\n }\r\n return res;\r\n }\r\n\r\n FilletBoard(brRes: PromptEntityResult, ptRes: PromptPointResult): Polyline | string\r\n {\r\n let br = brRes.Entity as Board;\r\n let brContour = br.ContourCurve.Clone() as Polyline;\r\n\r\n //------1.求交\r\n let brResPt = brRes.Point.clone().applyMatrix4(br.OCSInv).setZ(0);\r\n let ptResPt = ptRes.Point.clone().applyMatrix4(br.OCSInv).setZ(0);\r\n let l = new Line(brResPt, ptResPt);\r\n\r\n let ipts = l.IntersectWith(brContour, IntersectOption.ExtendThis);\r\n\r\n if (ipts.length > 2)//超过2个则有可能有多余交点\r\n //找最近点\r\n ipts = [this.FindNearestPt(ipts, brResPt), this.FindNearestPt(ipts, ptResPt)];\r\n\r\n if (ipts.length !== 2)\r\n return \"倒角失败!交点个数异常.\";\r\n\r\n //------2.倒角\r\n let es1 = new PromptEntityResult(brContour, ipts[0]);\r\n let es2 = new PromptEntityResult(brContour, ipts[1]);\r\n\r\n let res = this.FilletPolyLineSelf(es1, es2);\r\n if (res && res.cu1)\r\n return res.cu1 as Polyline;\r\n else\r\n return \"倒角失败\";\r\n }\r\n\r\n /**\r\n * 平行线倒角\r\n */\r\n private FilletParallelLine(enRes1: PromptEntityResult, enRes2: PromptEntityResult): FilletRes\r\n {\r\n let l1 = enRes1.Entity as Line;\r\n let l2 = enRes2.Entity as Line;\r\n\r\n let l1Derv = l1.GetFistDeriv(0);\r\n if (!isParallelTo(l1Derv, l2.GetFistDeriv(0)))\r\n return;\r\n\r\n let vec = l2.StartPoint.sub(l1.StartPoint);\r\n if (isParallelTo(vec, l1Derv))\r\n return;\r\n\r\n let par1 = l2.GetClosestAtPoint(l1.StartPoint, true).param;\r\n let par2 = l2.GetClosestAtPoint(l1.EndPoint, true).param;\r\n if (!isIntersect2(0, 1, par1, par2))\r\n return;\r\n\r\n let lineClone1 = l1.Clone();\r\n let lineClone2 = l2.Clone();\r\n\r\n let par = l1.GetClosestAtPoint(enRes1.Point, true).param;\r\n\r\n let parFix = Math.round(par);\r\n let ptFix = lineClone1.GetPointAtParam(parFix);\r\n let ptL2Fix = lineClone2.GetClosestAtPoint(ptFix, true).closestPt;\r\n\r\n let cu1Extend = parFix === 0 ? ExtendType.Start : ExtendType.End;\r\n let cu2Extend: ExtendType;\r\n if ((par1 > par2) === (parFix === 1))\r\n {\r\n lineClone2.StartPoint = ptL2Fix;\r\n cu2Extend = ExtendType.Start;\r\n }\r\n else\r\n {\r\n lineClone2.EndPoint = ptL2Fix;\r\n cu2Extend = ExtendType.End;\r\n }\r\n\r\n let radius = ptFix.distanceTo(ptL2Fix) / 2;\r\n if (radius < 1e-3)\r\n return;\r\n\r\n let arcCenter = midPoint(ptFix, ptL2Fix);\r\n\r\n let sv = ptFix.sub(arcCenter);\r\n let ev = ptL2Fix.sub(arcCenter);\r\n\r\n if (parFix === 0)\r\n l1Derv.negate();\r\n\r\n //平面矩阵\r\n let xVec = new Vector3();\r\n let yVec = new Vector3();\r\n let zVec = vec.cross(l1Derv).normalize();\r\n let l1Normal = l1.Normal;\r\n if (isParallelTo(zVec, l1Normal)) zVec = l1Normal;\r\n\r\n Orbit.ComputUpDirection(zVec, yVec, xVec);\r\n let mtx = new Matrix4().makeBasis(xVec, yVec, zVec);\r\n let mtxInv = new Matrix4().getInverse(mtx);\r\n //变换\r\n sv.applyMatrix4(mtxInv);\r\n ev.applyMatrix4(mtxInv);\r\n l1Derv.applyMatrix4(mtxInv);\r\n\r\n let sa = angle(sv);\r\n let ea = angle(ev);\r\n let clockwise = ev.cross(l1Derv).z > 0;\r\n let arc = new Arc(new Vector3(), radius, sa, ea, clockwise);\r\n arc.ApplyMatrix(mtx);\r\n arc.Center = arcCenter;\r\n\r\n return {\r\n cu1: lineClone1,\r\n cu1Extend,\r\n cu2: lineClone2,\r\n cu2Extend,\r\n arc,\r\n };\r\n }\r\n\r\n /**\r\n * 计算圆弧与圆弧没有交点的情况下倒角结果.\r\n * @param enRes1\r\n * @param enRes2\r\n * @returns arc and arc\r\n */\r\n private FilletArcAndArc(enRes1: PromptEntityResult, enRes2: PromptEntityResult): FilletRes\r\n {\r\n let a1 = enRes1.Entity as Arc;\r\n let a2 = enRes2.Entity as Arc;\r\n\r\n let arcO1 = a1.GetOffsetCurves(this.FilletRadius * (a1.IsClockWise ? -1 : 1))[0];\r\n let arcO2 = a2.GetOffsetCurves(this.FilletRadius * (a2.IsClockWise ? -1 : 1))[0];\r\n\r\n // arcO1.ColorIndex = 6;\r\n // arcO2.ColorIndex = 6;\r\n // JigUtils.Draw(arcO1);\r\n // JigUtils.Draw(arcO2);\r\n\r\n //求交\r\n let intPts = arcO1.IntersectWith(arcO2, IntersectOption.ExtendBoth);\r\n if (intPts.length === 0)\r\n return;//无交点无法倒角\r\n\r\n //两选择点的中点\r\n let clickMidp = midPoint(enRes1.Point, enRes2.Point);//用来选择合适的交点\r\n //选择合适的交点\r\n intPts.sort((p1, p2) =>\r\n {\r\n return p1.distanceToSquared(clickMidp) - p2.distanceToSquared(clickMidp);\r\n });\r\n\r\n //圆弧圆心\r\n let narcCenter = intPts[0];\r\n let narcP1 = a1.GetClosestPointTo(narcCenter, true);//两圆弧和相切弧的交点\r\n let narcP2 = a2.GetClosestPointTo(narcCenter, true);\r\n\r\n let tempCircle = new Circle(narcCenter, this.FilletRadius);\r\n tempCircle.OCSNoClone.copy(a1.OCSNoClone).setPosition(narcCenter);\r\n let closestPt = a1.GetClosestPointTo(a2.Center, true);//两曲线距离对方圆心最近的点\r\n let narcMP = tempCircle.GetClosestPointTo(closestPt, false);//相切圆距离closestPt最近的点\r\n\r\n //构造圆弧\r\n let narc = new Arc().ApplyMatrix(a1.OCS).FromThreePoint(narcP1, narcMP, narcP2);\r\n\r\n let a1Clone = a1.Clone();\r\n let a2Clone = a2.Clone();\r\n\r\n let a1Param = a1.GetParamAtPoint(narcP1);\r\n let a2Param = a2.GetParamAtPoint(narcP2);\r\n\r\n let a1Derv = a1.GetFistDeriv(a1Param).normalize();\r\n let a2Derv = a2.GetFistDeriv(a2Param).normalize();\r\n\r\n let narcDerv0 = narc.GetFistDeriv(0).normalize();\r\n let narcDerv1 = narc.GetFistDeriv(1).normalize();\r\n\r\n //裁剪圆弧\r\n if (equalv3(a1Derv, narcDerv0))\r\n a1Clone.EndPoint = narcP1;\r\n else\r\n a1Clone.StartPoint = narcP1;\r\n\r\n if (equalv3(a2Derv, narcDerv1))\r\n a2Clone.StartPoint = narcP2;\r\n else\r\n a2Clone.EndPoint = narcP2;\r\n\r\n return {\r\n cu1: a1Clone,\r\n cu2: a2Clone,\r\n arc: narc\r\n };\r\n }\r\n\r\n /**\r\n * 计算直线与圆弧没有交点(或相切)的情况下倒角结果\r\n * @param enRes1\r\n * @param enRes2\r\n * @returns line and cir\r\n */\r\n private FilletLineAndArc(enMap: (PromptEntityResult[])[], enRes1: PromptEntityResult): FilletRes | undefined\r\n {\r\n let lineRes = enMap[0][0];\r\n let arcRes = enMap[1][0];\r\n\r\n let line = lineRes.Entity as Line;\r\n let arc = arcRes.Entity as Arc;\r\n\r\n let dir = GetPointAtCurveDir(line, arc.Center);\r\n\r\n let lineO = line.GetOffsetCurves(this.FilletRadius * dir)[0];\r\n let arcO = arc.GetOffsetCurves(this.FilletRadius * (arc.IsClockWise ? -1 : 1))[0];// tip:面积逆时针为正, 顺时针为负.\r\n\r\n // lineO.ColorIndex = 6;\r\n // arcO.ColorIndex = 6;\r\n // JigUtils.Draw(lineO);\r\n // JigUtils.Draw(arcO);\r\n\r\n //求交\r\n let intPts = lineO.IntersectWith(arcO, IntersectOption.ExtendBoth);\r\n if (intPts.length === 0)\r\n return;//无交点无法倒角\r\n\r\n //两选择点的中点\r\n let clickMidp = midPoint(lineRes.Point, arcRes.Point);\r\n //选择适合的交点。\r\n intPts.sort((p1, p2) =>\r\n {\r\n return p1.distanceToSquared(clickMidp) - p2.distanceToSquared(clickMidp);\r\n });\r\n //圆弧圆心\r\n let arcCenter = intPts[0];\r\n\r\n let arcP1 = line.GetClosestPointTo(arcCenter, true);//直线与相切圆的交点\r\n let arcP2 = arc.GetClosestPointTo(arcCenter, true);//圆弧与相切圆的交点\r\n\r\n let tempCircle = new Circle(arcCenter, this.FilletRadius);\r\n tempCircle.OCSNoClone.copy(arc.OCSNoClone).setPosition(arcCenter);\r\n let { closestPt, param } = line.GetClosestAtPoint(arc.Center, true);\r\n let arcMP = tempCircle.GetClosestPointTo(closestPt, false);\r\n\r\n //构造圆弧\r\n let narc = new Arc().ApplyMatrix(arc.OCS).FromThreePoint(arcP1, arcMP, arcP2);\r\n\r\n //裁剪线\r\n let lineClone = line.Clone();\r\n let arcClone = arc.Clone();\r\n\r\n let lineExtend: ExtendType;\r\n let p1Param = line.GetParamAtPoint(arcP1);\r\n if (p1Param > param)\r\n {\r\n lineClone.StartPoint = arcP1;\r\n lineExtend = ExtendType.Start;\r\n }\r\n else\r\n {\r\n lineClone.EndPoint = arcP1;\r\n lineExtend = ExtendType.End;\r\n }\r\n\r\n //裁剪圆弧\r\n let arcParam = arc.GetParamAtPoint(arcP2);\r\n let arcDerv = arc.GetFistDeriv(arcParam).normalize();\r\n let narcDerv = narc.GetFistDeriv(1).normalize();\r\n\r\n let arcExtend: ExtendType;\r\n if (equalv3(arcDerv, narcDerv))\r\n {\r\n arcClone.StartPoint = arcP2;\r\n arcExtend = ExtendType.Start;\r\n }\r\n else\r\n {\r\n arcClone.EndPoint = arcP2;\r\n arcExtend = ExtendType.End;\r\n }\r\n\r\n //先选直线为真\r\n if (enRes1.Entity === line)\r\n return {\r\n cu1: lineClone,\r\n cu1Extend: lineExtend,\r\n cu2: arcClone,\r\n cu2Extend: arcExtend,\r\n arc: narc\r\n };\r\n else\r\n return {\r\n cu1: arcClone,\r\n cu1Extend: arcExtend,\r\n cu2: lineClone,\r\n cu2Extend: lineExtend,\r\n arc: narc.Reverse()//#I3BWIA 避免起点和终点方向相反导致的多段线连接错误\r\n };\r\n }\r\n\r\n //获得两曲线的交点,并且排序交点.\r\n private GetIntersectAndSort(enRes: PromptEntityResult, enRes2: PromptEntityResult, enType: number, enMap: PromptEntityResult[][])\r\n {\r\n let interPts = enRes.Entity.IntersectWith(enRes2.Entity, IntersectOption.ExtendBoth);\r\n if (interPts.length > 1)\r\n {\r\n let baseP: Vector3;\r\n if (enType & 1) //如果有直线,那么用直线\r\n baseP = enMap[0][0].Point;\r\n else if (enType === 2) //如果都是圆弧,那么取中点\r\n baseP = midPoint(enMap[1][0].Point, enMap[1][1].Point);\r\n interPts.sort((p1, p2) => p1.distanceToSquared(baseP) - p2.distanceToSquared(baseP));\r\n }\r\n return interPts;\r\n }\r\n\r\n /**\r\n * 对图元列表进行按位编码,类型映射如下:\r\n * # 1:line 2:arc 4:polyline\r\n * @param enRes\r\n * @param enRes2\r\n * @returns\r\n */\r\n private EnCode(enRes: PromptEntityResult, enRes2: PromptEntityResult)\r\n {\r\n let enMap: (PromptEntityResult[])[] = [[], [], [], [], []];\r\n let enType = 0;\r\n enType |= Encode(enRes, enMap);\r\n enType |= Encode(enRes2, enMap);\r\n return { enType, enMap };\r\n }\r\n\r\n //计算曲线在相交处的切线,取真实的切线\r\n private ComputerDerv(cuRes: CurveExtend, dervSum: Vector3)\r\n {\r\n let derv: Vector3;\r\n let cu = cuRes.Curve;\r\n if (cuRes.ExtType === ExtendType.Start)\r\n {\r\n derv = cu.GetFistDeriv(0).normalize();\r\n dervSum.add(derv);\r\n }\r\n else\r\n {\r\n derv = cu.GetFistDeriv(cu.EndParam).normalize();\r\n dervSum.add(derv.clone().negate());\r\n }\r\n return derv;\r\n }\r\n\r\n // 计算曲线在相交处的切线,取起点到终点的切线.(当曲线相切时调用此方法.)\r\n private ComputerDerv2(cuRes: CurveExtend, dervSum: Vector3)\r\n {\r\n let cu = cuRes.Curve;\r\n let derv = cu.EndPoint.sub(cu.StartPoint);\r\n if (cuRes.ExtType === ExtendType.Start)\r\n dervSum.add(derv);\r\n else\r\n dervSum.add(derv.clone().negate());\r\n return derv;\r\n }\r\n\r\n // 延伸或者裁剪到指定的圆弧的点.\r\n private ExtendPt(cu: CurveExtend, newP: Vector3)\r\n {\r\n if (cu.ExtType === ExtendType.Start)\r\n cu.Curve.StartPoint = newP;\r\n else\r\n cu.Curve.EndPoint = newP;\r\n }\r\n\r\n /**\r\n * 切割或者延伸曲线,尖角化\r\n *\r\n * @param cu 处理的曲线\r\n * @param interPt 原先的相交点\r\n * @param pickPoint 鼠标点击点\r\n * @returns 返回新的曲线\r\n */\r\n private SplitCurve(enRes: PromptEntityResult, interPt: Vector3, interPts: Vector3[]): CurveExtend\r\n {\r\n let cu = enRes.Entity as Curve;\r\n let pickPoint = enRes.Point;\r\n\r\n let cp = cu.GetClosestPointTo(pickPoint, false);\r\n let cus = cu.GetSplitCurvesByPts([interPt]);\r\n if (cus.length === 0)\r\n cus.push(cu.Clone() as Curve);\r\n else if (cus.length === 2)\r\n cus.sort((c1: Curve, c2: Curve) =>\r\n {\r\n return c1.GetClosestPointTo(cp, false).distanceTo(cp)\r\n < c2.GetClosestPointTo(cp, false).distanceTo(cp) ? -1 : 1;\r\n });\r\n\r\n let exType = undefined;\r\n\r\n let newCu = cus[0];\r\n if (newCu instanceof Line || newCu.constructor.name === \"RoomWallLine\")\r\n newCu.Extend(newCu.GetParamAtPoint(interPt));//延伸到需要的长度\r\n else if (newCu instanceof Arc || newCu.constructor.name === \"RoomWallArc\")\r\n {\r\n let arc = newCu as Arc;\r\n if (cus.length === 1)\r\n if (!cu.PtOnCurve(interPt))\r\n {\r\n if (cu.PtOnCurve(interPts[1]))\r\n {\r\n //交点参数\r\n let iparam = arc.GetParamAtPoint(interPts[1]);\r\n let pickParam = arc.GetParamAtAngle(arc.GetAngleAtPoint(pickPoint));\r\n\r\n if (pickParam > iparam)\r\n {\r\n arc.EndAngle = arc.GetAngleAtPoint(interPt);\r\n exType = ExtendType.End;\r\n }\r\n else\r\n {\r\n arc.StartAngle = arc.GetAngleAtPoint(interPt);\r\n exType = ExtendType.Start;\r\n }\r\n }\r\n else\r\n {\r\n //终点,起点\r\n interPts = interPts.sort((p1, p2) =>\r\n {\r\n return arc.ComputeAnlge(arc.GetAngleAtPoint(p1)) - arc.ComputeAnlge(arc.GetAngleAtPoint(p2));\r\n });\r\n if (interPt === interPts[0])\r\n {\r\n arc.EndAngle = arc.GetAngleAtPoint(interPt);\r\n exType = ExtendType.End;\r\n }\r\n else\r\n {\r\n arc.StartAngle = arc.GetAngleAtPoint(interPt);\r\n exType = ExtendType.Start;\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (exType === undefined)\r\n {\r\n //使用equalv3时由于精度误差导致的判断错误\r\n if (interPt.manhattanDistanceTo(newCu.StartPoint) < interPt.manhattanDistanceTo(newCu.EndPoint))\r\n exType = ExtendType.Start;\r\n else\r\n exType = ExtendType.End;\r\n }\r\n return { Curve: newCu, ExtType: exType };\r\n }\r\n\r\n}\r\n","import { FilletUtils } from \"../../../Add-on/FilletUtils\";\r\nimport { UpdateDraw } from \"../../../Common/Status\";\r\nimport { FixIndex } from \"../../../Common/Utils\";\r\nimport { PromptEntityResult } from \"../../../Editor/PromptResult\";\r\nimport { Factory } from \"../../CADFactory\";\r\nimport { CADFiler } from \"../../CADFiler\";\r\nimport { Board, I2DModeling } from \"../../Entity/Board\";\r\nimport { Circle } from \"../../Entity/Circle\";\r\nimport { ExtrudeContourCurve, ExtrudeSolid } from \"../../Entity/Extrude\";\r\nimport { Polyline } from \"../../Entity/Polyline\";\r\nimport { ObjectId } from \"../../ObjectId\";\r\nimport { TemplateAction } from \"./TemplateAction\";\r\n\r\nexport interface IGrooveFillet\r\n{\r\n Index: number;\r\n ArcParams: number[];\r\n}\r\n\r\ninterface IFilletcActionData\r\n{\r\n Entity: ObjectId;\r\n ArcParams: number[];\r\n Grooves?: IGrooveFillet[];\r\n Path2D?: IGrooveFillet[];\r\n}\r\n\r\n@Factory\r\nexport class TemplateFilletAction extends TemplateAction\r\n{\r\n\r\n FilletDatas: IFilletcActionData[] = [];\r\n\r\n constructor()\r\n {\r\n super();\r\n }\r\n\r\n protected _Update(paramDiff: number, newValue: number)\r\n {\r\n for (let d of this.FilletDatas)\r\n {\r\n if (d.Entity?.IsErase !== false)\r\n continue;\r\n\r\n let br = d.Entity.Object as Board;\r\n let update_bak = br.AutoUpdate;\r\n br.AutoUpdate = false;\r\n if (d.ArcParams.length > 0)\r\n this.Fillet(br, newValue, d);\r\n\r\n if (br.Grooves.length > 0 && d.Grooves?.length)\r\n {\r\n for (let data of d.Grooves)\r\n {\r\n const groove = br.Grooves[data.Index];\r\n if (groove)\r\n this.Fillet(groove, newValue, data);\r\n }\r\n }\r\n\r\n const path2d = br.Modeling2D;\r\n if (path2d.length > 0 && d.Path2D?.length)\r\n {\r\n for (let data of d.Path2D)\r\n {\r\n let vm = path2d[data.Index];\r\n if (vm)\r\n {\r\n this.Fillet(vm, newValue, data);\r\n }\r\n }\r\n br._2D3DPathObject = null;\r\n }\r\n\r\n br.AutoUpdate = update_bak;\r\n br.Update(UpdateDraw.Geometry);\r\n }\r\n }\r\n private Fillet(br: ExtrudeSolid | I2DModeling, newValue: number, d: { ArcParams: number[]; })\r\n {\r\n let cu = br instanceof ExtrudeSolid ? br.ContourCurve : br.path;\r\n if (cu instanceof Circle)\r\n return;\r\n\r\n let fillet = new FilletUtils();\r\n fillet.FilletRadius = Math.max(newValue, 0.1);\r\n\r\n let cuOld = cu as Polyline;\r\n for (let arcParam of d.ArcParams)\r\n {\r\n let param1 = FixIndex(arcParam - 1, cu.EndParam);\r\n let param2 = FixIndex(arcParam + 1, cu.EndParam);\r\n let p1 = cu.GetPointAtParam(param1);\r\n let p2 = cu.GetPointAtParam(param2);\r\n\r\n let res1 = new PromptEntityResult(cu, p1);\r\n let res2 = new PromptEntityResult(cu, p2);\r\n\r\n let fres = fillet.FilletPolyLineSelf(res1, res2);\r\n if (fres)\r\n cu = fres.cu1 as ExtrudeContourCurve;\r\n }\r\n\r\n if (br instanceof ExtrudeSolid)\r\n {\r\n if (cu !== cuOld)\r\n br.ContourCurve = cu;\r\n }\r\n else\r\n {\r\n if (cu !== cuOld)\r\n br.path = cu as Polyline;\r\n }\r\n }\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 super.ReadFile(file);\r\n this.FilletDatas.length = 0;\r\n if (ver === 1)\r\n {\r\n let id = file.ReadObjectId();\r\n let param1 = file.Read();\r\n let param2 = file.Read();\r\n let arcParam: number = param2 !== 0 ? param2 - 1 : param1 + 1;\r\n this.FilletDatas.push({ Entity: id, ArcParams: [arcParam] });\r\n }\r\n else\r\n {\r\n let count = file.Read();\r\n for (let i = 0; i < count; i++)\r\n {\r\n let id = file.ReadObjectId();\r\n let params: number[] = [];\r\n let parCount = file.Read();\r\n for (let i = 0; i < parCount; i++)\r\n params.push(file.Read());\r\n\r\n const groove = [];\r\n const path2d = [];\r\n if (ver >= 3)\r\n {\r\n const grooveCount = file.Read();\r\n for (let i = 0; i < grooveCount; i++)\r\n {\r\n let data: IGrooveFillet = {\r\n Index: undefined,\r\n ArcParams: [],\r\n };\r\n data.Index = file.Read();\r\n let parCount = file.Read();\r\n for (let j = 0; j < parCount; j++)\r\n data.ArcParams.push(file.Read());\r\n groove.push(data);\r\n }\r\n\r\n const path2DCount = file.Read();\r\n for (let i = 0; i < path2DCount; i++)\r\n {\r\n let data: IGrooveFillet = {\r\n Index: undefined,\r\n ArcParams: [],\r\n };\r\n data.Index = file.Read();\r\n let parCount = file.Read();\r\n for (let j = 0; j < parCount; j++)\r\n data.ArcParams.push(file.Read());\r\n path2d.push(data);\r\n }\r\n }\r\n\r\n if (id)\r\n this.FilletDatas.push({ Entity: id, ArcParams: params, Grooves: groove, Path2D: path2d });\r\n }\r\n }\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(3);\r\n super.WriteFile(file);\r\n file.Write(this.FilletDatas.length);\r\n for (let d of this.FilletDatas)\r\n {\r\n file.WriteObjectId(d.Entity);\r\n file.Write(d.ArcParams.length);\r\n for (let param of d.ArcParams)\r\n file.Write(param);\r\n\r\n file.Write(d.Grooves ? d.Grooves.length : 0);\r\n for (let data of (d.Grooves ?? []))\r\n {\r\n file.Write(data.Index);\r\n file.Write(data.ArcParams.length);\r\n for (let par of data.ArcParams)\r\n file.Write(par);\r\n }\r\n file.Write(d.Path2D ? d.Path2D.length : 0);\r\n for (let data of (d.Path2D ?? []))\r\n {\r\n file.Write(data.Index);\r\n file.Write(data.ArcParams.length);\r\n for (let par of data.ArcParams)\r\n file.Write(par);\r\n }\r\n }\r\n }\r\n}\r\n","import { EBoardKeyList } from '../../Common/BoardKeyList';\r\nimport { Board } from '../../DatabaseServices/Entity/Board';\r\nimport { PhysicalMaterialRecord } from '../../DatabaseServices/PhysicalMaterialRecord';\r\n\r\n\r\nexport function ApplyGoodInfo(en: Board, material: PhysicalMaterialRecord)\r\n{\r\n en.BoardProcessOption[EBoardKeyList.BrMat] = material.GoodsInfo.name;\r\n en.BoardProcessOption[EBoardKeyList.Color] = material.GoodsInfo.color;\r\n en.BoardProcessOption[EBoardKeyList.Mat] = material.GoodsInfo.material;\r\n}\r\n","import { ApplyGoodInfo } from \"../../../UI/Components/ApplyGoodInfo\";\r\nimport { Factory } from \"../../CADFactory\";\r\nimport { CADFiler } from \"../../CADFiler\";\r\nimport { Board } from \"../../Entity/Board\";\r\nimport { Entity } from \"../../Entity/Entity\";\r\nimport { HardwareCompositeEntity } from \"../../Hardware/HardwareCompositeEntity\";\r\nimport { ObjectId } from \"../../ObjectId\";\r\nimport { TemplateAction } from \"./TemplateAction\";\r\n\r\n@Factory\r\nexport class TemplateMaterialAction extends TemplateAction\r\n{\r\n\r\n constructor(\r\n public Entitys: ObjectId[] = [],\r\n public CompositeEntitys: [ObjectId, number[]][] = [],\r\n public ApplyGoodInfo = true,//应用板材信息\r\n )\r\n {\r\n super();\r\n }\r\n\r\n protected override _Update(paramDiff: number)\r\n {\r\n if (!this.parent.MaterialValue) return;\r\n\r\n for (let id of this.Entitys)\r\n {\r\n if (!(id?.Object) || id.IsErase) continue;\r\n\r\n let en = id.Object;\r\n if (this.ApplyGoodInfo && en instanceof Board)\r\n ApplyGoodInfo(en, this.parent.MaterialValue);\r\n\r\n en.Material = this.parent.MaterialValue.Id;\r\n }\r\n\r\n for (let [id, indexs] of this.CompositeEntitys)\r\n {\r\n if (!(id?.Object) || id.IsErase) continue;\r\n\r\n let en = id.Object as HardwareCompositeEntity;\r\n\r\n let allEntitys: Entity[] = [];\r\n const GetAllEntitys = (hard: HardwareCompositeEntity) =>\r\n {\r\n for (let e of hard.Entitys)\r\n {\r\n if (e instanceof HardwareCompositeEntity)\r\n GetAllEntitys(e);\r\n else\r\n allEntitys.push(e);\r\n }\r\n };\r\n\r\n GetAllEntitys(en);\r\n\r\n for (let index of indexs)\r\n {\r\n let subE = allEntitys[index];\r\n if (!subE) continue;\r\n\r\n if (this.ApplyGoodInfo && subE instanceof Board)\r\n ApplyGoodInfo(subE, this.parent.MaterialValue);\r\n\r\n subE.Material = this.parent.MaterialValue.Id;\r\n }\r\n }\r\n }\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 super.ReadFile(file);\r\n this.ApplyGoodInfo = file.Read() === 1;\r\n this.Entitys.length = 0;\r\n let count = file.Read();\r\n for (let i = 0; i < count; i++)\r\n {\r\n let id = file.ReadObjectId() as ObjectId;\r\n if (id) this.Entitys.push(id);\r\n }\r\n\r\n if (ver > 1)\r\n {\r\n count = file.Read();\r\n this.CompositeEntitys.length = 0;\r\n for (let i = 0; i < count; i++)\r\n {\r\n let id = file.ReadObjectId() as ObjectId;\r\n let indexs = file.Read();\r\n this.CompositeEntitys.push([id, indexs]);\r\n }\r\n }\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(2);\r\n super.WriteFile(file);\r\n file.Write(this.ApplyGoodInfo ? 1 : 0);\r\n file.Write(this.Entitys.length);\r\n for (let ent of this.Entitys)\r\n file.WriteObjectId(ent);\r\n\r\n file.Write(this.CompositeEntitys.length);\r\n for (let [id, indexs] of this.CompositeEntitys)\r\n {\r\n file.WriteObjectId(id);\r\n file.Write(indexs.concat());\r\n }\r\n }\r\n}\r\n","\r\n/**\r\n * 模版参数类型\r\n */\r\nexport enum TemplateParamType\r\n{\r\n String = 0,\r\n Float = 1,\r\n Int = 2,\r\n Enum = 3,\r\n Material = 4,\r\n}\r\n","import { eval2 } from \"../../../Common/eval\";\r\nimport { equaln } from \"../../../Geometry/GeUtils\";\r\nimport { AutoRecord, ISPROXYKEY } from \"../../AutoRecord\";\r\nimport { Factory } from \"../../CADFactory\";\r\nimport { CADFiler } from \"../../CADFiler\";\r\nimport { PhysicalMaterialRecord } from \"../../PhysicalMaterialRecord\";\r\nimport { TemplateAction } from \"../Action/TemplateAction\";\r\nimport { TemplateFilletAction } from \"../Action/TemplateFilletAction\";\r\nimport { TemplateMaterialAction } from \"../Action/TemplateMaterialAction\";\r\nimport { TemplateRecord } from \"../TemplateRecord\";\r\nimport { TemplateParamType } from \"./TemplateParamType\";\r\n\r\n/**\r\n * 模版参数\r\n */\r\n@Factory\r\nexport class TemplateParam\r\n{\r\n /**\r\n * 变量名称\r\n * 命名规范(同js) 并且 禁止前缀`_`,`$`.\r\n */\r\n @AutoRecord name: string;\r\n /** 表达式 使用js引起求值(暂时) */\r\n @AutoRecord expr: string | number = \"\";\r\n /**\r\n * 设置参数的值,通常在模版设计中可以这么干\r\n * 如果需要更新参数的动作,那么应该调用 UpdateParam\r\n */\r\n @AutoRecord value: string | number;\r\n @AutoRecord default: string | number;\r\n @AutoRecord description: string;\r\n @AutoRecord type: TemplateParamType = TemplateParamType.Float;\r\n @AutoRecord min: number;\r\n @AutoRecord max: number;\r\n //可选值\r\n @AutoRecord option: any[];\r\n @AutoRecord actions: TemplateAction[];\r\n @AutoRecord parent: TemplateRecord;\r\n @AutoRecord isLock = false;\r\n\r\n //当类型为Material时,从酷家乐导入后,将载入材质赋值在这里\r\n MaterialValue: PhysicalMaterialRecord;\r\n\r\n constructor()\r\n {\r\n //监听\r\n this.actions = 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 if (value instanceof TemplateAction)\r\n value.parent = this;\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 else\r\n return Reflect.get(target, key, receiver);\r\n }\r\n });\r\n }\r\n WriteAllObjectRecord()\r\n {\r\n if (this.parent)\r\n this.parent.WriteAllObjectRecord();\r\n }\r\n\r\n /**\r\n * private:仅供内部调用.\r\n * 更新参数值,并且触发动作.\r\n */\r\n UpdateParam(value: string | number)\r\n {\r\n switch (this.type)\r\n {\r\n case TemplateParamType.String:\r\n break;\r\n case TemplateParamType.Float:\r\n let oldV = this.value as number;\r\n let newV = value as number;\r\n if (!equaln(oldV, newV))\r\n {\r\n this.WriteAllObjectRecord();\r\n this.value = newV;\r\n\r\n let diff = newV - oldV;\r\n for (let a of this.actions)\r\n a.Update(diff, newV);\r\n }\r\n else\r\n {\r\n for (let a of this.actions)\r\n {\r\n if (a instanceof TemplateFilletAction)\r\n a.Update(0, newV);\r\n }\r\n }\r\n break;\r\n case TemplateParamType.Int:\r\n break;\r\n case TemplateParamType.Enum:\r\n break;\r\n case TemplateParamType.Material:\r\n {\r\n if (this.MaterialValue)\r\n {\r\n for (let a of this.actions)\r\n a.Update(0, 0);\r\n }\r\n this.MaterialValue = undefined;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * 计算表达式的值并更新\r\n * @param vardefines 变量定义列表\r\n * @param paramMap 所有的参数列表.(可能我们需要依赖更新它)\r\n */\r\n EvalUpdate(vardefines: Object, paramMap: Map, evaled: Set, update = true): number\r\n {\r\n if (this.type === TemplateParamType.Material)\r\n {\r\n if (update && this.MaterialValue)\r\n {\r\n for (let a of this.actions)\r\n {\r\n if (a instanceof TemplateMaterialAction)\r\n a.Update(0, this.value);\r\n }\r\n this.MaterialValue = undefined;\r\n }\r\n return 0;\r\n }\r\n\r\n if (this.expr === \"\")\r\n {\r\n if (update)\r\n {\r\n for (let a of this.actions)\r\n {\r\n if (a instanceof TemplateFilletAction)\r\n a.Update(0, this.value);\r\n }\r\n }\r\n return this.value as number;\r\n }\r\n if (evaled.has(this)) return this.value as number;\r\n\r\n if (update)\r\n evaled.add(this);\r\n\r\n let value = parseFloat(this.expr as string);\r\n if (isNaN(this.expr as number))\r\n {\r\n //依赖收集 提前更新\r\n let keywords = (this.expr).split(/[\\s(){}=+-/*/,%;]/).filter(s => s.length > 0);\r\n for (let key of keywords)\r\n {\r\n if (key !== this.name && paramMap.has(key))\r\n vardefines[key] = paramMap.get(key).EvalUpdate(vardefines, paramMap, evaled, update);\r\n }\r\n\r\n try\r\n {\r\n value = eval2(this.expr as string, vardefines);\r\n }\r\n catch (error)\r\n {\r\n console.log(\"更新失败:\", error);\r\n return this.value as number;\r\n }\r\n }\r\n else if (update)\r\n this.expr = \"\";\r\n\r\n vardefines[this.name] = value;\r\n\r\n if (update)\r\n this.UpdateParam(value);\r\n\r\n return value;\r\n }\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 this.name = file.Read();\r\n this.expr = file.Read();\r\n this.value = file.Read();\r\n this.default = file.Read();\r\n this.description = file.Read();\r\n this.type = file.Read();\r\n this.min = file.Read();\r\n this.max = file.Read();\r\n this.option = file.Read();\r\n let count = file.Read();\r\n this.actions.length = 0;\r\n for (let i = 0; i < count; i++)\r\n this.actions.push(file.ReadObject());\r\n\r\n if (ver > 1)\r\n this.isLock = file.Read();\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(2);\r\n file.Write(this.name);\r\n file.Write(this.expr);\r\n file.Write(this.value);\r\n file.Write(this.default);\r\n file.Write(this.description);\r\n file.Write(this.type);\r\n file.Write(this.min);\r\n file.Write(this.max);\r\n file.Write(this.option);\r\n file.Write(this.actions.length);\r\n for (let action of this.actions)\r\n file.WriteObject(action);\r\n\r\n file.Write(this.isLock);\r\n }\r\n}\r\n","import { Ray, Vector3 } from \"three\";\r\nimport { arrayLast } from \"../../Common/ArrayExt\";\r\nimport { ConverBoardTypeToSpaceType } from \"../../DatabaseServices/Entity/Board\";\r\nimport { PromptDistendResult, PromptStatus } from \"../../Editor/PromptResult\";\r\nimport { BoardType } from \"../../UI/Store/BoardInterface\";\r\nimport { Box3Ext, SplitType } from \"../Box\";\r\nimport { ISpaceParse } from \"./ISpaceParse\";\r\n\r\n/**\r\n * 夹层空间分析\r\n */\r\nexport class ClampSpaceParse extends ISpaceParse\r\n{\r\n async Parse()\r\n {\r\n if (this.Boards.length === 1)\r\n {\r\n await this.ParseSignalBoard();\r\n return;\r\n }\r\n\r\n //夹层空间\r\n let clampBoxs: Box3Ext[] = [];\r\n //单层空间(用于切割)\r\n let spliteBoxs = new Map();\r\n for (let [boardType, boards] of this.BoardMap)\r\n {\r\n let splitType: SplitType = ConverBoardTypeToSpaceType(boardType);\r\n let boardBoxCol = this.ParseBoardBox(boards, splitType);\r\n\r\n //#IWFYY\r\n if (boardType === BoardType.Behind && this.BoardMap.size > 1 && boardBoxCol.length > 1)\r\n {\r\n let clampBox = boardBoxCol[0].clampSpace(boardBoxCol[1], splitType);\r\n let size = clampBox.getSize(new Vector3());\r\n if (size.y > 2440)\r\n boardBoxCol = [arrayLast(boardBoxCol)];\r\n }\r\n\r\n if (boardBoxCol.length > 1)\r\n {\r\n let clampBox = boardBoxCol[0].clampSpace(arrayLast(boardBoxCol), splitType);\r\n if (clampBox.isSolid())\r\n clampBoxs.push(clampBox);\r\n }\r\n else if (boardBoxCol.length === 1)\r\n {\r\n spliteBoxs.set(splitType, boardBoxCol[0]);\r\n }\r\n }\r\n\r\n //归并盒子\r\n let allSpaceBox: Box3Ext;\r\n if (clampBoxs.length === 0)//如果不存在盒子,拿所有的盒子当空间\r\n {\r\n allSpaceBox = new Box3Ext();\r\n spliteBoxs.forEach((box) => { allSpaceBox.union(box); });\r\n }\r\n else//夹层空间合并\r\n {\r\n allSpaceBox = clampBoxs[0];\r\n for (let i = 1, len = clampBoxs.length; i < len; i++)\r\n allSpaceBox.intersect(clampBoxs[i]);\r\n }\r\n\r\n //切割并选择合适的空间\r\n await this.SpliteBoxsAndSelect(allSpaceBox, spliteBoxs);\r\n if (this.SpaceBox && this.SpaceBox.isSolid())\r\n {\r\n //空间延伸到背板\r\n let behindBox = spliteBoxs.get(SplitType.Y);\r\n if (behindBox && behindBox.min.y > this.SpaceBox.min.y)\r\n this.SpaceBox.max.setY(behindBox.min.y);\r\n\r\n this.ParseOK = true;\r\n }\r\n }\r\n\r\n /**\r\n * 单板延伸空间的时候的延伸距离\r\n */\r\n get SignalDist()\r\n {\r\n return this._signalDist;\r\n }\r\n protected _signalDist: number;\r\n\r\n async ParseSignalBoard()\r\n {\r\n let res = await this.GetSignalDist();\r\n if (res.Status === PromptStatus.OK && res.Distance > 0)\r\n {\r\n let dist = res.Distance;\r\n this._signalDist = dist;\r\n\r\n let br = this.Boards[0];\r\n let box = br.GetBoundingBoxInMtx(this.SpaceOCSInv);\r\n\r\n let type = this.GetBoardInSpaceType(br);\r\n if (type === undefined)//暂时不支持斜空间\r\n {\r\n //暂时不支持\r\n this.ParseOK = false;\r\n return;\r\n }\r\n\r\n let splitType: SplitType = ConverBoardTypeToSpaceType(type);\r\n\r\n let p1 = box.min.clone().setComponent(splitType, box.min.getComponent(splitType) - dist);\r\n let p2 = box.max.clone().setComponent(splitType, box.min.getComponent(splitType));\r\n\r\n let p3 = box.min.clone().setComponent(splitType, box.max.getComponent(splitType));\r\n let p4 = box.max.clone().setComponent(splitType, box.max.getComponent(splitType) + dist);\r\n\r\n let boxs = [new Box3Ext().setFromPoints([p1, p2]), new Box3Ext().setFromPoints([p3, p4])];\r\n\r\n this.SpaceBox = await this.WrapSelectBox(boxs, ConverBoardTypeToSpaceType(br.BoardType));\r\n\r\n if (this.SpaceBox)\r\n this.ParseOK = true;\r\n }\r\n else\r\n this.ParseOK = false;\r\n }\r\n\r\n //virtual (请重载) 指定用户选择单块板的延伸空间\r\n async GetSignalDist(): Promise\r\n {\r\n let res = new PromptDistendResult();\r\n res.Distance = 300;\r\n res.Status = PromptStatus.OK;\r\n return res;\r\n }\r\n\r\n SetRay(ray: Ray)\r\n {\r\n }\r\n\r\n SelectBoxRecord = new Map();\r\n async WrapSelectBox(splitBoxs: Box3Ext[], splitType: SplitType): Promise\r\n {\r\n let box = await this.SelectBox(splitBoxs, splitType);\r\n this.SelectBoxRecord.set(splitType, splitBoxs.indexOf(box));\r\n return box;\r\n }\r\n\r\n /**\r\n * virtual (请重载) 当盒子空间被切割时,选择合适的空间\r\n * @param splitBoxs 切割后的盒子(2个)\r\n * @param splitType 切割类型\r\n * @returns box 盒子\r\n */\r\n async SelectBox(splitBoxs: Box3Ext[], splitType: SplitType): Promise\r\n {\r\n return splitBoxs[0];\r\n }\r\n\r\n /**\r\n *用单块板包围盒切割空间\r\n */\r\n private async SpliteBoxsAndSelect(orgBox: Box3Ext, spliteBoxes: Map)\r\n {\r\n this.SpaceBox = undefined;\r\n if (spliteBoxes.size === 0)\r\n {\r\n this.SpaceBox = orgBox;\r\n return;\r\n }\r\n\r\n for (let [splitType, spBox] of spliteBoxes)\r\n {\r\n let remBoxs: Box3Ext[] = orgBox.substract(spBox, splitType);\r\n if (remBoxs.length === 0)\r\n return undefined;\r\n else if (remBoxs.length === 1)\r\n {\r\n //#IZE2N\r\n if (splitType === SplitType.Y && remBoxs[0].min.y === orgBox.min.y)\r\n continue;\r\n orgBox = remBoxs[0];\r\n }\r\n else\r\n orgBox = await this.WrapSelectBox(remBoxs, splitType);\r\n\r\n if (!orgBox)\r\n return;\r\n\r\n //Left Or Right Board\r\n if (splitType === SplitType.X)\r\n {\r\n if (spBox.min.x < orgBox.min.x)\r\n this.LeftBoard = this.BoardMap.get(BoardType.Vertical)[0];\r\n else\r\n this.RightBoard = this.BoardMap.get(BoardType.Vertical)[0];\r\n }\r\n }\r\n this.SpaceBox = orgBox;\r\n }\r\n}\r\n","import { ClampSpaceParse } from \"./ClampSpaceParse\";\r\nimport { PromptDistendResult, PromptStatus } from \"../../Editor/PromptResult\";\r\nimport { Box3Ext, SplitType } from \"../Box\";\r\n\r\nexport class ClampSpaceParseFix extends ClampSpaceParse\r\n{\r\n set SignalDist(v: number)\r\n {\r\n this._signalDist = v;\r\n }\r\n get SignalDist()\r\n {\r\n return this._signalDist;\r\n }\r\n\r\n //virtual (请重载) 指定用户选择单块板的延伸空间\r\n async GetSignalDist(): Promise\r\n {\r\n let res = new PromptDistendResult();\r\n res.Distance = this._signalDist;\r\n res.Status = PromptStatus.OK;\r\n return res;\r\n }\r\n\r\n async SelectBox(splitBoxs: Box3Ext[], splitType: SplitType): Promise\r\n {\r\n let index = this.SelectBoxRecord.get(splitType);\r\n return splitBoxs[index];\r\n }\r\n}\r\n","import { Matrix4, Vector3 } from \"three\";\r\nimport { Factory } from \"../../CADFactory\";\r\nimport { CADFiler } from \"../../CADFiler\";\r\nimport { ISerialize } from \"../../ISerialize\";\r\nimport { ObjectId } from \"../../ObjectId\";\r\nimport { TemplateRecord } from \"../TemplateRecord\";\r\n\r\nexport interface PositioningParam\r\n{\r\n objects?: ObjectId[];\r\n index?: number;\r\n count?: number;\r\n}\r\n\r\n\r\n/**\r\n * 模版定位信息(基类)\r\n */\r\n@Factory\r\nexport abstract class Positioning implements ISerialize\r\n{\r\n SpaceCS: Matrix4;//空间坐标系\r\n SpaceSize: Vector3;//有可能不存在\r\n\r\n /**\r\n * 定位 (更新 SpaceCS SpaceBox SpaceSize)\r\n */\r\n async Positioning(param?: PositioningParam)\r\n {\r\n }\r\n\r\n //#region file\r\n parent: TemplateRecord;\r\n WriteAllObjectRecord()\r\n {\r\n if (this.parent)\r\n this.parent.WriteAllObjectRecord();\r\n }\r\n\r\n ReadFile(file: CADFiler): void\r\n {\r\n\r\n }\r\n\r\n WriteFile(file: CADFiler): void\r\n {\r\n }\r\n //#endregion\r\n}\r\n","import { arrayClone } from \"../../../Common/ArrayExt\";\r\nimport { Log } from \"../../../Common/Log\";\r\nimport { ClampSpaceParse } from \"../../../Geometry/SpaceParse/ClampSpaceParse\";\r\nimport { ClampSpaceParseFix } from \"../../../Geometry/SpaceParse/ClampSpaceParseFix\";\r\nimport { AutoRecord } from \"../../AutoRecord\";\r\nimport { Factory } from \"../../CADFactory\";\r\nimport { CADFiler } from \"../../CADFiler\";\r\nimport { Board } from \"../../Entity/Board\";\r\nimport { ObjectId } from \"../../ObjectId\";\r\nimport { Positioning, PositioningParam } from \"./Positioning\";\r\n\r\n@Factory\r\nexport class PositioningClampSpace extends Positioning\r\n{\r\n @AutoRecord Objects: ObjectId[] = [];\r\n\r\n //按照 SplitType进行排序 0X 1Y 2Z\r\n @AutoRecord SelectBoxIndex: number[] = [0, 0, 0];//左右下\r\n @AutoRecord SignalDist = 100;//默认为100 防止空\r\n\r\n FromSpaceParse(parse: ClampSpaceParse)\r\n {\r\n this.SignalDist = parse.SignalDist || 100;\r\n this.Objects = parse.Boards.map(br => br.Id);\r\n for (let [splitType, index] of parse.SelectBoxRecord)\r\n this.SelectBoxIndex[splitType] = index;\r\n }\r\n\r\n _SpaceParse: ClampSpaceParseFix;\r\n /**\r\n * 定位\r\n */\r\n async Positioning(param?: PositioningParam)\r\n {\r\n let brs = this.Objects.filter(id => !id.IsErase).map(id => id.Object as Board);\r\n this._SpaceParse = new ClampSpaceParseFix(brs);\r\n for (let i = 0; i < 3; i++)\r\n this._SpaceParse.SelectBoxRecord.set(i, this.SelectBoxIndex[i]);\r\n\r\n this._SpaceParse.SignalDist = this.SignalDist;\r\n\r\n await this._SpaceParse.Parse();\r\n if (this._SpaceParse.ParseOK)\r\n {\r\n this.SpaceCS = this._SpaceParse.DrawCS;\r\n this.SpaceSize = this._SpaceParse.Size;\r\n }\r\n else\r\n {\r\n this.SpaceCS = undefined;\r\n this.SpaceSize = undefined;\r\n Log(\"模块定位错误!\");\r\n }\r\n }\r\n\r\n\r\n //#region File\r\n ReadFile(file: CADFiler): void\r\n {\r\n let ver = file.Read();\r\n let count = file.Read() as number;\r\n this.Objects.length = 0;\r\n for (let i = 0; i < count; i++)\r\n {\r\n let id = file.ReadObjectId();\r\n if (id) this.Objects.push(id);\r\n }\r\n\r\n this.SelectBoxIndex = file.Read();\r\n this.SignalDist = file.Read();\r\n }\r\n\r\n WriteFile(file: CADFiler): void\r\n {\r\n file.Write(1);\r\n file.Write(this.Objects.length);\r\n for (let id of this.Objects)\r\n file.WriteObjectId(id);\r\n\r\n file.Write(arrayClone(this.SelectBoxIndex));\r\n file.Write(this.SignalDist);\r\n }\r\n //#endregion\r\n\r\n}\r\n","import { Positioning } from \"./Positioning\";\r\nimport { Factory } from \"../../CADFactory\";\r\n\r\n/**\r\n * 临时定位\r\n * 在首次绘制时使用2点3点空间时通常不能使用定位,使用临时定位设置给模块后,模块在第一次使用后清空定位.\r\n */\r\n@Factory\r\nexport class PositioningTemporary extends Positioning\r\n{\r\n\r\n}\r\n","\r\n/**\r\n * 模版类型\r\n */\r\nexport enum TemplateType\r\n{\r\n //普通模板\r\n Usual = 0,\r\n //酒格 使用程序\r\n Grid = 1,\r\n //阵列模版\r\n Array = 2,\r\n //没有实体的\r\n Clear = 4,\r\n //展开的\r\n Expanded = 8,\r\n //隐藏的\r\n Hidden = 16,\r\n HiddenChildren = 32,\r\n //标记\r\n Sign = 64,\r\n}\r\n\r\nexport enum TemplateSplitType\r\n{\r\n None = -1,\r\n X = 0,\r\n Y = 1,\r\n Z = 2,\r\n}\r\n","import { Box3, MathUtils, Matrix4, Vector3 } from \"three\";\r\nimport { arrayRemoveOnce } from \"../../Common/ArrayExt\";\r\nimport { Log } from \"../../Common/Log\";\r\nimport { Intent, Toaster } from \"../../Common/Toaster\";\r\nimport { Box3Ext } from \"../../Geometry/Box\";\r\nimport { ISpaceParse } from \"../../Geometry/SpaceParse/ISpaceParse\";\r\nimport { AutoRecord } from \"../AutoRecord\";\r\nimport { Factory } from \"../CADFactory\";\r\nimport { CADFiler } from \"../CADFiler\";\r\nimport { Board } from \"../Entity/Board\";\r\nimport { Entity } from \"../Entity/Entity\";\r\nimport { ObjectId } from \"../ObjectId\";\r\nimport { SymbolTableRecord } from \"../SymbolTableRecord\";\r\nimport { TemplateParam } from \"./Param/TemplateParam\";\r\nimport { TemplateParamType } from \"./Param/TemplateParamType\";\r\nimport { Positioning } from \"./Positioning/Positioning\";\r\nimport { PositioningClampSpace } from \"./Positioning/PositioningClampSpace\";\r\nimport { PositioningTemporary } from \"./Positioning/PositioningTemporary\";\r\nimport { TemplateSplitType, TemplateType } from \"./TemplateType\";\r\n\r\nconst TemplateDefaultParams = [\"L\", \"W\", \"H\", \"PX\", \"PY\", \"PZ\", \"RX\", \"RY\", \"RZ\", \"BH\"];\r\nexport const TempateDefaultParamCount = TemplateDefaultParams.length;\r\n\r\n/**\r\n * ### 模板记录\r\n * 模版与实体总是互相关联的,所以添加实体进入模版的时候,应该保证这个记录已经加入到数据库\r\n *\r\n * 保留参数名称列表: L W H RX RY RZ X Y Z\r\n * 保留参数前缀: _ $\r\n *\r\n * #### 批量修改参数值.\r\n * 程序应该只传入expr的值,(禁止直接编辑value).传入后,交由模版进行计算更新.\r\n * 模版内部消化,决定是否保留expr.(当纯数字将被直接计算成value而不保存expr).\r\n *\r\n * 由于`DIV`变量的计算机制,`LWH`变量将不能依赖同层变量,(这可能会导致一些错误)\r\n *\r\n * 当模块节点处于切割空间内时,如果想重新绑定空间,那么空间树的位置将发生变更(实际上不管是不是在切割空间内,空间位置都可能发生变更)\r\n *\r\n */\r\n@Factory\r\nexport class TemplateRecord extends SymbolTableRecord\r\n{\r\n @AutoRecord Type: TemplateType = TemplateType.Usual;\r\n @AutoRecord SplitType = TemplateSplitType.None;\r\n private _Parent: ObjectId;\r\n @AutoRecord Children: ObjectId[];\r\n @AutoRecord Params: TemplateParam[];\r\n @AutoRecord Objects: ObjectId[];\r\n private _Positioning: Positioning;\r\n\r\n //展开的 这是UI数据我们暂时不序列化它(默认不展开有比较好的显示效果)\r\n isExpanded = false;\r\n\r\n constructor()\r\n {\r\n super();\r\n //监听\r\n this.Params = this.CreateProxyArray(\r\n value =>\r\n {\r\n if (value instanceof TemplateParam)\r\n value.parent = this;\r\n }\r\n );\r\n\r\n this.Objects = this.CreateProxyArray(\r\n value =>\r\n {\r\n if (value instanceof ObjectId && value.Object instanceof Entity)\r\n {\r\n if (!this.Id)\r\n console.warn(\"请先将模版添加到Database后在进行操作!\");\r\n value.Object.Template = this.Id;\r\n }\r\n }\r\n );\r\n\r\n this.Children = this.CreateProxyArray(\r\n value =>\r\n {\r\n if (value instanceof ObjectId && value.Object instanceof TemplateRecord)\r\n {\r\n if (!this.Id)\r\n console.warn(\"请先将模版添加到Database后在进行操作!\");\r\n value.Object.Parent = this.Id;\r\n }\r\n }\r\n );\r\n }\r\n\r\n get Name()\r\n {\r\n return this.name;\r\n }\r\n set Name(name: string)\r\n {\r\n if (name !== this.name)\r\n {\r\n this.WriteAllObjectRecord();\r\n this.name = name;\r\n }\r\n }\r\n\r\n get Parent()\r\n {\r\n return this._Parent;\r\n }\r\n\r\n set Parent(id: ObjectId)\r\n {\r\n if (id !== this._Parent)\r\n {\r\n this.WriteAllObjectRecord();\r\n if (this?._Parent?.Object)\r\n arrayRemoveOnce(((this.Parent.Object)).Children, this.Id);\r\n this._Parent = id;\r\n }\r\n }\r\n\r\n get Root(): TemplateRecord\r\n {\r\n return (this.Parent?.Object)?.Root ?? this;\r\n }\r\n\r\n get IsRoot()\r\n {\r\n return this._Parent === undefined;\r\n }\r\n\r\n get Entitys()\r\n {\r\n return this.Objects.map(o => o.Object as Entity);\r\n }\r\n\r\n get AllEntitys(): Entity[]\r\n {\r\n let entitys: Entity[] = [];\r\n this.Traverse((t) =>\r\n {\r\n for (let o of t.Objects)\r\n {\r\n if (!o.IsErase)\r\n entitys.push(o.Object as Entity);\r\n }\r\n });\r\n return entitys;\r\n }\r\n\r\n GetProperty(p: TemplateType): boolean { return (this.Type & p) !== 0; }\r\n SetProperty(p: TemplateType, v: boolean)\r\n {\r\n if (this.GetProperty(p) === v) return;\r\n if (v)\r\n this.Type |= p;\r\n else\r\n this.Type &= ~p;\r\n }\r\n\r\n get IsClear() { return this.GetProperty(TemplateType.Clear); }\r\n set IsClear(isClear: boolean) { this.SetProperty(TemplateType.Clear, isClear); }\r\n get IsSign() { return this.GetProperty(TemplateType.Sign); }\r\n set IsSign(isSign: boolean) { this.SetProperty(TemplateType.Sign, isSign); }\r\n\r\n get IsHidden() { return this.GetProperty(TemplateType.Hidden); }\r\n set IsHidden(isHidden: boolean) { this.SetProperty(TemplateType.Hidden, isHidden); }\r\n\r\n get IsHiddenChildren() { return this.GetProperty(TemplateType.HiddenChildren); }\r\n set IsHiddenChildren(isHidden: boolean) { this.SetProperty(TemplateType.HiddenChildren, isHidden); }\r\n\r\n Purge()\r\n {\r\n this.Children = this.Children.filter(rc => rc && !rc.IsErase && rc.Object instanceof TemplateRecord);\r\n this.Objects = this.Objects.filter(id => id?.IsErase === false);\r\n }\r\n\r\n Traverse(callback: (arg0: this) => void)\r\n {\r\n callback(this);\r\n for (let c of this.Children)\r\n {\r\n if (c && c.Object)\r\n {\r\n if (c.Object instanceof TemplateRecord)\r\n {\r\n let template = c.Object as TemplateRecord;\r\n template.Traverse(callback);\r\n }\r\n else\r\n {\r\n Toaster({\r\n message: \"模块子实体有个错误,程序已经暂时先忽略了这个错误!\",\r\n timeout: 8000,\r\n intent: Intent.DANGER,\r\n });\r\n }\r\n }\r\n }\r\n }\r\n async TraverseAsync(callback: (arg0: this) => Promise)\r\n {\r\n await callback(this);\r\n for (let c of this.Children)\r\n {\r\n if (c && c.Object)\r\n {\r\n let template = c.Object as TemplateRecord;\r\n await template.TraverseAsync(callback);\r\n }\r\n }\r\n }\r\n\r\n private _NodeDepthCache: number;\r\n /** 节点深度,根节点=0 */\r\n get NodeDepth()\r\n {\r\n if (this._NodeDepthCache !== undefined)\r\n return this._NodeDepthCache;\r\n\r\n if (!this.Parent?.Object) return 0;\r\n\r\n let parentTemplate = this.Parent.Object as TemplateRecord;\r\n this._NodeDepthCache = parentTemplate.NodeDepth + 1;\r\n\r\n return this._NodeDepthCache;\r\n }\r\n\r\n /** 模版定位 */\r\n get Positioning(): Positioning\r\n {\r\n if (this._Positioning)\r\n return this._Positioning;\r\n\r\n let spaceCS = this.GetTemplateRealitySpaceCS();\r\n let positioning = new PositioningTemporary();\r\n positioning.SpaceCS = spaceCS;\r\n positioning.SpaceSize = new Vector3(this.LParam.value as number, this.WParam.value as number, this.HParam.value as number);\r\n return positioning;\r\n }\r\n\r\n /**\r\n * 当存在夹层空间定位时,辅助定位表达式将使用夹层空间作为相对空间.\r\n */\r\n set Positioning(p: Positioning)\r\n {\r\n this.WriteAllObjectRecord();\r\n if (p) p.parent = this;\r\n this._Positioning = p;\r\n }\r\n\r\n //#region param\r\n\r\n /** 初始化基础参数 */\r\n InitBaseParams()\r\n {\r\n for (let paramName of TemplateDefaultParams)\r\n {\r\n let value = 0;\r\n let param = new TemplateParam();\r\n param.name = paramName;\r\n param.type = TemplateParamType.Float;\r\n param.value = value;\r\n this.Params.push(param);\r\n }\r\n this.LParam.description = \"宽\";\r\n this.WParam.description = \"深\";\r\n this.HParam.description = \"高\";\r\n this.Params[9].description = \"板厚\";\r\n this.Params[9].value = 18;\r\n return this;\r\n }\r\n\r\n get LParam() { return this.Params[0]; }\r\n get WParam() { return this.Params[1]; }\r\n get HParam() { return this.Params[2]; }\r\n\r\n get PXParam() { return this.Params[3]; }\r\n get PYParam() { return this.Params[4]; }\r\n get PZParam() { return this.Params[5]; }\r\n\r\n get RXParam() { return this.Params[6]; }\r\n get RYParam() { return this.Params[7]; }\r\n get RZParam() { return this.Params[8]; }\r\n\r\n GetParam(paramName: string): TemplateParam | undefined\r\n {\r\n return this.Params.find(param => param.name === paramName);\r\n }\r\n\r\n SetParamExpr(paramName: string, expr: string | number)\r\n {\r\n let param = this.GetParam(paramName);\r\n if (param)\r\n param.expr = expr;\r\n }\r\n\r\n DeleteParam(paramName: string)\r\n {\r\n let index = this.Params.findIndex(p => p.name === paramName);\r\n if (index !== -1 && index >= TempateDefaultParamCount)//LWH P R 禁止删除\r\n this.Params.splice(index, 1);\r\n\r\n return this;\r\n }\r\n\r\n //#endregion param\r\n\r\n /**\r\n * 通常UI操作的时候,都需要更新整个树,所以隐藏这个API.\r\n * see `UpdateTemplateTree`\r\n *\r\n * 更新当前节点\r\n *\r\n * ### 定位 (大小,方位)\r\n *\r\n * - (放弃)如果当前节点是更新树的最高层(但当前节点不是根节点)\r\n * 那么当存在夹层空间定位的时候,可以不重复进行夹层空间定位,因为此时该空间不会发生变化.\r\n * 补充:如果夹层空间的板件都在上层,那么可以做这个优化,如果定位的板件没在模块中,那么不能进行这个优化.\r\n *\r\n * - [更新优先]在没有实现变量依赖收集(类似mobx)时,我们认为`positioning`的优先级最高.\r\n * 所以`positioning`会被优先更新. `LWH`,`XYZ`.\r\n *\r\n * - 在使用变量定位时,需要传入上层的坐标系,以便进行相对定位.\r\n * 使用空间分析时,已经不需要上层坐标系.\r\n *\r\n * - 辅助定位:帮助空间坐标系进行旋转\r\n * 辅助定位的参数变量将暴露出来.{RX RY RZ}\r\n * 辅助定位作为参数变量时,用户使用值时很难正确的计算值,应~加入交互选择.(辅助计算)\r\n *\r\n * ### 变量表达式计算\r\n *\r\n * - `LWH`将被`positioning`替代,但变量定义仍然正常存在.\r\n *\r\n * - 变量大部分时候都是被批量更新,(同时传入许多参数).\r\n *\r\n */\r\n protected async Update()\r\n {\r\n this._CacheParamVars = this.GetParameterDefinition(false);\r\n let ens = this.Objects.filter(id => !id.IsErase).map(id => id.Object as Entity);\r\n let evaled = new Set();\r\n\r\n this._CacheSpaceCS = this.GetTemplateSpaceCS(false);\r\n\r\n let paramMap = new Map();\r\n for (let param of this.Params)\r\n paramMap.set(param.name, param);\r\n\r\n if (this._Positioning)\r\n {\r\n await this._Positioning.Positioning();\r\n if (!this._Positioning.SpaceCS)\r\n {\r\n //退化成个体坐标系\r\n if (ens.length)\r\n {\r\n this._Positioning.SpaceCS = ens[0].SpaceOCS;\r\n this._Positioning.SpaceSize = new Vector3(this.LParam.value as number, this.WParam.value as number, this.HParam.value as number);\r\n }\r\n else\r\n {\r\n Log(\"模块定位错误!\");\r\n return;//出事故\r\n }\r\n }\r\n }\r\n\r\n for (let en of ens)\r\n {\r\n en.ApplyMatrix(en.SpaceOCSInv);\r\n if (en instanceof Board)\r\n en.IsLazyGrooveCheck = true;\r\n }\r\n\r\n //#region 1.定位(坐标系和大小)\r\n /**\r\n * LWH在存在定位空间和继承空间时的表达式行为不一致.\r\n * - 在存在定位空间的时候,LWH是修改定位空间旋转后的值.\r\n * - 不存在定位空间的时候,修改的是空间旋转前的值,因为此时已经没有空间尺寸可供旋转了,\r\n * 只能先提供空间尺寸,然后才进行旋转.\r\n */\r\n\r\n if (this._Positioning)\r\n {\r\n this._CacheSpaceCS = this._Positioning.SpaceCS;\r\n this._CacheSpaceSize = this._Positioning.SpaceSize;\r\n\r\n this.RotateSpaceCS(paramMap, evaled);\r\n\r\n if (this.LParam.expr)\r\n this._CacheSpaceSize.x = this.LParam.EvalUpdate(this._CacheParamVars, paramMap, evaled, false);\r\n if (this.WParam.expr)\r\n this._CacheSpaceSize.y = this.WParam.EvalUpdate(this._CacheParamVars, paramMap, evaled, false);\r\n if (this.HParam.expr)\r\n this._CacheSpaceSize.z = this.HParam.EvalUpdate(this._CacheParamVars, paramMap, evaled, false);\r\n\r\n if (this._Positioning instanceof PositioningTemporary)\r\n this._Positioning = undefined;\r\n }\r\n else\r\n {\r\n let l = this.LParam.EvalUpdate(this._CacheParamVars, paramMap, evaled, false);\r\n let w = this.WParam.EvalUpdate(this._CacheParamVars, paramMap, evaled, false);\r\n let h = this.HParam.EvalUpdate(this._CacheParamVars, paramMap, evaled, false);\r\n this._CacheSpaceSize = new Vector3(l, w, h);\r\n\r\n this.RotateSpaceCS(paramMap, evaled);\r\n\r\n if (!this.Parent)\r\n {\r\n this.PXParam.value = 0;\r\n this.PYParam.value = 0;\r\n this.PZParam.value = 0;\r\n\r\n this.PXParam.expr = \"\";\r\n this.PYParam.expr = \"\";\r\n this.PZParam.expr = \"\";\r\n\r\n this.RXParam.value = 0;\r\n this.RYParam.value = 0;\r\n this.RZParam.value = 0;\r\n\r\n this.RXParam.expr = \"\";\r\n this.RYParam.expr = \"\";\r\n this.RZParam.expr = \"\";\r\n }\r\n }\r\n\r\n //相对定位. use PX PY PZ\r\n this.UpdatePosition(paramMap, evaled);\r\n\r\n //更新LWH(通过定位空间)\r\n this.LParam.UpdateParam(this._CacheSpaceSize.x);\r\n this.WParam.UpdateParam(this._CacheSpaceSize.y);\r\n this.HParam.UpdateParam(this._CacheSpaceSize.z);\r\n\r\n evaled.add(this.LParam);\r\n evaled.add(this.WParam);\r\n evaled.add(this.HParam);\r\n\r\n //#endregion\r\n\r\n //更新其他参数变量 Eval local params\r\n for (const param of this.Params)\r\n {\r\n param.EvalUpdate(this._CacheParamVars, paramMap, evaled);\r\n }\r\n\r\n //删除材质变量(材质变量仅在KJL导入中使用,重新出现在右侧列表中是不明智的?) (但是用户可能编辑更新了它?)\r\n // arrayRemoveIf(this.Params, p => p.type === TemplateParamType.Material);\r\n\r\n //变换到新的模版空间\r\n for (let en of ens)\r\n {\r\n en.ApplyMatrix(this._CacheSpaceCS);\r\n if (en instanceof Board)\r\n en.LazyGrooveCheckAll();\r\n }\r\n\r\n //更新顶层变量值\r\n if (!this.Parent)\r\n {\r\n for (const param of this.Params)\r\n this._CacheParamVars[`$${param.name}`] = param.value;\r\n }\r\n else\r\n {\r\n for (let param of this._CatchRootParam)\r\n this._CacheParamVars[`$${param.name}`] = param.value;\r\n }\r\n\r\n //保持SpaceCS\r\n for (let ent of ens)\r\n {\r\n ent.SpaceOCS = this._CacheSpaceCS;\r\n }\r\n }\r\n\r\n /**\r\n * 使用PXPYPZ更新空间位置\r\n */\r\n private UpdatePosition(paramMap: Map, evaled: Set)\r\n {\r\n let x = this.PXParam.EvalUpdate(this._CacheParamVars, paramMap, evaled, false);\r\n let y = this.PYParam.EvalUpdate(this._CacheParamVars, paramMap, evaled, false);\r\n let z = this.PZParam.EvalUpdate(this._CacheParamVars, paramMap, evaled, false);\r\n\r\n if (x !== 0 || y !== 0 || z !== 0)\r\n {\r\n this.PXParam.value = x;\r\n this.PYParam.value = y;\r\n this.PZParam.value = z;\r\n let baseP = new Vector3(x, y, z);\r\n baseP.applyMatrix4(this._CacheSpaceCS);\r\n this._CacheSpaceCS.setPosition(baseP);\r\n }\r\n }\r\n\r\n /**\r\n * 旋转空间定位,如果旋转成功,那么SpaceSize和SpaceCS都可能被更新\r\n */\r\n private RotateSpaceCS(paramMap: Map, evaled: Set)\r\n {\r\n this.RXParam.EvalUpdate(this._CacheParamVars, paramMap, evaled);\r\n this.RYParam.EvalUpdate(this._CacheParamVars, paramMap, evaled);\r\n this.RZParam.EvalUpdate(this._CacheParamVars, paramMap, evaled);\r\n //use RX RY RZ\r\n let rx = MathUtils.degToRad(this.RXParam.value as number);\r\n let ry = MathUtils.degToRad(this.RYParam.value as number);\r\n let rz = MathUtils.degToRad(this.RZParam.value as number);\r\n if (rx !== 0 || ry !== 0 || rz !== 0)\r\n {\r\n let mrx = new Matrix4().makeRotationX(rx);\r\n let mry = new Matrix4().makeRotationY(ry);\r\n let mrz = new Matrix4().makeRotationZ(rz);\r\n let mro = mrz.multiply(mry.multiply(mrx));\r\n let roSpace = mro.multiplyMatrices(this._CacheSpaceCS, mro);\r\n let roSpaceInv = mrx.getInverse(roSpace); //变量复用\r\n let transfromToRoSpace = roSpaceInv.multiply(this._CacheSpaceCS);\r\n let box = new Box3(new Vector3(), this._CacheSpaceSize.clone());\r\n box.applyMatrix4(transfromToRoSpace);\r\n box.getSize(this._CacheSpaceSize);\r\n let baseP = box.min.clone().applyMatrix4(roSpace);\r\n roSpace.setPosition(baseP);\r\n //更新LWH(通过定位空间)\r\n this.LParam.UpdateParam(this._CacheSpaceSize.x);\r\n this.WParam.UpdateParam(this._CacheSpaceSize.y);\r\n this.HParam.UpdateParam(this._CacheSpaceSize.z);\r\n this._CacheSpaceCS = roSpace;\r\n }\r\n this._CacheParamVars[\"L\"] = this._CacheSpaceSize.x;\r\n this._CacheParamVars[\"W\"] = this._CacheSpaceSize.y;\r\n this._CacheParamVars[\"H\"] = this._CacheSpaceSize.z;\r\n }\r\n\r\n /** 以广度搜索优先更新节点树 */\r\n async UpdateTemplateTree()\r\n {\r\n if (this.Parent && !this.Parent.IsErase)\r\n {\r\n let parent = this.Parent.Object as TemplateRecord;\r\n if (parent.SplitType !== TemplateSplitType.None || this.NeedUpdateParent)\r\n return await parent.UpdateTemplateTree();\r\n }\r\n\r\n let stack: TemplateRecord[] = [this];\r\n await this.Update();\r\n while (stack.length > 0)\r\n {\r\n let template = stack.shift();\r\n\r\n //清理历史记录时,子对象会被清理,为了防止被清理掉,清除不需要的id\r\n template.Children = template.Children.filter(id => id && !id.IsErase);\r\n\r\n //计算DIV(给子空间使用)\r\n if (template.Children.length > 0 && template.SplitType !== TemplateSplitType.None)\r\n {\r\n let vardefines = (template.Children[0].Object).GetParameterDefinition(false);\r\n vardefines._DIV = 0;\r\n let sum = 0;\r\n for (let c of template.Children)\r\n {\r\n let ctemplate = c.Object as TemplateRecord;\r\n let param = ctemplate.Params[template.SplitType];\r\n sum += param.EvalUpdate(vardefines, new Map(), new Set(), false);\r\n }\r\n\r\n let sumDiv = 0;\r\n vardefines._DIV = 1;\r\n for (let c of template.Children)\r\n {\r\n let ctemplate = c.Object as TemplateRecord;\r\n let param = ctemplate.Params[template.SplitType];\r\n sumDiv += param.EvalUpdate(vardefines, new Map(), new Set(), false);\r\n }\r\n\r\n let divCount = sumDiv - sum;\r\n\r\n if (divCount > 0)\r\n {\r\n //div可用总空间\r\n let divSum = (template.Params[template.SplitType].value as number - sum);\r\n if (divSum > 0)\r\n template._CacheParamVars.DIV = divSum / divCount;\r\n else\r\n template._CacheParamVars.DIV = 0;\r\n }\r\n\r\n template._CacheParamVars.POS = 0;\r\n }\r\n\r\n for (let c of template.Children)\r\n {\r\n let ctemplate = c.Object as TemplateRecord;\r\n stack.push(ctemplate);\r\n await ctemplate.Update();\r\n\r\n if (template._CacheParamVars.POS !== undefined)//更新POS\r\n template._CacheParamVars.POS += ctemplate.Params[template.SplitType].value as number;\r\n }\r\n }\r\n }\r\n\r\n /** 缓存本节点的变量定义值,当子层需要本层的参数时,可以直接获取 */\r\n protected _CacheParamVars: any;\r\n protected _CacheSpaceCS: Matrix4;\r\n protected _CacheSpaceSize: Vector3;\r\n protected _CatchRootParam: Set;\r\n /**\r\n * 本节点可用的所有变量定义.(包括变量继承)\r\n * @param [useCache=true] 当更新当前节点的时候,我们不希望使用缓存,(因为父节点的参数可能已经被更新)\r\n * @returns\r\n */\r\n GetParameterDefinition(useCache = true): any\r\n {\r\n if (this._CacheParamVars && useCache)\r\n return this._CacheParamVars;\r\n\r\n let vars = this.GetParentParams();\r\n this._CatchRootParam = new Set();\r\n for (const param of this.Params)\r\n {\r\n vars[param.name] = param.value;\r\n\r\n let rootParamName = \"$\" + param.name;\r\n\r\n if (!this.Parent)\r\n vars[rootParamName] = param.value;//root\r\n else if (!(rootParamName in vars))\r\n {\r\n this._CatchRootParam.add(param);\r\n vars[rootParamName] = param.value;//顶层变量捕获 root\r\n }\r\n }\r\n\r\n this._CacheParamVars = vars;\r\n return vars;\r\n }\r\n\r\n /**\r\n * 变量继承\r\n * - 每继承一层,前缀增加一个`_`\r\n * - 顶层前缀`$`\r\n *\r\n * @returns 继承于父空间的变量定义列表\r\n */\r\n private GetParentParams(): any\r\n {\r\n if (!this.Parent?.Object) return {};\r\n\r\n let parent = this.Parent.Object as TemplateRecord;\r\n let params = parent.GetParameterDefinition();\r\n\r\n let newParams: any = {};\r\n for (let key in params)\r\n {\r\n if (key[0] !== \"$\")\r\n newParams[\"_\" + key] = params[key];\r\n else\r\n newParams[key] = params[key];\r\n }\r\n\r\n if (newParams._DIV === undefined && parent.SplitType !== TemplateSplitType.None)\r\n newParams._DIV = 1;\r\n if (newParams._POS === undefined)\r\n newParams._POS = 0;\r\n\r\n return newParams;\r\n }\r\n\r\n get SpaceParse(): ISpaceParse\r\n {\r\n let spaceParse: ISpaceParse;\r\n\r\n if (this._Positioning && this._Positioning instanceof PositioningClampSpace)\r\n spaceParse = this._Positioning._SpaceParse;\r\n else\r\n spaceParse = new ISpaceParse();\r\n\r\n spaceParse.SpaceOCS = this._CacheSpaceCS;\r\n spaceParse.ParseOK = true;\r\n spaceParse.SpaceBox = new Box3Ext(new Vector3(), this._CacheSpaceSize);\r\n return spaceParse;\r\n }\r\n\r\n /**\r\n * 获得当前的模版空间的相对坐标系\r\n * - 存在父节点的时候使用父节点的模版空间坐标系\r\n * - 不存在父节点的时候使用自身的模版空间坐标系\r\n *\r\n * - 空间坐标系将被定位更新\r\n *\r\n * @param [useCache=true] 当更新当前节点的时候,我们不希望使用缓存,(因为父节点的参数可能已经被更新)\r\n */\r\n private GetTemplateSpaceCS(useCache = true): Matrix4\r\n {\r\n if (useCache && this._CacheSpaceCS)\r\n return this._CacheSpaceCS.clone();\r\n\r\n if (this.Parent?.Object)\r\n {\r\n let template = this.Parent.Object as TemplateRecord;\r\n return template.GetTemplateSpaceCS();\r\n }\r\n\r\n for (let brId of this.Objects)\r\n {\r\n if (brId.Object && !brId.IsErase)\r\n {\r\n let br = brId.Object as Entity;\r\n return br.SpaceOCS;\r\n }\r\n }\r\n\r\n return new Matrix4();\r\n }\r\n\r\n /**\r\n * 获得当前模块的实际位置坐标系.\r\n * 使用 GetTemplateSpaceCS 可能会得到不准确的位置.(得到Parent或者已经缓存的位置)\r\n */\r\n GetTemplateRealitySpaceCS()\r\n {\r\n for (let brId of this.Objects)\r\n {\r\n if (brId.Object && !brId.IsErase)\r\n {\r\n let br = brId.Object as Entity;\r\n return br.SpaceOCS;\r\n }\r\n }\r\n return this.GetTemplateSpaceCS(true);//此时已经可能不准确\r\n }\r\n\r\n get NeedUpdateParent(): boolean\r\n {\r\n if (this._Positioning) return false; //存在自我定位时,不需要更新父层\r\n\r\n if (this.Parent)\r\n {\r\n let template = this.Parent.Object as TemplateRecord;\r\n return template._CacheSpaceCS === undefined; //父层已更新时,不需要更新父层\r\n }\r\n\r\n return false; //没有父层时,不需要更新父层\r\n }\r\n\r\n protected get PositioningSupportBoards(): Board[]\r\n {\r\n let brs: Board[] = [];\r\n if (this._Positioning && this._Positioning instanceof PositioningClampSpace)\r\n {\r\n for (let id of this._Positioning.Objects)\r\n if (!id.IsErase && id.Object instanceof Board)\r\n brs.push(id.Object);\r\n }\r\n if (brs.length === 0)\r\n brs.push(new Board());\r\n return brs;\r\n }\r\n\r\n protected _Version: number;\r\n //#region -------------------------File-------------------------\r\n //对象应该实现dataIn和DataOut的方法,为了对象的序列化和反序列化\r\n //对象从文件中读取数据,初始化自身\r\n ReadFile(file: CADFiler)\r\n {\r\n this._Version = file.Read();\r\n super.ReadFile(file);\r\n this.Type = file.Read();\r\n this._Parent = file.ReadHardObjectId();\r\n let count = file.Read() as number;\r\n this.Children.length = 0;\r\n for (let i = 0; i < count; i++)\r\n {\r\n let id = file.ReadHardObjectId();\r\n if (id) this.Children.push(id);\r\n }\r\n count = file.Read();\r\n this.Params.length = 0;\r\n for (let i = 0; i < count; i++)\r\n this.Params.push(file.ReadObject());\r\n count = file.Read();\r\n this.Objects.length = 0;\r\n for (let i = 0; i < count; i++)\r\n {\r\n let id = file.ReadObjectId();\r\n if (id) this.Objects.push(id);\r\n }\r\n\r\n this._Positioning = file.ReadObject();\r\n\r\n if (this._Version > 1)\r\n this.SplitType = file.Read() ?? this.SplitType;\r\n\r\n //清空缓存,因为我们回滚了模块(BUG:修改参数->撤销->替换模块(此时读取了缓存的数据)\r\n this._CacheParamVars = undefined;\r\n this._CacheSpaceCS = undefined;\r\n this._CacheSpaceSize = undefined;\r\n this._CatchRootParam = undefined;\r\n this._NodeDepthCache = undefined;\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(3);\r\n super.WriteFile(file);\r\n\r\n let type = this.Type;\r\n //我们在保存文件的时候,才会去序列化它,否则我们不会自动添加历史记录(被动式)\r\n if (this.isExpanded)\r\n type |= TemplateType.Expanded;\r\n else\r\n type &= ~TemplateType.Expanded;\r\n\r\n file.Write(type);\r\n file.WriteHardObjectId(this._Parent);\r\n file.Write(this.Children.length);\r\n for (let id of this.Children)\r\n file.WriteHardObjectId(id);\r\n file.Write(this.Params.length);\r\n for (let param of this.Params)\r\n file.WriteObject(param);\r\n file.Write(this.Objects.length);\r\n for (let id of this.Objects)\r\n file.WriteHardObjectId(id);\r\n\r\n file.WriteObject(this._Positioning);\r\n\r\n file.Write(this.SplitType);\r\n }\r\n //#endregion\r\n}\r\n","import { Factory } from \"../../CADFactory\";\r\nimport { CADFiler } from \"../../CADFiler\";\r\nimport { Board } from \"../../Entity/Board\";\r\nimport { ObjectId } from \"../../ObjectId\";\r\nimport { TemplateAction } from \"./TemplateAction\";\r\n\r\nexport enum ThicknessDirection\r\n{\r\n Center = 0,\r\n Back = 1,\r\n Front = 2,\r\n}\r\n\r\nexport interface ThicknessActionData\r\n{\r\n //方向\r\n Direction: ThicknessDirection;\r\n /**\r\n * 附加的动作\r\n */\r\n Actions: TemplateAction[];\r\n}\r\n\r\n/**\r\n * 模版动作\r\n */\r\n@Factory\r\nexport class TempateThicknessAction extends TemplateAction\r\n{\r\n EntityDirectionMap: Map = new Map();\r\n protected _Update(paramDiff: number, newValue: number)\r\n {\r\n for (let [id, d] of this.EntityDirectionMap)\r\n {\r\n if (!id || id.IsErase) continue;\r\n\r\n let br = id.Object as Board;\r\n\r\n br.Thickness += paramDiff;\r\n if (d.Direction === ThicknessDirection.Back)\r\n br.Position = br.Position.sub(br.Normal.multiplyScalar(paramDiff));\r\n else if (d.Direction === ThicknessDirection.Center)\r\n br.Position = br.Position.sub(br.Normal.multiplyScalar(paramDiff * 0.5));\r\n\r\n for (let a of d.Actions)\r\n {\r\n a.parent = this.parent;\r\n a.Update(paramDiff, newValue);\r\n }\r\n }\r\n }\r\n\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 super.ReadFile(file);\r\n\r\n let count = file.Read() as number;\r\n this.EntityDirectionMap.clear();\r\n for (let i = 0; i < count; i++)\r\n {\r\n let id = file.ReadObjectId();\r\n let direction = file.Read() as ThicknessDirection;\r\n let actionsCount = file.Read() as number;\r\n let actions: TemplateAction[] = [];\r\n for (let j = 0; j < actionsCount; j++)\r\n {\r\n actions.push(file.ReadObject() as TemplateAction);\r\n }\r\n this.EntityDirectionMap.set(id, { Direction: direction, Actions: actions });\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\r\n file.Write(this.EntityDirectionMap.size);\r\n for (let [id, d] of this.EntityDirectionMap)\r\n {\r\n file.WriteObjectId(id);\r\n file.Write(d.Direction);\r\n file.Write(d.Actions.length);\r\n for (let a of d.Actions)\r\n file.WriteObject(a);\r\n }\r\n }\r\n}\r\n","import { Vector3 } from \"three\";\r\nimport { MoveMatrix } from \"../../../Geometry/GeUtils\";\r\nimport { Factory } from \"../../CADFactory\";\r\nimport { CADFiler } from \"../../CADFiler\";\r\nimport { Entity } from \"../../Entity/Entity\";\r\nimport { ObjectId } from \"../../ObjectId\";\r\nimport { TemplateAction } from \"./TemplateAction\";\r\n\r\n@Factory\r\nexport class TemplateMoveAction extends TemplateAction\r\n{\r\n\r\n constructor(public StretchDirection = new Vector3,\r\n public MoveEntitys: ObjectId[] = []\r\n )\r\n {\r\n super();\r\n }\r\n\r\n protected _CacheMoveVector: Vector3;\r\n protected _Update(paramDiff: number)\r\n {\r\n if (!this._CacheMoveVector) this._CacheMoveVector = new Vector3();\r\n\r\n this._CacheMoveVector.copy(this.StretchDirection).multiplyScalar(paramDiff);\r\n\r\n let moveMatrix = MoveMatrix(this._CacheMoveVector);\r\n for (let id of this.MoveEntitys)\r\n {\r\n if (id?.Object)\r\n {\r\n let ent = id.Object as Entity;\r\n ent.ApplyMatrix(moveMatrix);\r\n }\r\n }\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 super.ReadFile(file);\r\n this.StretchDirection.fromArray(file.Read());\r\n this.MoveEntitys.length = 0;\r\n let count = file.Read();\r\n for (let i = 0; i < count; i++)\r\n {\r\n let id = file.ReadObjectId();\r\n if (id) this.MoveEntitys.push(id);\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.StretchDirection.toArray());\r\n file.Write(this.MoveEntitys.length);\r\n for (let ent of this.MoveEntitys)\r\n file.WriteObjectId(ent);\r\n }\r\n}\r\n","import { arrayClone } from \"../../../Common/ArrayExt\";\r\nimport { GetBoardHighSeal, GetBoardSealingCurves, HandleRectBoardSealingData } from \"../../../GraphicsSystem/CalcEdgeSealing\";\r\nimport { Factory } from \"../../CADFactory\";\r\nimport { CADFiler } from \"../../CADFiler\";\r\nimport { Board } from \"../../Entity/Board\";\r\nimport { ObjectId } from \"../../ObjectId\";\r\nimport { TemplateAction } from \"./TemplateAction\";\r\n\r\n/**\r\n * 设置封边动作\r\n */\r\n@Factory\r\nexport class TemplateSetSealAction extends TemplateAction\r\n{\r\n EntitySealIndexsMap: {\r\n entity: ObjectId;\r\n indexs: number[];\r\n }[] = [];\r\n\r\n protected override _Update(diff: number, newV: number)\r\n {\r\n for (let { entity, indexs } of this.EntitySealIndexsMap)\r\n {\r\n if (entity?.Object && !entity.IsErase)\r\n {\r\n let br = entity.Object;\r\n let highSealData = GetBoardSealingCurves(br, true);\r\n let highseals = GetBoardHighSeal(br, highSealData);\r\n\r\n for (let i of indexs)\r\n {\r\n if (highseals[i])\r\n highseals[i].size = newV;\r\n }\r\n\r\n HandleRectBoardSealingData(br, highseals, highSealData);\r\n br.BoardProcessOption.highSealed = highseals;\r\n }\r\n }\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 super.ReadFile(file);\r\n this.EntitySealIndexsMap.length = 0;\r\n let count = file.Read() as number;\r\n for (let i = 0; i < count; i++)\r\n {\r\n let entity = file.ReadObjectId() as ObjectId;\r\n let indexs = file.Read();\r\n if (entity) this.EntitySealIndexsMap.push({ entity, indexs });\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.EntitySealIndexsMap.length);\r\n for (let d of this.EntitySealIndexsMap)\r\n {\r\n file.WriteObjectId(d.entity);\r\n file.Write(arrayClone(d.indexs));\r\n }\r\n }\r\n}\r\n","import { arrayClone } from \"../../../Common/ArrayExt\";\r\nimport { Factory } from \"../../CADFactory\";\r\nimport { CADFiler } from \"../../CADFiler\";\r\nimport { Entity } from \"../../Entity/Entity\";\r\nimport { ObjectId } from \"../../ObjectId\";\r\nimport { TemplateMoveAction } from \"./TemplateMoveAction\";\r\n\r\n/**\r\n * Stretch夹点动作\r\n */\r\n@Factory\r\nexport class TemplateStretchGripAction extends TemplateMoveAction\r\n{\r\n EntityStretchPointMap: {\r\n entity: ObjectId;\r\n indexs: number[];\r\n }[] = [];\r\n\r\n protected _Update(dist: number)\r\n {\r\n super._Update(dist);\r\n for (let { entity, indexs } of this.EntityStretchPointMap)\r\n {\r\n if (entity?.Object)\r\n {\r\n let ent = entity.Object as Entity;\r\n ent.MoveStretchPoints(indexs, this._CacheMoveVector);\r\n }\r\n }\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 super.ReadFile(file);\r\n this.EntityStretchPointMap.length = 0;\r\n let count = file.Read() as number;\r\n for (let i = 0; i < count; i++)\r\n {\r\n let entity = file.ReadObjectId();\r\n let indexs = file.Read();\r\n if (entity) this.EntityStretchPointMap.push({ entity, indexs });\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.EntityStretchPointMap.length);\r\n for (let d of this.EntityStretchPointMap)\r\n {\r\n file.WriteObjectId(d.entity);\r\n file.Write(arrayClone(d.indexs));\r\n }\r\n }\r\n}\r\n","import { Box3, Vector3 } from \"three\";\r\nimport { Factory } from \"../../CADFactory\";\r\nimport { CADFiler } from \"../../CADFiler\";\r\nimport { Entity } from \"../../Entity/Entity\";\r\nimport { ObjectId } from \"../../ObjectId\";\r\nimport { TemplateMoveAction } from \"./TemplateMoveAction\";\r\n\r\n/**\r\n * 拽拖比例盒子动作\r\n */\r\n@Factory\r\nexport class TemplateStretchScaleBoxAction extends TemplateMoveAction\r\n{\r\n /**\r\n * 正常不会直接修改下面的2个属性,如果真的需要修改,请调用 `this.WriteAllObjectRecord`;\r\n * 避免历史记录没有记录更新.\r\n */\r\n constructor(\r\n public StretchDirection: Vector3 = new Vector3(),\r\n public EntityStretchData: { entity: ObjectId; scaleBox: Box3; }[] = []\r\n )\r\n {\r\n super();\r\n }\r\n\r\n protected _Update(dist: number)\r\n {\r\n super._Update(dist);\r\n\r\n for (let { entity, scaleBox } of this.EntityStretchData)\r\n {\r\n if (!entity || entity.IsErase) continue;\r\n\r\n let ent = entity.Object as Entity;\r\n let pts = ent.GetStretchPoints();\r\n let ocsInv = ent.OCSInv;\r\n let entityBox = ent.BoundingBoxInOCS;\r\n let size = entityBox.getSize(new Vector3());\r\n scaleBox = scaleBox.clone();\r\n scaleBox.min.multiply(size).sub(new Vector3(1, 1, 1));\r\n scaleBox.max.multiply(size).add(new Vector3(1, 1, 1));\r\n let stretchIndexs: number[] = [];\r\n for (let i = 0, length = pts.length; i < length; i++)\r\n {\r\n let p = pts[i];\r\n p.applyMatrix4(ocsInv);\r\n if (scaleBox.containsPoint(p))\r\n stretchIndexs.push(i);\r\n }\r\n ent.MoveStretchPoints(stretchIndexs, this._CacheMoveVector);\r\n }\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 super.ReadFile(file);\r\n this.EntityStretchData.length = 0;\r\n let count = file.Read() as number;\r\n for (let i = 0; i < count; i++)\r\n {\r\n let entity = file.ReadObjectId();\r\n let min = new Vector3().fromArray(file.Read());\r\n let max = new Vector3().fromArray(file.Read());\r\n this.EntityStretchData.push({ entity, scaleBox: new Box3(min, max) });\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.EntityStretchData.length);\r\n for (let d of this.EntityStretchData)\r\n {\r\n file.WriteObjectId(d.entity);\r\n file.Write(d.scaleBox.min.toArray());\r\n file.Write(d.scaleBox.max.toArray());\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * 拽拖固定大小盒子动作(弃用)\r\n */\r\n/*\r\nclass TemplateStretchSizeBoxAction extends TemplateAction\r\n{\r\n StretchDirection: Vector3;\r\n\r\n EntityStretchPointMap: { entity: Entity, sizeBox: Box3 }[];\r\n}\r\n*/\r\n","import { Vector3 } from \"three\";\r\nimport { AutoRecord } from \"../../AutoRecord\";\r\nimport { Factory } from \"../../CADFactory\";\r\nimport { CADFiler } from \"../../CADFiler\";\r\nimport { Board } from \"../../Entity/Board\";\r\nimport { ObjectId } from \"../../ObjectId\";\r\nimport { Positioning } from \"./Positioning\";\r\n\r\n@Factory\r\nexport class PositioningBoardSpace extends Positioning\r\n{\r\n @AutoRecord ObjectId: ObjectId;\r\n /**\r\n * 定位\r\n */\r\n async Positioning()\r\n {\r\n this.SpaceCS = undefined;\r\n this.SpaceSize = undefined;\r\n\r\n if (this.ObjectId && !this.ObjectId.IsErase)\r\n {\r\n let ent = this.ObjectId.Object as Board;\r\n this.SpaceCS = ent.OCS;\r\n this.SpaceSize = new Vector3(ent.Width, ent.Height, ent.Thickness);\r\n }\r\n }\r\n\r\n //#region File\r\n ReadFile(file: CADFiler): void\r\n {\r\n let ver = file.Read();\r\n this.ObjectId = file.ReadObjectId();\r\n }\r\n\r\n WriteFile(file: CADFiler): void\r\n {\r\n file.Write(1);\r\n file.WriteObjectId(this.ObjectId);\r\n }\r\n //#endregion\r\n\r\n}\r\n","import { Vector3 } from \"three\";\r\nimport { safeEval } from \"../../Common/eval\";\r\nimport { Log } from \"../../Common/Log\";\r\nimport { Board } from \"../../DatabaseServices/Entity/Board\";\r\nimport { TemplateWineRackRecord } from \"../../DatabaseServices/Template/ProgramTempate/TemplateWineRackRecord\";\r\nimport { TemplateRecord } from \"../../DatabaseServices/Template/TemplateRecord\";\r\nimport { MoveMatrix } from \"../../Geometry/GeUtils\";\r\nimport { ISpaceParse } from \"../../Geometry/SpaceParse/ISpaceParse\";\r\nimport { BehindBoardOption, BehindHeightPositon, BoardType, BrRelativePos, IGrooveOption, LayerBoardOption, VerticalBoardOption } from \"../../UI/Store/BoardInterface\";\r\n\r\nexport function BuildLayerBoards(opt: LayerBoardOption, space: ISpaceParse, grooveOption?: IGrooveOption): Board[]\r\n{\r\n let spaceBox = space.SpaceBox;\r\n let spaceOCS = space.SpaceOCS;\r\n let size = spaceBox.getSize(new Vector3());\r\n const params = { L: size.x, W: size.y, H: size.z, BH: opt.thickness };\r\n\r\n let width: number;\r\n if (opt.isTotalLength)\r\n width = size.y;\r\n else\r\n {\r\n width = safeEval(opt.calcHeight, params);\r\n }\r\n let count = opt.count;\r\n let type = opt.boardRelative;\r\n let spaceSize = safeEval(opt.calcSpaceSize, params);\r\n let frontShrink = safeEval(opt.calcFrontShrink, params);\r\n width -= frontShrink;\r\n\r\n if (width <= 0)\r\n {\r\n Log(\"宽度无效,可能前缩过大,请修正\");\r\n return [];\r\n }\r\n\r\n let leftShrink = safeEval(opt.calcLeftShrink, params);\r\n let rightShrink = safeEval(opt.calcRightShrink, params);\r\n let thickness = opt.thickness;\r\n\r\n let len = size.x - leftShrink - rightShrink;\r\n if (len <= 0)\r\n {\r\n Log(\"长度无效,可能左缩右缩过大,请修正\");\r\n return [];\r\n }\r\n let board = Board.CreateBoard(len, width, thickness, BoardType.Layer);\r\n if (grooveOption)\r\n {\r\n board.KnifeRadius = safeEval(grooveOption.knifeRadius);\r\n board.GroovesAddDepth = safeEval(grooveOption.grooveAddDepth);\r\n board.GroovesAddWidth = safeEval(grooveOption.grooveAddWidth);\r\n board.GroovesAddLength = safeEval(grooveOption.grooveAddLength);\r\n }\r\n opt.height = len;\r\n opt.width = width;\r\n\r\n //等分单层空间大小\r\n let singleSize = (size.z - (thickness * count)) / (count + 1);\r\n\r\n\r\n let brs: Board[] = [];\r\n\r\n for (let i = 1; i <= count; i++)\r\n {\r\n let b = board.Clone() as Board;\r\n b.Name = opt.name;\r\n\r\n if (type === BrRelativePos.Top)\r\n b.ApplyMatrix(MoveMatrix(spaceBox.min.clone().add(\r\n new Vector3(size.x - rightShrink, frontShrink, size.z - (spaceSize + thickness) * i)\r\n )));\r\n else if (type === BrRelativePos.Bottom)\r\n b.ApplyMatrix(\r\n MoveMatrix(spaceBox.min.clone().add(\r\n new Vector3(size.x - rightShrink, frontShrink, spaceSize * i + (i - 1) * thickness)\r\n )));\r\n else\r\n {\r\n b.ApplyMatrix(\r\n MoveMatrix(spaceBox.min.clone().add(\r\n new Vector3(size.x - rightShrink, frontShrink, singleSize * i + (i - 1) * thickness))\r\n ));\r\n }\r\n b.ApplyMatrix(spaceOCS);\r\n brs.push(b);\r\n }\r\n return brs;\r\n}\r\n\r\nexport function BuildVerticalBoards(opt: VerticalBoardOption, space: ISpaceParse, grooveOption?: IGrooveOption): Board[]\r\n{\r\n const spaceBox = space.SpaceBox;\r\n const spaceOCS = space.SpaceOCS;\r\n let size = spaceBox.getSize(new Vector3());\r\n const params = { L: size.x, W: size.y, H: size.z, BH: opt.thickness };\r\n\r\n let frontShrink = safeEval(opt.calcFrontShrink, params);\r\n let bottomShink = safeEval(opt.calcBottomShrink, params);\r\n let width: number;\r\n if (opt.isTotalWidth)\r\n width = size.y - frontShrink;\r\n else\r\n {\r\n width = safeEval(opt.calcWidth, params);\r\n }\r\n\r\n if (width <= 0)\r\n {\r\n Log(\"宽度无效,可能前缩过大,请修正\");\r\n return [];\r\n }\r\n\r\n let length: number;\r\n if (opt.isTotalLength)\r\n length = size.z - bottomShink;\r\n else\r\n {\r\n length = safeEval(opt.calcHeight, params);\r\n }\r\n\r\n let count = opt.count;\r\n let type = opt.boardRelative;\r\n let spaceSize = safeEval(opt.calcSpaceSize, params);\r\n let thickness = opt.thickness;\r\n\r\n let board = Board.CreateBoard(length, width, thickness, BoardType.Vertical);\r\n if (grooveOption)\r\n {\r\n board.KnifeRadius = safeEval(grooveOption.knifeRadius);\r\n board.GroovesAddDepth = safeEval(grooveOption.grooveAddDepth);\r\n board.GroovesAddWidth = safeEval(grooveOption.grooveAddWidth);\r\n board.GroovesAddLength = safeEval(grooveOption.grooveAddLength);\r\n }\r\n opt.height = length;\r\n opt.width = width;\r\n\r\n //等分单层空间大小\r\n let singleSize = (size.x - (thickness * count)) / (count + 1);\r\n\r\n let brs: Board[] = [];\r\n for (let i = 1; i <= count; i++)\r\n {\r\n let b = board.Clone() as Board;\r\n b.Name = opt.name;\r\n\r\n if (type === BrRelativePos.Left)\r\n b.ApplyMatrix(MoveMatrix(spaceBox.min.clone().add(\r\n new Vector3(spaceSize * i + (i - 1) * thickness, frontShrink, bottomShink)\r\n )));\r\n else if (type === BrRelativePos.Right)\r\n b.ApplyMatrix(MoveMatrix(spaceBox.min.clone().add(\r\n new Vector3(size.x - (spaceSize + thickness) * i, frontShrink, bottomShink)\r\n )));\r\n else\r\n b.ApplyMatrix(MoveMatrix(spaceBox.min.clone().add(\r\n new Vector3(singleSize * i + (i - 1) * thickness, frontShrink, bottomShink)\r\n )));\r\n\r\n b.ApplyMatrix(spaceOCS);\r\n brs.push(b);\r\n }\r\n return brs;\r\n}\r\n\r\nexport function BuildBehindBoards(opt: BehindBoardOption, space: ISpaceParse, grooveOption?: IGrooveOption): Board[]\r\n{\r\n let newBox = space.SpaceBox.clone();\r\n let spaceOcs = space.SpaceOCS;\r\n //判断延伸\r\n let leftExt = opt.leftExt;\r\n let rightExt = opt.rightExt;\r\n let topExt = opt.topExt;\r\n let bottomExt = opt.bottomExt;\r\n newBox.max.add(new Vector3(leftExt + rightExt, 0, topExt + bottomExt));\r\n newBox.translate(new Vector3(-leftExt, 0, -bottomExt));\r\n\r\n //获取背板高度\r\n let size = newBox.getSize(new Vector3());\r\n const params = { L: size.x, W: size.y, H: size.z, BH: opt.thickness };\r\n let height: number;\r\n if (opt.boardPosition === BehindHeightPositon.AllHeight)\r\n height = size.z;\r\n else\r\n height = safeEval(opt.calcHeight, params);\r\n\r\n let moveDist = safeEval(opt.calcMoveDist, params);\r\n\r\n //判断背板位置,更新背板高度\r\n switch (opt.boardPosition)\r\n {\r\n case BehindHeightPositon.ForTop:\r\n newBox.min.add(new Vector3(0, 0, size.z - height));\r\n newBox.translate(new Vector3(0, 0, moveDist));\r\n break;\r\n case BehindHeightPositon.ForBottom:\r\n newBox.max.add(new Vector3(0, 0, height));\r\n newBox.translate(new Vector3(0, 0, -moveDist));\r\n break;\r\n }\r\n\r\n let count = opt.count;\r\n //相对位置\r\n let relPos = opt.boardRelative;\r\n //单层空间宽度\r\n let spaceSize = safeEval(opt.calcSpaceSize, params);\r\n let thickness = opt.thickness;\r\n\r\n let board = Board.CreateBoard(height, size.x, thickness, BoardType.Behind);\r\n if (grooveOption)\r\n {\r\n board.KnifeRadius = safeEval(grooveOption.knifeRadius);\r\n board.GroovesAddDepth = safeEval(grooveOption.grooveAddDepth);\r\n board.GroovesAddWidth = safeEval(grooveOption.grooveAddWidth);\r\n board.GroovesAddLength = safeEval(grooveOption.grooveAddLength);\r\n }\r\n\r\n opt.height = height;\r\n opt.width = size.x;\r\n\r\n //等分单层空间大小\r\n let singleSize = (size.y - (thickness * count)) / (count + 1);\r\n\r\n let brs: Board[] = [];\r\n //构建板件\r\n for (let i = 1; i <= count; i++)\r\n {\r\n let b = board.Clone();\r\n b.Name = opt.name;\r\n\r\n if (relPos === BrRelativePos.Front)\r\n b.ApplyMatrix(MoveMatrix(newBox.min.clone().add(new Vector3(0, spaceSize * i + thickness * i, 0))));\r\n else if (relPos === BrRelativePos.Back)\r\n b.ApplyMatrix(MoveMatrix(newBox.min.clone().add(\r\n new Vector3(0, size.y - spaceSize * i - (i - 1) * thickness, 0)\r\n )));\r\n else\r\n b.ApplyMatrix(MoveMatrix(newBox.min.clone().add(\r\n new Vector3(0, (singleSize + thickness) * i, 0)\r\n )));\r\n\r\n b.ApplyMatrix(spaceOcs);\r\n\r\n brs.push(b);\r\n }\r\n return brs;\r\n}\r\n\r\nexport function ExtendsBoardThickness(temp: TemplateRecord, thickness: number)\r\n{\r\n let bhPar = temp.GetParam(\"BH\");\r\n if (bhPar)\r\n {\r\n bhPar.expr = thickness;\r\n if (temp.Parent)\r\n {\r\n let rootBh = safeEval(temp.Root.GetParam(\"BH\")?.value as string);\r\n bhPar.expr = rootBh === thickness ? \"$BH\" : thickness;\r\n }\r\n }\r\n}\r\nexport function ExtendsbrThick2(temp: TemplateWineRackRecord)\r\n{\r\n let bh2Par = temp.GetParam(\"BH2\");\r\n if (bh2Par)\r\n {\r\n let bh2 = temp.Option.brThick2;\r\n bh2Par.value = bh2;\r\n if (temp.Option.isExtendsBH2)\r\n {\r\n if (temp.Parent)\r\n {\r\n let rootBh = safeEval(temp.Root.GetParam(\"BH\")?.value as string);\r\n bh2Par.expr = rootBh === bh2 ? \"$BH\" : bh2;\r\n }\r\n }\r\n else\r\n {\r\n bh2Par.expr = \"\";\r\n }\r\n }\r\n}\r\n","import { ExtendsBoardThickness } from \"../../../Add-on/DrawBoard/BuildBoardTool\";\r\nimport { EBoardKeyList } from \"../../../Common/BoardKeyList\";\r\nimport { ISpaceParse } from \"../../../Geometry/SpaceParse/ISpaceParse\";\r\nimport { BoardConfigOption, BoardProcessOption } from \"../../../UI/Store/BoardInterface\";\r\nimport { AutoRecord } from \"../../AutoRecord\";\r\nimport { Factory } from \"../../CADFactory\";\r\nimport { CADFiler } from \"../../CADFiler\";\r\nimport { Board } from \"../../Entity/Board\";\r\nimport { TemplateRecord } from \"../TemplateRecord\";\r\n\r\n/**\r\n * 板件模板的基类.(层板,立板,背板)\r\n */\r\n@Factory\r\nexport class TemplateBoardRecord extends TemplateRecord\r\n{\r\n //板件初始化的时候需要设置周围板件的数据,通常只有一次\r\n UseBoardProcessOption = false;\r\n BoardProcessOption: BoardProcessOption;\r\n\r\n @AutoRecord DrawBoardCount = 1;\r\n\r\n protected _option: BoardConfigOption;\r\n // InitBaseParams()\r\n // {\r\n // super.InitBaseParams();\r\n // return this;\r\n // }\r\n get Option()\r\n {\r\n return Object.assign({}, this._option);\r\n }\r\n set Option(option: BoardConfigOption)\r\n {\r\n this.WriteAllObjectRecord();\r\n Object.assign(this._option, option);\r\n ExtendsBoardThickness(this, option.thickness);\r\n }\r\n protected GeneralBoardList(space: ISpaceParse): Board[]\r\n {\r\n return [];\r\n }\r\n\r\n Purge()\r\n {\r\n super.Purge();\r\n if (this.Objects.length === 0)\r\n this.IsClear = true;\r\n }\r\n\r\n protected async Update()\r\n {\r\n await super.Update();\r\n if (this.IsClear) return;\r\n\r\n let thickness = this.GetParam(\"BH\")?.value as number;\r\n if (thickness)\r\n this._option.thickness = thickness;\r\n let nbrs = this.GeneralBoardList(this.SpaceParse);\r\n\r\n let sbrs = this.PositioningSupportBoards;\r\n\r\n if (this.BoardProcessOption)\r\n {\r\n for (let br of nbrs)\r\n br.BoardProcessOption = this.BoardProcessOption;\r\n this.BoardProcessOption = undefined;\r\n }\r\n if (this.UseBoardProcessOption && sbrs.length > 0)\r\n {\r\n let cname = sbrs[0].BoardProcessOption[EBoardKeyList.CabinetName];\r\n let rname = sbrs[0].BoardProcessOption[EBoardKeyList.RoomName];\r\n for (let br of nbrs)\r\n {\r\n br.BoardProcessOption[EBoardKeyList.CabinetName] = cname;\r\n br.BoardProcessOption[EBoardKeyList.RoomName] = rname;\r\n }\r\n\r\n this.UseBoardProcessOption = false;\r\n }\r\n\r\n let refBr: Board;\r\n if (this.Objects.length > 0)\r\n refBr = this.Objects[0].Object as Board;\r\n\r\n for (let i = nbrs.length; i < this.Objects.length; i++)\r\n this.Objects[i].Object.Erase();\r\n\r\n for (let i = 0; i < nbrs.length; i++)\r\n {\r\n if (i < this.Objects.length)\r\n {\r\n let br = this.Objects[i].Object as Board;\r\n if (i >= this.DrawBoardCount)\r\n br.Erase(false);\r\n br.Position = nbrs[i].Position;\r\n br.Width = nbrs[i].Width;\r\n br.Height = nbrs[i].Height;\r\n br.Thickness = nbrs[i].Thickness;\r\n }\r\n else\r\n {\r\n if (refBr)\r\n {\r\n nbrs[i].ContourCurve = refBr.ContourCurve.Clone();\r\n nbrs[i].BoardProcessOption = refBr.BoardProcessOption;\r\n }\r\n this._db.ModelSpace.Append(nbrs[i]);\r\n this.Objects.push(nbrs[i].Id);\r\n }\r\n }\r\n this.DrawBoardCount = nbrs.length;\r\n\r\n let brs = this.Objects.filter(id => !id.IsErase).map(id => id.Object as Board);\r\n brs.map(br => br.SpaceOCS = this._CacheSpaceCS);\r\n }\r\n\r\n ReadFile(file: CADFiler)\r\n {\r\n let ver = file.Read();\r\n super.ReadFile(file);\r\n this.DrawBoardCount = file.Read();\r\n }\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(1);\r\n super.WriteFile(file);\r\n file.Write(this.DrawBoardCount);\r\n }\r\n}\r\n","import { BuildBehindBoards } from \"../../../Add-on/DrawBoard/BuildBoardTool\";\r\nimport { ISpaceParse } from \"../../../Geometry/SpaceParse/ISpaceParse\";\r\nimport { BehindBoardOption, IGrooveOption } from \"../../../UI/Store/BoardInterface\";\r\nimport { Factory } from \"../../CADFactory\";\r\nimport { TemplateBoardRecord } from \"./TemplateBoard\";\r\nimport { DefaultBehindBoardConfig } from \"../../../Editor/DefaultConfig\";\r\nimport { CADFiler } from \"../../CADFiler\";\r\n\r\n/**\r\n * 背板模板\r\n */\r\n@Factory\r\nexport class TemplateBehindBoard extends TemplateBoardRecord\r\n{\r\n protected _option: BehindBoardOption = { ...DefaultBehindBoardConfig };\r\n private grooveoption: IGrooveOption = {\r\n grooveAddLength: \"0\",\r\n grooveAddWidth: \"0\",\r\n grooveAddDepth: \"0\",\r\n knifeRadius: \"3\",\r\n };\r\n constructor()\r\n {\r\n super();\r\n this.name = \"背板(自动)\";\r\n }\r\n set Grooveoption(option: IGrooveOption)\r\n {\r\n this.WriteAllObjectRecord();\r\n Object.assign(this.grooveoption, option);\r\n }\r\n GeneralBoardList(space: ISpaceParse)\r\n {\r\n return BuildBehindBoards(this._option, space, this.grooveoption);\r\n }\r\n ReadFile(file: CADFiler)\r\n {\r\n let ver = file.Read();\r\n super.ReadFile(file);\r\n this._option.type = file.Read();\r\n this._option.name = file.Read();\r\n this._option.leftExt = file.Read();\r\n this._option.rightExt = file.Read();\r\n this._option.topExt = file.Read();\r\n this._option.bottomExt = file.Read();\r\n this._option.thickness = file.Read();\r\n this._option.boardPosition = file.Read();\r\n this._option.calcHeight = file.Read();\r\n this._option.moveDist = file.Read();\r\n this._option.boardRelative = file.Read();\r\n this._option.spaceSize = file.Read();\r\n this._option.count = file.Read();\r\n\r\n this.grooveoption.grooveAddLength = file.Read();\r\n this.grooveoption.grooveAddWidth = file.Read();\r\n this.grooveoption.grooveAddDepth = file.Read();\r\n this.grooveoption.knifeRadius = file.Read();\r\n\r\n if (ver === 1)\r\n {\r\n this._option.calcSpaceSize = this._option.spaceSize.toString();\r\n this._option.calcMoveDist = this._option.moveDist.toString();\r\n }\r\n\r\n if (ver >= 2)\r\n {\r\n this._option.calcSpaceSize = file.Read();\r\n this._option.calcMoveDist = file.Read();\r\n }\r\n\r\n }\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(2);\r\n super.WriteFile(file);\r\n file.Write(this._option.type);\r\n file.Write(this._option.name);\r\n file.Write(this._option.leftExt);\r\n file.Write(this._option.rightExt);\r\n file.Write(this._option.topExt);\r\n file.Write(this._option.bottomExt);\r\n file.Write(this._option.thickness);\r\n file.Write(this._option.boardPosition);\r\n file.Write(this._option.calcHeight);\r\n file.Write(this._option.moveDist);\r\n file.Write(this._option.boardRelative);\r\n file.Write(this._option.spaceSize);\r\n file.Write(this._option.count);\r\n\r\n file.Write(this.grooveoption.grooveAddLength);\r\n file.Write(this.grooveoption.grooveAddWidth);\r\n file.Write(this.grooveoption.grooveAddDepth);\r\n file.Write(this.grooveoption.knifeRadius);\r\n\r\n file.Write(this._option.calcSpaceSize);\r\n file.Write(this._option.calcMoveDist);\r\n\r\n }\r\n}\r\n","import { Vector2, Vector3 } from \"three\";\r\nimport { arrayLast } from \"../../Common/ArrayExt\";\r\nimport { EBoardKeyList } from \"../../Common/BoardKeyList\";\r\nimport { Log } from \"../../Common/Log\";\r\nimport { Singleton } from \"../../Common/Singleton\";\r\nimport { Arc } from \"../../DatabaseServices/Entity/Arc\";\r\nimport { Board } from \"../../DatabaseServices/Entity/Board\";\r\nimport { Polyline } from \"../../DatabaseServices/Entity/Polyline\";\r\nimport { AsVector2, equalv3, isParallelTo, XAxis, YAxis } from \"../../Geometry/GeUtils\";\r\nimport { ISpaceParse } from \"../../Geometry/SpaceParse/ISpaceParse\";\r\nimport { BoardType, DrillType, IHighSealedItem, LinesType } from \"../../UI/Store/BoardInterface\";\r\nimport { ELatticeArrayType, ILatticeOption } from \"../../UI/Store/LatticeInterface\";\r\n\r\nexport class DrawLatticeDrawerTool extends Singleton\r\n{\r\n private _config: ILatticeOption;\r\n private space: ISpaceParse;\r\n private leftBr: Board;\r\n private rightBr: Board;\r\n private frontBr: Board;\r\n private backBr: Board;\r\n private haveTopBr: boolean = false;\r\n get Config()\r\n {\r\n return this._config;\r\n }\r\n Draw(space: ISpaceParse, config: ILatticeOption): Board[]\r\n {\r\n this._config = config;\r\n this.space = space;\r\n\r\n this.ParseSpaceBrs();\r\n\r\n this.HandleSpace();\r\n\r\n let size = space.Size;\r\n\r\n if (config.arrayType === ELatticeArrayType.ByWidth)\r\n {\r\n config.widthCount = Math.floor((size.x + config.thickness) / (config.gripWidth + config.thickness));\r\n config.depthCount = Math.floor((size.y + config.thickness) / (config.gripDepth + config.thickness));\r\n }\r\n\r\n if (config.widthCount <= 0 || config.depthCount <= 0)\r\n {\r\n this.End();\r\n return [];\r\n }\r\n\r\n let gripWidth = (size.x - ((config.widthCount - 1) * config.thickness)) / config.widthCount;\r\n let gripDepth = (size.y - (config.depthCount - 1) * config.thickness) / config.depthCount;\r\n config.gripWidth = gripWidth;\r\n config.gripDepth = gripDepth;\r\n\r\n let position = space.SpaceBox.min.clone();\r\n\r\n let verBr = Board.CreateBoard(size.z, size.y, config.thickness, BoardType.Vertical);\r\n //分析切角圆弧的结果\r\n let res = this.ParseArcLenOrObliuqeAng(verBr);\r\n if (!res)\r\n {\r\n this.End();\r\n return [];\r\n };\r\n //左右侧板跟随\r\n this.ChangeLeftRightBr(verBr);\r\n\r\n this.ParseBrTooth(verBr);\r\n this.ParseHighSealing(verBr, config.leftSealed, config.rightSealed, config.upSealed, config.downSealed, false);\r\n this.WriteBoardProcessOption(verBr);\r\n let lattices: Board[] = [];\r\n for (let i = 1; i < config.widthCount; i++)\r\n {\r\n let br = verBr.Clone();\r\n br.Name = \"竖板\" + i;\r\n let pos = position.clone();\r\n pos.add(new Vector3(gripWidth * i + (i - 1) * config.thickness));\r\n br.Position = pos;\r\n br.ApplyMatrix(space.SpaceOCS);\r\n lattices.push(br);\r\n }\r\n\r\n let beBr = Board.CreateBoard(size.z, size.x, config.thickness, BoardType.Behind);\r\n this.ParseBrTooth(beBr);\r\n this.ParseHighSealing(beBr, config.leftSealed, config.rightSealed, config.upSealed, config.downSealed, true);\r\n this.WriteBoardProcessOption(beBr);\r\n for (let i = 1; i < config.depthCount; i++)\r\n {\r\n let br = beBr.Clone();\r\n br.Name = \"横板\" + i;\r\n let pos = position.clone();\r\n pos.add(new Vector3(0, (gripDepth + config.thickness) * i));\r\n br.Position = pos;\r\n br.ApplyMatrix(space.SpaceOCS);\r\n lattices.push(br);\r\n }\r\n\r\n this.End();\r\n return lattices;\r\n }\r\n private HandleSpace()\r\n {\r\n const config = this.Config;\r\n let box = this.space.SpaceBox;\r\n box.max.add(new Vector3(0, 0, -this.Config.downDist));\r\n //处理间隙\r\n box.min.add(new Vector3(config.space, config.space));\r\n box.max.add(new Vector3(-config.space, -config.space));\r\n\r\n if (this.frontBr && this.backBr)\r\n {\r\n let backPos = this.backBr.Position.applyMatrix4(this.frontBr.OCSInv);\r\n\r\n let addH = backPos.y + this.backBr.Height - this.frontBr.Height;\r\n if (addH > 0)\r\n {\r\n this.space.SpaceBox.max.add(new Vector3(0, 0, addH));\r\n if (config.isAuto)\r\n config.arcLen = addH;\r\n }\r\n else\r\n Log(\"挡板高度大于等于格子抽板高度,无法自动识别弧度!\");\r\n }\r\n\r\n if (this.haveTopBr)\r\n {\r\n Log(\"顶板不为空,绘制格子抽可能错误!\");\r\n }\r\n }\r\n private ChangeLeftRightBr(refBr: Board)\r\n {\r\n const config = this.Config;\r\n if (this.leftBr && this.rightBr)\r\n {\r\n if (config.isChange)\r\n {\r\n let lWidth = this.leftBr.Width;\r\n let lHeight = this.leftBr.Height;\r\n let lgrooves = this.leftBr.Grooves.slice();\r\n let rgrooves = this.rightBr.Grooves.slice();\r\n\r\n let rWidth = this.rightBr.Width;\r\n let rHeight = this.rightBr.Height;\r\n\r\n this.leftBr.ContourCurve = refBr.ContourCurve.Clone();\r\n this.rightBr.ContourCurve = refBr.ContourCurve.Clone();\r\n\r\n this.leftBr.Width = lWidth;\r\n this.leftBr.Height = lHeight;\r\n this.rightBr.Width = rWidth;\r\n this.rightBr.Height = rHeight;\r\n\r\n if (this.leftBr.Grooves.length !== lgrooves.length)\r\n this.leftBr.AppendGrooves(lgrooves);\r\n if (this.rightBr.Grooves.length !== rgrooves.length)\r\n this.rightBr.AppendGrooves(rgrooves);\r\n\r\n }\r\n else\r\n {\r\n // 左右侧板不跟随更改的时候,不要把它变成矩形\r\n // this.leftBr.InitBoard(this.leftBr.Height, this.leftBr.Width, this.leftBr.Thickness, this.leftBr.BoardType);\r\n // this.rightBr.InitBoard(this.rightBr.Height, this.rightBr.Width, this.rightBr.Thickness, this.rightBr.BoardType);\r\n }\r\n }\r\n }\r\n private ParseBrTooth(br: Board)\r\n {\r\n const config = this.Config;\r\n\r\n let grooveLenAdd = config.knifeRad;\r\n\r\n let initPts: Vector3[] = [];\r\n if (br.BoardType === BoardType.Behind)\r\n {\r\n let addWidth = (config.grooveAddWidth - 2 * config.upSealed) / 2;\r\n let p1 = new Vector3(br.Width - config.gripWidth + addWidth, br.Height);\r\n let p2 = new Vector3(br.Width - config.gripWidth + addWidth, br.Height / 2 - grooveLenAdd);\r\n let p3 = new Vector3(br.Width - config.gripWidth - br.Thickness - addWidth, br.Height / 2 - grooveLenAdd);\r\n let p4 = new Vector3(br.Width - config.gripWidth - br.Thickness - addWidth, br.Height);\r\n initPts.push(p1, p2, p3, p4);\r\n for (let i = 2; i < config.widthCount; i++)\r\n {\r\n initPts.push(\r\n ...[p1, p2, p3, p4].map(p => p.clone().add(new Vector3(-(config.gripWidth + br.Thickness) * (i - 1))))\r\n );\r\n }\r\n let cu = br.ContourCurve as Polyline;\r\n cu.AddVertexAt(cu.EndParam - 1, initPts.map(p => AsVector2(p)));\r\n br.ContourCurve = cu;\r\n }\r\n else\r\n {\r\n let addWidth = (config.grooveAddWidth - 2 * config.downSealed) / 2;\r\n let p1 = new Vector3(config.gripDepth - addWidth, 0);\r\n let p2 = new Vector3(config.gripDepth - addWidth, br.Height / 2 + grooveLenAdd);\r\n let p3 = new Vector3(config.gripDepth + br.Thickness + addWidth, br.Height / 2 + grooveLenAdd);\r\n let p4 = new Vector3(config.gripDepth + br.Thickness + addWidth, 0);\r\n initPts.push(p1, p2, p3, p4);\r\n for (let i = 2; i < config.depthCount; i++)\r\n {\r\n initPts.push(\r\n ...[p1, p2, p3, p4].map(p => p.clone().add(new Vector3((config.gripDepth + br.Thickness) * (i - 1))))\r\n );\r\n }\r\n let cu = br.ContourCurve as Polyline;\r\n cu.AddVertexAt(1, initPts.map(p => AsVector2(p)));\r\n br.ContourCurve = cu;\r\n }\r\n }\r\n private ParseSpaceBrs()\r\n {\r\n let vertBrs: Board[] = this.space.BoardMap.get(BoardType.Vertical);\r\n if (vertBrs && vertBrs.length > 1)\r\n {\r\n vertBrs.sort((br1, br2) =>\r\n {\r\n return br1.Position.applyMatrix4(this.space.SpaceOCSInv).x - br2.Position.applyMatrix4(this.space.SpaceOCSInv).x;\r\n });\r\n this.leftBr = vertBrs[0];\r\n this.rightBr = arrayLast(vertBrs);\r\n }\r\n\r\n let behindBrs = this.space.BoardMap.get(BoardType.Behind);\r\n\r\n if (behindBrs && behindBrs.length > 1)\r\n {\r\n behindBrs.sort((br1, br2) =>\r\n {\r\n return br1.Position.applyMatrix4(this.space.SpaceOCSInv).y - br2.Position.applyMatrix4(this.space.SpaceOCSInv).y;\r\n });\r\n\r\n this.backBr = arrayLast(behindBrs);\r\n this.frontBr = behindBrs[0];\r\n }\r\n\r\n let lyBrs = this.space.BoardMap.get(BoardType.Layer);\r\n this.haveTopBr = lyBrs && lyBrs.length > 1;\r\n }\r\n private ParseArcLenOrObliuqeAng(br: Board)\r\n {\r\n const config = this.Config;\r\n const size = this.space.Size;\r\n\r\n if (config.isOpenCut)\r\n {\r\n if (config.upCut > size.z || config.downCut > size.z)\r\n return true;\r\n if (config.upCut < 1 || config.downCut < 1)\r\n return true;\r\n let cu = br.ContourCurve as Polyline;\r\n cu.AddVertexAt(3, new Vector2(config.upCut, br.Height));\r\n cu.SetPointAt(4, new Vector2(0, br.Height - config.downCut));\r\n }\r\n else\r\n {\r\n if (config.arcLen > size.z || config.arcLen > size.y)\r\n {\r\n Log(\"圆弧角过大\");\r\n return false;\r\n }\r\n let cu = br.ContourCurve as Polyline;\r\n if (config.arcLen === 0)\r\n {\r\n Log(\"圆弧角为0\");\r\n return true;\r\n }\r\n cu.AddVertexAt(3, new Vector2(config.arcLen, br.Height));\r\n cu.SetBulgeAt(3, Math.tan(Math.PI / 8));\r\n cu.SetPointAt(4, new Vector2(0, br.Height - config.arcLen));\r\n }\r\n\r\n return true;\r\n }\r\n private WriteBoardProcessOption(br: Board)\r\n {\r\n const config = this.Config;\r\n br.KnifeRadius = config.knifeRad;\r\n br.BoardProcessOption.sealedUp = config.upSealed.toString();\r\n br.BoardProcessOption.sealedDown = config.downSealed.toString();\r\n br.BoardProcessOption.sealedLeft = config.leftSealed.toString();\r\n br.BoardProcessOption.sealedRight = config.rightSealed.toString();\r\n br.BoardProcessOption.drillType = DrillType.None;\r\n br.BoardProcessOption.highDrill.fill(DrillType.None);\r\n br.BoardProcessOption[EBoardKeyList.Lines] = LinesType.Reverse; //生成的板设置为反纹\r\n }\r\n protected ParseHighSealing(br: Board, leftSealed: number, rightSealed: number, topSealed: number, downSealed: number, isHor: boolean)\r\n {\r\n let cu = br.ContourCurve as Polyline;\r\n br.BoardProcessOption.sealedLeft = leftSealed.toString();\r\n br.BoardProcessOption.sealedRight = rightSealed.toString();\r\n br.BoardProcessOption.sealedUp = topSealed.toString();\r\n br.BoardProcessOption.sealedDown = downSealed.toString();\r\n\r\n let highSeals: IHighSealedItem[] = [];\r\n\r\n let sizes = [...new Set([downSealed, rightSealed, topSealed, leftSealed])];\r\n let downSeal = {\r\n size: downSealed, color: sizes.indexOf(downSealed) + 1\r\n };\r\n let rigthSeal = {\r\n size: rightSealed, color: sizes.indexOf(rightSealed) + 1\r\n };\r\n let topSeal = { size: topSealed, color: sizes.indexOf(topSealed) + 1 };\r\n let leftSeal = { size: leftSealed, color: sizes.indexOf(leftSealed) + 1 };\r\n\r\n if (isHor)\r\n {\r\n highSeals.push(downSeal, rigthSeal);\r\n\r\n for (let i = 1; i <= cu.EndParam - 3; i++)\r\n {\r\n highSeals.push(topSeal);\r\n }\r\n highSeals.push(leftSeal);\r\n }\r\n else\r\n {\r\n let count = (this._config.depthCount - 1) * 3 + this._config.depthCount;\r\n\r\n for (let i = 0; i < count; i++)\r\n {\r\n highSeals.push(downSeal);\r\n }\r\n for (let i = count; i < cu.EndParam; i++)\r\n {\r\n let c = cu.GetCurveAtIndex(i);\r\n if (c instanceof Arc)\r\n break;\r\n let derv = c.GetFistDeriv(0).normalize();\r\n if (equalv3(derv, YAxis))\r\n highSeals.push(rigthSeal);\r\n else if (isParallelTo(derv, XAxis))\r\n highSeals.push(topSeal);\r\n else if (equalv3(derv, YAxis.clone().negate()))\r\n highSeals.push(leftSeal);\r\n else\r\n highSeals.push(topSeal);\r\n }\r\n }\r\n br.BoardProcessOption.highSealed = highSeals;\r\n }\r\n private End()\r\n {\r\n this._config = null;\r\n this.leftBr = null;\r\n this.rightBr = null;\r\n this.backBr = null;\r\n this.frontBr = null;\r\n this.haveTopBr = false;\r\n }\r\n}\r\n","import { Vector3 } from \"three\";\r\nimport { ExtendsBoardThickness } from \"../../../Add-on/DrawBoard/BuildBoardTool\";\r\nimport { DrawLatticeDrawerTool } from \"../../../Add-on/LatticeDrawer/LatticeDrawerTool\";\r\nimport { EBoardKeyList } from \"../../../Common/BoardKeyList\";\r\nimport { DefaultLatticeConfig } from \"../../../Editor/DefaultConfig\";\r\nimport { Box3Ext } from \"../../../Geometry/Box\";\r\nimport { ISpaceParse } from \"../../../Geometry/SpaceParse/ISpaceParse\";\r\nimport { ILatticeOption } from \"../../../UI/Store/LatticeInterface\";\r\nimport { Factory } from \"../../CADFactory\";\r\nimport { CADFiler } from \"../../CADFiler\";\r\nimport { Board } from \"../../Entity/Board\";\r\nimport { TemplateRecord } from \"../TemplateRecord\";\r\n\r\n@Factory\r\nexport class TemplateLatticeRecord extends TemplateRecord\r\n{\r\n private option: ILatticeOption = { ...DefaultLatticeConfig };\r\n constructor()\r\n {\r\n super();\r\n this.name = \"格子抽(自动)\";\r\n }\r\n get Option()\r\n {\r\n return Object.assign({}, this.option);\r\n }\r\n set Option(option: ILatticeOption)\r\n {\r\n this.WriteAllObjectRecord();\r\n Object.assign(this.option, option);\r\n ExtendsBoardThickness(this, option.thickness);\r\n }\r\n\r\n // InitBaseParams()\r\n // {\r\n // super.InitBaseParams();\r\n // return this;\r\n // }\r\n\r\n protected async Update()\r\n {\r\n await super.Update();\r\n\r\n let thickness = this.GetParam(\"BH\")?.value as number;\r\n if (thickness)\r\n this.option.thickness = thickness;\r\n\r\n let tool = DrawLatticeDrawerTool.GetInstance() as DrawLatticeDrawerTool;\r\n\r\n let sbrs = this.PositioningSupportBoards;\r\n let space = new ISpaceParse(sbrs, this._CacheSpaceCS);\r\n space.ParseOK = true;\r\n space.SpaceBox = new Box3Ext(new Vector3(), this._CacheSpaceSize);\r\n\r\n let nbrs = tool.Draw(space, this.Option);\r\n\r\n if (sbrs.length > 0)\r\n {\r\n for (let br of nbrs)\r\n {\r\n br.BoardProcessOption[EBoardKeyList.CabinetName] = sbrs[0].BoardProcessOption[EBoardKeyList.CabinetName];\r\n br.BoardProcessOption[EBoardKeyList.RoomName] = sbrs[0].BoardProcessOption[EBoardKeyList.RoomName];\r\n }\r\n }\r\n\r\n\r\n for (let i = nbrs.length; i < this.Objects.length; i++)\r\n this.Objects[i].Object.Erase();\r\n\r\n for (let i = 0; i < nbrs.length; i++)\r\n {\r\n if (i < this.Objects.length)\r\n {\r\n let br = this.Objects[i].Object as Board;\r\n br.Erase(false);\r\n br.CopyFrom(nbrs[i]);\r\n br.SpaceOCS = this._CacheSpaceCS;\r\n }\r\n else\r\n {\r\n nbrs[i].SpaceOCS = this._CacheSpaceCS;\r\n this._db.ModelSpace.Append(nbrs[i]);\r\n this.Objects.push(nbrs[i].Id);\r\n }\r\n }\r\n }\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 super.ReadFile(file);\r\n\r\n this.option.arrayType = file.Read();\r\n this.option.gripWidth = file.Read();\r\n this.option.gripDepth = file.Read();\r\n this.option.widthCount = file.Read();\r\n this.option.depthCount = file.Read();\r\n this.option.knifeRad = file.Read();\r\n this.option.thickness = file.Read();\r\n this.option.arcLen = file.Read();\r\n this.option.downDist = file.Read();\r\n this.option.space = file.Read();\r\n this.option.grooveAddWidth = file.Read();\r\n this.option.upSealed = file.Read();\r\n this.option.downSealed = file.Read();\r\n this.option.leftSealed = file.Read();\r\n this.option.rightSealed = file.Read();\r\n this.option.isAuto = file.Read();\r\n this.option.isChange = file.Read();\r\n this.option.isOpenCut = file.Read();\r\n this.option.upCut = file.Read();\r\n this.option.downCut = file.Read();\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.option.arrayType);\r\n file.Write(this.option.gripWidth);\r\n file.Write(this.option.gripDepth);\r\n file.Write(this.option.widthCount);\r\n file.Write(this.option.depthCount);\r\n file.Write(this.option.knifeRad);\r\n file.Write(this.option.thickness);\r\n\r\n file.Write(this.option.arcLen);\r\n file.Write(this.option.downDist);\r\n file.Write(this.option.space);\r\n file.Write(this.option.grooveAddWidth);\r\n file.Write(this.option.upSealed);\r\n file.Write(this.option.downSealed);\r\n file.Write(this.option.leftSealed);\r\n file.Write(this.option.rightSealed);\r\n file.Write(this.option.isAuto);\r\n file.Write(this.option.isChange);\r\n\r\n file.Write(this.option.isOpenCut);\r\n file.Write(this.option.upCut);\r\n file.Write(this.option.downCut);\r\n }\r\n //#endregion\r\n}\r\n","import { BufferGeometry, Object3D, Points, PointsMaterial } from 'three';\r\nimport { DisposeThreeObj } from '../Common/Dispose';\r\nimport { GetEntity, IsEntity } from '../Common/Utils';\r\nimport { BufferGeometryUtils } from '../Geometry/BufferGeometryUtils';\r\n\r\nexport class GripScene extends Object3D\r\n{\r\n\r\n _GripMaterial: PointsMaterial;\r\n\r\n _GripMap = new Map();\r\n constructor()\r\n {\r\n super();\r\n this._GripMaterial = new PointsMaterial({\r\n size: 15,\r\n color: 0x001dfa,\r\n sizeAttenuation: false\r\n });\r\n }\r\n //增加\r\n Append(obj: Object3D)\r\n {\r\n if (this._GripMap.has(obj))\r\n return;\r\n\r\n if (IsEntity(obj))\r\n {\r\n let en = GetEntity(obj);\r\n let pts = en.GetGripPoints();\r\n if (pts.length > 1000) return;//显示太多的夹点会导致性能过低\r\n let geo = BufferGeometryUtils.CreateFromPts(pts);\r\n let ptsObj = new Points(geo, this._GripMaterial);\r\n ptsObj.userData.Entity = en;\r\n this.add(ptsObj);\r\n this._GripMap.set(obj, ptsObj);\r\n }\r\n }\r\n Remove(obj: Object3D)\r\n {\r\n let pts = this._GripMap.get(obj);\r\n if (pts)\r\n {\r\n DisposeThreeObj(pts);\r\n this.remove(pts);\r\n this._GripMap.delete(obj);\r\n }\r\n }\r\n\r\n //删除所有.\r\n Clear()\r\n {\r\n for (let [, pts] of this._GripMap)\r\n {\r\n this.remove(pts);\r\n pts.geometry.dispose();\r\n }\r\n this._GripMap.clear();\r\n }\r\n Update(entity: Object3D)\r\n {\r\n this.Remove(entity);\r\n this.Append(entity);\r\n }\r\n UpdateAll()\r\n {\r\n for (let [obj, ptsObj] of this._GripMap)\r\n {\r\n if (obj.parent && obj.visible)\r\n {\r\n let en = GetEntity(obj);\r\n let geo = ptsObj.geometry as BufferGeometry;\r\n let pts = en.GetGripPoints();\r\n if (!BufferGeometryUtils.UpdatePts(geo, pts))\r\n {\r\n geo.dispose();\r\n ptsObj.geometry = BufferGeometryUtils.CreateFromPts(pts);\r\n }\r\n }\r\n else\r\n {\r\n this.Remove(obj);\r\n }\r\n }\r\n }\r\n}\r\n","import { Object3D } from \"three\";\r\nimport { GetEntity } from \"../Common/Utils\";\r\nimport { Entity } from \"../DatabaseServices/Entity/Entity\";\r\nimport { GripScene } from \"../GraphicsSystem/GripScene\";\r\n\r\nexport interface Filter\r\n{\r\n //需要过滤的图元类型,如[Line,Arc]].\r\n filterTypes?: any[];\r\n filterFunction?: (obj: Object3D, ent?: Entity) => boolean;\r\n /**\r\n * 过滤掉已经被删除的图元或者未加入到数据库的图元\r\n */\r\n filterErase?: boolean;\r\n}\r\n\r\nexport function CheckFilter(obj: Object3D, filter?: Filter)\r\n{\r\n if (!obj.visible || obj instanceof GripScene)\r\n return false;\r\n if (!filter)\r\n return true;\r\n\r\n let ent = GetEntity(obj);\r\n if (filter.filterErase && (!ent || ent.Id === undefined || ent.IsErase))\r\n return false;\r\n\r\n if (filter.filterFunction && !filter.filterFunction(obj, ent))\r\n return false;\r\n if (filter.filterTypes && filter.filterTypes.some(T => ent instanceof T) !== true)\r\n return false;\r\n return true;\r\n}\r\n","import { Box2, Matrix4, Object3D, OrthographicCamera, PerspectiveCamera, Vector2, Vector3 } from 'three';\r\nimport { BoxCheckIntersect } from '../Geometry/CheckIntersect';\r\nimport { IViewer } from '../GraphicsSystem/IView';\r\nimport { SelectSetBase } from './SelectBase';\r\n\r\n//https://knowledge.autodesk.com/search-result/caas/CloudHelp/cloudhelp/2015/ENU/AutoCAD-AutoLISP/files/GUID-0F37CC5E-1559-4011-B8CF-A3BA0973B2C3-htm.html\r\nexport enum SelectType\r\n{\r\n None = 0,\r\n C = 1,//Crossing selection.\r\n W = 2 //Window selection.\r\n}\r\n\r\n/**\r\n * 矩形选区\r\n * 如果图形无法选择,那么注意该图形是否调用计算图形的包围球.\r\n */\r\nexport class SelectBox extends SelectSetBase\r\n{\r\n\r\n private _SelectBox: Box2 = new Box2();\r\n private _BoxCheck: BoxCheckIntersect;\r\n _SelectType: SelectType;\r\n _bIsPerCamera: boolean;\r\n\r\n constructor(view: IViewer, p1: Vector2, p2: Vector2, selectType?: SelectType)\r\n {\r\n super(view);\r\n this._SelectBox.setFromPoints([p1, p2]);\r\n this._SelectBox.max.add(new Vector2(1, 1));//避免盒子为空\r\n this._BoxCheck = new BoxCheckIntersect(this._SelectBox);\r\n this._SelectType = selectType;\r\n\r\n let camera = this._Viewer.Camera;\r\n if (camera instanceof OrthographicCamera || camera instanceof PerspectiveCamera)\r\n {\r\n let size = this._SelectBox.getSize(new Vector2());\r\n\r\n camera.setViewOffset(view.Width, view.Height, this._SelectBox.min.x, this._SelectBox.min.y, size.x, size.y);\r\n camera.updateProjectionMatrix();\r\n\r\n let _projScreenMatrix = new Matrix4();\r\n _projScreenMatrix.multiplyMatrices(camera.projectionMatrix, camera.matrixWorldInverse);\r\n\r\n this._Frustum.setFromProjectionMatrix(_projScreenMatrix);\r\n\r\n camera.clearViewOffset();\r\n }\r\n }\r\n\r\n get SelectBox()\r\n {\r\n return this._SelectBox;\r\n }\r\n\r\n //重载\r\n CheckSelectTraverse(obj: Object3D): boolean\r\n {\r\n if (!obj.visible) return false;\r\n\r\n if (this._SelectType === SelectType.C)\r\n {\r\n let isSelect = false;\r\n const traverse = (o: Object3D) =>\r\n {\r\n if (!o.visible) return;\r\n\r\n isSelect = this.CheckSelectC(o);\r\n if (isSelect) return;\r\n for (let c of o.children)\r\n {\r\n traverse(c);\r\n if (isSelect) return;\r\n }\r\n };\r\n\r\n traverse(obj);\r\n\r\n return isSelect;\r\n }\r\n else\r\n {\r\n //对于窗选,需要所有的实体都被包含才能被选中,所以这里区分了三个状态,0,-1,1,必须要有1,并且没有-1才行\r\n let isSelect = 0;//0表示没有被选中 1表示有被选中 -1表示选不重 某些东西没有几何体,返回0\r\n const traverse = (o: Object3D) =>\r\n {\r\n if (!o.visible) return;\r\n\r\n let isSelectObject = this.CheckSelectW(o);\r\n if (isSelectObject === 1)\r\n isSelect = isSelectObject;\r\n else if (isSelectObject === -1)\r\n {\r\n isSelect = isSelectObject;\r\n return;\r\n }\r\n\r\n for (let c of o.children)\r\n {\r\n traverse(c);\r\n if (isSelect === -1) return;\r\n }\r\n };\r\n\r\n traverse(obj);\r\n\r\n return isSelect === 1;\r\n }\r\n }\r\n\r\n private CheckSelectC(obj: Object3D): boolean\r\n {\r\n //@ts-ignore\r\n if (!obj.geometry || !this.FrustomIntersectObject(obj))\r\n return false;\r\n\r\n return this.IntersectObject(obj);\r\n }\r\n\r\n private CheckSelectW(obj: Object3D): 0 | -1 | 1\r\n {\r\n //@ts-ignore\r\n if (!obj.geometry || !this.FrustomIntersectObject(obj))\r\n return 0;\r\n\r\n return this.ContainerObject(obj);\r\n }\r\n\r\n //重载\r\n IntersectLine(p1Screen: Vector3, p2Screen: Vector3): boolean\r\n {\r\n return this._BoxCheck.IsIntersectLine(p1Screen, p2Screen);\r\n }\r\n /**\r\n * 包含该对象. 采用所有点都在选区内的做法\r\n */\r\n ContainerObject(obj: Object3D): 1 | -1\r\n {\r\n let { pts, } = this.GetObjectVertices(obj);\r\n if (pts.length === 0)\r\n return -1;\r\n for (let p of pts)\r\n {\r\n if (!this.ContainsPoint(p))\r\n return -1;\r\n }\r\n return 1;\r\n }\r\n //选择框包含该顶点\r\n ContainsPoint(ptWcs: Vector3): boolean\r\n {\r\n return this._Frustum.containsPoint(ptWcs);\r\n }\r\n}\r\n","import { Intersection, Object3D, OrthographicCamera, Raycaster, Vector2, Vector3 } from 'three';\r\nimport { HostApplicationServices } from '../ApplicationServices/HostApplicationServices';\r\nimport { equaln } from '../Geometry/GeUtils';\r\nimport { IViewer } from '../GraphicsSystem/IView';\r\nimport { SelectBox, SelectType } from './SelectBox';\r\nimport { CheckFilter, Filter } from './SelectFilter';\r\n\r\n/**\r\n * 构造射线投射器.\r\n * @param {Vector3} ptVcs 屏幕坐标系的点\r\n */\r\nexport function GenerateRaycaster(ptVcs: Vector3, view: IViewer): Raycaster\r\n{\r\n let raycaster = new Raycaster();\r\n raycaster.setFromCamera({\r\n x: (ptVcs.x / view.Width) * 2 - 1, //-1 到 1 所以 (x-(w/2))/(w/2) =>\r\n y: - (ptVcs.y / view.Height) * 2 + 1 //y轴相反\r\n }, view.Camera);\r\n if (view.Camera instanceof OrthographicCamera)\r\n raycaster.ray.origin.sub(raycaster.ray.direction.clone().multiplyScalar(1e6));\r\n return raycaster;\r\n}\r\n\r\nlet boxSize = new Vector2;\r\nlet pCenter = new Vector2;\r\n\r\n/**\r\n * 根据鼠标位置确定鼠标范围内选中的实体.\r\n * @param {Vector3} ptVcs 鼠标的屏幕点\r\n * @param {IViewer} view 指定视图\r\n * @param {Object3D} [selectObject] 选择的对象. 如果为空则为app.view.scene\r\n * @param {Boolean} selectBoxGetLastestEn 点选曲线和点时是否选取最后创建的 默认true\r\n * @returns {Object3D[]} 返回选择到的对象,注意该返回的对象并不会得到它的子对象.\r\n */\r\nexport function PointPick(ptVcs: Vector3,\r\n view: IViewer,\r\n filter?: Filter,\r\n selectObjects: Object3D[] = view.Scene.children,\r\n selectSize = 10\r\n): Object3D[]\r\n{\r\n let raycaster = GenerateRaycaster(ptVcs, view);\r\n\r\n let intersection = Raycast(raycaster, selectObjects, filter);\r\n if (intersection && intersection.object)\r\n return [intersection.object];\r\n\r\n pCenter.set(ptVcs.x, ptVcs.y);\r\n boxSize.set(selectSize, selectSize);\r\n let minPt = pCenter.clone().sub(boxSize);\r\n let maxPt = pCenter.clone().add(boxSize);\r\n\r\n let selectBox = new SelectBox(view, minPt, maxPt, SelectType.C);\r\n selectBox.Select(selectObjects, filter);\r\n\r\n return [...selectBox._SelectList];\r\n}\r\n\r\nexport function PointPickOneObject(\r\n ptVcs: Vector3,\r\n view: IViewer,\r\n filter?: Filter,\r\n selectObjects: Object3D[] = view.Scene.children,\r\n useSelectBox = true\r\n): Object3D | undefined\r\n{\r\n let raycaster = GenerateRaycaster(ptVcs, view);\r\n\r\n let intersection = Raycast(raycaster, selectObjects, filter);\r\n if (intersection && intersection.object)\r\n return intersection.object;\r\n\r\n if (!useSelectBox) return;\r\n\r\n let pCenter = new Vector2(ptVcs.x, ptVcs.y);\r\n let selectSize = new Vector2(HostApplicationServices.cursorSize.SquareSize, HostApplicationServices.cursorSize.SquareSize);\r\n let minPt = pCenter.clone().sub(selectSize);\r\n let maxPt = pCenter.clone().add(selectSize);\r\n\r\n let selectBox = new SelectBox(view, minPt, maxPt, SelectType.C);\r\n selectBox.Select(selectObjects, filter);\r\n\r\n if (selectBox.SelectEntityList.length > 0)\r\n {\r\n let maxId = -Infinity;\r\n let object: Object3D;\r\n for (let o of selectBox._SelectList)\r\n {\r\n if (o.id > maxId)\r\n {\r\n maxId = o.id;\r\n object = o;\r\n }\r\n }\r\n return object;\r\n }\r\n}\r\n\r\nexport function Raycast(ray: Raycaster, objectCol: Object3D[], filter?: Filter): Intersection | undefined\r\n{\r\n let pick: Intersection;\r\n\r\n for (let obj of objectCol)\r\n {\r\n if (!CheckFilter(obj, filter))\r\n continue;\r\n\r\n let intersects: Intersection[] = [];\r\n obj.traverse(o =>\r\n {\r\n //@ts-ignore\r\n if (intersects.length === 0 && o.visible && !o.isLine && !o.isPoints)\r\n o.raycast(ray, intersects);\r\n });\r\n if (intersects.length > 0)\r\n {\r\n for (let i of intersects)\r\n {\r\n if (!pick\r\n || pick.distance > i.distance\r\n || (equaln(pick.distance, i.distance) && pick.object.id < i.object.id))\r\n {\r\n pick = i;\r\n pick.object = obj;\r\n }\r\n }\r\n }\r\n }\r\n return pick;\r\n}\r\n","import { Box2, Box3, Intersection, Matrix4, Object3D, Raycaster, Vector2, Vector3 } from \"three\";\r\nimport { GetEntity } from \"../../Common/Utils\";\r\nimport { CylinderHole, GangDrillType } from \"../../DatabaseServices/3DSolid/CylinderHole\";\r\nimport { Contour } from \"../../DatabaseServices/Contour\";\r\nimport { Board } from \"../../DatabaseServices/Entity/Board\";\r\nimport { Polyline } from \"../../DatabaseServices/Entity/Polyline\";\r\nimport { ObjectId } from \"../../DatabaseServices/ObjectId\";\r\nimport { Shape } from \"../../DatabaseServices/Shape\";\r\nimport { Raycast } from \"../../Editor/PointPick\";\r\nimport { BoardFaceType, BoardGetFace } from \"../../Geometry/DrillParse/BoardGetFace\";\r\nimport { Face } from \"../../Geometry/DrillParse/Face\";\r\nimport { angleTo, AsVector2, equaln, equalv3, isParallelTo, MoveMatrix } from \"../../Geometry/GeUtils\";\r\nimport { RenderType } from \"../../GraphicsSystem/RenderType\";\r\nimport { INailRule, IShinkOption, LayerNailOption } from \"../../UI/Store/BoardInterface\";\r\n\r\nclass ActivityLayerBoardTool\r\n{\r\n NailRules: INailRule[];\r\n private GetBoardIntersection(face: Face, objects: Object3D[], br: Board)\r\n {\r\n for (let s of [0.5, 0.1, 0.9])\r\n {\r\n let center = new Vector3(face.Length * s, face.Width * s).applyMatrix4(face.OCS).add(face.Normal.negate());\r\n\r\n let intersection = this.RayPoint(center, face.Normal, objects);\r\n if (intersection && intersection.object)\r\n {\r\n let en = GetEntity(intersection.object) as Board;\r\n if (en.BoardProcessOption.roomName === br.BoardProcessOption.roomName && en.BoardProcessOption.cabinetName === br.BoardProcessOption.cabinetName)\r\n return intersection;\r\n }\r\n }\r\n }\r\n private IntersectFace(otherBoard: Board, face: Face)\r\n {\r\n let size: Vector3 | Vector2 = new Vector3();\r\n let min = new Vector3();\r\n let diffMat = face.OCSInv.multiply(otherBoard.OCS);\r\n\r\n if (otherBoard.IsSpecialShape)\r\n {\r\n let rect = new Polyline().RectangleFrom2Pt(new Vector3(), new Vector3(face.Length, face.Width));\r\n let con = otherBoard.ContourCurve.Clone().ApplyMatrix(diffMat);\r\n con.Z0();\r\n let shape1 = new Shape(Contour.CreateContour([rect]));\r\n let shape2 = new Shape(Contour.CreateContour([con]));\r\n\r\n let shapes = shape1.IntersectionBoolOperation(shape2);\r\n if (shapes.length > 0)\r\n {\r\n let box = shapes[0].BoundingBox;\r\n min.copy(box.min);\r\n size = box.getSize(new Vector3);\r\n }\r\n }\r\n else\r\n {\r\n let b1 = new Box3(new Vector3(), new Vector3(otherBoard.Width, otherBoard.Height));\r\n b1.applyMatrix4(diffMat);\r\n\r\n let box = new Box2().setFromPoints([AsVector2(b1.min), AsVector2(b1.max)]);\r\n let box2 = new Box2(new Vector2(), new Vector2(face.Length, face.Width));\r\n\r\n box2.intersect(box);\r\n\r\n size = box2.getSize(new Vector2);\r\n min.set(box2.min.x, box2.min.y, 0);\r\n }\r\n\r\n face.Length = size.x;\r\n face.Width = size.y;\r\n face.OCS.multiply(MoveMatrix(min));\r\n }\r\n private GetShrinkDist(face: Face, br: Board, option: IShinkOption)\r\n {\r\n let fNoarmal = face.Normal;\r\n let xVec = new Vector3().setFromMatrixColumn(br.OCS, 0);\r\n let yVec = new Vector3().setFromMatrixColumn(br.OCS, 1);\r\n\r\n let shrink = 0;\r\n if (isParallelTo(fNoarmal, xVec))\r\n {\r\n if (equalv3(fNoarmal, xVec, 1e-5))\r\n shrink = option.back;\r\n else\r\n shrink = option.front;\r\n }\r\n else if (isParallelTo(fNoarmal, yVec))\r\n {\r\n if (equalv3(fNoarmal, yVec, 1e-5))\r\n shrink = option.left;\r\n else\r\n shrink = option.right;\r\n }\r\n return shrink;\r\n }\r\n private GetShrinkBoardIndexesMap(face: Face, br: Board, shrink: number, indexMap: Map)\r\n {\r\n if (shrink)\r\n {\r\n const FUZZ = 0.1;\r\n let scaleBox = new Box3().setFromPoints([new Vector3(-FUZZ, -FUZZ, -FUZZ), new Vector3(face.Length + FUZZ, face.Width + FUZZ, FUZZ)]).applyMatrix4(face.OCS);\r\n let pts = br.GetStretchPoints();\r\n let stretchIndexs: number[] = [];\r\n for (let i = 0, length = pts.length; i < length; i++)\r\n {\r\n let p = pts[i];\r\n if (scaleBox.containsPoint(p))\r\n stretchIndexs.push(i);\r\n }\r\n indexMap.set(face.Normal.negate().multiplyScalar(shrink), stretchIndexs);\r\n }\r\n }\r\n private GetRuleCount(width: number, rules: INailRule[])\r\n {\r\n if (this.NailRules)\r\n rules = this.NailRules;\r\n for (let rule of rules)\r\n {\r\n if (width > rule.startDist && width <= rule.endDist + 1e-6)\r\n {\r\n return rule.count;\r\n }\r\n }\r\n return 0;\r\n }\r\n private BuildNails(initNail: CylinderHole, nailOpt: LayerNailOption, face: Face, fYVec: Vector3)\r\n {\r\n let fXVec = new Vector3().setFromMatrixColumn(face.OCS, 0);\r\n let addCount = nailOpt.addCount;\r\n let count = nailOpt.count;\r\n let dist = nailOpt.dist;\r\n let frontDist = nailOpt.front;\r\n let backDist = nailOpt.behind;\r\n let singleDist: number;\r\n //绘制数量为1时,层板钉在中间位置\r\n if (count === 1)\r\n singleDist = face.Length / 2 - frontDist;\r\n else\r\n singleDist = (face.Length - frontDist - backDist) / (count - 1);\r\n\r\n let buildNails: CylinderHole[] = [];\r\n\r\n //构建层板钉\r\n for (let i = 0; i < count; i++)\r\n {\r\n if (count === 1)\r\n {\r\n initNail.ApplyMatrix(MoveMatrix(fXVec.multiplyScalar(singleDist)));\r\n buildNails.push(initNail);\r\n }\r\n else\r\n {\r\n let nail = initNail.Clone();\r\n nail.ApplyMatrix(MoveMatrix(fXVec.clone().multiplyScalar(i * singleDist)));\r\n buildNails.push(nail);\r\n }\r\n }\r\n\r\n //增加的层板钉\r\n let addNails: CylinderHole[] = [];\r\n for (let i = 1; i <= addCount; i++)\r\n {\r\n for (let nail of buildNails)\r\n {\r\n addNails.push(nail.Clone().ApplyMatrix(MoveMatrix(fYVec.clone().multiplyScalar(dist * i))));\r\n addNails.push(nail.Clone().ApplyMatrix(MoveMatrix(fYVec.clone().negate().multiplyScalar(dist * i))));\r\n }\r\n }\r\n buildNails.push(...addNails);\r\n return buildNails;\r\n }\r\n private RayPoint(p: Vector3, n: Vector3, brs: Object3D[]): Intersection\r\n {\r\n let ray = new Raycaster(p, n);\r\n let intersection = Raycast(ray, brs);\r\n return intersection;\r\n }\r\n Start(brs: Board[], nailOption: LayerNailOption, rules: INailRule[] = [], option?: IShinkOption)\r\n {\r\n if (brs.length === 0) return;\r\n\r\n let objects: Object3D[] = [];\r\n //如果层板和左右板得距离大于这个值,则这边不绘制层板钉\r\n let refDist = nailOption.length - nailOption.depth;\r\n\r\n for (let br of brs[0].Db.ModelSpace.Entitys)\r\n {\r\n if (!br.IsErase && br.Visible && br instanceof Board)\r\n {\r\n objects.push(br.GetDrawObjectFromRenderType(RenderType.Physical));\r\n }\r\n }\r\n for (let br of brs)\r\n {\r\n let faces = BoardGetFace.GetAllSidesFaces(br, true);\r\n let vecIndexMap: Map = new Map();\r\n let xVec = new Vector3().setFromMatrixColumn(br.OCS, 0);\r\n if (option?.name)\r\n br.Name = option.name;\r\n\r\n let nailBoardMap = new WeakMap();\r\n let allNails: CylinderHole[] = [];\r\n for (let face of faces)\r\n {\r\n if (face.type === BoardFaceType.Side)\r\n {\r\n let shrink = 0;\r\n if (option)\r\n {\r\n shrink = this.GetShrinkDist(face, br, option);\r\n this.GetShrinkBoardIndexesMap(face, br, shrink, vecIndexMap);\r\n }\r\n if (!nailOption.isDraw) continue;\r\n if (!nailOption.isInBack && isParallelTo(face.Normal, xVec)) continue;\r\n\r\n let intersection = this.GetBoardIntersection(face, objects, br);\r\n if (intersection)\r\n {\r\n //防止板件悬空 #I1DPHR\r\n if (intersection.distance - 1 + shrink >= refDist)\r\n continue;\r\n\r\n let otherBoard = GetEntity(intersection.object) as Board;\r\n\r\n this.IntersectFace(otherBoard, face);\r\n\r\n let nail = CylinderHole.CreateCylHole(nailOption.rad, nailOption.length, GangDrillType.Nail);\r\n nail.ColorIndex = 4;\r\n let fNor = face.Normal;\r\n let ang = -angleTo(fNor, otherBoard.Normal.negate());\r\n if (equaln(Math.abs(ang), Math.PI))\r\n ang = 0;\r\n\r\n let xDist = nailOption.front;\r\n let yDist = - nailOption.rad - shrink * Math.sin(ang);\r\n let zDist = 0;\r\n let zRoMat = new Matrix4().makeRotationX(ang);\r\n\r\n let p = new Vector3().setFromMatrixPosition(face.OCS.clone().multiply(zRoMat)).applyMatrix4(otherBoard.OCSInv);\r\n if (p.z < 1e-6)\r\n {\r\n zDist = -p.z;\r\n }\r\n else if (p.z > otherBoard.Thickness - 1e-6)\r\n {\r\n zDist = p.z - otherBoard.Thickness;\r\n }\r\n else\r\n {\r\n console.error(\"不该存在的情况\");\r\n }\r\n\r\n zDist += (- nail.Height + nailOption.depth);\r\n\r\n nail.Position = nail.Position.add(new Vector3(xDist, yDist, zDist));\r\n nail.ApplyMatrix(zRoMat).ApplyMatrix(face.OCS);\r\n\r\n if (option || this.NailRules)\r\n nailOption.count = this.GetRuleCount(face.Length, rules);\r\n\r\n let yVec = new Vector3().setFromMatrixColumn(otherBoard.OCS, 1);\r\n\r\n let nails = this.BuildNails(nail, nailOption, face, yVec);\r\n for (let nail of nails)\r\n nailBoardMap.set(nail, otherBoard);\r\n allNails.push(...nails);\r\n }\r\n }\r\n }\r\n this.AppendBoard(br, nailBoardMap, allNails);\r\n for (let [vec, indexes] of vecIndexMap)\r\n {\r\n br.MoveStretchPoints(indexes, vec);\r\n vec = null;\r\n }\r\n }\r\n this.NailRules = null;\r\n }\r\n private AppendBoard(br: Board, brNailMap: WeakMap, nails: CylinderHole[])\r\n {\r\n let oldNailIds = br.LayerNails.filter(n => n?.Object);\r\n this.HandleNailList(nails, oldNailIds, brNailMap);\r\n for (let i = nails.length; i < oldNailIds.length; i++)\r\n oldNailIds[i]?.Object?.Erase();\r\n for (let i = 0; i < nails.length; i++)\r\n {\r\n let nId: ObjectId;\r\n let otherBoard = brNailMap.get(nails[i]);\r\n if (i < oldNailIds.length && oldNailIds[i])\r\n {\r\n let nail = oldNailIds[i].Object as CylinderHole;\r\n if (nail.IsErase)\r\n nail.Erase(false);\r\n if (!equalv3(nail.Normal, nails[i].Normal))\r\n nail.OCS = nails[i].OCS;\r\n nail.Radius = nails[i].Radius;\r\n nail.Height = nails[i].Height;\r\n nail.Position = nails[i].Position;\r\n nId = nail.Id;\r\n\r\n if (nail.FId !== otherBoard.Id)\r\n {\r\n nail.FId = otherBoard.Id;\r\n otherBoard.AppendNails([nId]);\r\n }\r\n }\r\n else\r\n {\r\n br.Db.ModelSpace.Append(nails[i]);\r\n nId = nails[i].Id;\r\n br.AppendNails([nId]);\r\n nails[i].MId = br.Id;\r\n nails[i].FId = otherBoard.Id;\r\n otherBoard.AppendNails([nId]);\r\n }\r\n }\r\n }\r\n private HandleNailList(newNails: CylinderHole[], oldNails: ObjectId[], naiMap: WeakMap)\r\n {\r\n if (oldNails.length < newNails.length)\r\n {\r\n let temp: CylinderHole[] = [];\r\n for (let i = 0; i < oldNails.length; i++)\r\n {\r\n let nail = oldNails[i].Object as CylinderHole;\r\n if (newNails.length === 0) break;\r\n let j = 0;\r\n for (; j < newNails.length; j++)\r\n {\r\n let newNail = newNails[j] as CylinderHole;\r\n let otherBoard = naiMap.get(newNail);\r\n if (otherBoard.Id === nail.FId)\r\n break;\r\n }\r\n if (j < newNails.length)\r\n temp.push(...newNails.splice(j, 1));\r\n }\r\n newNails.unshift(...temp);\r\n }\r\n else\r\n {\r\n let temp: ObjectId[] = [];\r\n\r\n for (let i = 0; i < newNails.length; i++)\r\n {\r\n let nail = newNails[i];\r\n let otherBoard = naiMap.get(nail);\r\n let j = 0;\r\n for (; j < oldNails.length; j++)\r\n {\r\n let oldNail = oldNails[j].Object as CylinderHole;\r\n if (oldNail.FId === otherBoard.Id)\r\n break;\r\n }\r\n if (j < oldNails.length)\r\n temp.push(...oldNails.splice(j, 1));\r\n else\r\n temp.push(undefined); //不存在可以复用的层板钉,占个位 重新添加\r\n }\r\n oldNails.unshift(...temp);\r\n }\r\n }\r\n}\r\n\r\nexport const activityLayerBoardTool = new ActivityLayerBoardTool();\r\n","import { activityLayerBoardTool } from \"../../../Add-on/DrawBoard/ActivityLayerBoardTool\";\r\nimport { BuildLayerBoards } from \"../../../Add-on/DrawBoard/BuildBoardTool\";\r\nimport { DefaultLayerBoardConfig, DefaultNailOption } from \"../../../Editor/DefaultConfig\";\r\nimport { ISpaceParse } from \"../../../Geometry/SpaceParse/ISpaceParse\";\r\nimport { IGrooveOption, LayerBoardOption, LayerNailOption } from \"../../../UI/Store/BoardInterface\";\r\nimport { Factory } from \"../../CADFactory\";\r\nimport { CADFiler } from \"../../CADFiler\";\r\nimport { Board } from \"../../Entity/Board\";\r\nimport { TemplateBoardRecord } from \"./TemplateBoard\";\r\n\r\n/**\r\n * 层板模板\r\n */\r\n@Factory\r\nexport class TemplateLayerBoard extends TemplateBoardRecord\r\n{\r\n constructor()\r\n {\r\n super();\r\n this.name = \"层板(自动)\";\r\n }\r\n protected _option: LayerBoardOption = { ...DefaultLayerBoardConfig };\r\n private _nailOption: LayerNailOption = { ...DefaultNailOption };\r\n private grooveOption: IGrooveOption = {\r\n grooveAddLength: \"0\",\r\n grooveAddWidth: \"0\",\r\n grooveAddDepth: \"0\",\r\n knifeRadius: \"3\",\r\n };\r\n set GrooveOption(option: IGrooveOption)\r\n {\r\n this.WriteAllObjectRecord();\r\n Object.assign(this.grooveOption, option);\r\n }\r\n get NailOption()\r\n {\r\n return { ...this._nailOption };\r\n }\r\n set NailOption(nailOpt: LayerNailOption)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._nailOption = { ...nailOpt };\r\n }\r\n\r\n GeneralBoardList(space: ISpaceParse)\r\n {\r\n return BuildLayerBoards(this._option, space, this.grooveOption);\r\n }\r\n protected async Update()\r\n {\r\n await super.Update();\r\n\r\n let brs: Board[] = [];\r\n\r\n for (let id of this.Objects)\r\n {\r\n if (!id.IsErase)\r\n {\r\n let b = id.Object as Board;\r\n brs.push(b);\r\n }\r\n }\r\n if (this._option.isActive)\r\n activityLayerBoardTool.Start(brs, this._nailOption);\r\n }\r\n ReadFile(file: CADFiler)\r\n {\r\n let ver = file.Read();\r\n super.ReadFile(file);\r\n this._option.type = file.Read();\r\n this._option.name = file.Read();\r\n this._option.frontShrink = file.Read();\r\n this._option.leftShrink = file.Read();\r\n this._option.rightShrink = file.Read();\r\n this._option.calcHeight = file.Read();\r\n this._option.isTotalLength = file.Read();\r\n this._option.boardRelative = file.Read();\r\n this._option.thickness = file.Read();\r\n this._option.count = file.Read();\r\n this._option.spaceSize = file.Read();\r\n this._option.isActive = file.Read();\r\n\r\n if (ver > 1)\r\n {\r\n this._nailOption.isDraw = file.Read();\r\n this._nailOption.addCount = file.Read();\r\n this._nailOption.dist = file.Read();\r\n this._nailOption.isGroup = file.Read();\r\n this._nailOption.isInBack = file.Read();\r\n this._nailOption.front = file.Read();\r\n this._nailOption.behind = file.Read();\r\n this._nailOption.count = file.Read();\r\n this._nailOption.rad = file.Read();\r\n this._nailOption.length = file.Read();\r\n this._nailOption.depth = file.Read();\r\n }\r\n\r\n if (ver >= 3)\r\n {\r\n this._option.calcSpaceSize = file.Read();\r\n this._option.calcFrontShrink = file.Read();\r\n this._option.calcLeftShrink = file.Read();\r\n this._option.calcRightShrink = file.Read();\r\n }\r\n else\r\n {\r\n this._option.calcSpaceSize = this._option.spaceSize.toString();\r\n this._option.calcFrontShrink = this._option.frontShrink.toString();\r\n this._option.calcLeftShrink = this._option.leftShrink.toString();\r\n this._option.calcRightShrink = this._option.rightShrink.toString();\r\n }\r\n if (ver > 3)\r\n {\r\n this.grooveOption.grooveAddLength = file.Read();\r\n this.grooveOption.grooveAddWidth = file.Read();\r\n this.grooveOption.grooveAddDepth = file.Read();\r\n this.grooveOption.knifeRadius = file.Read();\r\n }\r\n else\r\n {\r\n this.grooveOption.grooveAddLength = this.grooveOption.grooveAddLength.toString();\r\n this.grooveOption.grooveAddWidth = this.grooveOption.grooveAddWidth.toString();\r\n this.grooveOption.grooveAddDepth = this.grooveOption.grooveAddDepth.toString();\r\n this.grooveOption.knifeRadius = this.grooveOption.knifeRadius.toString();\r\n }\r\n }\r\n\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(4);\r\n super.WriteFile(file);\r\n file.Write(this._option.type);\r\n file.Write(this._option.name);\r\n file.Write(this._option.frontShrink);\r\n file.Write(this._option.leftShrink);\r\n file.Write(this._option.rightShrink);\r\n file.Write(this._option.calcHeight);\r\n file.Write(this._option.isTotalLength);\r\n file.Write(this._option.boardRelative);\r\n file.Write(this._option.thickness);\r\n file.Write(this._option.count);\r\n file.Write(this._option.spaceSize);\r\n file.Write(this._option.isActive);\r\n\r\n //ver2\r\n file.Write(this._nailOption.isDraw);\r\n file.Write(this._nailOption.addCount);\r\n file.Write(this._nailOption.dist);\r\n file.Write(this._nailOption.isGroup);\r\n file.Write(this._nailOption.isInBack);\r\n file.Write(this._nailOption.front);\r\n file.Write(this._nailOption.behind);\r\n file.Write(this._nailOption.count);\r\n file.Write(this._nailOption.rad);\r\n file.Write(this._nailOption.length);\r\n file.Write(this._nailOption.depth);\r\n\r\n file.Write(this._option.calcSpaceSize);\r\n file.Write(this._option.calcFrontShrink);\r\n file.Write(this._option.calcLeftShrink);\r\n file.Write(this._option.calcRightShrink);\r\n\r\n //ver4\r\n file.Write(this.grooveOption.grooveAddLength);\r\n file.Write(this.grooveOption.grooveAddWidth);\r\n file.Write(this.grooveOption.grooveAddDepth);\r\n file.Write(this.grooveOption.knifeRadius);\r\n }\r\n}\r\n","import { Vector3 } from \"three\";\r\nimport { Factory } from \"../../CADFactory\";\r\nimport { CADFiler } from \"../../CADFiler\";\r\nimport { Board } from \"../../Entity/Board\";\r\nimport { TemplateParam } from \"../Param/TemplateParam\";\r\nimport { TemplateParamType } from \"../Param/TemplateParamType\";\r\nimport { TemplateRecord } from \"../TemplateRecord\";\r\n\r\n/**\r\n * 左右侧板模板\r\n */\r\n@Factory\r\nexport class TemplateLeftRightBoardRecord extends TemplateRecord\r\n{\r\n constructor()\r\n {\r\n super();\r\n this.name = \"左右侧板(自动)\";\r\n }\r\n InitBaseParams()\r\n {\r\n super.InitBaseParams();\r\n let lparam = new TemplateParam();\r\n lparam.name = \"ZS\";\r\n lparam.description = \"左缩\";\r\n lparam.type = TemplateParamType.Float;\r\n lparam.value = 0;\r\n this.Params.push(lparam);\r\n\r\n let rparam = new TemplateParam();\r\n rparam.name = \"YS\";\r\n rparam.description = \"右缩\";\r\n rparam.type = TemplateParamType.Float;\r\n rparam.value = 0;\r\n this.Params.push(rparam);\r\n return this;\r\n }\r\n protected async Update()\r\n {\r\n let [lId, rId] = this.Objects;\r\n\r\n if (!lId || lId.IsErase || !rId || rId.IsErase) return;\r\n\r\n let lBr = lId.Object as Board;\r\n let rBr = rId.Object as Board;\r\n let ls = this.GetParam(\"ZS\")?.value as number ?? 0;\r\n lBr.Position = lBr.Position.sub(new Vector3(0, ls));\r\n\r\n await super.Update();\r\n\r\n let thickness = this.GetParam(\"BH\")?.value as number ?? 18;\r\n ls = this.GetParam(\"ZS\")?.value as number ?? 0;\r\n let rs = this.GetParam(\"YS\")?.value as number ?? 0;\r\n\r\n lBr.Thickness = thickness;\r\n rBr.Thickness = thickness;\r\n\r\n if (!this._CacheSpaceSize)\r\n {\r\n console.warn(\"左右侧板模板数据错误无法更新\");\r\n return;\r\n }\r\n\r\n lBr.Height = this._CacheSpaceSize.z;\r\n rBr.Height = this._CacheSpaceSize.z;\r\n\r\n lBr.Width = this._CacheSpaceSize.y - ls;\r\n rBr.Width = this._CacheSpaceSize.y - rs;\r\n lBr.Position = lBr.Position.add(new Vector3(0, ls));\r\n\r\n let x = new Vector3().setFromMatrixColumn(this._CacheSpaceCS, 0);\r\n let y = new Vector3().setFromMatrixColumn(this._CacheSpaceCS, 1);\r\n x.multiplyScalar(this._CacheSpaceSize.x - lBr.Thickness);\r\n rBr.Position = lBr.Position.sub(y.multiplyScalar(ls - rs)).add(x);\r\n }\r\n ReadFile(file: CADFiler)\r\n {\r\n super.ReadFile(file);\r\n if (this._Version < 3)\r\n {\r\n if (!this.GetParam((\"ZS\")))\r\n {\r\n let lparam = new TemplateParam();\r\n lparam.name = \"ZS\";\r\n lparam.description = \"左缩\";\r\n lparam.type = TemplateParamType.Float;\r\n lparam.value = 0;\r\n this.Params.push(lparam);\r\n\r\n let rparam = new TemplateParam();\r\n rparam.name = \"YS\";\r\n rparam.description = \"右缩\";\r\n rparam.type = TemplateParamType.Float;\r\n rparam.value = 0;\r\n this.Params.push(rparam);\r\n }\r\n }\r\n\r\n }\r\n}\r\n","import { Factory } from \"../../CADFactory\";\r\nimport { Board } from \"../../Entity/Board\";\r\nimport { TemplateRecord } from \"../TemplateRecord\";\r\nimport { BoardType } from \"../../../UI/Store/BoardInterface\";\r\n\r\n@Factory\r\nexport class TemplateSizeBoard extends TemplateRecord\r\n{\r\n protected async Update()\r\n {\r\n await super.Update();\r\n if (this.Objects.length === 0) return;\r\n\r\n let originBr = this.Objects[0].Object as Board;\r\n\r\n if (!originBr.IsErase)\r\n {\r\n if (originBr.BoardType === BoardType.Layer)\r\n {\r\n originBr.Height = this._CacheSpaceSize.x;\r\n originBr.Width = this._CacheSpaceSize.y;\r\n originBr.Thickness = this._CacheSpaceSize.z;\r\n }\r\n else if (originBr.BoardType === BoardType.Vertical)\r\n {\r\n originBr.Height = this._CacheSpaceSize.z;\r\n originBr.Width = this._CacheSpaceSize.y;\r\n originBr.Thickness = this._CacheSpaceSize.x;\r\n }\r\n else\r\n {\r\n originBr.Height = this._CacheSpaceSize.z;\r\n originBr.Width = this._CacheSpaceSize.x;\r\n originBr.Thickness = this._CacheSpaceSize.y;\r\n }\r\n }\r\n }\r\n}\r\n","import { Vector3 } from \"three\";\r\nimport { Board } from \"../../DatabaseServices/Entity/Board\";\r\nimport { MoveMatrix } from \"../../Geometry/GeUtils\";\r\nimport { ISpaceParse } from \"../../Geometry/SpaceParse/ISpaceParse\";\r\nimport { TBBoardOption, BoardType } from \"../../UI/Store/BoardInterface\";\r\n\r\nexport function BuildTopBottomBoards(topOpt: TBBoardOption, bottomOpt: TBBoardOption, space: ISpaceParse): Board[]\r\n{\r\n let brs: Board[] = [];\r\n if (topOpt.isDraw)\r\n {\r\n let basePt = GetTopBoardBasePt(topOpt, space);\r\n brs.push(GetTopOrDownBoard(space, topOpt, basePt, true));\r\n }\r\n if (bottomOpt.isDraw)\r\n {\r\n let basePt = GetBottomBoardBasePt(bottomOpt, space);\r\n brs.push(GetTopOrDownBoard(space, bottomOpt, basePt, false));\r\n\r\n let size = space.Size;\r\n let refSize = size.y;\r\n const thickness = bottomOpt.footThickness;\r\n\r\n if (bottomOpt.offset > 0 && !bottomOpt.isWrapSide)\r\n {\r\n //绘制前地脚\r\n if (bottomOpt.isDrawFooter)\r\n {\r\n brs.push(GetFootBoard(bottomOpt, space, false));\r\n refSize -= thickness + bottomOpt.footBehindShrink;\r\n }\r\n\r\n //绘制后地脚\r\n if (bottomOpt.isDrawBackFooter)\r\n {\r\n brs.push(GetFootBoard(bottomOpt, space, true));\r\n refSize -= thickness + bottomOpt.footerOffset;\r\n }\r\n //绘制加强条\r\n if (bottomOpt.isDrawStrengthenStrip)\r\n brs.push(...GetStrengthenStrips(bottomOpt, space, refSize - bottomOpt.frontDist - bottomOpt.behindDistance));\r\n }\r\n }\r\n return brs;\r\n}\r\nfunction GetTopOrDownBoard(spaceParse: ISpaceParse, opt: TBBoardOption, basePt: Vector3, isTop = true)\r\n{\r\n //前后距\r\n let frontDist = -opt.frontDist;\r\n let backDist = -opt.behindDistance;\r\n //左右延伸\r\n let leftExt = opt.leftExt;\r\n let rightExt = opt.rightExt;\r\n\r\n //大小\r\n let size = spaceParse.Size;\r\n let length = size.x;\r\n let width = size.y + frontDist + backDist;\r\n let thickness = opt.thickness;\r\n if (opt.isWrapSide)\r\n {\r\n let leftBoardThickness = spaceParse.LeftBoard ? spaceParse.LeftBoard.Thickness : opt.thickness;\r\n let rightBoardThickness = spaceParse.RightBoard ? spaceParse.RightBoard.Thickness : opt.thickness;\r\n length += leftBoardThickness + rightBoardThickness + leftExt + rightExt;\r\n }\r\n else\r\n {\r\n leftExt = 0;\r\n rightExt = 0;\r\n }\r\n\r\n let board = Board.CreateBoard(length, width, thickness, BoardType.Layer);\r\n board.Name = \"顶板\";\r\n\r\n if (!isTop)\r\n {\r\n board.Name = \"底板\";\r\n }\r\n //移动右缩和前距的距离\r\n basePt.add(new Vector3(rightExt, -frontDist));\r\n board.ApplyMatrix(MoveMatrix(basePt));\r\n board.ApplyMatrix(spaceParse.SpaceOCS);\r\n\r\n return board;\r\n}\r\nfunction GetTopBoardBasePt(opt: TBBoardOption, spc: ISpaceParse)\r\n{\r\n let box = spc.SpaceBox;\r\n let min = box.min;\r\n let max = box.max;\r\n let basePoint = new Vector3();\r\n if (opt.isWrapSide)\r\n {\r\n let rightBoardThickness = spc.RightBoard ? spc.RightBoard.Thickness : opt.thickness;\r\n basePoint.set(max.x + rightBoardThickness, min.y, max.z);\r\n }\r\n else\r\n {\r\n basePoint.set(max.x, min.y, max.z - (opt.thickness + parseFloat(opt.offset as unknown as string)));\r\n }\r\n return basePoint;\r\n}\r\nfunction GetBottomBoardBasePt(opt: TBBoardOption, spc: ISpaceParse)\r\n{\r\n let box = spc.SpaceBox;\r\n let min = box.min;\r\n let max = box.max;\r\n let basePoint = new Vector3();\r\n if (opt.isWrapSide)\r\n {\r\n let rightBoardThickness = spc.RightBoard ? spc.RightBoard.Thickness : opt.thickness;\r\n basePoint.set(max.x + rightBoardThickness, min.y, min.z - opt.thickness);\r\n }\r\n else\r\n {\r\n basePoint.set(max.x, min.y, min.z + opt.offset);\r\n }\r\n return basePoint;\r\n}\r\nfunction GetFootBoard(opt: TBBoardOption, spaceParse: ISpaceParse, isBack: boolean)\r\n{\r\n let offset = opt.offset;\r\n let thickness = opt.footThickness;\r\n let footBoard = Board.CreateBoard(offset, spaceParse.Size.x, opt.footThickness, BoardType.Behind);\r\n footBoard.Name = isBack ? \"后地脚\" : \"地脚线\";\r\n let moveDist = isBack ? spaceParse.Size.y - opt.footerOffset - opt.behindDistance : thickness + opt.footBehindShrink + opt.frontDist;\r\n footBoard.ApplyMatrix(MoveMatrix(spaceParse.SpaceBox.min.clone().add(new Vector3(0, moveDist))))\r\n .ApplyMatrix(spaceParse.SpaceOCS);\r\n\r\n return footBoard;\r\n}\r\n\r\nfunction GetStrengthenStrips(opt: TBBoardOption, spaceParse: ISpaceParse, width: number)\r\n{\r\n let brs: Board[] = [];\r\n const thickness = opt.footThickness;\r\n let count = opt.divCount;\r\n if (count === 0) return brs;\r\n let spaceSize = (spaceParse.Size.x - count * thickness) / (count + 1);\r\n let br = Board.CreateBoard(opt.offset, width, thickness, BoardType.Vertical);\r\n\r\n let yDist = opt.frontDist;\r\n if (opt.isDrawFooter)\r\n yDist += (opt.footBehindShrink + thickness);\r\n\r\n for (let i = 1; i <= count; i++)\r\n {\r\n let b = br.Clone();\r\n b.Name = \"加强条\" + i;\r\n b.ApplyMatrix(MoveMatrix(spaceParse.SpaceBox.min.clone().add(new Vector3(spaceSize * i + (i - 1) * thickness, yDist))))\r\n .ApplyMatrix(spaceParse.SpaceOCS);\r\n brs.push(b);\r\n }\r\n return brs;\r\n}\r\n","import { ExtendsBoardThickness } from \"../../../Add-on/DrawBoard/BuildBoardTool\";\r\nimport { BuildTopBottomBoards } from \"../../../Add-on/DrawBoard/BuildTopBottomBoardTool\";\r\nimport { EBoardKeyList } from \"../../../Common/BoardKeyList\";\r\nimport { DefaultBottomBoardOption, DefaultTopBoardOption } from \"../../../Editor/DefaultConfig\";\r\nimport { BoardProcessOption, FaceDirection, LinesType, TBBoardOption } from \"../../../UI/Store/BoardInterface\";\r\nimport { AutoRecord } from \"../../AutoRecord\";\r\nimport { Factory } from \"../../CADFactory\";\r\nimport { CADFiler } from \"../../CADFiler\";\r\nimport { Board } from \"../../Entity/Board\";\r\nimport { TemplateRecord } from \"../TemplateRecord\";\r\n\r\n/**顶底板模板 */\r\n@Factory\r\nexport class TemplateTopBottomBoard extends TemplateRecord\r\n{\r\n private _topOption: TBBoardOption = { ...DefaultTopBoardOption };\r\n private _bottomOption: TBBoardOption = { ...DefaultBottomBoardOption };\r\n UseBoardProcessOption = false;\r\n BoardProcessOption: BoardProcessOption;\r\n @AutoRecord DrawCounts: [number, number, number] = [1, 1, 1];\r\n constructor()\r\n {\r\n super();\r\n this.name = \"顶底板\";\r\n }\r\n get TopOption()\r\n {\r\n return Object.assign({}, this._topOption);\r\n }\r\n set TopOption(option: TBBoardOption)\r\n {\r\n this.WriteAllObjectRecord();\r\n Object.assign(this._topOption, option);\r\n ExtendsBoardThickness(this, option.thickness);\r\n }\r\n get BottomOption()\r\n {\r\n return Object.assign({}, this._bottomOption);\r\n }\r\n set BottomOption(option: TBBoardOption)\r\n {\r\n this.WriteAllObjectRecord();\r\n Object.assign(this._bottomOption, option);\r\n }\r\n\r\n // InitBaseParams()\r\n // {\r\n // super.InitBaseParams();\r\n // return this;\r\n // }\r\n\r\n protected async Update()\r\n {\r\n await super.Update();\r\n\r\n let thickness = this.GetParam(\"BH\")?.value as number;\r\n if (thickness)\r\n {\r\n this._topOption.thickness = thickness;\r\n this._bottomOption.thickness = thickness;\r\n this._bottomOption.footThickness = thickness;\r\n }\r\n\r\n let spaceParse = this.SpaceParse;\r\n let nbrs = BuildTopBottomBoards(this._topOption, this._bottomOption, spaceParse);\r\n\r\n let sbrs = this.PositioningSupportBoards;\r\n\r\n if (this.BoardProcessOption)\r\n {\r\n let minSealed = GetMinSealed(this.BoardProcessOption);\r\n for (let br of nbrs)\r\n {\r\n br.BoardProcessOption = this.BoardProcessOption;\r\n this.SetBoardProcess(br, minSealed);\r\n }\r\n this.BoardProcessOption = undefined;\r\n }\r\n if (this.UseBoardProcessOption && sbrs.length > 0)\r\n {\r\n let cname = sbrs[0].BoardProcessOption[EBoardKeyList.CabinetName];\r\n let rname = sbrs[0].BoardProcessOption[EBoardKeyList.RoomName];\r\n for (let br of nbrs)\r\n {\r\n br.BoardProcessOption[EBoardKeyList.CabinetName] = cname;\r\n br.BoardProcessOption[EBoardKeyList.RoomName] = rname;\r\n }\r\n\r\n this.UseBoardProcessOption = false;\r\n }\r\n\r\n let oldBrss: [Board[], Board[], Board[]] = [[], [], []];\r\n let refBr: Board;\r\n let minSealed: string;\r\n\r\n for (let id of this.Objects)\r\n {\r\n let b = id.Object as Board;\r\n if (!refBr)\r\n refBr = b;\r\n oldBrss[b.BoardType].push(b);\r\n }\r\n\r\n if (refBr) minSealed = GetMinSealed(refBr.BoardProcessOption);\r\n\r\n let newBrss: [Board[], Board[], Board[]] = [[], [], []];\r\n\r\n for (let b of nbrs)\r\n {\r\n newBrss[b.BoardType].push(b);\r\n }\r\n for (let i = 0; i < oldBrss.length; i++)\r\n {\r\n let oldBrs = oldBrss[i];\r\n let newBrs = newBrss[i];\r\n\r\n let oldLen = oldBrs.length;\r\n for (let j = newBrs.length; j < oldLen; j++)\r\n oldBrs[j].Erase();\r\n\r\n for (let j = 0; j < newBrs.length; j++)\r\n {\r\n if (j < oldLen)\r\n {\r\n if (j >= this.DrawCounts[i])\r\n {\r\n oldBrs[j].Erase(false);\r\n }\r\n oldBrs[j].Name = newBrs[j].Name;\r\n oldBrs[j].Position = newBrs[j].Position;\r\n oldBrs[j].Width = newBrs[j].Width;\r\n oldBrs[j].Height = newBrs[j].Height;\r\n oldBrs[j].Thickness = newBrs[j].Thickness;\r\n }\r\n else\r\n {\r\n if (refBr)\r\n {\r\n newBrs[j].BoardProcessOption = refBr.BoardProcessOption;\r\n this.SetBoardProcess(newBrs[j], minSealed);\r\n }\r\n this._db.ModelSpace.Append(newBrs[j]);\r\n this.Objects.push(newBrs[j].Id);\r\n }\r\n }\r\n this.DrawCounts[i] = newBrs.length;\r\n }\r\n let brs = this.Objects.filter(id => !id.IsErase).map(id => id.Object as Board);\r\n brs.map(br => br.SpaceOCS = this._CacheSpaceCS);\r\n }\r\n private SetBoardProcess(br: Board, minSealed: string)\r\n {\r\n if (br.Name === \"底板\")\r\n {\r\n br.BoardProcessOption[EBoardKeyList.BigHole] = FaceDirection.Back;\r\n }\r\n else if (br.Name.includes(\"地脚\") || br.Name.includes(\"加强条\"))\r\n {\r\n // br.BoardProcessOption.composingFace = ComposingType.Reverse;\r\n br.BoardProcessOption.bigHoleDir = FaceDirection.Back;\r\n br.BoardProcessOption.lines = LinesType.Reverse;\r\n\r\n //用薄封边\r\n br.BoardProcessOption.sealedUp = minSealed;\r\n br.BoardProcessOption.sealedDown = minSealed;\r\n br.BoardProcessOption.sealedLeft = minSealed;\r\n br.BoardProcessOption.sealedRight = minSealed;\r\n }\r\n }\r\n ReadFile(file: CADFiler)\r\n {\r\n let ver = file.Read();\r\n super.ReadFile(file);\r\n this.DrawCounts[0] = file.Read();\r\n this.DrawCounts[1] = file.Read();\r\n this.DrawCounts[2] = file.Read();\r\n\r\n this._topOption.type = file.Read();\r\n this._topOption.name = file.Read();\r\n this._topOption.isDraw = file.Read();\r\n this._topOption.thickness = file.Read();\r\n this._topOption.frontDist = file.Read();\r\n this._topOption.behindDistance = file.Read();\r\n this._topOption.isWrapSide = file.Read();\r\n this._topOption.useLFData = file.Read();\r\n this._topOption.leftExt = file.Read();\r\n this._topOption.rightExt = file.Read();\r\n this._topOption.offset = file.Read();\r\n if (ver === 1 && typeof this._topOption.offset === \"string\")\r\n this._topOption.offset = parseFloat(this._topOption.offset) ?? 0;\r\n\r\n this._bottomOption.type = file.Read();\r\n this._bottomOption.name = file.Read();\r\n this._bottomOption.isDraw = file.Read();\r\n this._bottomOption.thickness = file.Read();\r\n this._bottomOption.frontDist = file.Read();\r\n this._bottomOption.behindDistance = file.Read();\r\n this._bottomOption.isWrapSide = file.Read();\r\n this._bottomOption.useLFData = file.Read();\r\n this._bottomOption.leftExt = file.Read();\r\n this._bottomOption.rightExt = file.Read();\r\n this._bottomOption.offset = file.Read();\r\n this._bottomOption.footThickness = file.Read();\r\n this._bottomOption.isDrawFooter = file.Read();\r\n this._bottomOption.footBehindShrink = file.Read();\r\n this._bottomOption.isDrawBackFooter = file.Read();\r\n this._bottomOption.isDrawStrengthenStrip = file.Read();\r\n this._bottomOption.footerOffset = file.Read();\r\n this._bottomOption.divCount = file.Read();\r\n\r\n }\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(2);\r\n super.WriteFile(file);\r\n file.Write(this.DrawCounts[0]);\r\n file.Write(this.DrawCounts[1]);\r\n file.Write(this.DrawCounts[2]);\r\n\r\n file.Write(this._topOption.type);\r\n file.Write(this._topOption.name);\r\n file.Write(this._topOption.isDraw);\r\n file.Write(this._topOption.thickness);\r\n file.Write(this._topOption.frontDist);\r\n file.Write(this._topOption.behindDistance);\r\n file.Write(this._topOption.isWrapSide);\r\n file.Write(this._topOption.useLFData);\r\n file.Write(this._topOption.leftExt);\r\n file.Write(this._topOption.rightExt);\r\n file.Write(this._topOption.offset);\r\n\r\n file.Write(this._bottomOption.type);\r\n file.Write(this._bottomOption.name);\r\n file.Write(this._bottomOption.isDraw);\r\n file.Write(this._bottomOption.thickness);\r\n file.Write(this._bottomOption.frontDist);\r\n file.Write(this._bottomOption.behindDistance);\r\n file.Write(this._bottomOption.isWrapSide);\r\n file.Write(this._bottomOption.useLFData);\r\n file.Write(this._bottomOption.leftExt);\r\n file.Write(this._bottomOption.rightExt);\r\n file.Write(this._bottomOption.offset);\r\n file.Write(this._bottomOption.footThickness);\r\n file.Write(this._bottomOption.isDrawFooter);\r\n file.Write(this._bottomOption.footBehindShrink);\r\n file.Write(this._bottomOption.isDrawBackFooter);\r\n file.Write(this._bottomOption.isDrawStrengthenStrip);\r\n file.Write(this._bottomOption.footerOffset);\r\n file.Write(this._bottomOption.divCount);\r\n }\r\n}\r\n\r\n//获得最薄的封边\r\nfunction GetMinSealed(opt: BoardProcessOption): string\r\n{\r\n return Math.max(0, Math.min(\r\n parseFloat(opt.sealedDown) || 0,\r\n parseFloat(opt.sealedLeft) || 0,\r\n parseFloat(opt.sealedRight) || 0,\r\n parseFloat(opt.sealedUp) || 0,\r\n )).toString();\r\n}\r\n","import { BuildVerticalBoards } from \"../../../Add-on/DrawBoard/BuildBoardTool\";\r\nimport { DefaultVerticalBoardConfig } from \"../../../Editor/DefaultConfig\";\r\nimport { ISpaceParse } from \"../../../Geometry/SpaceParse/ISpaceParse\";\r\nimport { IGrooveOption, VerticalBoardOption } from \"../../../UI/Store/BoardInterface\";\r\nimport { Factory } from \"../../CADFactory\";\r\nimport { CADFiler } from \"../../CADFiler\";\r\nimport { TemplateBoardRecord } from \"./TemplateBoard\";\r\n\r\n/**\r\n * 立板模板\r\n */\r\n@Factory\r\nexport class TemplateVerticalBoard extends TemplateBoardRecord\r\n{\r\n constructor()\r\n {\r\n super();\r\n this.name = \"立板(自动)\";\r\n }\r\n protected _option: VerticalBoardOption = { ...DefaultVerticalBoardConfig };\r\n private grooveOption: IGrooveOption = {\r\n grooveAddLength: \"0\",\r\n grooveAddWidth: \"0\",\r\n grooveAddDepth: \"0\",\r\n knifeRadius: \"3\",\r\n };\r\n set GrooveOption(option: IGrooveOption)\r\n {\r\n this.WriteAllObjectRecord();\r\n Object.assign(this.grooveOption, option);\r\n }\r\n GeneralBoardList(space: ISpaceParse)\r\n {\r\n return BuildVerticalBoards(this._option, space, this.grooveOption);\r\n }\r\n ReadFile(file: CADFiler)\r\n {\r\n let ver = file.Read();\r\n super.ReadFile(file);\r\n this._option.type = file.Read();\r\n this._option.name = file.Read();\r\n this._option.frontShrink = file.Read();\r\n this._option.bottomShrink = file.Read();\r\n this._option.calcWidth = file.Read();\r\n this._option.calcHeight = file.Read();\r\n this._option.isTotalLength = file.Read();\r\n this._option.isTotalWidth = file.Read();\r\n this._option.boardRelative = file.Read();\r\n this._option.thickness = file.Read();\r\n this._option.count = file.Read();\r\n this._option.spaceSize = file.Read();\r\n\r\n if (ver >= 2)\r\n {\r\n this._option.calcSpaceSize = file.Read();\r\n this._option.calcFrontShrink = file.Read();\r\n this._option.calcBottomShrink = file.Read();\r\n }\r\n else\r\n {\r\n this._option.calcSpaceSize = this._option.spaceSize.toString();\r\n this._option.calcFrontShrink = this._option.frontShrink.toString();\r\n this._option.calcBottomShrink = this._option.bottomShrink.toString();\r\n }\r\n if (ver > 2)\r\n {\r\n this.grooveOption.grooveAddLength = file.Read();\r\n this.grooveOption.grooveAddWidth = file.Read();\r\n this.grooveOption.grooveAddDepth = file.Read();\r\n this.grooveOption.knifeRadius = file.Read();\r\n }\r\n else\r\n {\r\n this.grooveOption.grooveAddLength = this.grooveOption.grooveAddLength.toString();\r\n this.grooveOption.grooveAddWidth = this.grooveOption.grooveAddWidth.toString();\r\n this.grooveOption.grooveAddDepth = this.grooveOption.grooveAddDepth.toString();\r\n this.grooveOption.knifeRadius = this.grooveOption.knifeRadius.toString();\r\n }\r\n }\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(3);\r\n super.WriteFile(file);\r\n file.Write(this._option.type);\r\n file.Write(this._option.name);\r\n file.Write(this._option.frontShrink);\r\n file.Write(this._option.bottomShrink);\r\n file.Write(this._option.calcWidth);\r\n file.Write(this._option.calcHeight);\r\n file.Write(this._option.isTotalLength);\r\n file.Write(this._option.isTotalWidth);\r\n file.Write(this._option.boardRelative);\r\n file.Write(this._option.thickness);\r\n file.Write(this._option.count);\r\n file.Write(this._option.spaceSize);\r\n\r\n file.Write(this._option.calcSpaceSize);\r\n file.Write(this._option.calcFrontShrink);\r\n file.Write(this._option.calcBottomShrink);\r\n\r\n file.Write(this.grooveOption.grooveAddLength);\r\n file.Write(this.grooveOption.grooveAddWidth);\r\n file.Write(this.grooveOption.grooveAddDepth);\r\n file.Write(this.grooveOption.knifeRadius);\r\n }\r\n}\r\n","import { VisualSpaceBox } from \"../../../Editor/VisualSpaceBox\";\r\nimport { AutoRecord } from \"../../AutoRecord\";\r\nimport { Factory } from \"../../CADFactory\";\r\nimport { CADFiler } from \"../../CADFiler\";\r\nimport { TemplateRecord } from \"../TemplateRecord\";\r\n\r\n@Factory\r\nexport class TemplateVisualSpace extends TemplateRecord\r\n{\r\n @AutoRecord IsVisible = true;\r\n constructor()\r\n {\r\n super();\r\n this.Name = \"可视化模块空间\";\r\n }\r\n\r\n protected async Update()\r\n {\r\n await super.Update();\r\n if (!this.Db) return;//如果没有绘制到DB空间,那么将不会进行更新(否则绘制失败)\r\n //在这里重建虚拟空间,(未来我们可能会避免自动重建)\r\n if (this.Objects.length === 0 || this.Objects[0].Object === undefined)\r\n {\r\n this.Objects.length = 0;\r\n let visualEntity = new VisualSpaceBox(this.LParam.value as number, this.WParam.value as number, this.HParam.value as number);\r\n visualEntity.ApplyMatrix(this._CacheSpaceCS);\r\n visualEntity.SpaceOCS = this._CacheSpaceCS;\r\n //这里避免使用app.Database,否则插入图纸后,会错误的在app的图纸里面绘制一个空间,导致程序错误.\r\n this.Db.ModelSpace.Append(visualEntity);\r\n this.Objects.push(visualEntity.Id);\r\n }\r\n let visualEntity = this.Objects[0].Object as VisualSpaceBox;\r\n\r\n let depth = this.NodeDepth;\r\n visualEntity.ColorIndex = depth === 0 ? 7 : depth + 1;\r\n\r\n let IsRoot = this.Parent === undefined;\r\n let isVisual = IsRoot || this.Children.length === 0;\r\n\r\n visualEntity.Visible = this.IsVisible && isVisual;\r\n visualEntity.SetSize(this.LParam.value as number, this.WParam.value as number, this.HParam.value as number);\r\n visualEntity.IsRoot = this.Children.length !== 0;\r\n\r\n if (!IsRoot)\r\n {\r\n let root = this.Root;\r\n visualEntity.DisplayLength = this.LParam.value !== root.LParam.value;\r\n visualEntity.DisplayWidth = this.WParam.value !== root.WParam.value;\r\n visualEntity.DisplayHeight = this.HParam.value !== root.HParam.value;\r\n }\r\n }\r\n\r\n //#region -------------------------File-------------------------\r\n\r\n //对象从文件中读取数据,初始化自身\r\n ReadFile(file: CADFiler)\r\n {\r\n let ver = file.Read();\r\n super.ReadFile(file);\r\n this.IsVisible = file.Read();\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.IsVisible);\r\n }\r\n // //局部撤销\r\n // ApplyPartialUndo(undoData: CADObject)\r\n // {\r\n // super.ApplyPartialUndo(undoData);\r\n // }\r\n //#endregion\r\n}\r\n","import { Vector3 } from \"three\";\r\nimport { EBoardKeyList } from \"../../Common/BoardKeyList\";\r\nimport { safeEval } from \"../../Common/eval\";\r\nimport { Singleton } from \"../../Common/Singleton\";\r\nimport { Board } from \"../../DatabaseServices/Entity/Board\";\r\nimport { ISpaceParse } from \"../../Geometry/SpaceParse/ISpaceParse\";\r\nimport { BoardType, DrillType, FaceDirection, IHighSealedItem } from \"../../UI/Store/BoardInterface\";\r\nimport { EFullDir, EFullType, EWRackArrayType, IWineRackOption } from \"../../UI/Store/WineRackInterface\";\r\n\r\nexport const SIN45 = Math.sin(Math.PI / 4);\r\n\r\nexport class DrawWineRackTool extends Singleton\r\n{\r\n private _config: IWineRackOption;\r\n protected space: ISpaceParse;\r\n public boardlist: Board[] = [];\r\n get Config()\r\n {\r\n return this._config;\r\n }\r\n Parse(space: ISpaceParse, config: IWineRackOption)\r\n {\r\n this._config = config;\r\n this.boardlist.length = 0;\r\n this.space = space;\r\n //处理格子深\r\n if (!config.isTotalDepth)\r\n {\r\n let depth = safeEval(config.calcDepth, { L: space.Size.x, W: space.Size.y, H: space.Size.z });;\r\n if (!isNaN(depth))\r\n {\r\n space.SpaceBox.max.setY(space.SpaceBox.min.y + depth);\r\n }\r\n }\r\n //处理前缩\r\n space.SpaceBox.min.add(new Vector3(0, config.frontCut));\r\n //左右缩\r\n space.SpaceBox.min.add(new Vector3(config.leftCut));\r\n space.SpaceBox.max.add(new Vector3(-config.rightCut));\r\n //上缩\r\n space.SpaceBox.max.add(new Vector3(0, 0, -config.topCut));\r\n }\r\n /** 拾取空间周围的板件柜名房名等信息*/\r\n protected GetBoardProcessOption(br: Board)\r\n {\r\n //获取空间周围的板件数据\r\n if (this.space.Boards.length > 0)\r\n {\r\n let refProcessData = this.space.Boards[0].BoardProcessOption;\r\n br.BoardProcessOption[EBoardKeyList.RoomName] = refProcessData[EBoardKeyList.RoomName];\r\n br.BoardProcessOption[EBoardKeyList.CabinetName] = refProcessData[EBoardKeyList.CabinetName];\r\n }\r\n }\r\n /**分析高级封边数据 */\r\n protected ParseHighSealing(br: Board, leftSealed: number, rightSealed: number, topSealed: number, downSealed: number, isLeft: boolean)\r\n {\r\n this.GetBoardProcessOption(br);\r\n let cu = br.ContourCurve;\r\n br.BoardProcessOption.sealedLeft = leftSealed.toString();\r\n br.BoardProcessOption.sealedRight = rightSealed.toString();\r\n br.BoardProcessOption.sealedUp = topSealed.toString();\r\n br.BoardProcessOption.sealedDown = downSealed.toString();\r\n\r\n let sizes = [...new Set([downSealed, rightSealed, topSealed, leftSealed])];\r\n let downSeal = {\r\n size: downSealed, color: sizes.indexOf(downSealed) + 1\r\n };\r\n let rigthSeal = {\r\n size: rightSealed, color: sizes.indexOf(rightSealed) + 1\r\n };\r\n let topSeal = { size: topSealed, color: sizes.indexOf(topSealed) + 1 };\r\n let leftSeal = { size: leftSealed, color: sizes.indexOf(leftSealed) + 1 };\r\n\r\n let highSeals: IHighSealedItem[] = [downSeal];\r\n if (isLeft)\r\n {\r\n highSeals.push(rigthSeal, topSeal);\r\n for (let i = 3; i <= cu.EndParam - 1; i++)\r\n {\r\n highSeals.push(leftSeal);\r\n }\r\n }\r\n else\r\n {\r\n for (let i = 1; i <= cu.EndParam - 3; i++)\r\n {\r\n highSeals.push(rigthSeal);\r\n }\r\n highSeals.push(topSeal, leftSeal);\r\n }\r\n br.BoardProcessOption.highSealed = highSeals;\r\n br.BoardProcessOption.drillType = DrillType.None;\r\n br.BoardProcessOption.highDrill.fill(DrillType.None);\r\n\r\n }\r\n /**补板 */\r\n protected AddLayerOrVerticalBoard(actWidth: number, actHeight: number)\r\n {\r\n const config = this.Config;\r\n const size = this.space.Size;\r\n let isDrawLy = false;\r\n //是否补层板\r\n if (config.isDrawLy && (config.arrayType === EWRackArrayType.Fixed || config.fullType === EFullType.ByWidth))\r\n {\r\n isDrawLy = true;\r\n\r\n let length = actWidth;\r\n let width = size.y + config.frontCut;\r\n let position = this.space.SpaceBox.min.clone();\r\n\r\n if (config.arrayType === EWRackArrayType.Fixed)\r\n {\r\n if (config.fullDir === EFullDir.Right)\r\n {\r\n length += config.rightCut;\r\n position.add(new Vector3(size.x + config.rightCut, -config.frontCut, actHeight + config.topCut));\r\n }\r\n else\r\n {\r\n length += config.leftCut;\r\n position.add(new Vector3(actWidth, -config.frontCut, actHeight + config.topCut));\r\n }\r\n }\r\n else\r\n {\r\n length += (config.leftCut + config.rightCut);\r\n position.add(new Vector3(actWidth + config.rightCut, -config.frontCut, actHeight + config.topCut));\r\n }\r\n //补板跟随\r\n if (config.followNarrow)\r\n {\r\n //处理前缩\r\n position.add(new Vector3(0, config.frontCut));\r\n width -= config.frontCut;\r\n }\r\n let br = Board.CreateBoard(length, width, config.brThick2);\r\n this.GetBoardProcessOption(br);\r\n br.BoardProcessOption.bigHoleDir = FaceDirection.Back;\r\n br.Position = position;\r\n br.ApplyMatrix(this.space.SpaceOCS);\r\n this.boardlist.push(br);\r\n }\r\n if (config.isDrawVer && (config.arrayType === EWRackArrayType.Fixed || config.fullType === EFullType.ByHeight))\r\n {\r\n let len = actHeight + config.topCut;\r\n if (isDrawLy)\r\n len += config.brThick2;\r\n\r\n let br = Board.CreateBoard(len, size.y + config.frontCut, config.brThick2, BoardType.Vertical);\r\n\r\n let position = this.space.SpaceBox.min.clone();\r\n\r\n if (config.fullDir === EFullDir.Right)\r\n position.x += size.x - actWidth - config.brThick2;\r\n else\r\n {\r\n br.BoardProcessOption.bigHoleDir = FaceDirection.Back;\r\n position.x += actWidth;\r\n }\r\n //补板跟随\r\n if (config.followNarrow)\r\n {\r\n br.WriteAllObjectRecord();\r\n position.y += config.frontCut;\r\n br.Width -= config.frontCut;\r\n }\r\n\r\n //这里要跟外面平\r\n position.y -= config.frontCut;\r\n\r\n this.GetBoardProcessOption(br);\r\n br.Position = position;\r\n br.ApplyMatrix(this.space.SpaceOCS);\r\n this.boardlist.push(br);\r\n }\r\n }\r\n}\r\n","import { Matrix4, Vector2, Vector3 } from \"three\";\r\nimport { arrayLast, arrayRemoveDuplicateBySort, arraySortByNumber } from \"../../Common/ArrayExt\";\r\nimport { MakeMirrorMtx } from \"../../Common/Matrix4Utils\";\r\nimport { Board } from \"../../DatabaseServices/Entity/Board\";\r\nimport { Line } from \"../../DatabaseServices/Entity/Line\";\r\nimport { Polyline } from \"../../DatabaseServices/Entity/Polyline\";\r\nimport { AsVector2, equaln, equalv3, isParallelTo, MoveMatrix, polar, XAxis, YAxis, ZAxis } from \"../../Geometry/GeUtils\";\r\nimport { ISpaceParse } from \"../../Geometry/SpaceParse/ISpaceParse\";\r\nimport { IntersectOption } from \"../../GraphicsSystem/IntersectWith\";\r\nimport { BoardType } from \"../../UI/Store/BoardInterface\";\r\nimport { EFullDir, EFullType, EWRackArrayType, IR2WROption, IWineRackOption } from \"../../UI/Store/WineRackInterface\";\r\nimport { DrawWineRackTool, SIN45 } from \"./DrawWinRackTool\";\r\n\r\nexport interface IWineRackData\r\n{\r\n basePt: Vector3;\r\n brLength: number;\r\n\r\n}\r\nexport interface IParsePlRes\r\n{\r\n isOk: boolean;\r\n isLeft?: boolean;\r\n pl?: Polyline;\r\n length?: number;\r\n matInv?: Matrix4;\r\n basePt?: Vector3;\r\n thickness?: number;\r\n isVer?: boolean;\r\n isRo?: boolean;\r\n}\r\n\r\nexport const R2WRTolerance = 1e-3;\r\n\r\n/**\r\n * 斜酒格\r\n */\r\nexport class DrawObliqueWineRackTool extends DrawWineRackTool\r\n{\r\n Parse(space: ISpaceParse, config: IWineRackOption)\r\n {\r\n super.Parse(space, config);\r\n const size = space.Size;\r\n const spaceHeight = size.z;\r\n const spaceWidth = size.x;\r\n const ptMid = new Vector3(0.5 * size.x, size.z / 2, 0);\r\n let mirrorMtx: Matrix4;\r\n if (config.fullType === EFullType.ByWidth)\r\n mirrorMtx = MakeMirrorMtx(YAxis, ptMid);\r\n else\r\n mirrorMtx = MakeMirrorMtx(XAxis, ptMid);\r\n\r\n ptMid.set(0.5 * size.x, size.z / 2, 0);\r\n polar(ptMid, Math.PI * 0.75, -config.boardThick);\r\n\r\n if (config.isFull && config.arrayType !== EWRackArrayType.Fixed)\r\n {\r\n switch (config.fullType)\r\n {\r\n case EFullType.ByHeight:\r\n this.CalGridWidth(spaceHeight);\r\n break;\r\n case EFullType.ByWidth:\r\n this.CalGridWidth(spaceWidth);\r\n break;\r\n case EFullType.Symmetry:\r\n this.CalGridWidth(spaceHeight);\r\n this.CalGridWidth(spaceWidth);\r\n default:\r\n break;\r\n }\r\n\r\n let rectPl = new Polyline().Rectangle(spaceWidth, spaceHeight);\r\n let gripWidth = config.boardThick + config.gripWidth;\r\n\r\n let retPls: Polyline[] = [];\r\n let pls1 = this.CalculationRectPolylineArr(ptMid, rectPl, gripWidth);\r\n polar(ptMid, Math.PI * 0.75, -gripWidth);\r\n let pls2 = this.CalculationRectPolylineArr(ptMid, rectPl, -gripWidth);\r\n retPls.push(...pls1, ...pls2);\r\n\r\n for (let pl of [...pls1, ...pls2])\r\n {\r\n let plClone = pl.Clone();\r\n plClone.ApplyMatrix(mirrorMtx);\r\n retPls.push(plClone);\r\n }\r\n this.DrawBoardFormPolyLine(retPls);\r\n }\r\n else\r\n {\r\n let lWRData: IWineRackData[] = [];\r\n let rWRData: IWineRackData[] = [];\r\n let res: { width: number, height: number; };\r\n switch (config.arrayType)\r\n {\r\n case EWRackArrayType.ByWidth:\r\n res = this.CalcWineRackDataByWidth(lWRData, rWRData);\r\n break;\r\n case EWRackArrayType.ByCount:\r\n res = this.CalcWineRackDataByCount(lWRData, rWRData);\r\n break;\r\n case EWRackArrayType.Fixed:\r\n res = this.CalcWineRackDataByFixed(lWRData, rWRData);\r\n }\r\n let pls: Polyline[] = [];\r\n for (let data of lWRData)\r\n {\r\n pls.push(this.CreatePolylineByWineData(data));\r\n }\r\n\r\n rWRData.sort((d1, d2) =>\r\n {\r\n if (equaln(d1.basePt.x, d2.basePt.x))\r\n {\r\n return d1.basePt.y - d2.basePt.y;\r\n }\r\n else\r\n return d2.basePt.x - d1.basePt.x;\r\n });\r\n\r\n for (let data of rWRData)\r\n {\r\n pls.push(this.CreatePolylineByWineData(data, false));\r\n }\r\n\r\n //补板\r\n this.AddLayerOrVerticalBoard(res.width, res.height);\r\n\r\n this.DrawBoardFormPolyLine(pls, res.width);\r\n }\r\n }\r\n\r\n private CalGridWidth(length: number)\r\n {\r\n const count = (length - this.Config.boardThick * 2 / SIN45) / ((this.Config.boardThick + this.Config.gripWidth) * Math.sqrt(2));\r\n this.Config.gripWidth = ((length - this.Config.boardThick / SIN45) / Math.floor(count)) / Math.sqrt(2) - this.Config.boardThick;\r\n }\r\n /**获取矩形多段线的4个对角点并判断是否有效 */\r\n private GetRect4Pts(xline: Line, rectPl: Polyline, p1: Vector3, p2: Vector3, p3: Vector3, p4: Vector3)\r\n {\r\n let res1 = this.GetRect2Pts(xline, rectPl, p1, p2);\r\n let vec = polar(new Vector3(), Math.PI * 0.75, this.Config.boardThick);\r\n xline.ApplyMatrix(MoveMatrix(vec));\r\n let res2 = this.GetRect2Pts(xline, rectPl, p3, p4);\r\n return res1 && res2 && p1.distanceTo(p2) > this.Config.gripWidth;\r\n }\r\n /**获取矩形一边的点 */\r\n private GetRect2Pts(xline: Line, rectPl: Polyline, p1: Vector3, p2: Vector3)\r\n {\r\n let intPts = xline.IntersectWith(rectPl, IntersectOption.ExtendBoth);\r\n if (intPts.length === 2)\r\n {\r\n p1.copy(intPts[0]);\r\n p2.copy(intPts[1]);\r\n if (p1.x > p2.x)\r\n {\r\n let tmpPt = p2.clone();\r\n p2.copy(p1);\r\n p1.copy(tmpPt);\r\n }\r\n return true;\r\n }\r\n return false;\r\n }\r\n /**按格子宽获取酒格数据 */\r\n private CalcWineRackDataByWidth(lWRDataList: IWineRackData[], rWRDataList: IWineRackData[])\r\n {\r\n let size = this.space.Size;\r\n let Config = this.Config;\r\n\r\n let widthCount = 0, heightCount = 0, gripWidth = 0;\r\n let width = size.x - 2 * Config.boardThick * SIN45;\r\n let height = size.z - 2 * Config.boardThick * SIN45;\r\n if (Config.fullType === EFullType.ByWidth)\r\n {\r\n widthCount = Math.floor(width / ((Config.gripWidth + Config.boardThick) * SIN45));\r\n gripWidth = width / widthCount;\r\n\r\n //处理锁定个数\r\n if (!Config.isLock)\r\n {\r\n heightCount = Math.floor(height / gripWidth);\r\n }\r\n else\r\n {\r\n heightCount = Math.floor(Config.heightCount * 2);\r\n }\r\n height = heightCount * gripWidth + 2 * Config.boardThick * SIN45;\r\n width = size.x;\r\n }\r\n else\r\n {\r\n heightCount = Math.floor(height / ((Config.gripWidth + Config.boardThick) * SIN45));\r\n gripWidth = height / heightCount;\r\n\r\n //处理锁定个数\r\n\r\n if (!Config.isLock)\r\n {\r\n widthCount = Math.floor(width / gripWidth);\r\n }\r\n else\r\n {\r\n widthCount = Math.floor(Config.widthCount * 2);\r\n }\r\n\r\n width = widthCount * gripWidth + 2 * Config.boardThick * SIN45;\r\n height = size.z;\r\n }\r\n this.GetWineRackData(width, height, gripWidth, Config.boardThick, widthCount, heightCount, lWRDataList, rWRDataList);\r\n return {\r\n width: width, height: height\r\n };\r\n }\r\n private CalcWineRackDataByCount(lWRDataList: IWineRackData[], rWRDataList: IWineRackData[])\r\n {\r\n const config = this.Config;\r\n const size = this.space.Size;\r\n let widthCount = Math.floor(config.widthCount * 2);\r\n let heightCount = Math.floor(config.heightCount * 2);\r\n let gripWidth = (size.x - 2 * config.boardThick * SIN45) / widthCount;\r\n let width = 0;\r\n let height = 0;\r\n\r\n if (config.fullType === EFullType.ByWidth)\r\n {\r\n gripWidth = (size.x - 2 * config.boardThick * SIN45) / widthCount;\r\n width = size.x;\r\n if (!config.isLock) //如果没锁定个数\r\n {\r\n heightCount = Math.floor((size.z - 2 * config.boardThick * SIN45) / gripWidth + 1e-3);\r\n }\r\n height = heightCount * gripWidth + 2 * config.boardThick * SIN45;\r\n }\r\n else\r\n {\r\n gripWidth = (size.z - 2 * config.boardThick * SIN45) / heightCount;\r\n if (!config.isLock)//如果没有锁定个数\r\n {\r\n widthCount = Math.floor((size.x - 2 * config.boardThick * SIN45) / gripWidth);\r\n }\r\n width = widthCount * gripWidth + 2 * config.boardThick * SIN45;\r\n height = size.z;\r\n }\r\n\r\n this.GetWineRackData(width, height, gripWidth, config.boardThick, widthCount, heightCount, lWRDataList, rWRDataList);\r\n return {\r\n width: width, height: height\r\n };\r\n }\r\n CalcWineRackDataByFixed(lWRDataList: IWineRackData[], rWRDataList: IWineRackData[])\r\n {\r\n const config = this.Config;\r\n let widthCount = Math.floor(config.widthCount * 2);\r\n let heightCount = Math.floor(config.heightCount * 2);\r\n let gripWidth = config.gripWidth * SIN45;\r\n let width = widthCount * gripWidth + 2 * config.boardThick * SIN45;\r\n let height = heightCount * gripWidth + 2 * config.boardThick * SIN45;\r\n\r\n this.GetWineRackData(width, height, gripWidth, config.boardThick, widthCount, heightCount, lWRDataList, rWRDataList);\r\n return {\r\n width: width, height: height\r\n };\r\n }\r\n /**构建酒格正面多段线组*/\r\n CalculationRectPolylineArr(ptMid: Vector3, rectPl: Polyline, gripWidth: number)\r\n {\r\n let pls: Polyline[] = [];\r\n let pt = ptMid.clone();\r\n while (true)\r\n {\r\n let pl = this.CalculationRectPolyline(pt, rectPl);\r\n if (!pl) break;\r\n\r\n polar(pt, Math.PI * 0.75, gripWidth);\r\n pls.push(pl);\r\n }\r\n return pls;\r\n }\r\n /**构建酒格正面多段线*/\r\n CalculationRectPolyline(pt: Vector3, rectPl: Polyline)\r\n {\r\n const xline = new Line(pt, pt.clone().add(new Vector3(1, 1)));\r\n const p1 = new Vector3();\r\n const p2 = new Vector3();\r\n const p3 = new Vector3();\r\n const p4 = new Vector3();\r\n if (!this.GetRect4Pts(xline, rectPl, p1, p2, p3, p4))\r\n {\r\n return null;\r\n }\r\n\r\n let minDis = this.Config.boardThick / Math.sqrt(2);\r\n //如果左边停靠\r\n if (p1.x < minDis)\r\n {\r\n p1.copy(polar(p3.clone(), Math.PI * -0.25, this.Config.boardThick));\r\n }\r\n else\r\n {\r\n p3.copy(polar(p1.clone(), Math.PI * 0.75, this.Config.boardThick));\r\n }\r\n //右边点 上面停靠\r\n let size = this.space.Size;\r\n if (p2.y > size.z - minDis)\r\n {\r\n p2.copy(polar(p4.clone(), -Math.PI * 0.25, this.Config.boardThick));\r\n }\r\n else\r\n {\r\n p4.copy(polar(p2.clone(), Math.PI * 0.75, this.Config.boardThick));\r\n }\r\n\r\n if (p1.distanceTo(p2) < (this.Config.gripWidth + this.Config.boardThick * 1.8) && p1.y > this.Config.boardThick * 2)\r\n return null;\r\n\r\n let lineData = [p1, p2, p4, p3].map(p =>\r\n {\r\n return {\r\n pt: AsVector2(p),\r\n bul: 0\r\n };\r\n });\r\n let pl = new Polyline(lineData);\r\n pl.CloseMark = true;\r\n return pl;\r\n }\r\n //获取酒格数据\r\n GetWineRackData(width: number,\r\n height: number,\r\n gripWidth: number,\r\n brThick: number,\r\n widthCount: number,\r\n heightCount: number,\r\n lWRDataList: IWineRackData[],\r\n rWRDataList: IWineRackData[])\r\n {\r\n let data: IWineRackData;\r\n for (let i = 0; i < Math.floor(widthCount / 2); i++)\r\n {\r\n let p1 = gripWidth + brThick * SIN45 + gripWidth * i * 2;\r\n data = {\r\n basePt: new Vector3(p1, 0, 0),\r\n brLength: 0\r\n };\r\n if (width - p1 > height - brThick * SIN45)\r\n {\r\n data.brLength = (height - brThick * SIN45) / SIN45;\r\n }\r\n else\r\n {\r\n data.brLength = (width - p1) / SIN45;\r\n }\r\n rWRDataList.push(data);\r\n }\r\n for (let i = 0; i < Math.floor(heightCount / 2); i++)\r\n {\r\n let p1 = gripWidth + brThick * SIN45 + i * gripWidth * 2;\r\n data = {\r\n basePt: new Vector3(brThick * SIN45, p1 - brThick * SIN45, 0),\r\n brLength: 0\r\n };\r\n if (height - p1 > width - brThick * SIN45)\r\n {\r\n data.brLength = (width - brThick * SIN45) / SIN45;\r\n }\r\n else\r\n {\r\n data.brLength = (height - p1) / SIN45;\r\n }\r\n rWRDataList.push(data);\r\n }\r\n for (let i = 0; i < Math.floor(widthCount / 2); i++)\r\n {\r\n let p1 = gripWidth + i * gripWidth * 2;\r\n data = {\r\n basePt: new Vector3(p1 + brThick * SIN45, 2 * brThick * SIN45, 0),\r\n brLength: 0\r\n };\r\n if (equaln(p1, height - brThick * SIN45 * 2))\r\n {\r\n data.brLength = (height - brThick * SIN45 * 2) / SIN45;\r\n }\r\n else if (p1 > height - brThick * SIN45 * 3)\r\n {\r\n data.brLength = (height - brThick * SIN45 * 3) / SIN45;\r\n }\r\n else\r\n {\r\n data.brLength = (p1 - brThick * SIN45) / SIN45;\r\n }\r\n lWRDataList.push(data);\r\n }\r\n\r\n if (widthCount % 2 === 0)\r\n {\r\n for (let i = 0; i < Math.floor(heightCount / 2); i++)\r\n {\r\n let p1 = gripWidth + 2 * brThick * SIN45 + i * gripWidth * 2;\r\n data = {\r\n basePt: new Vector3(width - brThick * SIN45, p1, 0),\r\n brLength: 0\r\n };\r\n if (equaln(height - p1, width - 2 * brThick * SIN45))\r\n {\r\n data.brLength = (height - p1) / SIN45;\r\n }\r\n else if (height - p1 - brThick * SIN45 > width - 2 * brThick * SIN45)\r\n {\r\n data.brLength = (width - brThick * SIN45 * 3) / SIN45;\r\n }\r\n else\r\n {\r\n data.brLength = (height - p1 - brThick * SIN45) / SIN45;\r\n }\r\n lWRDataList.push(data);\r\n }\r\n }\r\n else\r\n {\r\n for (let i = 0; i < Math.floor(heightCount / 2) + 1; i++)\r\n {\r\n let p1 = 0;\r\n if (i == 0)\r\n {\r\n p1 = brThick * SIN45;\r\n data = {\r\n basePt: new Vector3(width, p1, 0),\r\n brLength: 0\r\n };\r\n if (equaln(height, width, 1e-3))\r\n {\r\n data.brLength = (width - brThick * SIN45) / SIN45;\r\n }\r\n else if (height - p1 > width - 2 * brThick * SIN45)\r\n {\r\n data.brLength = (width - brThick * SIN45 * 2) / SIN45;\r\n }\r\n else\r\n {\r\n data.brLength = (height - p1 - brThick * SIN45) / SIN45;\r\n }\r\n }\r\n else\r\n {\r\n p1 = 2 * brThick * SIN45 + i * gripWidth * 2;\r\n data = {\r\n basePt: new Vector3(width - brThick * SIN45, p1, 0),\r\n brLength: 0\r\n };\r\n if (height - p1 > brThick)\r\n {\r\n if (equaln(height - p1, width - 2 * brThick * SIN45, 1e-3))\r\n {\r\n data.brLength = (height - p1) / SIN45;\r\n }\r\n else if (height - p1 > width - brThick * SIN45)\r\n {\r\n data.brLength = (width - brThick * SIN45 * 3) / SIN45;\r\n }\r\n else\r\n {\r\n data.brLength = (height - p1 - brThick * SIN45) / SIN45;\r\n }\r\n }\r\n else\r\n {\r\n continue;//这里需要跳出.\r\n }\r\n }\r\n lWRDataList.push(data);\r\n }\r\n }\r\n }\r\n /**根据酒格数据获取多段线 */\r\n private CreatePolylineByWineData(data: IWineRackData, isLeft = true)\r\n {\r\n let thick = this.Config.boardThick;\r\n let lineData = [\r\n {\r\n pt: new Vector2(),\r\n bul: 0\r\n },\r\n {\r\n pt: new Vector2(thick, 0),\r\n bul: 0\r\n },\r\n {\r\n pt: new Vector2(thick, data.brLength),\r\n bul: 0\r\n },\r\n {\r\n pt: new Vector2(0, data.brLength),\r\n bul: 0\r\n },\r\n ];\r\n let pl = new Polyline(lineData);\r\n pl.CloseMark = true;\r\n let mat = MoveMatrix(new Vector3(thick))\r\n .multiply(new Matrix4().makeRotationZ(0.25 * Math.PI * (isLeft ? 1 : -1)))\r\n .multiply(MoveMatrix(new Vector3(-thick)));\r\n pl.ApplyMatrix(mat)\r\n .ApplyMatrix(MoveMatrix(data.basePt.add(new Vector3(-thick))));\r\n return pl;\r\n }\r\n /**根据多段线组构建酒格 */\r\n protected DrawBoardFormPolyLine(pls: Polyline[], actualWidth?: number, config?: IR2WROption)\r\n {\r\n const leftData: IParsePlRes[] = [];\r\n const rightData: IParsePlRes[] = [];\r\n for (let pl of pls)\r\n {\r\n let data = this.ParsePolyLine(pl);\r\n if (!data.isOk)\r\n continue;\r\n if (data.isLeft)\r\n leftData.push(data);\r\n else\r\n rightData.push(data);\r\n }\r\n\r\n this.CreateBoard(leftData, rightData, actualWidth, config);\r\n this.CreateBoard(rightData, leftData, actualWidth, config);\r\n }\r\n private ParsePolyLine(pl: Polyline): IParsePlRes\r\n {\r\n if (pl.IsClose)\r\n {\r\n if (pl.EndParam !== 4)\r\n {\r\n return {\r\n isOk: false\r\n };\r\n }\r\n\r\n let pts = pl.GetStretchPoints();\r\n\r\n if (equalv3(pts[0], arrayLast(pts)))\r\n pts.pop();\r\n\r\n /*****统一初始形状\r\n * **** h\r\n * * *\r\n * 0 **** t\r\n */\r\n pts.sort((a, b) =>\r\n {\r\n if (equaln(a.y, b.y))\r\n return a.x - b.x;\r\n else\r\n return a.y - b.y;\r\n });\r\n let pts1 = pts.splice(0, 2);\r\n pts1.sort((a, b) => a.x - b.x);\r\n pts.sort((a, b) => a.distanceTo(pts1[1]) - b.distanceTo(pts1[1]));\r\n pts.unshift(...pts1);\r\n const area = pl.Area;\r\n\r\n let v1 = pts[1].clone().clone().sub(pts[0]);\r\n let v2 = arrayLast(pts).clone().sub(pts[0]);\r\n\r\n let [vecY, vecX] = v1.length() > v2.length() ? [v1, v2] : [v2, v1];\r\n\r\n let length = vecY.length();\r\n let thick = vecX.length();\r\n let mat = new Matrix4().makeBasis(vecX.normalize(), vecY.normalize(), ZAxis).setPosition(pts[0]);\r\n let matInv = new Matrix4().getInverse(mat);\r\n\r\n let bp = pts[0].clone().negate();\r\n\r\n if (equaln(length * thick, area, 5))\r\n {\r\n let an = vecY.angleTo(XAxis);\r\n\r\n if (equaln(an, Math.PI / 4, R2WRTolerance))\r\n {\r\n pts.sort((p1, p2) => p2.x - p1.x);\r\n return {\r\n isOk: true,\r\n isLeft: true,\r\n pl,\r\n length,\r\n matInv,\r\n basePt: new Vector3(pts[0].x, 0, pts[0].y),\r\n thickness: thick,\r\n isRo: true,\r\n };\r\n }\r\n else if (equaln(an, 3 * Math.PI / 4, R2WRTolerance))\r\n {\r\n pts.sort((p1, p2) => p1.y - p2.y);\r\n return {\r\n isOk: true,\r\n isLeft: false,\r\n pl,\r\n length,\r\n matInv,\r\n basePt: new Vector3(pts[0].x, 0, pts[0].y),\r\n thickness: thick,\r\n isRo: true,\r\n };\r\n }\r\n else if (isParallelTo(vecX, XAxis, R2WRTolerance))\r\n {\r\n return {\r\n isOk: true,\r\n isLeft: false,\r\n pl,\r\n length,\r\n matInv: new Matrix4().setPosition(bp),\r\n basePt: new Vector3(pts[0].x, 0, pts[0].y),\r\n thickness: thick,\r\n isVer: true,\r\n isRo: false,\r\n };\r\n }\r\n else if (isParallelTo(vecX, YAxis, R2WRTolerance))\r\n {\r\n return {\r\n isOk: true,\r\n isLeft: true,\r\n pl,\r\n length,\r\n matInv: new Matrix4().setPosition(bp),\r\n basePt: new Vector3(pts[1].x, 0, pts[1].y),\r\n thickness: thick,\r\n isRo: false,\r\n };\r\n }\r\n else\r\n {\r\n return {\r\n isOk: false\r\n };\r\n }\r\n }\r\n\r\n }\r\n return {\r\n isOk: false\r\n };\r\n }\r\n /**绘制酒格 */\r\n private CreateBoard(lData: IParsePlRes[], rData: IParsePlRes[], actualWidth?: number, cof?: IR2WROption)\r\n {\r\n if (!lData.length)\r\n return;\r\n\r\n let leftSeal: number, rightSeal: number, upSeal: number, downSeal: number, knifeRad: number;\r\n let config: IWineRackOption;\r\n if (cof)\r\n {\r\n leftSeal = cof.sealedLeft;\r\n rightSeal = cof.sealedRight;\r\n upSeal = cof.sealedUp;\r\n downSeal = cof.sealedDown;\r\n knifeRad = cof.knifeRadius;\r\n }\r\n else\r\n {\r\n config = this.Config;\r\n leftSeal = config.leftEdge;\r\n rightSeal = config.leftEdge;\r\n upSeal = config.leftEdge;\r\n downSeal = config.leftEdge;\r\n knifeRad = config.grooveLengthAdd;\r\n }\r\n\r\n for (let i = 0; i < lData.length; i++)\r\n {\r\n let d = lData[i];\r\n let dists: number[] = [];\r\n for (let d2 of rData)\r\n {\r\n let intPts = d.pl.IntersectWith(d2.pl, IntersectOption.ExtendNone);\r\n if (intPts.length === 4)\r\n {\r\n dists.push(...intPts.map(p =>\r\n {\r\n let p1 = p.applyMatrix4(d.matInv);\r\n\r\n if (!d.isRo && !d.isVer)\r\n return Math.abs(p1.x);\r\n return Math.abs(p1.y);\r\n }));\r\n }\r\n }\r\n arraySortByNumber(dists);\r\n arrayRemoveDuplicateBySort(dists, (n1, n2) => equaln(n1, n2, R2WRTolerance));\r\n\r\n let pl = this.GetPolyline(d, dists, cof);\r\n if (pl)\r\n {\r\n let br = Board.CreateBoard(1, 1, d.thickness ?? config.boardThick, d.isVer ? BoardType.Vertical : BoardType.Layer);\r\n if (d.isLeft)\r\n br.Name = \"右板\" + (lData.length - i);\r\n else\r\n br.Name = \"左板\" + (i + 1);\r\n br.ContourCurve = pl;\r\n this.ParseHighSealing(br, leftSeal, rightSeal, upSeal, downSeal, d.isLeft);\r\n br.KnifeRadius = knifeRad;\r\n if (d.isRo)\r\n br.RotateBoard(0, Math.PI / 4 * (d.isLeft ? -1 : 1), 0);\r\n br.ApplyMatrix(MoveMatrix(this.space.SpaceBox.min));\r\n br.ApplyMatrix(MoveMatrix(d.basePt));\r\n\r\n if (config && (config.fullType === EFullType.ByHeight || config.arrayType === EWRackArrayType.Fixed)\r\n && config.fullDir === EFullDir.Right)\r\n {\r\n br.ApplyMatrix(MoveMatrix(new Vector3(this.space.Size.x - (actualWidth ?? 0))));\r\n }\r\n br.ApplyMatrix(this.space.SpaceOCS);\r\n this.boardlist.push(br);\r\n }\r\n }\r\n }\r\n /**构建酒格形状,加入齿 */\r\n private GetPolyline(data: IParsePlRes, dists: number[], cof?: IR2WROption)\r\n {\r\n let len = data.length;\r\n let isLeft = data.isLeft;\r\n\r\n const size = this.space.Size;\r\n let pl = new Polyline();\r\n pl.Rectangle(size.y, len);\r\n\r\n let addWidth: number;\r\n let leftEdge: number;\r\n let rightEdge: number;\r\n let knifeRad: number;\r\n if (cof)\r\n {\r\n addWidth = cof.addLen;\r\n leftEdge = cof.sealedLeft;\r\n rightEdge = cof.sealedRight;\r\n knifeRad = cof.knifeRadius;\r\n }\r\n else\r\n {\r\n const config = this.Config;\r\n addWidth = config.grooveWidthAdd;\r\n leftEdge = config.leftEdge;\r\n rightEdge = config.rightEdge;\r\n knifeRad = config.grooveLengthAdd;\r\n }\r\n\r\n if (isLeft)\r\n {\r\n if (!data.isVer)\r\n {\r\n let newDist = dists.map(d => len - d);\r\n dists.length = 0;\r\n dists.push(...newDist);\r\n }\r\n addWidth = (addWidth - 2 * leftEdge) / 2;\r\n }\r\n else\r\n addWidth = (addWidth - 2 * rightEdge) / 2;\r\n\r\n if (dists.length % 2 === 0 && dists.length > 1)\r\n {\r\n let pts: Vector2[] = [];\r\n for (let i = 0; i < dists.length; i++)\r\n {\r\n if (i % 2 === 0)\r\n {\r\n if (isLeft)\r\n {\r\n pts.push(new Vector2(0, dists[i] + addWidth));\r\n pts.push(new Vector2(size.y / 2 + knifeRad, dists[i] + addWidth));\r\n }\r\n else\r\n {\r\n pts.push(new Vector2(size.y, dists[i] - addWidth));\r\n pts.push(new Vector2(size.y / 2 - knifeRad, dists[i] - addWidth));\r\n }\r\n }\r\n else\r\n {\r\n if (isLeft)\r\n {\r\n pts.push(new Vector2(size.y / 2 + knifeRad, dists[i] - addWidth));\r\n pts.push(new Vector2(0, dists[i] - addWidth));\r\n }\r\n else\r\n {\r\n pts.push(new Vector2(size.y / 2 - knifeRad, dists[i] + addWidth));\r\n pts.push(new Vector2(size.y, dists[i] + addWidth));\r\n }\r\n }\r\n }\r\n pl.AddVertexAt(isLeft ? pl.NumberOfVertices : 2, pts);\r\n }\r\n return pl;\r\n }\r\n}\r\n","import { Vector3 } from \"three\";\r\nimport { Board } from \"../../DatabaseServices/Entity/Board\";\r\nimport { Polyline } from \"../../DatabaseServices/Entity/Polyline\";\r\nimport { AsVector2, MoveMatrix } from \"../../Geometry/GeUtils\";\r\nimport { ISpaceParse } from \"../../Geometry/SpaceParse/ISpaceParse\";\r\nimport { BoardType } from \"../../UI/Store/BoardInterface\";\r\nimport { EWRackArrayType, IWineRackOption } from \"../../UI/Store/WineRackInterface\";\r\nimport { DrawWineRackTool } from \"./DrawWinRackTool\";\r\n\r\n/**\r\n * 正酒格\r\n */\r\nexport class DrawUprightWineRackTool extends DrawWineRackTool\r\n{\r\n Parse(space: ISpaceParse, config: IWineRackOption)\r\n {\r\n super.Parse(space, config);\r\n let size = space.Size;\r\n let gripWidth = config.gripWidth;\r\n let brThick = config.boardThick;\r\n let spaceHeight = size.z;\r\n let spaceWidth = size.x;\r\n let gripHeight = gripWidth;\r\n let actualHeight = spaceHeight;\r\n let actualWidth = spaceWidth;\r\n\r\n switch (config.arrayType)\r\n {\r\n case EWRackArrayType.ByWidth:\r\n // let tempWidthCount = 0;\r\n // let tempHeightCount = 0;\r\n // if (widCount > 0 || heightCount > 0)\r\n // {\r\n // tempWidthCount = Math.floor(spaceWidth / (gripWidth + brThick));\r\n // tempHeightCount = Math.floor(spaceHeight / (gripWidth + brThick));\r\n // gripWidth = (spaceWidth - (tempWidthCount - 1) * brThick) / tempWidthCount;\r\n // gripHeight = (spaceHeight - (tempHeightCount - 1) * brThick) / tempHeightCount;\r\n // if (widCount > 0)\r\n // {\r\n // heightCount = tempHeightCount;\r\n // actualWidth = gripWidth * widCount + brThick * (widCount - 1);\r\n // }\r\n // else if (heightCount > 0)\r\n // {\r\n // widCount = tempWidthCount;\r\n // actualWidth = gripWidth * widCount + brThick * (widCount - 1);\r\n // }\r\n // }\r\n config.widthCount = Math.floor(spaceWidth / (gripWidth + brThick));\r\n config.heightCount = Math.floor(spaceHeight / (gripWidth + brThick));\r\n config.gripWidth = (spaceWidth - (config.widthCount - 1) * brThick) / config.widthCount;\r\n gripHeight = (spaceHeight - (config.heightCount - 1) * brThick) / config.heightCount;\r\n break;\r\n case EWRackArrayType.ByCount:\r\n if (config.widthCount > 0)\r\n {\r\n config.widthCount = Math.floor(config.widthCount);\r\n }\r\n else\r\n {\r\n let gk = (spaceHeight - 2 * brThick) / config.heightCount;\r\n config.widthCount = Math.floor((spaceWidth - 2 * brThick) / gk + 1e-6);\r\n }\r\n if (config.heightCount > 0)\r\n {\r\n config.heightCount = Math.floor(config.heightCount);\r\n }\r\n else\r\n {\r\n let gk = (spaceWidth - 2 * config.heightCount) / config.heightCount;\r\n config.heightCount = Math.floor((spaceHeight - 2 * brThick) / gk + 1e-6);\r\n }\r\n config.gripWidth = (spaceWidth - (config.widthCount - 1) * brThick) / config.widthCount;\r\n gripHeight = (spaceHeight - (config.heightCount - 1) * brThick) / config.heightCount;\r\n break;\r\n case EWRackArrayType.Fixed:\r\n config.widthCount = Math.floor(config.widthCount);\r\n config.heightCount = Math.floor(config.heightCount);\r\n actualWidth = gripWidth * config.widthCount + brThick * (config.widthCount - 1);\r\n actualHeight = gripWidth * config.heightCount + brThick * (config.heightCount - 1);\r\n default:\r\n break;\r\n }\r\n\r\n if (config.widthCount <= 0 || config.heightCount <= 0)\r\n throw `绘制酒格失败,酒格个数异常! 宽个数:${config.widthCount} 高个数:${config.heightCount}`;\r\n\r\n config.widthCount--;\r\n config.heightCount--;\r\n this.BuildBoard(gripHeight, actualWidth, actualHeight, space);\r\n // this.AddLayerOrVerticalBoard(actualWidth, actualHeight);\r\n }\r\n BuildBoard(gripHeight: number, spaceWidth: number, spaceHeight: number, space: ISpaceParse)\r\n {\r\n const config = this.Config;\r\n let min = space.SpaceBox.min;\r\n let size = space.Size;\r\n let brThick = config.boardThick;\r\n\r\n let verBr = Board.CreateBoard(spaceHeight, size.y, brThick, BoardType.Vertical);\r\n this.ParseBrTooth(verBr, gripHeight);\r\n for (let i = 1; i <= config.widthCount; i++)\r\n {\r\n let br = verBr.Clone();\r\n br.Name = \"右板\" + i;\r\n br.ApplyMatrix(MoveMatrix(min.clone().add(new Vector3(config.gripWidth * i + (i - 1) * brThick)))).ApplyMatrix(space.SpaceOCS);\r\n this.boardlist.push(br);\r\n }\r\n\r\n let lyBr = Board.CreateBoard(spaceWidth, size.y, brThick);\r\n this.ParseBrTooth(lyBr);\r\n for (let i = 1; i <= config.heightCount; i++)\r\n {\r\n let br = lyBr.Clone();\r\n br.Name = \"左板\" + i;\r\n br.ApplyMatrix(MoveMatrix(\r\n min.clone().add(new Vector3(spaceWidth, 0, gripHeight * i + (i - 1) * brThick))))\r\n .ApplyMatrix(space.SpaceOCS);\r\n this.boardlist.push(br);\r\n }\r\n }\r\n ParseBrTooth(br: Board, gripHeight?: number)\r\n {\r\n const config = this.Config;\r\n let initPts: Vector3[] = [];\r\n\r\n let addWidth = config.grooveWidthAdd;\r\n let topEdge = config.topEdge;\r\n let bottomEdge = config.bottomEdge;\r\n let leftEdge = config.leftEdge;\r\n let rightEdge = config.rightEdge;\r\n let grooveLenAdd = config.grooveLengthAdd;\r\n\r\n br.BoardProcessOption.sealedUp = topEdge.toString();\r\n br.BoardProcessOption.sealedDown = bottomEdge.toString();\r\n br.BoardProcessOption.sealedLeft = leftEdge.toString();\r\n br.BoardProcessOption.sealedRight = rightEdge.toString();\r\n\r\n if (br.BoardType === BoardType.Layer)\r\n {\r\n addWidth = (addWidth - 2 * leftEdge) / 2;\r\n let p1 = new Vector3(0, config.gripWidth - addWidth);\r\n let p2 = new Vector3(br.Width / 2 + grooveLenAdd, config.gripWidth - addWidth);\r\n let p3 = new Vector3(br.Width / 2 + grooveLenAdd, config.gripWidth + br.Thickness + addWidth);\r\n let p4 = new Vector3(0, config.gripWidth + br.Thickness + addWidth);\r\n initPts.push(p1, p2, p3, p4);\r\n for (let i = 2; i <= config.widthCount; i++)\r\n {\r\n initPts.push(\r\n ...[p1, p2, p3, p4].map(p => p.clone().add(new Vector3(0, (config.gripWidth + br.Thickness) * (i - 1))))\r\n );\r\n }\r\n initPts.reverse();\r\n let cu = br.ContourCurve as Polyline;\r\n cu.AddVertexAt(cu.EndParam, initPts.map(p => AsVector2(p)));\r\n br.ContourCurve = cu;\r\n }\r\n else\r\n {\r\n addWidth = (addWidth - 2 * rightEdge) / 2;\r\n let p1 = new Vector3(br.Width, gripHeight - addWidth);\r\n let p2 = new Vector3(br.Width / 2 - grooveLenAdd, gripHeight - addWidth);\r\n let p3 = new Vector3(br.Width / 2 - grooveLenAdd, gripHeight + br.Thickness + addWidth);\r\n let p4 = new Vector3(br.Width, gripHeight + br.Thickness + addWidth);\r\n initPts.push(p1, p2, p3, p4);\r\n for (let i = 2; i <= config.heightCount; i++)\r\n {\r\n initPts.push(\r\n ...[p1, p2, p3, p4].map(p => p.clone().add(new Vector3(0, (gripHeight + br.Thickness) * (i - 1))))\r\n );\r\n }\r\n let cu = br.ContourCurve as Polyline;\r\n cu.AddVertexAt(2, initPts.map(p => AsVector2(p)));\r\n br.ContourCurve = cu;\r\n }\r\n this.ParseHighSealing(br, config.leftEdge, config.rightEdge, config.topEdge, config.bottomEdge, br.BoardType === BoardType.Layer);\r\n }\r\n}\r\n","import { Vector3 } from \"three\";\r\nimport { ExtendsBoardThickness } from \"../../../Add-on/DrawBoard/BuildBoardTool\";\r\nimport { DrawObliqueWineRackTool } from \"../../../Add-on/DrawWineRack/DrawObliqueWineRackTool\";\r\nimport { DrawUprightWineRackTool } from \"../../../Add-on/DrawWineRack/DrawUprightWineRackTool\";\r\nimport { DrawWineRackTool } from \"../../../Add-on/DrawWineRack/DrawWinRackTool\";\r\nimport { DefaultWineRackConfig } from \"../../../Editor/DefaultConfig\";\r\nimport { Box3Ext } from \"../../../Geometry/Box\";\r\nimport { ISpaceParse } from \"../../../Geometry/SpaceParse/ISpaceParse\";\r\nimport { EWineRackType, IWineRackOption } from \"../../../UI/Store/WineRackInterface\";\r\nimport { Factory } from \"../../CADFactory\";\r\nimport { CADFiler } from \"../../CADFiler\";\r\nimport { Board } from \"../../Entity/Board\";\r\nimport { TemplateRecord } from \"../TemplateRecord\";\r\n\r\n@Factory\r\nexport class TemplateWineRackRecord extends TemplateRecord\r\n{\r\n private option: IWineRackOption = { ...DefaultWineRackConfig };\r\n constructor()\r\n {\r\n super();\r\n this.name = \"酒格(自动)\";\r\n }\r\n get Option()\r\n {\r\n return Object.assign({}, this.option);\r\n }\r\n set Option(option: IWineRackOption)\r\n {\r\n this.WriteAllObjectRecord();\r\n Object.assign(this.option, option);\r\n ExtendsBoardThickness(this, option.boardThick);\r\n }\r\n protected async Update()\r\n {\r\n await super.Update();\r\n\r\n let bh = this.GetParam(\"BH\")?.value as number;\r\n if (bh)\r\n this.option.boardThick = bh;\r\n\r\n let bh2 = this.GetParam(\"BH2\")?.value as number;\r\n if (bh2)\r\n this.option.brThick2 = bh2;\r\n\r\n let wineRack: DrawWineRackTool;\r\n if (this.option.type === EWineRackType.Oblique)\r\n wineRack = DrawObliqueWineRackTool.GetInstance() as DrawObliqueWineRackTool;\r\n else\r\n wineRack = DrawUprightWineRackTool.GetInstance() as DrawUprightWineRackTool;\r\n\r\n let sbrs = this.PositioningSupportBoards;\r\n let space = new ISpaceParse(sbrs, this._CacheSpaceCS);\r\n space.ParseOK = true;\r\n space.SpaceBox = new Box3Ext(new Vector3(), this._CacheSpaceSize);\r\n\r\n wineRack.Parse(space, this.Option);\r\n\r\n let nbrs = wineRack.boardlist;\r\n\r\n for (let i = nbrs.length; i < this.Objects.length; i++)\r\n this.Objects[i].Object.Erase();\r\n\r\n for (let i = 0; i < nbrs.length; i++)\r\n {\r\n if (i < this.Objects.length)\r\n {\r\n let br = this.Objects[i].Object as Board;\r\n br.Erase(false);\r\n br.CopyFrom(nbrs[i]);\r\n br.SpaceOCS = this._CacheSpaceCS;\r\n }\r\n else\r\n {\r\n this._db.ModelSpace.Append(nbrs[i]);\r\n this.Objects.push(nbrs[i].Id);\r\n nbrs[i].SpaceOCS = this._CacheSpaceCS;\r\n }\r\n }\r\n }\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 super.ReadFile(file);\r\n\r\n this.option.type = file.Read();\r\n this.option.arrayType = file.Read();\r\n this.option.fullType = file.Read();\r\n this.option.isFull = file.Read();\r\n this.option.fullDir = file.Read();\r\n this.option.isLock = file.Read();\r\n this.option.heightCount = file.Read();\r\n this.option.widthCount = file.Read();\r\n\r\n this.option.isTotalDepth = file.Read();\r\n this.option.depth = file.Read();\r\n this.option.calcDepth = file.Read();\r\n this.option.gripWidth = file.Read();\r\n this.option.boardThick = file.Read();\r\n this.option.grooveWidthAdd = file.Read();\r\n\r\n this.option.leftEdge = file.Read();\r\n this.option.rightEdge = file.Read();\r\n this.option.topEdge = file.Read();\r\n this.option.bottomEdge = file.Read();\r\n\r\n this.option.frontCut = file.Read();\r\n this.option.leftCut = file.Read();\r\n this.option.rightCut = file.Read();\r\n this.option.topCut = file.Read();\r\n\r\n this.option.grooveLengthAdd = file.Read();\r\n this.option.isDrawLy = file.Read();\r\n this.option.isDrawVer = file.Read();\r\n this.option.brThick2 = file.Read();\r\n\r\n if (ver > 1)\r\n this.option.followNarrow = file.Read();\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(2);\r\n super.WriteFile(file);\r\n file.Write(this.option.type);\r\n file.Write(this.option.arrayType);\r\n file.Write(this.option.fullType);\r\n file.Write(this.option.isFull);\r\n file.Write(this.option.fullDir);\r\n file.Write(this.option.isLock);\r\n file.Write(this.option.heightCount);\r\n file.Write(this.option.widthCount);\r\n\r\n file.Write(this.option.isTotalDepth);\r\n file.Write(this.option.depth);\r\n file.Write(this.option.calcDepth);\r\n file.Write(this.option.gripWidth);\r\n file.Write(this.option.boardThick);\r\n file.Write(this.option.grooveWidthAdd);\r\n file.Write(this.option.leftEdge);\r\n file.Write(this.option.rightEdge);\r\n file.Write(this.option.topEdge);\r\n file.Write(this.option.bottomEdge);\r\n\r\n file.Write(this.option.frontCut);\r\n file.Write(this.option.leftCut);\r\n file.Write(this.option.rightCut);\r\n file.Write(this.option.topCut);\r\n\r\n file.Write(this.option.grooveLengthAdd);\r\n file.Write(this.option.isDrawLy);\r\n file.Write(this.option.isDrawVer);\r\n file.Write(this.option.brThick2);\r\n file.Write(this.option.followNarrow);\r\n }\r\n //#endregion\r\n}\r\n","import { Geometry, Vector3, WebGLRenderer } from \"three\";\r\nimport { CADFiler } from \"../../api\";\r\nimport { CameraUpdate } from \"../../GraphicsSystem/CameraUpdate\";\r\nimport { RenderType } from \"../../GraphicsSystem/RenderType\";\r\nimport { Factory } from \"../CADFactory\";\r\nimport { Entity } from \"../Entity/Entity\";\r\nimport { ObjectId } from \"../ObjectId\";\r\n\r\nconst MaxSize = 2048 * 2;\r\n\r\n/**\r\n * 更新视口实体的时机:\r\n * ->在布局状态下才应该更新,否则则标记为需要更新(或者不需要标记)\r\n * ->在缩放相机时,标记所有的需要更新(异步更新任务)(优先更新可见视口)\r\n * ->切换到布局时,更新全部视口(使用更新任务)\r\n */\r\n\r\n@Factory\r\nexport class ViewportEntity2 extends Entity\r\n{\r\n static Renderer: WebGLRenderer;\r\n OnlyRenderType = true;\r\n\r\n //当前视口的渲染类型\r\n private _RenderType: RenderType = RenderType.Conceptual;\r\n //当前视口绘制的图形列表\r\n private _DisplayEntitys: Set = new Set();\r\n\r\n private _CameraData = new CameraUpdate;\r\n constructor(\r\n private _Width: number = 1,\r\n private _Height: number = 1,\r\n )\r\n {\r\n super();\r\n }\r\n\r\n SetSize(width: number, height: number)\r\n {\r\n if (this._Width === width && this._Height === height) return;\r\n\r\n this.WriteAllObjectRecord();\r\n this._Width = width;\r\n this._Height = height;\r\n this.Update();\r\n }\r\n\r\n AppendEntity(ens: Iterable)\r\n {\r\n this.WriteAllObjectRecord();\r\n for (let e of ens)\r\n this._DisplayEntitys.add(e.Id);\r\n\r\n this.Update();\r\n }\r\n\r\n _Target = new Vector3(0, 0, -1);\r\n\r\n \r\n\r\n Destroy()\r\n {\r\n super.Destroy();\r\n }\r\n\r\n\r\n //#region -------------------------File-------------------------\r\n //对象从文件中读取数据,初始化自身\r\n protected _ReadFile(file: CADFiler)\r\n {\r\n let ver = file.Read();\r\n super._ReadFile(file);\r\n\r\n\r\n this._Width = file.Read();\r\n this._Height = file.Read();\r\n\r\n this._DisplayEntitys.clear();\r\n let count = file.Read();\r\n for (let i = 0; i < count; i++)\r\n {\r\n let id = file.ReadSoftObjectId();\r\n if (id)\r\n this._DisplayEntitys.add(id);\r\n }\r\n\r\n this._RenderType = file.Read();\r\n this._Target.fromArray(file.Read());\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(1);\r\n super.WriteFile(file);\r\n\r\n file.Write(this._Width);\r\n file.Write(this._Height);\r\n\r\n file.Write(this._DisplayEntitys.size);\r\n for (let id of this._DisplayEntitys)\r\n file.WriteSoftObjectId(id);\r\n\r\n file.Write(this._RenderType);\r\n file.Write(this._Target.toArray());\r\n }\r\n //#endregion\r\n}\r\n\r\n//\r\nfunction ScaleUV2(geo: Geometry, xScale = 1e-3, yScale = 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.x /= xScale;\r\n uv.y /= yScale;\r\n }\r\n }\r\n }\r\n}\r\n","import { Box3, BufferGeometry, Face3, Geometry, Line as TLine, LineSegments, MathUtils, Matrix3, Mesh, Object3D, ShapeUtils, Vector2, Vector3 } from \"three\";\r\nimport { HostApplicationServices } from \"../../../../ApplicationServices/HostApplicationServices\";\r\nimport { arrayPushArray } from \"../../../../Common/ArrayExt\";\r\nimport { ColorMaterial } from \"../../../../Common/ColorPalette\";\r\nimport { EntityUpdateWrap } from \"../../../../Common/EntityUpdateWrap\";\r\nimport { ObjectSnapMode } from \"../../../../Editor/ObjectSnapMode\";\r\nimport { Box3Ext } from \"../../../../Geometry/Box\";\r\nimport { BufferGeometryUtils } from \"../../../../Geometry/BufferGeometryUtils\";\r\nimport { equaln, equalv3, midPoint, MoveMatrix, ZAxis, ZeroVec } from \"../../../../Geometry/GeUtils\";\r\nimport { RenderType } from \"../../../../GraphicsSystem/RenderType\";\r\nimport { SubtractRange, Tape } from \"../../../../ueapi\";\r\nimport { Factory } from \"../../../CADFactory\";\r\nimport { CADFiler } from \"../../../CADFiler\";\r\nimport { Curve } from \"../../../Entity/Curve\";\r\nimport { Line } from \"../../../Entity/Line\";\r\nimport { GetLineParam } from \"../../ParseService/GetCurveParam\";\r\nimport { applyMixins, RoomWallBase } from \"./RoomWallBase\";\r\nimport { WallSnapMode } from \"./WallSnapMode\";\r\n\r\nconst SnapTempLine = new Line;\r\nconst TempP = new Vector3;\r\n\r\n@Factory\r\nexport class RoomWallLine extends RoomWallBase\r\n{\r\n\r\n constructor(private _StartPoint = new Vector3,\r\n private _EndPoint = new Vector3,\r\n _Thickness = 120\r\n )\r\n {\r\n super();\r\n this.Thickness = _Thickness;\r\n }\r\n\r\n UpdateOCSToMinBox()\r\n {\r\n this.WriteAllObjectRecord();\r\n let sp = this.StartPoint;\r\n let ep = this.EndPoint;\r\n\r\n let x = this.GetFistDeriv(0).normalize();\r\n let z = ZAxis;\r\n let y = z.clone().cross(x).normalize();\r\n this._Matrix.makeBasis(x, y, z).setPosition(sp);\r\n\r\n let inv = this.OCSInv;\r\n this._StartPoint.copy(sp).applyMatrix4(inv);\r\n this._EndPoint.copy(ep).applyMatrix4(inv);\r\n }\r\n\r\n get StartPoint(): Vector3\r\n {\r\n return this._StartPoint.clone().applyMatrix4(this.OCSNoClone);\r\n }\r\n\r\n get EndPoint(): Vector3\r\n {\r\n return this._EndPoint.clone().applyMatrix4(this.OCSNoClone);\r\n }\r\n\r\n set StartPoint(p: Vector3)\r\n {\r\n p = TempP.copy(p).applyMatrix4(this.OCSInv).setZ(0);\r\n if (!equalv3(p, this._StartPoint, 1e-4))\r\n {\r\n this.WriteAllObjectRecord();\r\n this._StartPoint.copy(p);\r\n this.Update();\r\n }\r\n }\r\n\r\n set EndPoint(p: Vector3)\r\n {\r\n p = TempP.copy(p).applyMatrix4(this.OCSInv).setZ(0);\r\n if (!equalv3(p, this._EndPoint, 1e-4))\r\n {\r\n this.WriteAllObjectRecord();\r\n this._EndPoint.copy(p);\r\n this.Update();\r\n }\r\n }\r\n\r\n Reverse(): this\r\n {\r\n this.WriteAllObjectRecord();\r\n [this._EndPoint, this._StartPoint] = [this._StartPoint, this._EndPoint];\r\n return this;\r\n }\r\n\r\n //中心轴线\r\n override get CenterAxisCurve(): Line\r\n {\r\n let line = new Line(this._StartPoint.clone(), this._EndPoint.clone());\r\n line.OCSNoClone.copy(this.OCSNoClone);\r\n return line;\r\n }\r\n\r\n get BoundingBox(): Box3\r\n {\r\n return this.BoundingBoxInOCS.applyMatrix4(this.OCSNoClone);\r\n }\r\n\r\n get BoundingBoxInOCS(): Box3Ext\r\n {\r\n let line = new Line(this._StartPoint, this._EndPoint);\r\n let parse = new GetLineParam(line);\r\n if (parse.Length > 1e-5)\r\n {\r\n let p1 = parse.OffsetPoint(this._StartPoint.clone(), this.Thickness * 0.5);//left\r\n let p2 = parse.OffsetPoint(this._StartPoint.clone(), this.Thickness * -0.5);//right\r\n\r\n let p3 = parse.OffsetPoint(this._EndPoint.clone(), this.Thickness * 0.5);//left\r\n let p4 = parse.OffsetPoint(this._EndPoint.clone(), this.Thickness * -0.5);//right\r\n\r\n p1.z = this._Height;\r\n\r\n return new Box3Ext().setFromPoints([p1, p2, p3, p4]);\r\n }\r\n\r\n return new Box3Ext().setFromPoints([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 let pts = [];\r\n pts = pts.concat(Line.prototype.GetObjectSnapPoints.call(this, snapMode, pickPoint, lastPoint, viewXform));\r\n const CurveSnap = (curve: Curve) =>\r\n {\r\n let bakZ = curve.Z;\r\n //底部线\r\n arrayPushArray(pts, curve.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform));\r\n\r\n //顶部线\r\n curve.Z += this._Height;\r\n arrayPushArray(pts, curve.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform));\r\n curve.Z = bakZ;\r\n\r\n //柱子线\r\n SnapTempLine.OCSNoClone.copy(curve.OCSNoClone);\r\n //@ts-ignore\r\n SnapTempLine._StartPoint.copy(curve._StartPoint);\r\n //@ts-ignore\r\n SnapTempLine._EndPoint.copy(curve._StartPoint);\r\n //@ts-ignore\r\n SnapTempLine._EndPoint.z += this._Height;\r\n\r\n arrayPushArray(pts, SnapTempLine.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform));\r\n\r\n //@ts-ignore\r\n SnapTempLine._StartPoint.copy(curve._EndPoint);\r\n //@ts-ignore\r\n SnapTempLine._EndPoint.copy(curve._EndPoint);\r\n //@ts-ignore\r\n SnapTempLine._EndPoint.z += this._Height;\r\n\r\n arrayPushArray(pts, SnapTempLine.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform));\r\n };\r\n\r\n if (this.LeftCurves && (RoomWallBase.SnapMode & WallSnapMode.Out) > 0)\r\n {\r\n this.LeftCurves.forEach(CurveSnap);\r\n this.RightCurves.forEach(CurveSnap);\r\n this.LidCurves.forEach(CurveSnap);\r\n }\r\n\r\n return pts;\r\n }\r\n\r\n GetGripPoints(): Vector3[]\r\n {\r\n let sp = this.StartPoint;\r\n let ep = this.EndPoint;\r\n let pts = [sp, midPoint(sp, ep), ep];\r\n for (let i = 0; i < 3; i++)\r\n {\r\n let p = pts[i].clone();\r\n pts.push(p.setZ(p.z + this._Height));\r\n }\r\n return pts;\r\n }\r\n\r\n MoveGripPoints(indexs: number[], vec: Vector3)\r\n {\r\n if (equalv3(vec, ZeroVec, 1e-4)) return;\r\n this.WriteAllObjectRecord();\r\n\r\n let set = new Set();\r\n for (let i of indexs)\r\n if (i > 2) set.add(i - 3);\r\n else set.add(i);\r\n\r\n EntityUpdateWrap(this, () =>\r\n {\r\n for (let index of set)\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\r\n GetStretchPoints(): Vector3[]\r\n {\r\n return [this.StartPoint, this.EndPoint];\r\n }\r\n MoveStretchPoints(indexList: number[], vec: Vector3)\r\n {\r\n if (equalv3(vec, ZeroVec, 1e-4)) return;\r\n this.WriteAllObjectRecord();\r\n EntityUpdateWrap(this, () =>\r\n {\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\r\n //#region //绘制\r\n\r\n UpdateDrawGeometry()\r\n {\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\r\n private _EdgeGeometry: BufferGeometry;\r\n get EdgeGeometry()\r\n {\r\n if (this._EdgeGeometry) return this._EdgeGeometry;\r\n\r\n for (let hole of this.RealHoles)\r\n if (hole.StartParam > hole.EndParam)\r\n [hole.StartParam, hole.EndParam] = [hole.EndParam, hole.StartParam];\r\n\r\n let pts: Vector3[];\r\n if (!this.LeftCurves)\r\n {\r\n let line = new Line(this._StartPoint, this._EndPoint);\r\n let parse = new GetLineParam(line);\r\n if (parse.Length > 0.1)\r\n {\r\n let p1 = parse.OffsetPoint(this._StartPoint.clone(), this.Thickness * 0.5);//left\r\n let p2 = parse.OffsetPoint(this._StartPoint.clone(), this.Thickness * -0.5);//right\r\n\r\n let p3 = parse.OffsetPoint(this._EndPoint.clone(), this.Thickness * 0.5);//left\r\n let p4 = parse.OffsetPoint(this._EndPoint.clone(), this.Thickness * -0.5);//right\r\n\r\n let [pz1, pz2, pz3, pz4] = [p1, p2, p3, p4].map(p => p.clone().setZ(this._Height));\r\n pts = [p1, p2, p2, p4, p4, p3, p3, p1,\r\n pz1, pz2, pz2, pz4, pz4, pz3, pz3, pz1,\r\n\r\n p1, pz1,\r\n p2, pz2,\r\n p3, pz3,\r\n p4, pz4\r\n ];\r\n }\r\n }\r\n else\r\n {\r\n pts = [];\r\n let inv = this.OCSInv;\r\n const DrawCurve = (curve: Curve, _leftRanges: [number, number][], _rightRanges: [number, number][]) =>\r\n {\r\n if (curve instanceof Line)\r\n {\r\n let p1 = curve.StartPoint.applyMatrix4(inv);\r\n let p2 = curve.EndPoint.applyMatrix4(inv);\r\n pts.push(p1, p2);\r\n\r\n for (let range of _leftRanges)\r\n pts.push(p1.clone().setZ(range[0]), p1.clone().setZ(range[1]));\r\n for (let range of _rightRanges)\r\n pts.push(p2.clone().setZ(range[0]), p2.clone().setZ(range[1]));\r\n\r\n pts.push(p1.clone().setZ(this._Height), p2.clone().setZ(this._Height));\r\n }\r\n };\r\n\r\n let lidRanges: [number, number][] = [[0, this._Height]];\r\n let leftRanges = lidRanges;\r\n let rightRanges = lidRanges;\r\n for (let hole of this.RealHoles)\r\n {\r\n if (equaln(hole.StartParam, 0))\r\n {\r\n let newLeftRanges = [];\r\n for (let range of leftRanges)\r\n arrayPushArray(newLeftRanges, SubtractRange(range[0], range[1], hole.Bottom, hole.Top, 1e5));\r\n leftRanges = newLeftRanges;\r\n }\r\n\r\n if (equaln(hole.EndParam, 1))\r\n {\r\n let newRightRanges = [];\r\n for (let range of rightRanges)\r\n arrayPushArray(newRightRanges, SubtractRange(range[0], range[1], hole.Bottom, hole.Top, 1e5));\r\n rightRanges = newRightRanges;\r\n }\r\n }\r\n\r\n for (let i = 0; i < this.LeftCurves.length; i++)\r\n {\r\n let curve = this.LeftCurves[i];\r\n DrawCurve(curve, i === 0 ? leftRanges : lidRanges, (i === this.LeftCurves.length - 1) ? rightRanges : lidRanges);\r\n }\r\n for (let i = 0; i < this.RightCurves.length; i++)\r\n {\r\n let curve = this.RightCurves[i];\r\n DrawCurve(curve, i === 0 ? leftRanges : lidRanges, (i === this.RightCurves.length - 1) ? rightRanges : lidRanges);\r\n }\r\n for (let i = 0; i < this.LidCurves.length; i++)\r\n {\r\n let curve = this.LidCurves[i];\r\n DrawCurve(curve, lidRanges, lidRanges);\r\n }\r\n }\r\n\r\n this._EdgeGeometry = BufferGeometryUtils.CreateFromPts(pts ?? []);\r\n return this._EdgeGeometry;\r\n }\r\n\r\n private _MeshGeometry: Geometry;\r\n get MeshGeometry()\r\n {\r\n if (this._MeshGeometry) return this._MeshGeometry;\r\n\r\n this._MeshGeometry = new Geometry;\r\n\r\n let geo = this._MeshGeometry;\r\n\r\n let normal = this.Normal;\r\n let normaln = normal.clone().negate();\r\n\r\n let line = new Line(this._StartPoint, this._EndPoint);\r\n let parse = new GetLineParam(line);\r\n if (!this.LeftCurves)\r\n {\r\n if (parse.Length > 0.1)\r\n {\r\n let p1 = parse.OffsetPoint(this._StartPoint.clone(), this.Thickness * 0.5);//left\r\n let p2 = parse.OffsetPoint(this._StartPoint.clone(), this.Thickness * -0.5);//right\r\n\r\n let p3 = parse.OffsetPoint(this._EndPoint.clone(), this.Thickness * 0.5);//left\r\n let p4 = parse.OffsetPoint(this._EndPoint.clone(), this.Thickness * -0.5);//right\r\n\r\n let [pz1, pz2, pz3, pz4] = [p1, p2, p3, p4].map(p => p.clone().setZ(this._Height));\r\n\r\n geo.vertices.push(p1, p2, p3, p4, pz1, pz2, pz3, pz4);\r\n\r\n geo.faces.push(\r\n //底部\r\n new Face3(0, 2, 1, normaln),\r\n new Face3(1, 2, 3, normaln),\r\n //顶部\r\n new Face3(0 + 4, 1 + 4, 2 + 4, normal),\r\n new Face3(1 + 4, 3 + 4, 2 + 4, normal),\r\n //开始盖子\r\n new Face3(0, 1, 5, parse.Direction.clone().negate()),\r\n new Face3(0, 5, 4, parse.Direction.clone().negate()),\r\n //结束盖子\r\n new Face3(2, 7, 3, parse.Direction),\r\n new Face3(2, 6, 7, parse.Direction),\r\n //left\r\n new Face3(0, 6, 2, parse.LeftDir),\r\n new Face3(0, 4, 6, parse.LeftDir),\r\n //right\r\n new Face3(1, 3, 7, parse.LeftDir.clone().negate()),\r\n new Face3(1, 7, 5, parse.LeftDir.clone().negate()),\r\n );\r\n\r\n //x\r\n let x = parse.Length * 1e-3;\r\n let y = this.Thickness * 1e-3;\r\n let z = this._Height * 1e-3;\r\n geo.faceVertexUvs[0].push(\r\n //floor\r\n [new Vector2(0, 0), new Vector2(x, 0), new Vector2(0, y)],\r\n [new Vector2(0, y), new Vector2(x, 0), new Vector2(x, y)],\r\n //top\r\n [new Vector2(0, 0), new Vector2(0, y), new Vector2(x, 0)],\r\n [new Vector2(0, y), new Vector2(x, y), new Vector2(x, 0)],\r\n //start lid\r\n [new Vector2(0, 0), new Vector2(y, 0), new Vector2(y, z)],\r\n [new Vector2(0, 0), new Vector2(y, z), new Vector2(0, z)],\r\n //end lid\r\n [new Vector2(y, 0), new Vector2(0, z), new Vector2(0, 0)],\r\n [new Vector2(y, 0), new Vector2(y, z), new Vector2(0, z)],\r\n //left\r\n [new Vector2(0, 0), new Vector2(x, z), new Vector2(x, 0)],\r\n [new Vector2(0, 0), new Vector2(0, z), new Vector2(x, z)],\r\n //right\r\n [new Vector2(0, 0), new Vector2(x, 0), new Vector2(0, z)],\r\n [new Vector2(0, 0), new Vector2(0, z), new Vector2(0, z)],\r\n );\r\n\r\n\r\n }\r\n }\r\n else\r\n {\r\n let inv = this.OCSInv;\r\n let thisParam = new GetLineParam(this as unknown as Line);\r\n const BuildLeftFace = (curve: Curve) =>\r\n {\r\n \r\n\r\n if (curve instanceof Line)\r\n {\r\n let tapes = [new Tape(0, 1, 0, this._Height)];\r\n let curveParam = new GetLineParam(curve);\r\n\r\n let holes = this.RealHoles;\r\n if (holes.length)\r\n {\r\n for (let hole of holes)\r\n {\r\n let start = equaln(hole.StartParam, 0) ? 0 : MathUtils.clamp(curveParam.GetParamAtPoint(thisParam.GetPointAtParam(hole.StartParam)), 0, 1);\r\n let end = equaln(hole.EndParam, 1) ? 1 : MathUtils.clamp(curveParam.GetParamAtPoint(thisParam.GetPointAtParam(hole.EndParam)), 0, 1);\r\n if (equaln(start, end, 1e-8)) continue;//重复的点造成了绘制错误\r\n\r\n if (start > end) [start, end] = [end, start];\r\n start = Math.max(0, start);\r\n end = Math.min(1, end);\r\n if (start >= end) continue;\r\n\r\n let holeTape = new Tape(start, end, hole.Bottom, hole.Top);\r\n\r\n let newTapes: Tape[] = [];\r\n for (let tape of tapes)\r\n arrayPushArray(newTapes, tape.Clip(holeTape));\r\n\r\n tapes = newTapes;\r\n }\r\n }\r\n\r\n for (let tape of tapes)\r\n {\r\n let startIndex = geo.vertices.length;\r\n\r\n let p1 = curveParam.GetPointAtParam(tape.start).applyMatrix4(inv);\r\n let p2 = curveParam.GetPointAtParam(tape.end).applyMatrix4(inv);\r\n geo.vertices.push(p1.setZ(tape.bottom), p2.setZ(tape.bottom));\r\n geo.vertices.push(p1.clone().setZ(tape.top));\r\n geo.vertices.push(p2.clone().setZ(tape.top));\r\n\r\n let startX = curveParam.Length * 1e-3 * tape.start;\r\n let endX = curveParam.Length * 1e-3 * tape.end;\r\n\r\n let startZ = tape.bottom * 1e-3;\r\n let endZ = tape.top * 1e-3;\r\n\r\n geo.faces.push(\r\n new Face3(startIndex, startIndex + 2, startIndex + 1, parse.LeftDir),\r\n new Face3(startIndex + 1, startIndex + 2, startIndex + 3, parse.LeftDir),\r\n );\r\n\r\n geo.faceVertexUvs[0].push(\r\n [new Vector2(startX, startZ), new Vector2(startX, endZ), new Vector2(endX, startZ)],\r\n [new Vector2(endX, startZ), new Vector2(startX, endZ), new Vector2(endX, endZ)],\r\n );\r\n }\r\n }\r\n };\r\n const BuildRightFace = (curve: Curve) =>\r\n {\r\n \r\n\r\n if (curve instanceof Line)\r\n {\r\n let tapes = [new Tape(0, 1, 0, this._Height)];\r\n let curveParam = new GetLineParam(curve);\r\n\r\n let holes = this.RealHoles;\r\n if (holes.length)\r\n {\r\n for (let hole of holes)\r\n {\r\n let start = equaln(hole.StartParam, 0) ? 0 : MathUtils.clamp(curveParam.GetParamAtPoint(thisParam.GetPointAtParam(hole.StartParam)), 0, 1);\r\n let end = equaln(hole.EndParam, 1) ? 1 : MathUtils.clamp(curveParam.GetParamAtPoint(thisParam.GetPointAtParam(hole.EndParam)), 0, 1);\r\n if (equaln(start, end, 1e-8)) continue;//重复的点造成了绘制错误\r\n\r\n if (start > end) [start, end] = [end, start];\r\n start = Math.max(0, start);\r\n end = Math.min(1, end);\r\n if (start >= end) continue;\r\n\r\n let holeTape = new Tape(start, end, hole.Bottom, hole.Top);\r\n\r\n let newTapes: Tape[] = [];\r\n for (let tape of tapes)\r\n arrayPushArray(newTapes, tape.Clip(holeTape));\r\n\r\n tapes = newTapes;\r\n }\r\n }\r\n\r\n for (let tape of tapes)\r\n {\r\n let startIndex = geo.vertices.length;\r\n\r\n let p1 = curveParam.GetPointAtParam(tape.start).applyMatrix4(inv);\r\n let p2 = curveParam.GetPointAtParam(tape.end).applyMatrix4(inv);\r\n geo.vertices.push(p1.setZ(tape.bottom), p2.setZ(tape.bottom));\r\n geo.vertices.push(p1.clone().setZ(tape.top));\r\n geo.vertices.push(p2.clone().setZ(tape.top));\r\n\r\n let startX = curveParam.Length * 1e-3 * tape.start;\r\n let endX = curveParam.Length * 1e-3 * tape.end;\r\n\r\n let startZ = tape.bottom * 1e-3;\r\n let endZ = tape.top * 1e-3;\r\n\r\n geo.faces.push(\r\n new Face3(startIndex, startIndex + 1, startIndex + 2, curveParam.RightDir),\r\n new Face3(startIndex + 1, startIndex + 3, startIndex + 2, curveParam.RightDir),\r\n );\r\n\r\n geo.faceVertexUvs[0].push(\r\n [new Vector2(startX, startZ), new Vector2(endX, startZ), new Vector2(startX, endZ)],\r\n [new Vector2(endX, startZ), new Vector2(endX, endZ), new Vector2(startX, endZ)],\r\n );\r\n }\r\n }\r\n };\r\n this.LeftCurves.forEach(BuildLeftFace);\r\n this.RightCurves.forEach(BuildRightFace);\r\n this.LidCurves.forEach(BuildRightFace);\r\n\r\n if (this.Region)\r\n {\r\n let bakZ = this.Region.OCSNoClone.elements[14];\r\n this.Region.OCSNoClone.elements[14] = this._Matrix.elements[14];\r\n\r\n let pts = this.Region.MatrixAlignTo2(this.OCSNoClone).pts;\r\n this.Region.OCSNoClone.elements[14] = bakZ;\r\n\r\n let faces = ShapeUtils.triangulateShape(pts, []);\r\n\r\n let startIndex = geo.vertices.length;\r\n for (let p of pts) geo.vertices.push(new Vector3(p.x, p.y, this._Height));\r\n if (HostApplicationServices.DrawWallBottomFace) for (let p of pts) geo.vertices.push(new Vector3(p.x, p.y, 0));\r\n\r\n for (let i = 0; i < faces.length; i++)\r\n {\r\n let [a, b, c] = faces[i];\r\n geo.faces.push(new Face3(startIndex + a, startIndex + b, startIndex + c, normal));\r\n let uvs = faces[i].map(index => pts[index].clone());\r\n geo.faceVertexUvs[0].push(uvs);\r\n\r\n if (HostApplicationServices.DrawWallBottomFace)\r\n {\r\n geo.faces.push(new Face3(startIndex + pts.length + c, startIndex + pts.length + b, startIndex + pts.length + a, normaln));\r\n geo.faceVertexUvs[0].push(uvs.concat().reverse().map(v => v.clone()));\r\n }\r\n }\r\n\r\n // //todo:为了优化显示 我们可以把侧面也画出来 (应该使用和酷家乐一样的技术 在视线对准时,隐藏整个墙)\r\n // let d = this._EndPoint.clone().sub(this._StartPoint).normalize();\r\n // let pre = pts[pts.length - 1];\r\n // let tempV = new Vector3;\r\n // for (let i = 0; i < pts.length; i++)\r\n // {\r\n // let p = pts[i];\r\n // tempV.set(p.x - pre.x, p.y - pre.y, 0).normalize();\r\n // //todo:盖子会重复绘制\r\n // if (!isParallelTo(d, tempV, 1e-3) && !isPerpendicularityTo(d, tempV, 1e-3))\r\n // {\r\n // startIndex = geo.vertices.length;\r\n // geo.vertices.push(AsVector3(pre), AsVector3(p));\r\n // geo.vertices.push(AsVector3(pre).setZ(this._Height));\r\n // geo.vertices.push(AsVector3(p).setZ(this._Height));\r\n\r\n // LEFT_ROTATE_MTX2.applyVector(tempV);\r\n // tempV.negate();\r\n\r\n // let n = tempV.clone();\r\n\r\n // geo.faces.push(\r\n // new Face3(startIndex, startIndex + 1, startIndex + 2, n),\r\n // new Face3(startIndex + 1, startIndex + 3, startIndex + 2, n),\r\n // );\r\n\r\n // geo.faceVertexUvs[0].push(\r\n // [new Vector2(), new Vector2(0, 0), new Vector2(0, 0)],\r\n // [new Vector2(0, 0), new Vector2(0, 0), new Vector2(0, 0)],\r\n // );\r\n // }\r\n\r\n // pre = p;\r\n // }\r\n }\r\n }\r\n\r\n geo.computeFaceNormals();\r\n geo.verticesNeedUpdate = true;\r\n geo.uvsNeedUpdate = true;\r\n\r\n return geo;\r\n }\r\n\r\n\r\n InitDrawObject(renderType: RenderType = RenderType.Wireframe): Object3D\r\n {\r\n 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\r\n let obj = new Object3D;\r\n if (renderType === RenderType.Wireframe || renderType === RenderType.Jig)\r\n {\r\n let pts = [this._StartPoint, this._EndPoint];\r\n let geo = new BufferGeometry().setFromPoints(pts);\r\n let axisLine = new TLine(geo, ColorMaterial.GetWallLineMtl(1));\r\n axisLine.computeLineDistances();\r\n obj.add(axisLine);\r\n\r\n let line = new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(this.ColorIndex));\r\n obj.add(line);\r\n }\r\n else if (renderType === RenderType.Conceptual)\r\n {\r\n let mesh = new Mesh(this.MeshGeometry, ColorMaterial.GetConceptualMaterial(this.ColorIndex));\r\n let line = new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(this.ColorIndex));\r\n obj.add(mesh, line);\r\n }\r\n return obj;\r\n }\r\n\r\n /**\r\n * 重载:更新绘制的实体\r\n * @param {RenderType} renderType\r\n * @param {Object3D} obj\r\n */\r\n UpdateDrawObject(renderType: RenderType, obj: Object3D)\r\n {\r\n if (renderType === RenderType.Wireframe || renderType === RenderType.Jig)\r\n {\r\n let [axisLine, outWallLine] = obj.children as [TLine, TLine];\r\n\r\n BufferGeometryUtils.UpdatePts(axisLine.geometry, [this._StartPoint, this._EndPoint]);\r\n axisLine.computeLineDistances();\r\n\r\n if (outWallLine.geometry !== this.EdgeGeometry)\r\n {\r\n outWallLine.geometry.dispose();\r\n outWallLine.geometry = this.EdgeGeometry;\r\n }\r\n }\r\n else if (renderType === RenderType.Conceptual)\r\n {\r\n let mesh = obj.children[0] as Mesh;\r\n if (mesh.geometry !== this.MeshGeometry)\r\n {\r\n mesh.geometry.dispose();\r\n mesh.geometry = this.MeshGeometry;\r\n }\r\n\r\n let line = obj.children[1] as LineSegments;\r\n if (line.geometry !== this.EdgeGeometry)\r\n {\r\n line.geometry.dispose();\r\n line.geometry = this.EdgeGeometry;\r\n }\r\n }\r\n else if (renderType === RenderType.Physical)\r\n {\r\n let mesh = obj as Mesh;\r\n if (mesh.geometry !== this.MeshGeometry)\r\n {\r\n mesh.geometry.dispose();\r\n mesh.geometry = this.MeshGeometry;\r\n }\r\n }\r\n }\r\n //#endregion\r\n\r\n\r\n //#region -------------------------File-------------------------\r\n //对象从文件中读取数据,初始化自身\r\n protected override _ReadFile(file: CADFiler)\r\n {\r\n let ver = file.Read();\r\n super._ReadFile(file);\r\n\r\n this._StartPoint.set(file.Read(), file.Read(), file.Read());\r\n this._EndPoint.set(file.Read(), file.Read(), file.Read());\r\n }\r\n //对象将自身数据写入到文件.\r\n override WriteFile(file: CADFiler)\r\n {\r\n file.Write(1);\r\n super.WriteFile(file);\r\n\r\n file.WriteVec3(this._StartPoint);\r\n file.WriteVec3(this._EndPoint);\r\n }\r\n //#endregion\r\n}\r\n\r\napplyMixins(RoomWallLine, Line);\r\n","import { Vector2, Vector3 } from \"three\";\r\nimport { Matrix2 } from \"../../../Geometry/Matrix2\";\r\nimport { Arc } from \"../../Entity/Arc\";\r\nimport { Line } from \"../../Entity/Line\";\r\nimport { RoomWallBase } from \"../Entity/Wall/RoomWallBase\";\r\nimport { RoomWallLine } from \"../Entity/Wall/RoomWallLine\";\r\n\r\nexport const LEFT_ROTATE_MTX2 = new Matrix2().set(0, 1, -1, 0);\r\n\r\nconst TempDiffVec = new Vector3;\r\n\r\nexport interface GetCurveParam\r\n{\r\n // Direction: Vector3;\r\n // NegDirection: Vector3;\r\n // Length: number;\r\n // LeftDir: Vector3;\r\n // RightDir: Vector3;\r\n\r\n GetParamAtPoint(p: Vector3): number;\r\n GetParamAtPoint2(p: Vector3): [number, boolean];\r\n GetPointAtParam(param: number): Vector3;\r\n // OffsetPoint(p: Vector3, dis: number): Vector3;\r\n}\r\n\r\nexport function CreateGetCurveParam(curve: Line | Arc | RoomWallBase)\r\n{\r\n if (curve instanceof Line || curve instanceof RoomWallLine) return new GetLineParam(curve as Line);\r\n else return new GetArcParam(curve as Arc);\r\n}\r\n\r\nexport class GetLineParam\r\n{\r\n Direction: Vector3;\r\n Length: number;\r\n LeftDir: Vector3;\r\n\r\n private _StartPoint: Vector3;\r\n constructor(line: Line)\r\n {\r\n this.Direction = line.GetFistDeriv(0);\r\n this.Length = this.Direction.length();\r\n this.Direction.divideScalar(this.Length);\r\n this._StartPoint = line.StartPoint;\r\n\r\n this.LeftDir = this.Direction.clone();\r\n\r\n LEFT_ROTATE_MTX2.applyVector(this.LeftDir);\r\n }\r\n\r\n private _RightDir: Vector3;\r\n get RightDir()\r\n {\r\n if (!this._RightDir) this._RightDir = this.LeftDir.clone().negate();\r\n\r\n return this._RightDir;\r\n }\r\n\r\n private _NegDirection: Vector3;\r\n get NegDirection()\r\n {\r\n if (!this._NegDirection) this._NegDirection = this.Direction.clone().negate();\r\n return this._NegDirection;\r\n }\r\n\r\n GetParamAtPoint(p: Vector3)\r\n {\r\n TempDiffVec.subVectors(p, this._StartPoint);\r\n let param = this.Direction.dot(TempDiffVec);\r\n\r\n return param / this.Length;\r\n }\r\n\r\n GetParamAtPoint2(p: Vector3): [number, boolean]\r\n {\r\n let param = this.GetParamAtPoint(p);\r\n let np = this.GetPointAtParam(param);\r\n return [param, Vector2.prototype.distanceToSquared.call(np, p) < 1e-4];\r\n }\r\n\r\n GetPointAtParam(param: number)\r\n {\r\n return this.Direction.clone().multiplyScalar(param * this.Length).add(this._StartPoint);\r\n }\r\n\r\n OffsetPoint(p: Vector3, dis: number)\r\n {\r\n return p.add(this.LeftDir.clone().multiplyScalar(dis));\r\n }\r\n}\r\n\r\nexport class GetArcParam implements GetCurveParam\r\n{\r\n constructor(private _Arc: Arc)\r\n {\r\n\r\n }\r\n\r\n GetParamAtPoint2(p: Vector3): [number, boolean]\r\n {\r\n let param = this._Arc.GetParamAtAngle(this._Arc.GetAngleAtPoint(p));\r\n return [param, this._Arc.ParamOnCurve(param)];\r\n }\r\n\r\n GetPointAtParam(param: number): Vector3\r\n {\r\n return this._Arc.GetPointAtParam(param);\r\n }\r\n\r\n GetParamAtPoint(p: Vector3): number\r\n {\r\n return this._Arc.GetParamAtAngle(this._Arc.GetAngleAtPoint(p));\r\n }\r\n}\r\n","import { Point } from \"./Point\";\r\n\r\n//点表面积\r\nexport function Area(pts: Point[]): number\r\n{\r\n let cnt = pts.length;\r\n if (cnt < 3)\r\n return 0;\r\n let a = 0;\r\n for (let i = 0, j = cnt - 1; i < cnt; ++i)\r\n {\r\n a += (pts[j].x + pts[i].x) * (pts[j].y - pts[i].y);\r\n j = i;\r\n }\r\n return -a * 0.5;\r\n}\r\n","import { Point } from \"./Point\";\r\n\r\nexport class Vector2\r\n{\r\n x: number;\r\n y: number;\r\n readonly isVector2: boolean = true;\r\n constructor(x: number = 0, y: number = 0)\r\n {\r\n this.x = x;\r\n this.y = y;\r\n }\r\n get width(): number { return this.x; }\r\n set width(value: number) { this.x = value; }\r\n get height(): number { return this.y; }\r\n set height(value: number) { this.y = value; }\r\n set(x: number, y: number): Vector2\r\n {\r\n this.x = x;\r\n this.y = y;\r\n return this;\r\n }\r\n setScalar(scalar: number): Vector2\r\n {\r\n this.x = scalar;\r\n this.y = scalar;\r\n return this;\r\n }\r\n setX(x: number): Vector2\r\n {\r\n this.x = x;\r\n return this;\r\n }\r\n setY(y: number): Vector2\r\n {\r\n this.y = y;\r\n return this;\r\n }\r\n setComponent(index: number, value: number): Vector2\r\n {\r\n switch (index)\r\n {\r\n case 0: this.x = value; break;\r\n case 1: this.y = value; break;\r\n default: throw new Error('index is out of range: ' + index);\r\n }\r\n return this;\r\n }\r\n getComponent(index: number): number\r\n {\r\n switch (index)\r\n {\r\n case 0: return this.x;\r\n case 1: return this.y;\r\n default: throw new Error('index is out of range: ' + index);\r\n }\r\n }\r\n clone(): Vector2\r\n {\r\n return new (this.constructor as any)().copy(this);\r\n }\r\n copy(v: Vector2): Vector2\r\n {\r\n this.x = v.x;\r\n this.y = v.y;\r\n return this;\r\n }\r\n add(v: Point): Vector2\r\n {\r\n this.x += v.x;\r\n this.y += v.y;\r\n return this;\r\n }\r\n addScalar(s: number): Vector2\r\n {\r\n this.x += s;\r\n this.y += s;\r\n return this;\r\n }\r\n addVectors(a: Vector2, b: Vector2): Vector2\r\n {\r\n this.x = a.x + b.x;\r\n this.y = a.y + b.y;\r\n return this;\r\n }\r\n addScaledVector(v: Vector2, s: number): Vector2\r\n {\r\n this.x += v.x * s;\r\n this.y += v.y * s;\r\n return this;\r\n }\r\n sub(v: Vector2): Vector2\r\n {\r\n this.x -= v.x;\r\n this.y -= v.y;\r\n return this;\r\n }\r\n subScalar(s: number): Vector2\r\n {\r\n this.x -= s;\r\n this.y -= s;\r\n return this;\r\n }\r\n subVectors(a: Vector2, b: Vector2): Vector2\r\n {\r\n this.x = a.x - b.x;\r\n this.y = a.y - b.y;\r\n return this;\r\n }\r\n multiply(v: Vector2): Vector2\r\n {\r\n this.x *= v.x;\r\n this.y *= v.y;\r\n return this;\r\n }\r\n multiplyScalar(scalar: number): Vector2\r\n {\r\n if (isFinite(scalar))\r\n {\r\n this.x *= scalar;\r\n this.y *= scalar;\r\n } else\r\n {\r\n this.x = 0;\r\n this.y = 0;\r\n }\r\n return this;\r\n }\r\n divide(v: Vector2): Vector2\r\n {\r\n this.x /= v.x;\r\n this.y /= v.y;\r\n return this;\r\n }\r\n divideScalar(scalar: number): Vector2\r\n {\r\n return this.multiplyScalar(1 / scalar);\r\n }\r\n min(v: Point): Vector2\r\n {\r\n this.x = Math.min(this.x, v.x);\r\n this.y = Math.min(this.y, v.y);\r\n return this;\r\n }\r\n max(v: Point): Vector2\r\n {\r\n this.x = Math.max(this.x, v.x);\r\n this.y = Math.max(this.y, v.y);\r\n return this;\r\n }\r\n clamp(min: Vector2, max: Vector2): Vector2\r\n {\r\n // This function assumes min < max, if this assumption isn't true it will not operate correctly\r\n this.x = Math.max(min.x, Math.min(max.x, this.x));\r\n this.y = Math.max(min.y, Math.min(max.y, this.y));\r\n return this;\r\n }\r\n private static clampScalar_min = new Vector2();\r\n private static clampScalar_max = new Vector2();\r\n clampScalar(minVal: number, maxVal: number): Vector2\r\n {\r\n const min: Vector2 = Vector2.clampScalar_min.set(minVal, minVal);\r\n const max: Vector2 = Vector2.clampScalar_max.set(maxVal, maxVal);\r\n return this.clamp(min, max);\r\n }\r\n clampLength(min: number, max: number): Vector2\r\n {\r\n const length: number = this.length();\r\n return this.multiplyScalar(Math.max(min, Math.min(max, length)) / length);\r\n }\r\n floor(): Vector2\r\n {\r\n this.x = Math.floor(this.x);\r\n this.y = Math.floor(this.y);\r\n return this;\r\n }\r\n ceil(): Vector2\r\n {\r\n this.x = Math.ceil(this.x);\r\n this.y = Math.ceil(this.y);\r\n return this;\r\n }\r\n round(): Vector2\r\n {\r\n this.x = Math.round(this.x);\r\n this.y = Math.round(this.y);\r\n return this;\r\n }\r\n roundToZero(): Vector2\r\n {\r\n this.x = (this.x < 0) ? Math.ceil(this.x) : Math.floor(this.x);\r\n this.y = (this.y < 0) ? Math.ceil(this.y) : Math.floor(this.y);\r\n return this;\r\n }\r\n negate(): Vector2\r\n {\r\n this.x = - this.x;\r\n this.y = - this.y;\r\n return this;\r\n }\r\n dot(v: Vector2): number\r\n {\r\n return this.x * v.x + this.y * v.y;\r\n }\r\n lengthSq(): number\r\n {\r\n return this.x * this.x + this.y * this.y;\r\n }\r\n length(): number\r\n {\r\n return Math.sqrt(this.x * this.x + this.y * this.y);\r\n }\r\n lengthManhattan(): number\r\n {\r\n return Math.abs(this.x) + Math.abs(this.y);\r\n }\r\n normalize(): Vector2\r\n {\r\n return this.divideScalar(this.length());\r\n }\r\n angle(): number\r\n {\r\n // computes the angle in radians with respect to the positive x-axis\r\n let angle: number = Math.atan2(this.y, this.x);\r\n if (angle < 0) angle += 2 * Math.PI;\r\n return angle;\r\n }\r\n distanceTo(v: Vector2): number\r\n {\r\n return Math.sqrt(this.distanceToSquared(v));\r\n }\r\n distanceToSquared(v: Vector2): number\r\n {\r\n const dx: number = this.x - v.x, dy: number = this.y - v.y;\r\n return dx * dx + dy * dy;\r\n }\r\n distanceToManhattan(v: Vector2): number\r\n {\r\n return Math.abs(this.x - v.x) + Math.abs(this.y - v.y);\r\n }\r\n setLength(length: number): Vector2\r\n {\r\n return this.multiplyScalar(length / this.length());\r\n }\r\n lerp(v: Vector2, alpha: number): Vector2\r\n {\r\n this.x += (v.x - this.x) * alpha;\r\n this.y += (v.y - this.y) * alpha;\r\n return this;\r\n }\r\n lerpVectors(v1: Vector2, v2: Vector2, alpha: number): Vector2\r\n {\r\n return this.subVectors(v2, v1).multiplyScalar(alpha).add(v1);\r\n }\r\n equals(v: Vector2): boolean\r\n {\r\n return ((v.x === this.x) && (v.y === this.y));\r\n }\r\n fromArray(array: Float32Array | number[], offset: number = 0): Vector2\r\n {\r\n this.x = array[offset];\r\n this.y = array[offset + 1];\r\n return this;\r\n }\r\n toArray(array: Float32Array | number[] = [], offset: number = 0): Float32Array | number[]\r\n {\r\n array[offset] = this.x;\r\n array[offset + 1] = this.y;\r\n return array;\r\n }\r\n fromAttribute(attribute: any, index: number, offset: number = 0): Vector2\r\n {\r\n index = index * attribute.itemSize + offset;\r\n this.x = attribute.array[index];\r\n this.y = attribute.array[index + 1];\r\n return this;\r\n }\r\n rotateAround(center: Vector2, angle: number): Vector2\r\n {\r\n const c: number = Math.cos(angle), s: number = Math.sin(angle);\r\n const x: number = this.x - center.x;\r\n const y: number = this.y - center.y;\r\n this.x = x * c - y * s + center.x;\r\n this.y = x * s + y * c + center.y;\r\n return this;\r\n }\r\n}\r\n","import { Vector2 } from \"./Vector2\";\r\nimport { Point } from \"./Point\";\r\n\r\nexport class Box2\r\n{\r\n min: Vector2;\r\n max: Vector2;\r\n constructor(min = new Vector2(+ Infinity, + Infinity), max = new Vector2(- Infinity, - Infinity))\r\n {\r\n this.min = min;\r\n this.max = max;\r\n }\r\n\r\n get area(): number\r\n {\r\n return (this.max.x - this.min.x) * (this.max.y - this.min.y);\r\n }\r\n\r\n set(min: Vector2, max: Vector2): Box2\r\n {\r\n this.min.copy(min);\r\n this.max.copy(max);\r\n return this;\r\n }\r\n setFromPoints(points: Iterable): Box2\r\n {\r\n this.makeEmpty();\r\n for (let p of points)\r\n {\r\n this.expandByPoint(p);\r\n }\r\n return this;\r\n }\r\n private static _setFromCenterAndSize_v1 = new Vector2();\r\n setFromCenterAndSize(center: Vector2, size: Vector2): Box2\r\n {\r\n const v1 = Box2._setFromCenterAndSize_v1;\r\n const halfSize = v1.copy(size).multiplyScalar(0.5);\r\n this.min.copy(center).sub(halfSize);\r\n this.max.copy(center).add(halfSize);\r\n return this;\r\n }\r\n clone(): Box2\r\n {\r\n return new (this.constructor as any)().copy(this);\r\n }\r\n copy(box: Box2): Box2\r\n {\r\n this.min.copy(box.min);\r\n this.max.copy(box.max);\r\n return this;\r\n }\r\n makeEmpty(): Box2\r\n {\r\n this.min.x = this.min.y = + Infinity;\r\n this.max.x = this.max.y = - Infinity;\r\n return this;\r\n }\r\n isEmpty(): boolean\r\n {\r\n // this is a more robust check for empty than (volume <= 0) because volume can get positive with two negative axes\r\n return (this.max.x < this.min.x) || (this.max.y < this.min.y);\r\n }\r\n getCenter(result: Vector2 = new Vector2()): Vector2\r\n {\r\n return this.isEmpty() ? result.set(0, 0) : result.addVectors(this.min, this.max).multiplyScalar(0.5);\r\n }\r\n getSize(result: Vector2 = new Vector2()): Vector2\r\n {\r\n return this.isEmpty() ? result.set(0, 0) : result.subVectors(this.max, this.min);\r\n }\r\n expandByPoint(point: Point): Box2\r\n {\r\n this.min.min(point);\r\n this.max.max(point);\r\n return this;\r\n }\r\n expandByVector(vector: Vector2): Box2\r\n {\r\n this.min.sub(vector);\r\n this.max.add(vector);\r\n return this;\r\n }\r\n expandByScalar(scalar: number): Box2\r\n {\r\n this.min.addScalar(- scalar);\r\n this.max.addScalar(scalar);\r\n return this;\r\n }\r\n containsPoint(point: Vector2): boolean\r\n {\r\n if (point.x < this.min.x || point.x > this.max.x ||\r\n point.y < this.min.y || point.y > this.max.y)\r\n {\r\n return false;\r\n }\r\n return true;\r\n }\r\n containsBox(box: Box2): boolean\r\n {\r\n if ((this.min.x <= box.min.x) && (box.max.x <= this.max.x) &&\r\n (this.min.y <= box.min.y) && (box.max.y <= this.max.y))\r\n {\r\n return true;\r\n }\r\n return false;\r\n }\r\n getParameter(point: Vector2, result: Vector2 = new Vector2()): Vector2\r\n {\r\n // This can potentially have a divide by zero if the box\r\n // has a size dimension of 0.\r\n return result.set(\r\n (point.x - this.min.x) / (this.max.x - this.min.x),\r\n (point.y - this.min.y) / (this.max.y - this.min.y)\r\n );\r\n }\r\n intersectsBox(box: Box2): boolean\r\n {\r\n // using 6 splitting planes to rule out intersections.\r\n if (box.max.x < this.min.x || box.min.x > this.max.x ||\r\n box.max.y < this.min.y || box.min.y > this.max.y)\r\n {\r\n return false;\r\n }\r\n return true;\r\n }\r\n clampPoint(point: Vector2, result: Vector2 = new Vector2()): Vector2\r\n {\r\n return result.copy(point).clamp(this.min, this.max);\r\n }\r\n private static _distanceToPoint_v1 = new Vector2();\r\n distanceToPoint(point: Vector2): number\r\n {\r\n const v1 = Box2._distanceToPoint_v1;\r\n const clampedPoint = v1.copy(point).clamp(this.min, this.max);\r\n return clampedPoint.sub(point).length();\r\n }\r\n intersect(box: Box2): Box2\r\n {\r\n this.min.max(box.min);\r\n this.max.min(box.max);\r\n return this;\r\n }\r\n union(box: Box2): Box2\r\n {\r\n this.min.min(box.min);\r\n this.max.max(box.max);\r\n return this;\r\n }\r\n translate(offset: Point): Box2\r\n {\r\n this.min.add(offset);\r\n this.max.add(offset);\r\n return this;\r\n }\r\n equals(box: Box2): boolean\r\n {\r\n return box.min.equals(this.min) && box.max.equals(this.max);\r\n }\r\n};\r\n","import { Area } from \"../Common/Area\";\r\nimport { Box2 } from \"../Common/Box2\";\r\nimport { clipperCpp } from \"../Common/ClipperCpp\";\r\nimport { NestFiler } from \"../Common/Filer\";\r\nimport { Point } from \"../Common/Point\";\r\nimport { equaln } from \"../Common/Util\";\r\nimport { Vector2 } from \"../Common/Vector2\";\r\n\r\n/**\r\n * 轮廓路径类\r\n * 可以求NFP,和保存NFPCahce\r\n * 因为NFP结果是按照最低点移动的,所以将点旋转后,按照盒子将点移动到0点.\r\n */\r\nexport class Path\r\n{\r\n Id: number;\r\n Points: Point[];\r\n OutsideNFPCache: { [key: number]: Point[][]; } = {};\r\n InsideNFPCache: { [key: number]: Point[][]; } = {};\r\n\r\n constructor(public OrigionPoints?: Point[], rotation: number = 0)\r\n {\r\n if (OrigionPoints)\r\n this.Init(OrigionPoints, rotation);\r\n }\r\n\r\n Origion: Path;\r\n //点表在旋转后的原始最小点.使用这个点将轮廓移动到0点\r\n OrigionMinPoint: Vector2;\r\n Rotation: number;\r\n\r\n Size: Vector2;//序列化\r\n private Init(origionPoints: Point[], rotation: number)\r\n {\r\n this.Rotation = rotation;\r\n if (rotation === 0)\r\n this.Points = origionPoints.map(p => { return { ...p }; });\r\n else\r\n {\r\n let c = Math.cos(rotation);\r\n let s = Math.sin(rotation);\r\n\r\n let npts: Point[] = [];\r\n for (let p of origionPoints)\r\n {\r\n let x = p.x;\r\n let y = p.y;\r\n const x1 = x * c - y * s;\r\n const y1 = x * s + y * c;\r\n npts.push({ x: x1, y: y1 });\r\n }\r\n this.Points = npts;\r\n }\r\n\r\n let box = new Box2();\r\n let v2 = new Vector2();\r\n for (let p of this.Points)\r\n {\r\n v2.x = p.x;\r\n v2.y = p.y;\r\n box.expandByPoint(v2);\r\n }\r\n\r\n this.OrigionMinPoint = box.min;\r\n this.Size = box.max.sub(box.min);\r\n\r\n for (let p of this.Points)\r\n {\r\n p.x -= box.min.x;\r\n p.y -= box.min.y;\r\n }\r\n }\r\n\r\n GetNFPs(path: Path, outside: boolean): (Point[])[]\r\n {\r\n // 寻找内轮廓时,面积应该比本path小,这个判断移交给使用者自己判断\r\n // if (!outside && this.Area < path.Area) return [];\r\n let nfps = clipperCpp.lib.minkowskiSumPath(this.BigIntPoints, path.MirrorPoints, true);\r\n\r\n //必须删除自交,否则将会出错\r\n nfps = clipperCpp.lib.simplifyPolygons(nfps);\r\n nfps = nfps.filter((nfp) =>\r\n {\r\n let area = Area(nfp);\r\n // if (area > 1) return outside;//第一个不一定是外轮廓,但是面积为正时肯定为外轮廓 (因为使用了简化多段线,所以这个代码已经不能有了)\r\n if (Math.abs(area) < 10) return false;//应该不用在移除这个了\r\n\r\n let { x, y } = nfp[0];\r\n if (outside)\r\n {\r\n if (this.Area > path.Area)\r\n {\r\n let p = { x: path.InPoint.x + x, y: path.InPoint.y + y };\r\n if (p.x < 0 || p.y < 0 || p.x > this.BigSize.x || p.y > this.BigSize.y)\r\n return true;\r\n let dir = clipperCpp.lib.pointInPolygon(p, this.BigIntPoints);\r\n return dir === 0;\r\n }\r\n else\r\n {\r\n let p = { x: this.InPoint.x - x, y: this.InPoint.y - y };\r\n if (p.x < 0 || p.y < 0 || p.x > path.BigSize.x || p.y > path.BigSize.y)\r\n return true;\r\n let dir = clipperCpp.lib.pointInPolygon(p, path.BigIntPoints);\r\n return dir === 0;\r\n }\r\n }\r\n else\r\n {\r\n let p = { x: path.InPoint.x + x, y: path.InPoint.y + y };\r\n if (p.x < 0 || p.y < 0 || p.x > this.BigSize.x || p.y > this.BigSize.y)\r\n return false;\r\n let dir = clipperCpp.lib.pointInPolygon(p, this.BigIntPoints);\r\n return dir === 1;\r\n }\r\n });\r\n return nfps;\r\n }\r\n\r\n GetOutsideNFP(path: Path): (Point[])[]\r\n {\r\n let nfps = this.OutsideNFPCache[path.Id];\r\n if (nfps) return nfps;\r\n\r\n if (this.IsRect && path.IsRect)\r\n {\r\n let [ax, ay] = [this.Size.x * 1e4, this.Size.y * 1e4];\r\n let [bx, by] = [path.Size.x * 1e4, path.Size.y * 1e4];\r\n nfps = [[\r\n { x: -bx, y: -by },\r\n { x: ax, y: -by },\r\n { x: ax, y: ay },\r\n { x: -bx, y: ay },\r\n ]];\r\n }\r\n else\r\n nfps = this.GetNFPs(path, true);\r\n this.OutsideNFPCache[path.Id] = nfps;\r\n //虽然有这种神奇的特性,但是好像并不会提高性能。\r\n // path.OutsideNFPCache[this.id] = (this, nfps.map(nfp =>\r\n // {\r\n // return nfp.map(p =>\r\n // {\r\n // return { x: -p.x, y: -p.y };\r\n // });\r\n // }));\r\n return nfps;\r\n }\r\n GetInsideNFP(path: Path): (Point[])[]\r\n {\r\n if (path.Area > this.Area) return;\r\n let nfp = this.InsideNFPCache[path.Id];\r\n if (nfp) return nfp;\r\n\r\n let nfps: (Point[])[];\r\n if (this.IsRect)\r\n {\r\n let [ax, ay] = [this.Size.x * 1e4, this.Size.y * 1e4];\r\n let [bx, by] = [path.Size.x * 1e4, path.Size.y * 1e4];\r\n\r\n let l = ax - bx;\r\n let h = ay - by;\r\n\r\n const MinNumber = 200;//清理的数值是100,所以200是可以接受的, 200=0.020问题不大(过盈配合)\r\n if (l < -MinNumber || h < -MinNumber)\r\n return;\r\n\r\n if (l < MinNumber)\r\n l = MinNumber;\r\n else\r\n l += MinNumber;\r\n\r\n if (h < MinNumber)\r\n h = MinNumber;\r\n else\r\n h += MinNumber;\r\n\r\n nfps = [[\r\n { x: 0, y: 0 },\r\n { x: l, y: 0 },\r\n { x: l, y: h },\r\n { x: 0, y: h }\r\n ]];\r\n }\r\n else\r\n nfps = this.GetNFPs(path, false);\r\n\r\n if (path.Id !== undefined)\r\n this.InsideNFPCache[path.Id] = nfps;\r\n return nfps;\r\n }\r\n\r\n private _InPoint: Point;\r\n\r\n /**\r\n * 用这个点来检测是否在Path内部\r\n */\r\n private get InPoint()\r\n {\r\n if (this._InPoint) return this._InPoint;\r\n let mp = { x: (this.Points[0].x + this.Points[1].x) / 2, y: (this.Points[0].y + this.Points[1].y) / 2 };\r\n let normal = new Vector2(this.Points[1].x - this.Points[0].x, this.Points[1].y - this.Points[0].y).normalize();\r\n // [normal.x, normal.y] = [normal.y, -normal.x];\r\n mp.x -= normal.y;\r\n mp.y += normal.x;\r\n\r\n mp.x *= 1e4;\r\n mp.y *= 1e4;\r\n this._InPoint = mp;\r\n return mp;\r\n }\r\n\r\n protected _BigIntPoints: Point[];\r\n get BigIntPoints()\r\n {\r\n if (this._BigIntPoints) return this._BigIntPoints;\r\n this._BigIntPoints = this.Points.map(p =>\r\n {\r\n return {\r\n x: Math.round(p.x * 1e4),\r\n y: Math.round(p.y * 1e4),\r\n };\r\n });\r\n return this._BigIntPoints;\r\n }\r\n\r\n private _BigSize: Vector2;\r\n get BigSize()\r\n {\r\n if (this._BigSize) return this._BigSize;\r\n this._BigSize = new Vector2(this.Size.x * 1e4, this.Size.y * 1e4);\r\n return this._BigSize;\r\n }\r\n\r\n protected _MirrorPoints: Point[];\r\n get MirrorPoints()\r\n {\r\n if (!this._MirrorPoints)\r\n this._MirrorPoints = this.BigIntPoints.map(p =>\r\n {\r\n return { x: -p.x, y: -p.y };\r\n });\r\n\r\n return this._MirrorPoints;\r\n }\r\n\r\n protected _BoundingBox: Box2;\r\n get BoundingBox()\r\n {\r\n if (!this._BoundingBox)\r\n this._BoundingBox = new Box2(new Vector2, this.Size);\r\n return this._BoundingBox;\r\n }\r\n\r\n protected _Area: number;\r\n get Area()\r\n {\r\n if (this._Area === undefined)\r\n this._Area = Area(this.Points);\r\n return this._Area;\r\n }\r\n set Area(a: number)\r\n {\r\n this._Area = a;\r\n }\r\n\r\n private _IsRect: boolean;\r\n get IsRect()\r\n {\r\n if (this._IsRect === undefined)\r\n {\r\n let s = this.BoundingBox.getSize(new Vector2);\r\n this._IsRect = equaln(this.Area, s.x * s.y, 1);\r\n }\r\n return this._IsRect;\r\n }\r\n\r\n ReadFile(file: NestFiler): void\r\n {\r\n let ver = file.Read();\r\n this.Id = file.Read();\r\n let arr = file.Read();\r\n this.Points = [];\r\n for (let i = 0; i < arr.length; i += 2)\r\n {\r\n let p = { x: arr[i], y: arr[i + 1] };\r\n this.Points.push(p);\r\n }\r\n\r\n this.Size = new Vector2(file.Read(), file.Read());\r\n this._Area = file.Read();\r\n let id = file.Read();\r\n if (id !== -1)\r\n {\r\n this.Origion = id;\r\n this.Rotation = file.Read();\r\n this.OrigionMinPoint = new Vector2(file.Read(), file.Read());\r\n }\r\n }\r\n WriteFile(file: NestFiler): void\r\n {\r\n file.Write(1);//ver\r\n file.Write(this.Id);\r\n let arr: number[] = [];\r\n for (let p of this.Points)\r\n arr.push(p.x, p.y);\r\n file.Write(arr);\r\n\r\n file.Write(this.Size.x);\r\n file.Write(this.Size.y);\r\n file.Write(this._Area);\r\n if (this.Origion && this.Origion.Id)\r\n {\r\n //如果有原始的id,则传递它,以便后续进行NFP复用.\r\n file.Write(this.Origion.Id);\r\n file.Write(this.Rotation);\r\n file.Write(this.OrigionMinPoint.x);\r\n file.Write(this.OrigionMinPoint.y);\r\n }\r\n else\r\n file.Write(-1);\r\n }\r\n}\r\n\r\n/**\r\n * 平移点表,返回新点表\r\n */\r\nexport function TranslatePath(pts: Point[], p: Point): Point[]\r\n{\r\n return pts.map(px =>\r\n {\r\n return { x: p.x + px.x, y: p.y + px.y };\r\n });\r\n}\r\n\r\nexport function TranslatePath_Self(pts: Point[], mx: number, my: number): Point[]\r\n{\r\n for (let pt of pts)\r\n {\r\n pt.x += mx;\r\n pt.y += my;\r\n }\r\n return pts;\r\n}\r\n\r\n//缩放点表,返回原始点表\r\nexport function PathScale(pts: Point[], scale: number): Point[]\r\n{\r\n for (let p of pts)\r\n {\r\n p.x *= scale;\r\n p.y *= scale;\r\n }\r\n return pts;\r\n}\r\n","import { Point } from \"../Common/Point\";\r\nimport { Path } from \"./Path\";\r\n\r\nexport class NestCache\r\n{\r\n //放置零件时,命中缓存的次数\r\n static CachePartPosCount = 0;\r\n //放置零件时,命中无法放置缓存的次数\r\n static CacheNoSetCount = 0;//noset\r\n\r\n static PositionCache: { [key: string]: Point; } = {};\r\n static NoPutCache: { [key: string]: Set; } = {};\r\n private static CacheRect = new Map();\r\n\r\n /**\r\n * 用于创建原点在0点的矩形路径\r\n */\r\n static CreatePath(x: number, y: number, knifRadius = 3.5): Path\r\n {\r\n let minX = -knifRadius;\r\n let maxX = x + knifRadius;\r\n let minY = -knifRadius;\r\n let maxY = y + knifRadius;\r\n return new Path([\r\n { x: minX, y: minY },\r\n { x: maxX, y: minY },\r\n { x: maxX, y: maxY },\r\n { x: minX, y: maxY },\r\n ]);\r\n }\r\n\r\n static Clear()\r\n {\r\n this.CachePartPosCount = 0;\r\n this.CacheNoSetCount = 0;\r\n this.CacheRect.clear();\r\n this.PositionCache = {};\r\n }\r\n}\r\n","import { Point } from \"../Common/Point\";\r\nimport { Polyline } from \"../../DatabaseServices/Entity/Polyline\";\r\nimport { AsVector2 } from \"../../Geometry/GeUtils\";\r\n\r\nexport function Path2Polyline(path: Point[]): Polyline\r\n{\r\n let pl = new Polyline();\r\n pl.LineData = path.map(p =>\r\n {\r\n return { pt: AsVector2(p), bul: 0 };\r\n });\r\n pl.CloseMark = true;\r\n return pl;\r\n}\r\n","import { EndType, JoinType } from \"js-angusj-clipper/web\";\r\nimport { Arc } from \"../../DatabaseServices/Entity/Arc\";\r\nimport { Circle } from \"../../DatabaseServices/Entity/Circle\";\r\nimport { Polyline } from \"../../DatabaseServices/Entity/Polyline\";\r\nimport { polar } from \"../../Geometry/GeUtils\";\r\nimport { clipperCpp } from \"../Common/ClipperCpp\";\r\nimport { Point } from \"../Common/Point\";\r\nimport { PathScale } from \"../Core/Path\";\r\nimport { Circle2Points } from \"./Curves2Parts\";\r\n\r\nexport let Rotations = [\r\n [0, Math.PI],\r\n [Math.PI / 2, Math.PI * 1.5],\r\n [0, Math.PI, Math.PI / 2, Math.PI * 1.5],\r\n];\r\n\r\n/**\r\n * 针对板件的曲线变点表做的特殊优化\r\n */\r\nexport function Curves2Points(cu: Circle | Polyline, outside: boolean, knifeRadius: number): [(Circle | Polyline), Point[]]\r\n{\r\n if (cu instanceof Circle)\r\n return [cu.Clone(), Circle2Points(cu, knifeRadius, 8, outside)];\r\n else\r\n return Polyline2Points(cu, outside, knifeRadius);\r\n}\r\n\r\nexport function Polyline2Points(pl: Polyline, outside: boolean, knifeRadius: number): [Polyline, Point[]]\r\n{\r\n let pts: Point[] = [];\r\n\r\n if (!outside) knifeRadius = -knifeRadius;\r\n if (pl.IsClockWise) pl.Reverse();\r\n for (let i = 0; i < pl.EndParam; i++)\r\n {\r\n pts.push(pl.GetPointAtParam(i));\r\n\r\n let bul = pl.GetBulgeAt(i);\r\n if (bul !== 0)\r\n {\r\n let arc = pl.GetCurveAtIndex(i) as Arc;\r\n\r\n let allAngle = arc.AllAngle;\r\n let arcLength = arc.Length;\r\n\r\n let minCount = Math.floor(allAngle * 4 / Math.PI);\r\n\r\n let splitCount = Math.round(allAngle / 0.4);\r\n if (arcLength < 300)\r\n splitCount = Math.max(2, minCount);\r\n else\r\n splitCount = Math.max(arcLength / 200, splitCount, 2, minCount);\r\n\r\n let radius = arc.Radius;\r\n if (outside === bul > 0)\r\n radius = radius / Math.cos(allAngle / (splitCount * 2));\r\n\r\n let cp = arc.Center;\r\n for (let j = 0.5; j < splitCount; j++)\r\n {\r\n let a = arc.GetAngleAtParam(j * (1 / splitCount));\r\n let p = polar(cp.clone(), a, radius);\r\n pts.push(p);\r\n }\r\n }\r\n }\r\n\r\n if (knifeRadius !== 0)\r\n {\r\n pts = clipperCpp.lib.offsetToPaths({\r\n delta: knifeRadius * 1e4,\r\n offsetInputs: [{ data: PathScale(pts, 1e4), joinType: JoinType.Miter, endType: EndType.ClosedPolygon }]\r\n })[0];\r\n PathScale(pts, 1e-4);\r\n }\r\n return [pl, pts];\r\n}\r\n","import polylabel from \"polylabel\";\r\nimport { Vector3 } from \"three\";\r\nimport { Area } from \"../../../Nest/Common/Area\";\r\nimport { Point } from \"../../../Nest/Common/Point\";\r\nimport { Max } from \"../../../Nest/Common/Util\";\r\nimport { Path2Polyline } from \"../../../Nest/Converter/Path2Polyline\";\r\nimport { NestCache } from \"../../../Nest/Core/NestCache\";\r\nimport { Path, PathScale, TranslatePath_Self } from \"../../../Nest/Core/Path\";\r\nimport { Contour } from \"../../Contour\";\r\nimport { Polyline } from \"../../Entity/Polyline\";\r\nimport { Shape } from \"../../Shape\";\r\nimport { ShapeManager } from \"../../ShapeManager\";\r\n\r\nexport const TEXT_BOX = NestCache.CreatePath(570, 110);\r\n\r\n//分析文字放置位置\r\nexport function ParseRegionTextPos(contour: Point[], holes: (Point[])[])\r\n{\r\n let hasTextBox = true;\r\n let path = new Path(contour);\r\n let nfps: Polyline[] = path.GetInsideNFP(TEXT_BOX)?.map(nfp => Path2Polyline(TranslatePath_Self(PathScale(nfp, 1e-4), path.OrigionMinPoint.x, path.OrigionMinPoint.y))); //可能无法获得\r\n if (!nfps || nfps.length === 0)\r\n {\r\n nfps = [Path2Polyline(contour)];\r\n hasTextBox = false;\r\n }\r\n\r\n let holenfps: Contour[] = [];\r\n for (let hole of holes)\r\n {\r\n let hpath = new Path(hole);\r\n let nfps = hpath.GetOutsideNFP(TEXT_BOX);\r\n let nfp = nfps[Max(nfps, (n1, n2) => Area(n2) > Area(n1))];\r\n\r\n let pl = Path2Polyline(TranslatePath_Self(PathScale(nfp, 1e-4), hpath.OrigionMinPoint.x, hpath.OrigionMinPoint.y));\r\n let box = pl.BoundingBox;\r\n\r\n let boxpl = new Polyline().RectangleFrom2Pt(new Vector3(box.min.x - 1e5, box.min.y - 1), new Vector3(box.max.x + 1e5, box.min.y + 1));\r\n\r\n let con1 = Contour.CreateContour(pl, false);\r\n let con2 = Contour.CreateContour(boxpl, false);\r\n\r\n holenfps.push(\r\n ...con1.UnionBoolOperation(con2).contours\r\n );\r\n }\r\n\r\n let shapes = nfps.map(pl => new Shape(Contour.CreateContour(pl, false)));\r\n let subShapes = new ShapeManager;\r\n holenfps.forEach(pl =>\r\n {\r\n subShapes.UnionBoolOperation(new ShapeManager([new Shape(pl)]));\r\n });\r\n\r\n let resShapes: Shape[] = [];\r\n for (let shape of shapes)\r\n {\r\n // TestDraw(shape.Outline.Curve, 6);\r\n resShapes.push(...shape.SubstactBoolOperation(subShapes.ShapeList)); //可能减完丢了\r\n }\r\n\r\n if (resShapes.length === 0)\r\n resShapes = shapes;\r\n\r\n let maxDist = -Infinity;\r\n let minp: number[];\r\n let curve: Polyline;\r\n\r\n for (let shape of resShapes)\r\n {\r\n let pl = shape.Outline.Curve as Polyline;\r\n if (pl.Area < 1)\r\n {\r\n if (!minp) minp = pl.BoundingBox.getCenter(new Vector3).toArray();\r\n continue;\r\n }\r\n // TestDraw(pl, 3); //绘制裁剪后的线\r\n let p = polylabel([pl.LineData.map(p => p.pt.toArray())], 1.0);//这里不再需要转换 因为我们传递进来的就是没有凸度的点表\r\n\r\n let dist = p[\"distance\"];\r\n if (dist > maxDist)\r\n {\r\n maxDist = dist;\r\n let pos = pl.Position;\r\n minp = p;\r\n minp[0] += pos.x;\r\n minp[1] += pos.y;\r\n\r\n curve = pl;\r\n }\r\n }\r\n\r\n let p = new Vector3(minp[0], minp[1]);\r\n //左右均分\r\n // TestDraw(new Point(p));\r\n // let line = new Line(p, p.clone().setX(minp[0] + 1));\r\n\r\n // let pts = curve.IntersectWith(line, IntersectOption.ExtendArg);\r\n // pts.push(p);\r\n // pts.sort(ComparePoint(\"xyz\"));\r\n // let index = pts.indexOf(p);\r\n // p = midPoint(pts[index - 1], pts[index + 1]);\r\n // TestDraw(new Point(p));\r\n\r\n // //上下居中\r\n // line = new Line(p, p.clone().setY(p.y + 1));\r\n // pts = curve.IntersectWith(line, IntersectOption.ExtendArg);\r\n // pts.push(p);\r\n // pts.sort(ComparePoint(\"xyz\"));\r\n // index = pts.indexOf(p);\r\n // p = midPoint(pts[index - 1], pts[index + 1]);\r\n // TestDraw(new Point(p));\r\n\r\n if (hasTextBox)\r\n {\r\n p.x += 280;\r\n p.y += 60;\r\n }\r\n return p;\r\n}\r\n","import Flatbush from 'flatbush';\r\nimport { Vector3 } from 'three';\r\nimport { Polyline } from '../../Entity/Polyline';\r\nimport { RoomFlatBase, UpdateTempPolyline } from \"../Entity/Flat/RoomFlatBase\";\r\nimport { RoomRegion } from \"../Entity/Region/RoomRegion\";\r\n\r\n//区域更迭(新老新区交换)\r\nexport class RegionReplacement\r\n{\r\n fb: Flatbush;\r\n contours: [Polyline, Polyline[]][] = [];\r\n constructor(private oldRegions: RoomRegion[])\r\n {\r\n if (oldRegions.length === 0) return;\r\n this.fb = new Flatbush(oldRegions.length);\r\n oldRegions.forEach(r =>\r\n {\r\n let flat = (r.Floor?.Object ?? r.Top.Object) as RoomFlatBase;\r\n //TODO:备份轮廓和网洞\r\n let box = flat.BoundingBox;\r\n this.fb.add(box.min.x, box.min.y, box.max.x, box.max.y);\r\n\r\n this.contours.push([flat.Contour.Clone().ApplyMatrix(flat.OCSNoClone), flat.HoleDatas.map(h => UpdateTempPolyline(h).Clone().ApplyMatrix(flat.OCSNoClone))]);\r\n });\r\n this.fb.finish();\r\n }\r\n\r\n //获得旧的区域\r\n GetReplaceOldReg(p: Vector3)\r\n {\r\n if (!this.fb) return;\r\n\r\n let ids = this.fb.search(p.x - 1, p.y - 1, p.x + 1, p.y + 1);\r\n for (let id of ids)\r\n {\r\n let [con, holes] = this.contours[id];\r\n if (con.PtInCurve(p) && !holes.some(h => h.PtInCurve(p)))\r\n {\r\n return this.oldRegions[id];\r\n }\r\n }\r\n }\r\n}\r\n","import { EntitysUpdateWrap } from \"../../../Common/EntityUpdateWrap\";\r\nimport { Route } from \"../../../Geometry/CurveMap\";\r\nimport { RegionParse } from \"../../../Geometry/RegionParse\";\r\nimport { Polyline2Points } from \"../../../Nest/Converter/Curves2Points\";\r\nimport { ContourTreeNode } from \"../../../ueapi\";\r\nimport { Contour } from \"../../Contour\";\r\nimport { Database } from \"../../Database\";\r\nimport { Curve } from \"../../Entity/Curve\";\r\nimport { Polyline } from \"../../Entity/Polyline\";\r\nimport { UpdateTempPolyline } from \"../Entity/Flat/RoomFlatBase\";\r\nimport { RoomFlatFloor } from \"../Entity/Flat/RoomFlatFloor\";\r\nimport { RoomFlatTop } from \"../Entity/Flat/RoomFlatTop\";\r\nimport { RoomRegion } from \"../Entity/Region/RoomRegion\";\r\nimport { CURVE_FACE_TYPE_KEY, RoomWallBase, WallFaceType } from \"../Entity/Wall/RoomWallBase\";\r\nimport { ParseRegionTextPos } from \"./ParseRegionTextPos\";\r\nimport { RegionReplacement } from \"./RegionReplacement\";\r\n\r\n//获取所有的曲线 ?:并且知道每个曲线是墙体的左边还是右边 (有没有用?)\r\n\r\n//分析面域\r\n\r\n//分析可用的内空间(墙面方向指向空间内部为内空间) 否则为外墙空间\r\n\r\n//构造面域树? 不需要了? 还是需要的 需要一个最大的天花板\r\n\r\n//区域对象 (地面+天花?)\r\n\r\n\r\n\r\n/**\r\n * 区域分析(房间+外墙+全屋顶)\r\n */\r\nexport class RoomRegionParse\r\n{\r\n rr: RegionReplacement;//区域替换工具\r\n reped: Set;//已经替换的区域\r\n oldregs: RoomRegion[];//旧的区域\r\n\r\n /**\r\n * @param _UpdateDb 当提供db时,我们更新了区域的信息\r\n */\r\n constructor(private _UpdateDb: Database)\r\n {\r\n if (this._UpdateDb)\r\n {\r\n this.oldregs = this._UpdateDb.ModelSpace.Entitys.filter(e => !e.IsErase && e instanceof RoomRegion) as RoomRegion[];\r\n this.rr = new RegionReplacement(this.oldregs);\r\n this.reped = new Set();\r\n }\r\n }\r\n\r\n Do(walls: RoomWallBase[])\r\n {\r\n let curves: Curve[] = [];\r\n\r\n let aloneWalls: RoomWallBase[] = [];\r\n\r\n let leftCurves = new Set();\r\n\r\n let maxZ = -Infinity;\r\n let minZ = walls[0].Z;\r\n for (let wall of walls)\r\n {\r\n maxZ = Math.max(wall.Z + wall.Height, maxZ);\r\n if (!wall.LeftCurves)\r\n {\r\n aloneWalls.push(wall);\r\n continue;\r\n }\r\n\r\n for (let c of wall.LeftCurves)\r\n {\r\n curves.push(c);\r\n leftCurves.add(c);\r\n }\r\n for (let c of wall.RightCurves)\r\n curves.push(c);\r\n\r\n for (let c of wall.LidCurves)\r\n curves.push(c);\r\n }\r\n\r\n const REGION_PARSE_NUM = 3;\r\n const POLYLINE_JOIN_FUZZ = Math.pow(10, -REGION_PARSE_NUM);\r\n\r\n let parse = new RegionParse(curves, REGION_PARSE_NUM);\r\n\r\n for (let [orgArc, arcs] of parse.ExpLineMap)\r\n {\r\n if (leftCurves.has(orgArc))\r\n for (let arc of arcs)\r\n leftCurves.add(arc);\r\n }\r\n\r\n let regionPolylines: Polyline[] = [];\r\n\r\n let map = new Map();\r\n //分析内外墙1内2外\r\n for (let routes of parse.RegionsOutline)\r\n {\r\n let pl = Polyline.Combine(routes.map(r => r.curve), POLYLINE_JOIN_FUZZ);\r\n\r\n // for (let i = 0; i < routes.length; i++)\r\n // {\r\n if (leftCurves.has(routes[0].curve))\r\n pl.ColorIndex = routes[0].isReverse ? 1 : 2;\r\n else //if (right.has(routes[0].curve))\r\n pl.ColorIndex = routes[0].isReverse ? 2 : 1;\r\n // else //因为盖子不分左右 所以我们忽略盖子 (现在盖子和右侧的一致)\r\n // continue;\r\n\r\n // break;\r\n // }\r\n\r\n // TestDraw(routes[0].curve); //test\r\n regionPolylines.push(pl);\r\n map.set(pl, routes);\r\n }\r\n\r\n //不可能有内部轮廓 如果有 就证明错了\r\n for (let routes of parse.RegionsInternal)\r\n {\r\n let pl = Polyline.Combine(routes.map(r => r.curve));\r\n pl.ColorIndex = pl.Area2 > 0 ? 3 : 4;\r\n // throw \"未知错误 出现外部轮廓\"\r\n }\r\n\r\n let cons = regionPolylines.map(pl => new ContourTreeNode(Contour.CreateContour(pl, false)));\r\n ContourTreeNode.ParseContourTree(cons);\r\n\r\n let roofs: Polyline[] = [];\r\n\r\n //解析 天花板区域 内空区域\r\n for (let con of cons)\r\n {\r\n let routes = map.get(con.contour.Curve as Polyline);\r\n if (con.contour.Curve.ColorIndex === 2)//天花板区域(或者柱子)\r\n {\r\n if (con.Depth !== 0 || con.area < 1e6)//柱子\r\n for (let r of routes)\r\n r.curve[CURVE_FACE_TYPE_KEY] = WallFaceType.Pillar;\r\n else\r\n for (let r of routes)\r\n r.curve[CURVE_FACE_TYPE_KEY] = WallFaceType.Outside;\r\n\r\n //我们需要返回这个轮廓,以便在ue中可以绘制真正的屋顶\r\n con.contour.Curve.Z = maxZ;\r\n roofs.push(con.contour.Curve as Polyline);\r\n }\r\n else if (con.contour.Curve.ColorIndex === 1)//内空区域\r\n {\r\n for (let r of routes)\r\n r.curve[CURVE_FACE_TYPE_KEY] = WallFaceType.Inside;\r\n\r\n if (this._UpdateDb && con.contour.Area > 1e4)\r\n {\r\n //组合外圈和网洞 画出来 就行了\r\n let floor = new RoomFlatFloor();\r\n let top = new RoomFlatTop();\r\n floor.OCS = con.contour.Curve.OCSNoClone;//设置坐标系 以便我们正常的应用轮廓\r\n top.OCS = con.contour.Curve.OCSNoClone;\r\n\r\n floor.Contour = con.contour.Curve as Polyline;\r\n top.Contour = con.contour.Curve as Polyline;\r\n\r\n floor.Holes = con.children.map(c => c.contour.Curve as Polyline);\r\n top.Holes = con.children.map(c => c.contour.Curve as Polyline);\r\n\r\n floor.Z = minZ;\r\n top.Z = maxZ;//等轮廓设置完在移动 否则设置失败\r\n\r\n let conPts = Polyline2Points(floor.Contour, false, 0)[1];\r\n let holePts = floor.HoleDatas.map(h => Polyline2Points(UpdateTempPolyline(h), false, 0)[1]);\r\n\r\n let pos = ParseRegionTextPos(conPts, holePts);\r\n pos.applyMatrix4(floor.OCSNoClone);\r\n let oldR = this.rr.GetReplaceOldReg(pos);\r\n\r\n let name = \"\";\r\n if (oldR)\r\n {\r\n if (this.reped.has(oldR)) //新增\r\n {\r\n //继承信息\r\n if (oldR.TextString)//继承名称\r\n {\r\n name = oldR.TextString;\r\n }\r\n }\r\n else//替换旧的\r\n {\r\n floor = oldR.Floor.Object as RoomFlatFloor;\r\n top = oldR.Top.Object as RoomFlatTop;\r\n\r\n EntitysUpdateWrap([floor, top, oldR], () =>\r\n {\r\n top.WriteAllObjectRecord();//因为修改了ocs 所以我们先记录下原始数据\r\n top.OCS = con.contour.Curve.OCSNoClone;\r\n\r\n floor.WriteAllObjectRecord();\r\n floor.OCS = con.contour.Curve.OCSNoClone;\r\n\r\n floor.UpdateContourHoles(con.contour.Curve as Polyline, con.children.map(c => c.contour.Curve as Polyline));\r\n top.UpdateContourHoles(con.contour.Curve as Polyline, con.children.map(c => c.contour.Curve as Polyline));\r\n\r\n floor.Z = minZ;\r\n top.Z = maxZ;//等轮廓设置完在移动 否则设置失败\r\n\r\n oldR.Position = pos;\r\n oldR.Area = floor.Area;\r\n });\r\n\r\n this.reped.add(oldR);\r\n continue;\r\n }\r\n }\r\n\r\n this._UpdateDb.ModelSpace.Append(floor);\r\n this._UpdateDb.ModelSpace.Append(top);\r\n let region = new RoomRegion(name, top.Id, floor.Id, floor.Area);\r\n region.Position = pos;\r\n this._UpdateDb.ModelSpace.Append(region);\r\n floor.RegionId = region.Id;\r\n top.RegionId = region.Id;\r\n }\r\n }\r\n }\r\n\r\n for (let [orgArc, arcs] of parse.ExpLineMap)\r\n orgArc[CURVE_FACE_TYPE_KEY] = arcs[0][CURVE_FACE_TYPE_KEY];\r\n\r\n for (let wall of walls)\r\n {\r\n // 因为我们现在没有分裂圆弧 所以我们不需要在合并线\r\n // wall.LeftCurves && arrayRemoveDuplicateBySort(wall.LeftCurves, (cu1: Curve, cu2: Curve) => cu1.Join(cu2) === Status.True);\r\n // wall.RightCurves && arrayRemoveDuplicateBySort(wall.RightCurves, (cu1: Curve, cu2: Curve) => cu1.Join(cu2) === Status.True);\r\n wall.Update();\r\n }\r\n\r\n return roofs;\r\n }\r\n\r\n End()\r\n {\r\n if (this._UpdateDb)\r\n {\r\n for (let r of this.oldregs)\r\n if (!this.reped.has(r))\r\n {\r\n r.Erase();\r\n r.Floor?.Object.Erase();\r\n r.Top?.Object.Erase();\r\n }\r\n }\r\n }\r\n}\r\n","import { Vector3 } from \"three\";\r\nimport { arrayRemoveDuplicateBySort, arraySortByNumber } from \"../../../Common/ArrayExt\";\r\nimport { CurveIntersection2 } from \"../../../Geometry/CurveIntersection\";\r\nimport { equaln } from \"../../../Geometry/GeUtils\";\r\nimport { IntersectOption } from \"../../../GraphicsSystem/IntersectWith\";\r\nimport { Curve } from \"../../Entity/Curve\";\r\n\r\n/**\r\n * 1.自动合理的延伸墙体,以便保证吸附失败的时候自动吸附(当被MOVE时,我们希望修复吸附失败的问题!)\r\n * 可延伸的距离等于墙体的厚度\r\n *\r\n * 2.在交点处把墙体打断,以便我们分析区域\r\n */\r\nexport class RoomWallExtendAndBreak\r\n{\r\n\r\n //曲线->分裂曲线的映射\r\n _Curve2SplitCurveMap = new Map();\r\n //分裂曲线->原始曲线的映射\r\n _SplitCurve2OrgCurveMap = new Map();\r\n\r\n ExtendCurves = new Set();\r\n AloneCurves: Curve[] = [];\r\n\r\n OrgCurveMapGroup: (Curve[])[] = [];\r\n\r\n constructor(curves: Curve[])\r\n {\r\n let intersect = new CurveIntersection2(curves, true, IntersectOption.ExtendBoth, 100, true);\r\n\r\n let breakCurves: Curve[] = [];\r\n //延伸+打断\r\n for (let [cu, pmap] of intersect.intersect2)\r\n {\r\n pmap.sort((p1, p2) => p1[0] - p2[0]);\r\n\r\n if (pmap.length > 0) breakCurves.push(cu);\r\n else this.AloneCurves.push(cu);\r\n\r\n //#region 1.延伸\r\n let hasExtend = false;\r\n let endParam = cu.EndParam;\r\n\r\n //最接近起点的点(我们使用这个点来决定我们是否延伸,这样有效避免了距离小于间距的一半时,但是距离却又大于设置参数时延伸时的尴尬!) 例如 | --|--------- 该例子不延伸到左边\r\n let index1 = FindMin(pmap, 0);\r\n let index2 = FindMin(pmap, endParam);\r\n\r\n let start = pmap[index1];\r\n let end = pmap[index2];\r\n\r\n if (start[0] < -1e-8)\r\n {\r\n cu.Extend(start[0]);\r\n hasExtend = true;\r\n }\r\n\r\n if (end[0] > (endParam + 1e-8))\r\n {\r\n cu.Extend(hasExtend ? cu.GetParamAtPoint(end[1]) : end[0]);\r\n hasExtend = true;\r\n\r\n pmap.splice(index2);//移除多余的交点参数\r\n }\r\n\r\n if (start[0] < -1e-8)\r\n pmap.splice(0, index1);//移除多余的交点参数\r\n\r\n if (hasExtend)//记录这个曲线被延伸了\r\n this.ExtendCurves.add(cu);\r\n }\r\n\r\n //有效的相交数据(用来切割)\r\n let intersectData = new Map();\r\n for (let cu of breakCurves)\r\n intersectData.set(cu, []);\r\n\r\n //去除无效的交点 移除多余的交点参数\r\n for (let [c1, c2, pts] of intersect.intersect3)\r\n {\r\n let c1arr = intersectData.get(c1);\r\n let c2arr = intersectData.get(c2);\r\n\r\n for (let p of pts)\r\n {\r\n let c1param = c1.GetParamAtPoint(p);\r\n if (!c1.ParamOnCurve(c1param)) continue;\r\n\r\n let c2param = c2.GetParamAtPoint(p);\r\n\r\n if (!c2.ParamOnCurve(c2param)) continue;\r\n\r\n c1arr.push(c1param);\r\n c2arr.push(c2param);\r\n }\r\n }\r\n\r\n //打断\r\n for (let [cu, params] of intersectData)\r\n {\r\n params = params.filter(p => p > 1e-3 && p < 0.999);\r\n // let isArc = cu instanceof Arc;\r\n // if (isArc)\r\n // {\r\n // let param = cu.GetParamAtPoint2((cu as Arc).Center.add(YAxisN));\r\n // if (cu.ParamOnCurve(param))\r\n // params.push(param);//保证切割\r\n // }\r\n if (params.length)\r\n {\r\n arraySortByNumber(params);\r\n arrayRemoveDuplicateBySort(params, (e1, e2) => equaln(e1, e2, 1e-4));\r\n // if (equaln(params[params.length - 1], 1, 1e-4)) //已经filter 不再需要\r\n // params[params.length - 1] = 1;\r\n }\r\n\r\n let splitCurves = params.length === 0 ? [cu.Clone()] : cu.GetSplitCurves(params);\r\n\r\n // if (isArc && splitCurves.length > 1)//将短圆弧转换为直线 我们由上层业务代码决定何时转换 不在此转换\r\n // {\r\n // // for (let i = 0; i < splitCurves.length; i++)\r\n // // {\r\n // // let c = splitCurves[i] as Arc;\r\n // // if (c.Radius < 100) //不能歧视 否则轮廓就错了\r\n // // splitCurves[i] = new Line(c.StartPoint, c.EndPoint);\r\n // // }\r\n // }\r\n\r\n //记录关联关系\r\n this._Curve2SplitCurveMap.set(cu, splitCurves);\r\n for (let scu of splitCurves)\r\n this._SplitCurve2OrgCurveMap.set(scu, cu);\r\n }\r\n\r\n //分组(只有相交的部分才会在一个组)\r\n let parsed = new Set();\r\n for (let cu of curves)\r\n {\r\n if (parsed.has(cu)) continue;\r\n parsed.add(cu);\r\n\r\n let group: Curve[] = [cu];\r\n\r\n for (let i = 0; i < group.length; i++)\r\n {\r\n let interMap = intersect.intersect.get(group[i]);\r\n if (!interMap) continue;\r\n for (let [ic] of interMap)\r\n {\r\n if (parsed.has(ic)) continue;\r\n parsed.add(ic);\r\n\r\n group.push(ic);\r\n }\r\n }\r\n\r\n if (group.length > 1)\r\n this.OrgCurveMapGroup.push(group);\r\n }\r\n }\r\n}\r\n\r\n//找到最接近某个参数的索引位置\r\nfunction FindMin(params: [number, Vector3][], closeToParam: number)\r\n{\r\n if (params.length < 2) return params.length - 1;\r\n\r\n let minDist = Infinity;\r\n let minIndex = -1;\r\n for (let i = 0; i < params.length; i++)\r\n {\r\n let absDist = Math.abs(params[i][0] - closeToParam);\r\n if (absDist < minDist)\r\n {\r\n minDist = absDist;\r\n minIndex = i;\r\n }\r\n }\r\n return minIndex;\r\n}\r\n","import Flatbush from 'flatbush';\r\nimport { Box3, Vector3 } from \"three\";\r\nimport { arrayPushArray } from '../../../Common/ArrayExt';\r\nimport { CurveMap, Vertice } from \"../../../Geometry/CurveMap\";\r\nimport { AsVector2, equalv3, midPoint, SelectNearP } from \"../../../Geometry/GeUtils\";\r\nimport { CalcRouteAngle, RegionParse } from \"../../../Geometry/RegionParse\";\r\nimport { IntersectOption } from \"../../../GraphicsSystem/IntersectWith\";\r\nimport { EntityEncode2 } from \"../../../GraphicsSystem/OffsetPolyline\";\r\nimport { Contour } from \"../../Contour\";\r\nimport { Database } from '../../Database';\r\nimport { Arc } from \"../../Entity/Arc\";\r\nimport { Curve } from \"../../Entity/Curve\";\r\nimport { Line } from \"../../Entity/Line\";\r\nimport { Polyline } from \"../../Entity/Polyline\";\r\nimport { RoomWallBase } from \"../Entity/Wall/RoomWallBase\";\r\nimport { CurveTrim, CurveTrimArc, CurveTrimLine } from \"./CurveTrim\";\r\nimport { CreateGetCurveParam, GetCurveParam, GetLineParam } from './GetCurveParam';\r\nimport { RoomRegionParse } from './RoomRegionParse';\r\nimport { RoomWallExtendAndBreak } from \"./RoomWallExtendAndBreak\";\r\n\r\nconst SHOW_PERF = false;\r\nconst ROOM_WALL_INDEX_KEY = \"__ROOM_WALL_INDEX_KEY__\";\r\nconst SAVE_SP_KEY = \"__SAVE_SP__\";\r\nconst SAVE_EP_KEY = \"__SAVE_EP__\";\r\n\r\n/**\r\n * 户型分析服务:\r\n * 1.自动延伸墙\r\n * 2.合理的构建墙\r\n * 3.自动分析地板\r\n *\r\n * 墙体被分裂后合并(join line)\r\n *\r\n * TODO:\r\n * 删除重复的墙(例如 2个rec wall)\r\n * 增量更新 diff walls(始作俑者 1) -> dep walls(需要更新 2) ->dep's dep walls(需要被依赖 3) +[可能被影响到的wall 2(比如被切割的墙) (依赖墙 3)]\r\n * ->1.用盒子搜索范围依赖(盒子1级依赖)\r\n * ->2.用盒子扩大搜索范围依赖(盒子2级依赖)\r\n * ->正确的分析1级依赖 2级依赖 (或者不要分析? 直接用盒子来?)\r\n * ->分析\r\n * ->更新1级 2级 的墙\r\n */\r\nexport class RoomWallParse\r\n{\r\n\r\n static _CacheWallNodePoints: Vector3[] = [];\r\n static _CacheWallMaps: [RoomWallExtendAndBreak, CurveMap][] = [];\r\n static _CacheCurveWallMaps: Map = new Map();\r\n static _CacheRoofs: Polyline[] = [];\r\n\r\n /**\r\n * @param [_ExtendsWalls=true] 更新墙体,在开图时不更新图纸\r\n * @param [_UpdateDb] 更新的图纸(新绘制Region)\r\n * @param [_IsCacheWallNodePoints] 需要把节点缓存下来?\r\n */\r\n constructor(private _ExtendsWalls: boolean, private _UpdateDb: Database, private _IsCacheWallNodePoints: boolean)\r\n {\r\n\r\n }\r\n\r\n /**\r\n * @param walls 需要解析的墙体列表\r\n * @param changeWalls 更新的墙体列表(如果提供 增量模式)\r\n */\r\n Parse(walls: RoomWallBase[], changeWalls: RoomWallBase[] = undefined)\r\n {\r\n if (this._IsCacheWallNodePoints)\r\n {\r\n RoomWallParse._CacheWallNodePoints = [];\r\n RoomWallParse._CacheWallMaps = [];\r\n RoomWallParse._CacheCurveWallMaps = new Map();\r\n RoomWallParse._CacheRoofs = [];\r\n }\r\n\r\n let regionPrase = new RoomRegionParse(this._UpdateDb);\r\n\r\n const GroupWalls = (walls: RoomWallBase[], fn: (wall: RoomWallBase) => number) =>\r\n {\r\n let map = new Map();\r\n for (let w of walls)\r\n {\r\n if (w.Length < 1e-6)\r\n {\r\n // w.Erase();//删除空长度的墙\r\n\r\n //避免窗户0长度错误\r\n w.LeftCurves = [];\r\n w.RightCurves = [];\r\n w.LidCurves = [];\r\n continue;\r\n };\r\n\r\n let value = fn(w);\r\n let arr = map.get(value);\r\n if (!arr)\r\n {\r\n arr = [];\r\n map.set(value, arr);\r\n }\r\n arr.push(w);\r\n }\r\n return map;\r\n };\r\n\r\n //按Z轴区分\r\n let zgroupMap = GroupWalls(walls, w => Math.round(w.Z * 100));\r\n\r\n for (let [, walls] of zgroupMap)\r\n {\r\n this.PraseWallsFromSameFloor(walls, changeWalls);\r\n let roofs = regionPrase.Do(walls);\r\n\r\n if (this._IsCacheWallNodePoints)\r\n arrayPushArray(RoomWallParse._CacheRoofs, roofs);\r\n }\r\n\r\n regionPrase.End();\r\n }\r\n\r\n private PraseWallsFromSameFloor(walls: RoomWallBase[], changeWalls: RoomWallBase[] = undefined)\r\n {\r\n SHOW_PERF && console.time(\"尖角化+裁剪面\");\r\n //{墙}->{轴线} {轴线}->{墙}\r\n let wallCurveMap = new Map();\r\n let curveWallMap = new Map();\r\n\r\n let axisCurves = walls.map(wall =>\r\n {\r\n //清理\r\n wall.LeftCurves = [];\r\n wall.RightCurves = [];\r\n wall.LidCurves = [];\r\n wall.Region = undefined;\r\n\r\n let cu = wall.CenterAxisCurve;\r\n\r\n wallCurveMap.set(wall, cu);\r\n curveWallMap.set(cu, wall);\r\n\r\n if (this._IsCacheWallNodePoints)\r\n RoomWallParse._CacheCurveWallMaps.set(cu, wall);\r\n return cu;\r\n });\r\n\r\n //打断数据\r\n let breakData = new RoomWallExtendAndBreak(axisCurves);\r\n\r\n if (this._ExtendsWalls)//墙体延伸\r\n for (let cu of breakData.ExtendCurves)\r\n {\r\n let wall = curveWallMap.get(cu);\r\n\r\n wall.StartPoint = cu.StartPoint;\r\n wall.EndPoint = cu.EndPoint;\r\n }\r\n\r\n let orgCurveLeftMap = new Map();\r\n let orgCurveRightMap = new Map();\r\n\r\n //{打断后的曲线}指向{新生成曲线}\r\n let curveLeftCurveMap: Map = new Map;\r\n let curveRightCurveMap: Map = new Map;\r\n //新生成的曲线的补盖子\r\n let curveStartLidCurveMap: Map = new Map;\r\n let curveEndLidCurveMap: Map = new Map;\r\n //半盖\r\n let curveStarLeftHalfLidCurveMap: Map = new Map;\r\n let curveStarRightHalfLidCurveMap: Map = new Map;\r\n let curveEndLeftHalfLidCurveMap: Map = new Map;\r\n let curveEndRightHalfLidCurveMap: Map = new Map;\r\n\r\n //尖角连接\r\n for (let groupCurves of breakData.OrgCurveMapGroup)\r\n {\r\n let curveMap = new CurveMap(4, true);\r\n\r\n for (let orgCurve of groupCurves)\r\n {\r\n let orgWall = curveWallMap.get(orgCurve);\r\n let splitCurves = breakData._Curve2SplitCurveMap.get(orgCurve);\r\n for (let cu of splitCurves)\r\n {\r\n //TODO:墙体重复时, 使用大厚度的墙?\r\n if (curveMap.AddCurveToMap(cu, cu instanceof Arc, true, true) || true)//避免重叠墙体构建错误 我们设置了true 参考用例 `重叠墙分析丢失墙体`\r\n {\r\n //左右线\r\n let leftCurve = cu.GetOffsetCurves(-orgWall.Thickness * 0.5)[0];\r\n let rightCurve = cu.GetOffsetCurves(orgWall.Thickness * 0.5)[0];\r\n\r\n leftCurve.ColorIndex = 2;\r\n rightCurve.ColorIndex = 3;\r\n\r\n curveLeftCurveMap.set(cu, leftCurve);\r\n curveRightCurveMap.set(cu, rightCurve);\r\n }\r\n }\r\n }\r\n\r\n if (this._IsCacheWallNodePoints)\r\n RoomWallParse._CacheWallMaps.push([breakData, curveMap]);\r\n\r\n //逆时针\r\n for (let v of curveMap._Vertices)\r\n {\r\n if (this._IsCacheWallNodePoints)\r\n RoomWallParse._CacheWallNodePoints.push(v.position);\r\n\r\n if (v.routes.length === 0) continue;\r\n if (v.routes.length < 2)\r\n {\r\n let r = v.routes[0];\r\n let preCurve = curveLeftCurveMap.get(r.curve);//左边的\r\n let nowCurve = curveRightCurveMap.get(r.curve);//右边的\r\n\r\n let sp = r.isReverse ? preCurve.EndPoint : preCurve.StartPoint;\r\n let ep = r.isReverse ? nowCurve.EndPoint : nowCurve.StartPoint;\r\n let l = new Line(sp, ep);\r\n l.ColorIndex = 6;\r\n if (r.isReverse)\r\n curveEndLidCurveMap.set(r.curve, new Line(ep, sp));\r\n else\r\n curveStartLidCurveMap.set(r.curve, new Line(sp, ep));\r\n continue;\r\n };\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 //倒角\r\n let pre = v.routes.length - 1;\r\n for (let i = 0; i < v.routes.length; i++)\r\n {\r\n let preR = v.routes[pre];\r\n let nowR = v.routes[i];\r\n\r\n let preCurve = preR.isReverse ? curveRightCurveMap.get(preR.curve) : curveLeftCurveMap.get(preR.curve);//左边的\r\n let nowCurve = nowR.isReverse ? curveLeftCurveMap.get(nowR.curve) : curveRightCurveMap.get(nowR.curve);//右边的\r\n\r\n let sp = preR.isReverse ? preCurve.EndPoint : preCurve.StartPoint;\r\n let ep = nowR.isReverse ? nowCurve.EndPoint : nowCurve.StartPoint;\r\n if (equalv3(sp, ep))//直连\r\n {\r\n pre = i;\r\n continue;\r\n }\r\n\r\n let iPam = preCurve.IntersectWith2(nowCurve, IntersectOption.ExtendBoth);\r\n let iPts = iPam.map(p => p.pt);\r\n let tPts = iPam.filter(p => preCurve.ParamOnCurve(p.thisParam) && nowCurve.ParamOnCurve(p.argParam)).map(p => p.pt);\r\n\r\n let code = EntityEncode2(preCurve, nowCurve);\r\n let tp: Vector3;\r\n if (code === 1)//都是直线\r\n {\r\n if (tPts.length > 0)\r\n {\r\n tp = iPts[0];\r\n\r\n //奇怪的行为,避免它\r\n if (equalv3(tp, preCurve.StartPoint, 1e-3)\r\n || equalv3(tp, preCurve.EndPoint, 1e-3)\r\n || equalv3(tp, nowCurve.StartPoint, 1e-3)\r\n || equalv3(tp, nowCurve.EndPoint, 1e-3)\r\n )\r\n tp = undefined;\r\n }\r\n else\r\n {\r\n if (iPts.length > 0)\r\n {\r\n //fuck 没有括号导致的错误\r\n //尖角时才延伸,否则补盖 (延伸或者在线上)\r\n let isExtend = (preR.isReverse ? iPam[0].thisParam > 0 : iPam[0].thisParam < 1)\r\n && (nowR.isReverse ? iPam[0].argParam > 0 : iPam[0].argParam < 1);\r\n\r\n let distSq = iPts[0].distanceToSquared(v.position);\r\n if (isExtend && distSq < 500 * 500)//尖角\r\n tp = iPts[0];\r\n else\r\n {\r\n //钝角 直接连接 在下面的代码连接\r\n // console.log();\r\n }\r\n }\r\n }\r\n }\r\n else//直线与圆弧\r\n {\r\n if (tPts.length > 0) //ipts = 1 or ipts = 2\r\n tp = SelectNearP(tPts, v.position);\r\n else\r\n {\r\n if (iPts.length === 0)\r\n {\r\n //直接连接 在下面的代码连接\r\n }\r\n else\r\n {\r\n let p: Vector3;\r\n\r\n if (code === 2 && iPts.length === 2)\r\n {\r\n let preArc = preCurve as Arc;\r\n let minArc = new Arc(preArc.Center, preArc.Radius,\r\n preR.isReverse ? preArc.EndAngle : preArc.StartAngle,\r\n 0,\r\n preR.isReverse ? preArc.IsClockWise : !preArc.IsClockWise\r\n );\r\n\r\n let p1 = iPts[0];\r\n let a1 = minArc.GetAngleAtPoint(p1);\r\n let anAll1 = preArc.ParamOnCurve(preArc.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 = preArc.ParamOnCurve(preArc.GetParamAtAngle(a2)) ? Infinity : minArc.ComputeAnlge(a2);\r\n\r\n if (anAll2 < anAll1)\r\n {\r\n p = p2;\r\n iPam[0] = iPam[1];\r\n }\r\n else\r\n p = p1;\r\n }\r\n else\r\n {\r\n p = SelectNearP(iPts, v.position);\r\n if (p === iPts[1])\r\n iPam[0] = iPam[1];\r\n }\r\n\r\n let isExtend = (preR.isReverse ? iPam[0].thisParam > 1 : iPam[0].thisParam < 0)\r\n && (nowR.isReverse ? iPam[0].argParam > 1 : iPam[0].argParam < 0);\r\n\r\n //tp 必须不能破坏圆弧,否则造成裁剪错误\r\n if (!isExtend || p.distanceToSquared(v.position) > 500 * 500)\r\n p = undefined;\r\n else//预习 如果破坏的圆弧轮廓,则不允许连接\r\n {\r\n let line: Line;\r\n if (preCurve instanceof Arc)\r\n {\r\n let tempC = preCurve.Clone();\r\n if (preR.isReverse) tempC.EndPoint = p;\r\n else tempC.StartPoint = p;\r\n\r\n line = new Line(v.position.clone(), p);\r\n let ipts = line.IntersectWith(tempC, IntersectOption.ExtendNone);\r\n if (ipts.length === 2)\r\n p = undefined;\r\n }\r\n\r\n if (p && nowCurve instanceof Arc)\r\n {\r\n let tempC = nowCurve.Clone();\r\n if (nowR.isReverse) tempC.EndPoint = p;\r\n else tempC.StartPoint = p;\r\n\r\n if (!line) line = new Line(v.position.clone(), p);\r\n let ipts = line.IntersectWith(tempC, IntersectOption.ExtendNone);\r\n if (ipts.length === 2)\r\n p = undefined;\r\n }\r\n }\r\n\r\n tp = p;\r\n }\r\n }\r\n }\r\n\r\n if (tp)\r\n {\r\n if (preR.isReverse) preCurve[SAVE_EP_KEY] = tp;\r\n else preCurve[SAVE_SP_KEY] = tp;\r\n\r\n if (nowR.isReverse) nowCurve[SAVE_EP_KEY] = tp;\r\n else nowCurve[SAVE_SP_KEY] = tp;\r\n }\r\n else\r\n {\r\n //如果两线(直线)平行 无交点时,应该只补厚墙的盖子\r\n if (code === 1 && iPts.length === 0)//&& false 尽管是false 这里的代码还是成立的 没有禁用这个代码是因为能带来一丢丢性能提升\r\n {\r\n let w1 = curveWallMap.get(breakData._SplitCurve2OrgCurveMap.get(preR.curve));\r\n let w2 = curveWallMap.get(breakData._SplitCurve2OrgCurveMap.get(nowR.curve));\r\n\r\n let sp = preR.isReverse ? preCurve.EndPoint : preCurve.StartPoint;\r\n let ep = nowR.isReverse ? nowCurve.EndPoint : nowCurve.StartPoint;\r\n\r\n if (w1.Thickness > w2.Thickness)\r\n {\r\n if (preR.isReverse)\r\n curveEndLeftHalfLidCurveMap.set(preR.curve, new Line(sp, ep));\r\n else\r\n curveStarLeftHalfLidCurveMap.set(preR.curve, new Line(sp, ep));\r\n }\r\n else\r\n {\r\n if (nowR.isReverse)\r\n curveEndRightHalfLidCurveMap.set(nowR.curve, new Line(sp, ep));\r\n else\r\n curveStarRightHalfLidCurveMap.set(nowR.curve, new Line(sp, ep));\r\n }\r\n }\r\n // else if (equalv3(sp, ep, 10)) //在sp ep接近时,我们直接连接sp ep 会更好? 看起来是没必要的\r\n // {\r\n // if (preR.isReverse)\r\n // curveEndLeftHalfLidCurveMap.set(preR.curve, new Line(ep, sp));\r\n // else\r\n // curveStarLeftHalfLidCurveMap.set(preR.curve, new Line(sp, ep));\r\n // }\r\n else\r\n {\r\n if (preR.isReverse)\r\n curveEndLeftHalfLidCurveMap.set(preR.curve, new Line(sp, v.position.clone()));//yep\r\n else\r\n curveStarLeftHalfLidCurveMap.set(preR.curve, new Line(sp, v.position.clone()));//yep\r\n\r\n if (nowR.isReverse)\r\n curveEndRightHalfLidCurveMap.set(nowR.curve, new Line(v.position.clone(), ep));//yep\r\n else\r\n curveStarRightHalfLidCurveMap.set(nowR.curve, new Line(v.position.clone(), ep));//yep\r\n }\r\n }\r\n\r\n pre = i;\r\n }\r\n }\r\n\r\n //延迟连接\r\n for (let orgCurve of groupCurves)\r\n {\r\n let splitCurves = breakData._Curve2SplitCurveMap.get(orgCurve);\r\n for (let cu of splitCurves)\r\n {\r\n let left = curveLeftCurveMap.get(cu);\r\n let right = curveRightCurveMap.get(cu);\r\n\r\n UpdateStartEndPoint(left);\r\n UpdateStartEndPoint(right);\r\n }\r\n }\r\n\r\n class RegionParse2 extends RegionParse\r\n {\r\n protected override GenerateVerticeMap(curveList: Curve[]): Vertice[]\r\n {\r\n return curveMap.Stands;\r\n }\r\n }\r\n\r\n //现在已经不再需要移除小房间了\r\n // //移除过小房间的内墙(空间过小 或者 没有空间)\r\n // let regionData = new RegionParse2(undefined);\r\n // const RemoveSmallSpaceInteriorWall = (routes: Route[]) =>\r\n // {\r\n // let polyline = Polyline.Combine(routes.map(r => r.curve), 1e-3);\r\n // let space = polyline.GetOffsetCurves(-120)[0];\r\n\r\n // if (!space || space.Area < 1e4)//0.1平米\r\n // {\r\n // for (let r of routes)\r\n // {\r\n // let cu: Curve;\r\n // //因为是逆时针 所以我们删除右边的线\r\n // if (r.isReverse)\r\n // {\r\n // cu = curveLeftCurveMap.get(r.curve);\r\n // curveLeftCurveMap.delete(r.curve);\r\n // }\r\n // else\r\n // {\r\n // cu = curveRightCurveMap.get(r.curve);\r\n // curveRightCurveMap.delete(r.curve);\r\n // }\r\n\r\n // //还要删除补的盖子\r\n // if (cu)\r\n // {\r\n // curveStarLeftHalfLidCurveMap.delete(cu);\r\n // curveEndLeftHalfLidCurveMap.delete(cu);\r\n\r\n // curveStartLidCurveMap.delete(cu);\r\n // curveEndLidCurveMap.delete(cu);\r\n // }\r\n // }\r\n // }\r\n // };\r\n // regionData.RegionsInternal.forEach(RemoveSmallSpaceInteriorWall);\r\n // regionData.RegionsOutline.forEach(RemoveSmallSpaceInteriorWall);\r\n }\r\n\r\n //构建裁剪面\r\n let trimContours: Contour[] = [];\r\n let orgCurveParams: GetCurveParam[] = [];\r\n for (let i = 0; i < axisCurves.length; i++)\r\n {\r\n let orgCurve = axisCurves[i];\r\n orgCurve[ROOM_WALL_INDEX_KEY] = i;\r\n let parse = CreateGetCurveParam(orgCurve);\r\n orgCurveParams.push(parse);\r\n\r\n let splitCurves = breakData._Curve2SplitCurveMap.get(orgCurve);\r\n let orgWall = curveWallMap.get(orgCurve);\r\n\r\n let leftStartParam = 1, leftEndParam = 0,\r\n rightStartParam = 1, rightEndParam = 0;\r\n if (!splitCurves)\r\n {\r\n //左右线\r\n let leftCurve = orgCurve.GetOffsetCurves(-orgWall.Thickness * 0.5)[0];\r\n let rightCurve = orgCurve.GetOffsetCurves(orgWall.Thickness * 0.5)[0];\r\n\r\n leftCurve.ColorIndex = 2;\r\n rightCurve.ColorIndex = 3;\r\n\r\n curveLeftCurveMap.set(orgCurve, leftCurve);\r\n curveRightCurveMap.set(orgCurve, rightCurve);\r\n\r\n curveStartLidCurveMap.set(orgCurve, new Line(leftCurve.StartPoint, rightCurve.StartPoint));\r\n curveEndLidCurveMap.set(orgCurve, new Line(rightCurve.EndPoint, leftCurve.EndPoint));\r\n\r\n breakData._SplitCurve2OrgCurveMap.set(orgCurve, orgCurve);//直接定位到自己\r\n\r\n //更新 孤独的墙也应该被切割,所以移除这个代码\r\n // orgWall.Region = undefined;\r\n // orgWall.LeftCurves = undefined;\r\n // orgWall.RightCurves = undefined;\r\n // orgWall.LidCurves = undefined;\r\n\r\n if (this._IsCacheWallNodePoints)\r\n RoomWallParse._CacheWallNodePoints.push(orgCurve.StartPoint, orgCurve.EndPoint);\r\n\r\n // continue;//孤独的墙(TODO:) //update:孤独的墙也应该裁剪被人\r\n leftStartParam = rightStartParam = 0;\r\n leftEndParam = rightEndParam = 1;\r\n }\r\n else\r\n {\r\n for (let cu of splitCurves)\r\n {\r\n let left = curveLeftCurveMap.get(cu);\r\n let right = curveRightCurveMap.get(cu);\r\n\r\n if (left)\r\n {\r\n leftStartParam = Math.min(leftStartParam, parse.GetParamAtPoint(left.StartPoint));\r\n leftEndParam = Math.max(leftEndParam, parse.GetParamAtPoint(left.EndPoint));\r\n }\r\n\r\n if (right)\r\n {\r\n rightStartParam = Math.min(rightStartParam, parse.GetParamAtPoint(right.StartPoint));\r\n rightEndParam = Math.max(rightEndParam, parse.GetParamAtPoint(right.EndPoint));\r\n }\r\n }\r\n\r\n if (leftStartParam > leftEndParam)\r\n {\r\n leftStartParam = 0;\r\n leftEndParam = 1;\r\n }\r\n if (rightStartParam > rightEndParam)\r\n {\r\n rightStartParam = 0;\r\n rightEndParam = 1;\r\n }\r\n }\r\n\r\n let sp = orgCurve.StartPoint;\r\n let ep = orgCurve.EndPoint;\r\n if (orgCurve instanceof Line)\r\n {\r\n let lparse = parse as GetLineParam;\r\n let p1 = parse.GetPointAtParam(leftStartParam);\r\n let p2 = parse.GetPointAtParam(leftEndParam);\r\n lparse.OffsetPoint(p1, orgWall.Thickness * 0.5);\r\n lparse.OffsetPoint(p2, orgWall.Thickness * 0.5);\r\n\r\n let p3 = lparse.GetPointAtParam(rightStartParam);\r\n let p4 = lparse.GetPointAtParam(rightEndParam);\r\n lparse.OffsetPoint(p3, orgWall.Thickness * -0.5);\r\n lparse.OffsetPoint(p4, orgWall.Thickness * -0.5);\r\n\r\n\r\n let pts: Vector3[] = [];\r\n if (!equalv3(midPoint(p1, p3), sp))\r\n pts.push(sp);\r\n\r\n pts.push(p1, p2);\r\n\r\n if (!equalv3(midPoint(p2, p4), ep))\r\n pts.push(ep);\r\n\r\n pts.push(p4, p3);\r\n\r\n let pl = new Polyline(pts.map(p => { return { pt: AsVector2(p), bul: 0 }; }));\r\n pl.CloseMark = true;\r\n pl.Z = p1.z;\r\n\r\n let contour = Contour.CreateContour(pl, false);\r\n\r\n // let reg = Region.CreateFromCurves([contour.Curve]);\r\n // if (reg)\r\n // TestDraw(reg);\r\n\r\n trimContours.push(contour);\r\n orgWall.Region = pl;\r\n\r\n orgCurveLeftMap.set(orgCurve, new Line(p1, p2));\r\n orgCurveRightMap.set(orgCurve, new Line(p3, p4));\r\n }\r\n else\r\n {\r\n //左右线\r\n let leftCurve = orgCurve.GetOffsetCurves(-orgWall.Thickness * 0.5)[0];\r\n let rightCurve = orgCurve.GetOffsetCurves(orgWall.Thickness * 0.5)[0];\r\n\r\n leftCurve.EndAngle = orgCurve.GetAngleAtParam(leftEndParam);\r\n leftCurve.StartAngle = orgCurve.GetAngleAtParam(leftStartParam);\r\n\r\n rightCurve.EndAngle = orgCurve.GetAngleAtParam(rightEndParam);\r\n rightCurve.StartAngle = orgCurve.GetAngleAtParam(rightStartParam);\r\n\r\n let curves: (Line | Arc)[] = [];\r\n let [p1, p2] = [leftCurve.StartPoint, leftCurve.EndPoint];\r\n let [p3, p4] = [rightCurve.StartPoint, rightCurve.EndPoint];\r\n\r\n if (!equalv3(midPoint(p1, p3), sp))\r\n curves.push(new Line(p3, sp), new Line(sp, p1));\r\n else\r\n curves.push(new Line(p1, p3));\r\n curves.push(leftCurve);\r\n if (!equalv3(midPoint(p2, p4), ep))\r\n curves.push(new Line(p2, ep), new Line(ep, p4));\r\n else\r\n curves.push(new Line(p2, p4));\r\n curves.push(rightCurve);\r\n\r\n let contour = Contour.CreateContour(curves, false);\r\n if (!contour)\r\n {\r\n // for (let i = 0; i < curves.length; i++)\r\n // TestDraw(curves[i], i + 1);\r\n contour = Contour.CreateContour(new Polyline().RectangleFrom2Pt(new Vector3, new Vector3(100, 100)), false);\r\n console.error(\"生成轮廓失败\");\r\n }\r\n else\r\n {\r\n // let reg = Region.CreateFromCurves([contour.Curve]);\r\n // if (reg)\r\n // TestDraw(reg);\r\n }\r\n trimContours.push(contour);\r\n orgWall.Region = contour.Curve as Polyline;\r\n\r\n orgCurveLeftMap.set(orgCurve, leftCurve);\r\n orgCurveRightMap.set(orgCurve, rightCurve);\r\n }\r\n }\r\n\r\n // jig.End();\r\n\r\n SHOW_PERF && console.timeEnd(\"尖角化+裁剪面\");\r\n\r\n SHOW_PERF && console.time(\"墙体裁剪\");\r\n\r\n this.GenFB(trimContours);\r\n\r\n enum CurveType\r\n {\r\n Left = 0,\r\n Right = 1,\r\n StartLid = 2,\r\n EndLid = 3,\r\n }\r\n\r\n const Trim = (splitCurve: Curve, offsetCurve: Curve, index: number, type: CurveType) =>\r\n {\r\n let trim: CurveTrim;\r\n if (offsetCurve instanceof Line)\r\n {\r\n let getParam = orgCurveParams[index] as GetLineParam;\r\n let dir: Vector3;\r\n if (type === CurveType.Left) dir = getParam.Direction;\r\n else if (type === CurveType.Right) dir = getParam.NegDirection;\r\n else if (type === CurveType.StartLid) dir = getParam.LeftDir;\r\n else if (type === CurveType.EndLid) dir = getParam.RightDir;\r\n\r\n if (!dir)\r\n {\r\n dir = offsetCurve.GetFistDeriv(0).normalize().negate();\r\n }\r\n\r\n trim = new CurveTrimLine(offsetCurve, dir);\r\n }\r\n else\r\n trim = new CurveTrimArc(offsetCurve as Arc, type !== CurveType.Left);\r\n\r\n //需要更快的判断直线会不会被轮廓切割?\r\n\r\n this.fb.search(trim._Box.min.x - 1e-2, trim._Box.min.y - 1e-2, trim._Box.max.x + 1e-2, trim._Box.max.y + 1e-2, (id =>\r\n {\r\n // if (id !== index) //裁剪的好处是有些细的盖子将会消失\r\n trim.TrimBy(trimContours[id], this.boxs[id], index > id);\r\n return false;\r\n }));\r\n\r\n let curves = trim.Curves;\r\n return curves as (Arc | Line)[];\r\n };\r\n\r\n for (let [orgCurve, offsetCurve] of orgCurveLeftMap)\r\n {\r\n let orgWall = curveWallMap.get(orgCurve);\r\n arrayPushArray(orgWall.LeftCurves, Trim(orgCurve, offsetCurve, orgCurve[ROOM_WALL_INDEX_KEY], CurveType.Left));\r\n }\r\n for (let [orgCurve, offsetCurve] of orgCurveRightMap)\r\n {\r\n let orgWall = curveWallMap.get(orgCurve);\r\n arrayPushArray(orgWall.RightCurves, Trim(orgCurve, offsetCurve, orgCurve[ROOM_WALL_INDEX_KEY], CurveType.Right));\r\n }\r\n\r\n for (let [splitCurve, offsetCurve] of curveStartLidCurveMap)\r\n {\r\n let orgCurve = breakData._SplitCurve2OrgCurveMap.get(splitCurve);\r\n let orgWall = curveWallMap.get(orgCurve);\r\n arrayPushArray(orgWall.LidCurves, Trim(splitCurve, offsetCurve, orgCurve[ROOM_WALL_INDEX_KEY], CurveType.StartLid));\r\n }\r\n for (let [splitCurve, offsetCurve] of curveEndLidCurveMap)\r\n {\r\n let orgCurve = breakData._SplitCurve2OrgCurveMap.get(splitCurve);\r\n let orgWall = curveWallMap.get(orgCurve);\r\n arrayPushArray(orgWall.LidCurves, Trim(splitCurve, offsetCurve, orgCurve[ROOM_WALL_INDEX_KEY], CurveType.EndLid));\r\n }\r\n\r\n for (let [splitCurve, offsetCurve] of curveStarLeftHalfLidCurveMap)\r\n {\r\n let orgCurve = breakData._SplitCurve2OrgCurveMap.get(splitCurve);\r\n let orgWall = curveWallMap.get(orgCurve);\r\n arrayPushArray(orgWall.LidCurves, Trim(splitCurve, offsetCurve, orgCurve[ROOM_WALL_INDEX_KEY], CurveType.StartLid));\r\n }\r\n for (let [splitCurve, offsetCurve] of curveStarRightHalfLidCurveMap)\r\n {\r\n let orgCurve = breakData._SplitCurve2OrgCurveMap.get(splitCurve);\r\n let orgWall = curveWallMap.get(orgCurve);\r\n arrayPushArray(orgWall.LidCurves, Trim(splitCurve, offsetCurve, orgCurve[ROOM_WALL_INDEX_KEY], CurveType.StartLid));\r\n }\r\n\r\n for (let [splitCurve, offsetCurve] of curveEndLeftHalfLidCurveMap)\r\n {\r\n let orgCurve = breakData._SplitCurve2OrgCurveMap.get(splitCurve);\r\n let orgWall = curveWallMap.get(orgCurve);\r\n arrayPushArray(orgWall.LidCurves, Trim(splitCurve, offsetCurve, orgCurve[ROOM_WALL_INDEX_KEY], CurveType.EndLid));\r\n }\r\n for (let [splitCurve, offsetCurve] of curveEndRightHalfLidCurveMap)\r\n {\r\n let orgCurve = breakData._SplitCurve2OrgCurveMap.get(splitCurve);\r\n let orgWall = curveWallMap.get(orgCurve);\r\n arrayPushArray(orgWall.LidCurves, Trim(splitCurve, offsetCurve, orgCurve[ROOM_WALL_INDEX_KEY], CurveType.EndLid));\r\n }\r\n\r\n //Update:2022-04-28 我们不再分裂圆弧,所以也不再需要合并线\r\n //区域分析需要破裂的圆弧,这里暂时不合并墙(在room region parse中合并)\r\n // for (let wall of walls)\r\n // {\r\n // wall.LeftCurves && arrayRemoveDuplicateBySort(wall.LeftCurves, (cu1: Curve, cu2: Curve) => cu1.Join(cu2) === Status.True);\r\n // wall.RightCurves && arrayRemoveDuplicateBySort(wall.RightCurves, (cu1: Curve, cu2: Curve) => cu1.Join(cu2) === Status.True);\r\n // }\r\n\r\n SHOW_PERF && console.timeEnd(\"墙体裁剪\");\r\n }\r\n\r\n fb: Flatbush;\r\n boxs: Box3[];\r\n GenFB(trimContours: Contour[])\r\n {\r\n if (trimContours.length === 0) return;\r\n\r\n let fb = new Flatbush(trimContours.length);\r\n this.boxs = [];\r\n\r\n let v = new Vector3(1e-2, 1e-2);\r\n for (let con of trimContours)\r\n {\r\n let box = con.BoundingBox;\r\n box.expandByVector(v);\r\n fb.add(box.min.x, box.min.y, box.max.x, box.max.y);\r\n this.boxs.push(box);\r\n }\r\n fb.finish();\r\n\r\n this.fb = fb;\r\n }\r\n\r\n}\r\n\r\nfunction UpdateStartEndPoint(curve: Curve)\r\n{\r\n let sp = curve[SAVE_SP_KEY];\r\n let ep = curve[SAVE_EP_KEY];\r\n\r\n if (sp && ep)\r\n {\r\n let param1 = curve.GetParamAtPoint(sp);\r\n let param2 = curve.GetParamAtPoint(ep);\r\n\r\n if (curve.ParamOnCurve(param1) && curve.ParamOnCurve(param2) && param1 > param2)\r\n [sp, ep] = [ep, sp];\r\n }\r\n if (sp)\r\n curve.StartPoint = sp;\r\n if (ep)\r\n curve.EndPoint = ep;\r\n}\r\n"],"names":["equaln","FixIndex","Vector2","Shape","ExtendType","TLine","cache","TempPolyline","TShape","Path","BufferGeometryUtils2","Line","TAmbientLight","TDirectionalLight","THemisphereLight","TPointLight","TRectAreaLight","TSpotLight","TempP","Box2"],"mappings":"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,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;AACjB,IAAA,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;AAClB,IAAA,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACpB,IAAA,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;AAClB,IAAA,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;AACnB,IAAA,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;AAClB,IAAA,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;AACnB,IAAA,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;AAChB,IAAA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;AACjB,IAAA,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;AAChB,IAAA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;AACjB,IAAA,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;AAClB,IAAA,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACpB,IAAA,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;AAClB,IAAA,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;AACnB,IAAA,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;AACjB,IAAA,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;AACnB,IAAA,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;AAChB,IAAA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;AACjB,IAAA,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;AAChB,IAAA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;AACjB,IAAA,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAA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,EAAE,GAAG,CAAC;AACnB,IAAA,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;AACjB,IAAA,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;AAClB,IAAA,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;AAChB,IAAA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;AACjB,IAAA,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;AAChB,IAAA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;AACjB,IAAA,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AAClB,IAAA,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACpB,IAAA,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AAClB,IAAA,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACnB,IAAA,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;AACjB,IAAA,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACnB,IAAA,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;AAChB,IAAA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;AACjB,IAAA,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;AAChB,IAAA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;AACjB,IAAA,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AAClB,IAAA,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACpB,IAAA,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AAClB,IAAA,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACnB,IAAA,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AAClB,IAAA,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACnB,IAAA,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;AAChB,IAAA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;AACjB,IAAA,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;AAChB,IAAA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;AACjB,IAAA,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AAClB,IAAA,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACpB,IAAA,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AAClB,IAAA,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACnB,IAAA,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;AACjB,IAAA,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACnB,IAAA,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;AAChB,IAAA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;AACjB,IAAA,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;AAChB,IAAA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;AACjB,IAAA,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AAClB,IAAA,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACpB,IAAA,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;AACjB,IAAA,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACnB,IAAA,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;AACjB,IAAA,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;AAClB,IAAA,CAAC,CAAC,EAAE,EAAE,E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AE,EAAE,EAAE,EAAE,GAAG,CAAC;AACjB,IAAA,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;AAClB,IAAA,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACpB,IAAA,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;AAClB,IAAA,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;AACnB,IAAA,CAAC,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;AACjB,IAAA,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;AACnB,IAAA,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;AAChB,IAAA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;AACjB,IAAA,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;AAChB,IAAA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;AACjB,IAAA,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;AAClB,IAAA,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACpB,IAAA,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;AAClB,IAAA,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;AACnB,IAAA,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;AAClB,IAAA,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;AACnB,IAAA,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;AAChB,IAAA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;AACjB,IAAA,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;AAChB,IAAA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;AACjB,IAAA,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;AAClB,IAAA,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACpB,IAAA,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;AAClB,IAAA,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;AACnB,IAAA,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;AACjB,IAAA,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;AACnB,IAAA,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;AAChB,IAAA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;AACjB,IAAA,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;AAChB,IAAA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;AACjB,IAAA,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;AAClB,IAAA,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACpB,IAAA,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;AACjB,IAAA,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;AACnB,IAAA,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;AACjB,IAAA,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;AAClB,IAAA,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;AAChB,IAAA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;AACjB,IAAA,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;AAChB,IAAA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;AACjB,IAAA,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;AACjB,IAAA,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACpB,IAAA,CAAC,GAAG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"} \ No newline at end of file +{"version":3,"file":"api.esm.js","sources":["../src/Geometry/CoordinateSystem.ts","../src/Common/SystemEnum.ts","../src/GraphicsSystem/RenderType.ts","../src/ApplicationServices/HostApplicationServices.ts","../src/Common/Dispose.ts","../src/Common/Status.ts","../src/Geometry/Box.ts","../src/DatabaseServices/AutoRecord.ts","../src/DatabaseServices/CADFactory.ts","../src/DatabaseServices/ObjectId.ts","../src/DatabaseServices/CADFiler.ts","../src/DatabaseServices/AllObjectData.ts","../src/DatabaseServices/EraseEntityData.ts","../src/DatabaseServices/CADObject.ts","../src/DatabaseServices/HistorycRecord.ts","../src/Add-on/testEntity/USE_WORLD_UV.ts","../src/DatabaseServices/SymbolTableRecord.ts","../src/DatabaseServices/MaterialTableRecord.ts","../src/DatabaseServices/PhysicalMaterialRecord.ts","../src/DatabaseServices/Entity/Entity.ts","../src/Common/eval.ts","../src/Common/StoreageKeys.ts","../src/Common/Utils.ts","../src/Geometry/GeUtils.ts","../src/Common/Matrix4Utils.ts","../src/Editor/ObjectSnapMode.ts","../src/Geometry/Orbit.ts","../src/Common/ArrayExt.ts","../src/DatabaseServices/Shape2.ts","../src/Geometry/CreatePolylinePath.ts","../src/GLSL/GoochShader.ts","../src/Common/ColorPalette.ts","../src/Editor/BufferGeometry2GeometryCacheMap.ts","../src/Geometry/BufferGeometryUtils.ts","../src/DatabaseServices/Entity/Curve.ts","../src/DatabaseServices/Entity/DragPointType.ts","../src/Geometry/Plane.ts","../src/DatabaseServices/Entity/Line.ts","../src/DatabaseServices/Entity/Ellipse.ts","../src/DatabaseServices/Entity/Circle.ts","../src/DatabaseServices/SplineConver2Polyline.ts","../src/DatabaseServices/Spline.ts","../src/Geometry/CurveIntersection.ts","../src/Geometry/CurveMap.ts","../src/Geometry/RegionParse.ts","../src/Geometry/CreateContour2.ts","../src/GraphicsSystem/BoolOperateUtils.ts","../src/DatabaseServices/Contour.ts","../src/GraphicsSystem/OffsetPolyline.ts","../src/DatabaseServices/PointInPolyline.ts","../src/DatabaseServices/Entity/Polyline.ts","../src/GraphicsSystem/IntersectWith.ts","../src/DatabaseServices/Entity/Arc.ts","../src/Geometry/Count.ts","../src/Common/CurveUtils.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/DatabaseServices/3DSolid/Hole.ts","../src/DatabaseServices/3DSolid/CylinderHole.ts","../src/UI/Store/BoardInterface.ts","../src/Add-on/DrawDrilling/HoleUtils.ts","../src/Geometry/BoardUVGenerator.ts","../src/Geometry/PointShapeUtils.ts","../src/Common/Toaster.ts","../src/UI/Components/RightPanel/RightPanelInterface.ts","../src/UI/Store/BoardFindInterface.ts","../src/UI/Store/DoorInterface.ts","../src/UI/Store/LatticeInterface.ts","../src/UI/Store/WineRackInterface.ts","../src/Editor/OrderType.ts","../src/Editor/DefaultConfig.ts","../src/Nest/Common/Util.ts","../src/Common/Log.ts","../src/Geometry/SweepGeometry.ts","../src/Geometry/OBB/obb.ts","../src/DatabaseServices/3DSolid/SweepSolid.ts","../src/DatabaseServices/Hardware/HardwareTopline.ts","../src/Add-on/LookOverBoardInfos/LookOverBoardInfosTool.ts","../src/Common/Report.ts","../src/Common/ShowSelectObjects.ts","../src/Geometry/CreateWireframe.ts","../src/Geometry/SimpleExtrudeEdgeGeometry.ts","../src/Common/CSGIntersect.ts","../src/csg/core/math/IsMirrot.ts","../src/csg/core/math/Polygon3.ts","../src/csg/core/Geometry2CSG.ts","../src/Geometry/BSPGroupParse.ts","../src/Geometry/FastOffset.ts","../src/Geometry/ExtrudeMeshGeomBuilder/SplitCurveParams.ts","../src/Geometry/ExtrudeMeshGeomBuilder/ExtrudeEdgeGeometry2.ts","../src/DatabaseServices/Entity/GenUVForWorld.ts","../src/DatabaseServices/Entity/Extrude.ts","../src/DatabaseServices/3DSolid/ExtrudeHole.ts","../src/Common/AddEntityDrawObject.ts","../src/DatabaseServices/Entity/CompositeEntity.ts","../src/DatabaseServices/Hardware/HardwareCompositeEntity.ts","../src/Geometry/DrillParse/Face.ts","../src/Geometry/DrillParse/BoardGetFace.ts","../src/Common/Singleton.ts","../src/GraphicsSystem/ToolPath/OptimizeToolPath.ts","../src/GraphicsSystem/ToolPath/FeedingToolPath.ts","../src/Production/Convert2PtsBul.ts","../src/Production/Product.ts","../src/GraphicsSystem/ParseEdgeSealDir.ts","../src/GraphicsSystem/CalcEdgeSealing.ts","../src/GraphicsSystem/ToolPath/VKnifToolPath.ts","../src/DatabaseServices/Entity/Board.ts","../src/DatabaseServices/Room/ParseService/RangeUtils.ts","../src/DatabaseServices/Room/ParseService/CurveTrim.ts","../src/Geometry/Matrix2.ts","../src/Common/EntityUpdateWrap.ts","../src/Nest/Common/ClipperCpp.ts","../src/DatabaseServices/Room/Entity/RoomBase.ts","../src/DatabaseServices/Room/Entity/Wall/Hole/RoomHoleBase.ts","../src/DatabaseServices/Room/Entity/Wall/Hole/RoomHolePolyline.ts","../src/DatabaseServices/Room/Entity/Wall/WallSnapMode.ts","../src/DatabaseServices/Room/Entity/Wall/RoomWallBase.ts","../src/DatabaseServices/Room/Entity/Wall/RoomWallArc.ts","../src/DatabaseServices/Room/ParseService/Hole/RoomWallPlaceIHoleHelper.ts","../src/Reactor/RoomHoleReactor.ts","../src/Add-on/Purge.ts","../src/DatabaseServices/CreateObjectData.ts","../src/DatabaseServices/RemoveObjectData.ts","../src/DatabaseServices/SymbolTable.ts","../src/DatabaseServices/BlockTable.ts","../src/DatabaseServices/ObjectCollection.ts","../src/DatabaseServices/BlockTableRecord.ts","../src/DatabaseServices/ObjectAllDataHistoryRecord.ts","../src/DatabaseServices/CommandHistoryRecord.ts","../src/DatabaseServices/CameraSnapshoot/CameraSnapshootRecord.ts","../src/DatabaseServices/DeepCloneFiler.ts","../src/DatabaseServices/GroupTable.ts","../src/Editor/CommandState.ts","../src/DatabaseServices/HistoricManage.ts","../src/DatabaseServices/Lights/Light.ts","../src/DatabaseServices/Lights/AmbientLight.ts","../src/DatabaseServices/Lights/SunLightHelper.ts","../src/DatabaseServices/Lights/DirectionalLight.ts","../src/DatabaseServices/Lights/HemisphereLight.ts","../src/DatabaseServices/MaterialTable.ts","../src/DatabaseServices/ProcessingGroup/ProcessingGroupTable.ts","../src/DatabaseServices/Template/TemplateTable.ts","../src/DatabaseServices/Texture.ts","../src/DatabaseServices/TextureTable.ts","../src/DatabaseServices/WblockCloneFiler.ts","../src/DatabaseServices/Database.ts","../src/DatabaseServices/FaceEntity.ts","../src/DatabaseServices/GroupTableRecord.ts","../src/Add-on/DrawBoard/BuildBoardTool.ts","../src/Add-on/LatticeDrawer/LatticeDrawerTool.ts","../src/Geometry/SpaceParse/ISpaceParse.ts","../src/DatabaseServices/Template/Action/TemplateAction.ts","../src/Editor/PromptResult.ts","../src/Add-on/FilletUtils.ts","../src/DatabaseServices/Template/Action/TemplateFilletAction.ts","../src/UI/Components/ApplyGoodInfo.tsx","../src/DatabaseServices/Template/Action/TemplateMaterialAction.ts","../src/DatabaseServices/Template/Param/TemplateParamType.ts","../src/DatabaseServices/Template/Param/TemplateParam.ts","../src/Geometry/SpaceParse/ClampSpaceParse.ts","../src/Geometry/SpaceParse/ClampSpaceParseFix.ts","../src/DatabaseServices/Template/Positioning/Positioning.ts","../src/DatabaseServices/Template/Positioning/PositioningClampSpace.ts","../src/DatabaseServices/Template/Positioning/PositioningTemporary.ts","../src/DatabaseServices/Template/TemplateType.ts","../src/DatabaseServices/Template/TemplateRecord.ts","../src/DatabaseServices/Template/ProgramTempate/TemplateLatticeRecord.ts","../src/Add-on/DrawBoard/BuildTopBottomBoardTool.ts","../src/DatabaseServices/Template/ProgramTempate/TemplateTopBottomBoard.ts","../src/Add-on/DrawWineRack/DrawWinRackTool.ts","../src/Add-on/DrawWineRack/DrawObliqueWineRackTool.ts","../src/Add-on/DrawWineRack/DrawUprightWineRackTool.ts","../src/DatabaseServices/Template/ProgramTempate/TemplateWineRackRecord.ts","../src/Add-on/HideSelect/HideSelectUtils.ts","../src/DatabaseServices/Text/Text.ts","../src/Editor/VisualSpaceBox.ts","../src/GraphicsSystem/CameraUpdate.ts","../src/DatabaseServices/ViewportEntity.ts","../src/DatabaseServices/3DSolid/Cylineder.ts","../src/DatabaseServices/3DSolid/RevolveSolid.ts","../src/DatabaseServices/Dimension/Dimension.ts","../src/DatabaseServices/Dimension/GetDimLineMaterial.ts","../src/DatabaseServices/Dimension/2LineAngularDimension.ts","../src/DatabaseServices/Dimension/AlignedDimension.ts","../src/DatabaseServices/Dimension/ArcDimension.ts","../src/DatabaseServices/Dimension/RadiusDimension.ts","../src/DatabaseServices/Dimension/DiameterDimension.ts","../src/DatabaseServices/Dimension/LinearDimension.ts","../src/DatabaseServices/Entity/BoxSolid.ts","../src/Add-on/testEntity/BoxLine.ts","../src/DatabaseServices/Entity/EntityRef.ts","../src/DatabaseServices/Entity/Point.ts","../src/DatabaseServices/Lights/PointLightHelper.ts","../src/DatabaseServices/Lights/PointLight.ts","../src/DatabaseServices/Lights/RectAreaLightHelper.ts","../src/DatabaseServices/Lights/RectAreaLight.ts","../src/DatabaseServices/Lights/SpotLightHelper.ts","../src/DatabaseServices/Lights/SpotLight.ts","../src/DatabaseServices/ProcessingGroup/ProcessingGroupRecord.ts","../src/DatabaseServices/Room/Entity/Flat/RoomFlatBase.ts","../src/DatabaseServices/Room/Entity/Flat/RoomFlatFloor.ts","../src/DatabaseServices/Room/Entity/Flat/RoomFlatTop.ts","../src/DatabaseServices/Room/Entity/Region/RoomRegion.ts","../src/DatabaseServices/Room/Entity/Wall/Hole/RoomHoleLine.ts","../src/DatabaseServices/Template/Action/TempateThicknessAction.ts","../src/DatabaseServices/Template/Action/TemplateMoveAction.ts","../src/DatabaseServices/Template/Action/TemplateSetSealAction.ts","../src/DatabaseServices/Template/Action/TemplateStretchGripAction.ts","../src/DatabaseServices/Template/Action/TemplateStretchScaleBoxAction.ts","../src/DatabaseServices/Template/Positioning/PositioningBoardSpace.ts","../src/DatabaseServices/Template/ProgramTempate/TemplateBoard.ts","../src/DatabaseServices/Template/ProgramTempate/TemplateBehindBoard.ts","../src/GraphicsSystem/GripScene.ts","../src/Editor/SelectFilter.ts","../src/Editor/SelectBox.ts","../src/Editor/PointPick.ts","../src/Add-on/DrawBoard/ActivityLayerBoardTool.ts","../src/DatabaseServices/Template/ProgramTempate/TemplateLayerBoard.ts","../src/DatabaseServices/Template/ProgramTempate/TemplateLeftRightBoardRecord.ts","../src/DatabaseServices/Template/ProgramTempate/TemplateSizeBoard.ts","../src/DatabaseServices/Template/ProgramTempate/TemplateVerticalBoard.ts","../src/DatabaseServices/Template/ProgramTempate/TemplateVisualSpace.ts","../src/DatabaseServices/ViewportEntity/ViewportEntity2.ts","../src/DatabaseServices/Room/Entity/Wall/RoomWallLine.ts","../src/DatabaseServices/Room/ParseService/GetCurveParam.ts","../src/Nest/Common/Area.ts","../src/Nest/Common/Vector2.ts","../src/Nest/Common/Box2.ts","../src/Nest/Core/Path.ts","../src/Nest/Core/NestCache.ts","../src/Nest/Converter/Path2Polyline.ts","../src/Nest/Converter/Curves2Points.ts","../src/DatabaseServices/Room/ParseService/ParseRegionTextPos.ts","../src/DatabaseServices/Room/ParseService/RegionReplacement.ts","../src/DatabaseServices/Room/ParseService/RoomRegionParse.ts","../src/DatabaseServices/Room/ParseService/RoomWallExtendAndBreak.ts","../src/DatabaseServices/Room/ParseService/RoomWallParse.ts"],"sourcesContent":["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(m = new Matrix4): Matrix4\r\n {\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","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\r\nexport enum FractionDigitsType\r\n{\r\n zero = 0,\r\n one = 1,\r\n two = 2,\r\n three = 3,\r\n four = 4,\r\n five = 5,\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 PlaceFace = 8,//排版面\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\r\nexport function IsPhysical(renderType: RenderType)\r\n{\r\n return renderType === RenderType.Physical || renderType === RenderType.Physical2 || renderType === RenderType.PhysicalPrint || renderType === RenderType.Physical2Print;\r\n}\r\n","import { MeshBasicMaterial, MeshStandardMaterial, Texture } from 'three';\r\nimport { FractionDigitsType } from '../Common/SystemEnum';\r\nimport { ICursorConfig } from '../Editor/ICursorConfig';\r\nimport { RenderType } from '../GraphicsSystem/RenderType';\r\nimport { DrillingOption } from '../UI/Store/drillInterface';\r\n\r\nexport class IHostApplicationServices\r\n{\r\n DefaultMeshMaterial?: MeshBasicMaterial | MeshStandardMaterial;\r\n @ProxyValue isShowLightShadow: boolean = true;//灯光阴影 (除太阳光外)\r\n ShowHistoryLog: boolean = true;\r\n\r\n @ProxyValue Physical2EdgeColor = 7;//真实视图带线框的线框颜色 默认白色\r\n @ProxyValue ConceptualEdgeColor = 7;//概念线框的颜色\r\n\r\n DrawWallBottomFace = false;//绘制底面\r\n\r\n private __ProxyObject__: any;//代理对象,当代理对象存在时,获取内部的值指向代理对象\r\n static __ProxyKeys__: string[] = [];//代理对象,当代理对象存在时,获取内部的值指向代理对象\r\n get ProxyObject() { return this.__ProxyObject__; }\r\n set ProxyObject(obj: any)\r\n {\r\n this.__ProxyObject__ = obj;\r\n\r\n for (let key of IHostApplicationServices.__ProxyKeys__)\r\n {\r\n let v = this.__ProxyObject__[key];\r\n if (v === undefined)\r\n throw \"程序内部错误:未能代理变量!\";\r\n }\r\n }\r\n\r\n //#region _RenderType 渲染类型\r\n @ProxyValue _renderType: RenderType = RenderType.Wireframe;\r\n //#endregion\r\n\r\n //#region 排钻数据\r\n @ProxyValue DrillConfigs: Map = new Map;\r\n //#endregion\r\n\r\n //#region 开启排钻反应器\r\n @ProxyValue openDrillingReactor = true;\r\n //#endregion\r\n\r\n //#region 封边数据\r\n @ProxyValue sealingColorMap: [string, string][] = [];\r\n //#endregion\r\n\r\n //#endregion 显示纹路\r\n @ProxyValue showLines = false;\r\n //#endregion\r\n\r\n //#region\r\n @ProxyValue uese: string;\r\n //#endregion\r\n\r\n //#region 偏心轮过滤\r\n @ProxyValue forceFilterPxl: boolean = false;\r\n //#endregion\r\n\r\n @ProxyValue 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 statTk: false,//统计通孔排钻\r\n statSt: false,//统计双头排钻\r\n };\r\n\r\n @ProxyValue viewSize = {\r\n minViewHeight: 1e-3,\r\n maxViewHeight: 3e6,\r\n zoomSpeed: 0.6\r\n };\r\n\r\n @ProxyValue cursorSize: ICursorConfig = {\r\n D2: 1000,\r\n D3: 100,\r\n SquareSize: 10,\r\n };\r\n\r\n @ProxyValue dimTextHeight = 60;\r\n @ProxyValue lineWidth = 2; //打印线框\r\n @ProxyValue fractionDigitsType: FractionDigitsType = FractionDigitsType.two;\r\n\r\n private constructor() { };\r\n\r\n private static _SingleInstance: IHostApplicationServices;\r\n static GetInstance(): IHostApplicationServices\r\n {\r\n if (this._SingleInstance) return this._SingleInstance;\r\n this._SingleInstance = new IHostApplicationServices;\r\n return this._SingleInstance;\r\n }\r\n\r\n //加载贴图,将在index.ts中设置实现的函数\r\n async LoadDefaultExr(): Promise { return; }\r\n async LoadMetalEnv(): Promise { return; }\r\n}\r\n\r\nexport let HostApplicationServices = IHostApplicationServices.GetInstance();\r\n\r\n\r\n//将属性字段指向代理对象\r\nfunction ProxyValue(\r\n target: any,\r\n propertyKey: string,\r\n descriptor?: PropertyDecorator)\r\n{\r\n let privateKey = '__' + propertyKey;\r\n IHostApplicationServices.__ProxyKeys__.push(propertyKey);\r\n\r\n Object.defineProperty(target, propertyKey,\r\n {\r\n set: function (value)\r\n {\r\n if (this.ProxyObject)\r\n this.ProxyObject[propertyKey] = value;\r\n else\r\n this[privateKey] = value;\r\n },\r\n get: function ()\r\n {\r\n if (this.ProxyObject)\r\n return this.ProxyObject[propertyKey];\r\n return this[privateKey];\r\n },\r\n enumerable: true,\r\n configurable: true\r\n }\r\n );\r\n}\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","\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","import { Box3, Vector3 } 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 BoxIsSolid(this, 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\r\nlet size = new Vector3;\r\nexport function BoxIsSolid(box: Box3, minSize = 1)\r\n{\r\n box.getSize(size);\r\n return size.x > minSize && size.y > minSize && size.z > minSize;\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 * ! 仅在{数组}或者{值}类型上使用,如果是Object,请使用AutoRecordObject\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 // arr.length = value.length;\r\n // for (let i = 0; i < value.length; i++)\r\n // arr[i] = value[i];\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\r\n\r\nexport function AutoRecordObject(\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 Object)\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 return Reflect.get(target, key, receiver);\r\n }\r\n });\r\n }\r\n else\r\n {\r\n let obj = this[privateKey] as any;\r\n for (let key in value)\r\n {\r\n if (obj[key] !== value[key])\r\n {\r\n this.WriteAllObjectRecord();\r\n obj[key] = value[key];\r\n }\r\n }\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","\r\n//const UE_REX_DEL = /_.*/g;\r\n\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.replace(UE_REX_DEL, \"\"), C);\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 { 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 _Object?: T) { }\r\n\r\n get IsErase(): boolean\r\n {\r\n return !this._Object || this._Object.IsErase;\r\n }\r\n\r\n set Object(obj: T)\r\n {\r\n this._Object = obj;\r\n }\r\n get Object(): T | undefined\r\n {\r\n return this._Object;\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 { Vec3 } from '../Geometry/IVec3';\r\nimport { CADFactory } from './CADFactory';\r\nimport { CADObject } from './CADObject';\r\nimport { Database } from './Database';\r\nimport { Entity } from './Entity/Entity';\r\nimport { ISerialize } from './ISerialize';\r\nimport { ObjectId } from './ObjectId';\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 if (!obj)\r\n console.error(\"未注册类名:\", className);\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 WriteVec3(v3: Vec3)\r\n {\r\n this._datas.push(v3.x, v3.y, v3.z);\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)// id?.Object 为什么没有这么写? 这么写会精简图纸,但是不确定会不会引发新的问题? 其他地方有没有可能依赖这个特性实现一些功能? 比如排钻,如果排钻被删除,我们依然知道排钻的顺序?(曾经拥有?) 暂时不优化似乎也没事?\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 { 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","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 if (this.objectId)\r\n this.objectId.Object = undefined;//解除绑定(关联bug:绘制关联切割板后删除切割板,在pu时调用了这个,此时obj被删除但是还会被拷贝,导致错误崩溃)\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() as ObjectId;\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 let id = file.ReadObjectId() as ObjectId;\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) 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 f.database = this._db;//这样保证了关联的数据(例如材质)\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 { Factory } from './CADFactory';\r\nimport { CADFiler } from './CADFiler';\r\nimport { ISerialize } from './ISerialize';\r\n\r\n/**\r\n * 历史记录,用于撤销和重做的数据.\r\n */\r\n@Factory\r\nexport class HistorycRecord\r\n{\r\n //指定撤销时所需要的数据\r\n undoData: ISerialize;\r\n //制定重做时所需要的数据\r\n redoData: ISerialize;\r\n userData: ISerialize;\r\n\r\n //#region -------------------------File-------------------------\r\n //对象应该实现dataIn和DataOut的方法,为了对象的序列化和反序列化\r\n\r\n //对象从文件中读取数据,初始化自身\r\n ReadFile(file: CADFiler)\r\n {\r\n let ver = file.Read();\r\n this.undoData = file.ReadObject();\r\n this.redoData = file.ReadObject();\r\n this.userData = file.ReadObject();\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(1);\r\n file.WriteObject(this.undoData);\r\n file.WriteObject(this.redoData);\r\n file.WriteObject(this.userData);\r\n }\r\n //#endregion\r\n}\r\n","\r\nexport const USE_WORLD_UV = \"USE_WORLD_UV\";\r\nexport const U_WORLD_REP = \"u_w_rep\";\r\nexport const V_WORLD_REP = \"v_w_rep\";\r\n\r\nexport const U_WORLD_MOVE = \"u_w_move\";\r\nexport const V_WORLD_MOVE = \"v_w_move\";\r\n\r\nexport const U_WORLD_RO = \"v_w_ro\";\r\n\r\nexport const U_REP = \"u_rep\";\r\nexport const V_REP = \"v_rep\";\r\n\r\nexport const U_MOVE = \"u_move\";\r\nexport const V_MOVE = \"v_move\";\r\n\r\nexport const U_RO = \"v_ro\";\r\n","import { CADObject } from \"./CADObject\";\r\nimport { CADFiler } from \"./CADFiler\";\r\nimport { SymbolTable } from \"./SymbolTable\";\r\nimport { Status } from \"../Common/Status\";\r\n\r\nexport class SymbolTableRecord extends CADObject\r\n{\r\n protected name: string = \"\";\r\n get Name()\r\n {\r\n return this.name;\r\n }\r\n set Name(name: string)\r\n {\r\n if (this.name === name) return;\r\n this.WriteAllObjectRecord();\r\n if (this.Owner)\r\n {\r\n let symbolTable = this.Owner.Object as SymbolTable;\r\n if (!symbolTable.ChangeRecordName(this, name))\r\n return;\r\n }\r\n this.name = name;\r\n }\r\n\r\n Add(obj: CADObject, isCheckObjectCleanly = true): Status\r\n {\r\n return Status.False;\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.name);\r\n }\r\n\r\n ReadFile(file: CADFiler)\r\n {\r\n super.ReadFile(file);\r\n file.Read();\r\n this.name = file.Read();\r\n }\r\n\r\n}\r\n","import { SymbolTableRecord } from \"./SymbolTableRecord\";\r\nimport { Factory } from \"./CADFactory\";\r\n\r\n@Factory\r\nexport class MaterialTableRecord extends SymbolTableRecord\r\n{\r\n}\r\n","import { Color, FrontSide, MeshPhysicalMaterial, Side } from \"three\";\r\nimport { USE_WORLD_UV, U_WORLD_MOVE, U_WORLD_REP, U_WORLD_RO, V_WORLD_MOVE, V_WORLD_REP } from \"../Add-on/testEntity/USE_WORLD_UV\";\r\nimport { HostApplicationServices } from \"../ApplicationServices/HostApplicationServices\";\r\nimport { AutoRecord } from \"./AutoRecord\";\r\nimport { Factory } from \"./CADFactory\";\r\nimport { CADFiler } from \"./CADFiler\";\r\nimport { MaterialType } from \"./IMaterialDefaultParam\";\r\nimport { MaterialTableRecord } from \"./MaterialTableRecord\";\r\nimport { ObjectId } from \"./ObjectId\";\r\nimport { TextureTableRecord } from \"./Texture\";\r\n\r\n\r\nexport interface IGoodProps\r\n{\r\n name: string;\r\n material: string;\r\n color: string;\r\n}\r\n\r\nexport enum UVType\r\n{\r\n LocalUV = 0,\r\n WorldUV = 1,\r\n}\r\n\r\n\r\n//有关于pbr材质的属性解释说明: https://knowledge.autodesk.com/zh-hans/support/3ds-max/learn-explore/caas/CloudHelp/cloudhelp/2021/CHS/3DSMax-Lighting-Shading/files/GUID-18087194-B2A6-43EF-9B80-8FD1736FAE52-htm.html\r\n\r\n@Factory\r\nexport class PhysicalMaterialRecord extends MaterialTableRecord\r\n{\r\n @AutoRecord type: MaterialType = \"木纹\";\r\n @AutoRecord ref: string = \"\";//参考材质,当存在这个变量时,使用ue材质\r\n\r\n //基础色\r\n @AutoRecord color: string = \"#ffffff\";//基础色\r\n //#region 基础色附加 默认折叠\r\n @AutoRecord baseColorLuminance = 0;//基础色亮度 默认0 范围±1\r\n @AutoRecord baseColorLightColor = new Color(0.5, 0.5, 0.5);//基础色_亮部颜色 默认0.5灰色 范围RGB颜色\r\n @AutoRecord baseColorDarkColor = new Color(0, 0, 0);//基础色_暗部颜色 默认 0黑色 范围RGB颜色\r\n @AutoRecord baseColorSaturability = 1;//基础色饱和度 默认1 范围0-10;\r\n //#endregion\r\n\r\n //透明\r\n @AutoRecord transparent: boolean = false; //透明度 0-1\r\n @AutoRecord opacity: number = 1;//不透明度.\r\n //#region 透明度附加 默认折叠\r\n @AutoRecord opacityContrast = 1; //不透明度对比 默认1\r\n @AutoRecord opacityBorder = 1; //不透明度边界 默认1\r\n @AutoRecord opacityMaximum = 1; //不透明度最大值 默认1\r\n @AutoRecord opacityMinimum = 0.3; // 不透明度最小值 默认0.3\r\n //#endregion\r\n\r\n //折射\r\n @AutoRecord refraction = 1; //玻璃折射 默认1\r\n\r\n @AutoRecord matalness: number = 0;//金属性 0-1\r\n @AutoRecord bumpScale: number = 0;//凹凸比例 UE:法线强度 默认0 范围0-20\r\n @AutoRecord roughness: number = 0.2; //粗糙度 0-1\r\n @AutoRecord specular: number = 1; //高光 范围0-1\r\n @AutoRecord selfLuminous: number = 0;//自发光强度 0-200\r\n\r\n @AutoRecord useMap: boolean = true;\r\n @AutoRecord map: ObjectId;//纹理贴图\r\n //#region 法线贴图和粗糙贴图默认折叠\r\n @AutoRecord useBumpMap: boolean = true;\r\n @AutoRecord bumpMap: ObjectId;//凹凸贴图\r\n @AutoRecord useRoughnessMap: boolean = true;\r\n @AutoRecord roughnessMap: ObjectId;//粗糙贴图\r\n //#endregion\r\n\r\n @AutoRecord IsFull: boolean = false;//完全平铺板(此时修改板的uv)\r\n @AutoRecord side: Side = FrontSide; //双面\r\n\r\n @AutoRecord UVType = UVType.LocalUV;\r\n\r\n\r\n //#region 菲涅尔 默认折叠(绒毛?) 反射?(皮革 布料中可用)\r\n @AutoRecord fresnelPO = 1;//菲涅尔对比度 默认1 范围-1至10\r\n @AutoRecord fresnelST = 1;//菲涅尔强度 默认1 范围0至20\r\n @AutoRecord fresnelLuminance = 1;//菲涅尔亮度 默认1 范围0至20\r\n @AutoRecord fresnelLightColor = new Color(1, 1, 1);//菲涅尔亮部颜色 默认白色 范围RGB\r\n @AutoRecord fresnelDarkColor = new Color(1, 1, 1);//菲涅尔暗部颜色 默认白色 范围RGB\r\n //#endregion\r\n\r\n @AutoRecord sharpen = 1;//锐化 默认1 范围0-20 默认折叠\r\n\r\n get UseWorldUV() { return this.UVType === UVType.WorldUV; }\r\n set UseWorldUV(b: boolean) { this.UVType = b ? UVType.WorldUV : UVType.LocalUV; }\r\n\r\n @AutoRecord UWroldRep = 1;\r\n @AutoRecord VWroldRep = 1;\r\n @AutoRecord UWroldRo = 0;\r\n @AutoRecord UWorldMove = 0;\r\n @AutoRecord VWorldMove = 0;\r\n\r\n @AutoRecord depthTest: boolean = true;//深度测试(默认true)(弃用(不在UI上显示)\r\n\r\n private _goodsInfo: IGoodProps = {\r\n name: \"\",\r\n color: \"\",\r\n material: \"\",\r\n };\r\n private material = new MeshPhysicalMaterial({});\r\n async Update()\r\n {\r\n this.material[USE_WORLD_UV] = this.UseWorldUV;\r\n if (this.material[USE_WORLD_UV])\r\n {\r\n this.material[U_WORLD_REP] = this.UWroldRep;\r\n this.material[V_WORLD_REP] = this.VWroldRep;\r\n\r\n this.material[U_WORLD_RO] = this.UWroldRo;\r\n\r\n this.material[U_WORLD_MOVE] = this.UWorldMove;\r\n this.material[V_WORLD_MOVE] = this.VWorldMove;\r\n }\r\n\r\n if (!this.material.color)\r\n this.material.color = new Color(this.color);\r\n else\r\n this.material.color.set(this.color);\r\n\r\n this.material.transparent = this.transparent;\r\n\r\n if (this.type === \"玻璃\")\r\n {\r\n this.material.metalness = 0.2;\r\n this.material.reflectivity = Math.abs(this.refraction);\r\n } else\r\n this.material.metalness = this.matalness;\r\n\r\n this.material.side = this.side;\r\n\r\n this.material.opacity = Math.max(0.1, this.opacity);\r\n this.material.depthTest = this.depthTest;\r\n this.material.bumpScale = this.bumpScale;\r\n this.material.roughness = this.roughness;\r\n\r\n\r\n if (this.material.metalness > 0.9)\r\n HostApplicationServices.LoadMetalEnv().then(env =>\r\n {\r\n this.material.envMap = env;\r\n this.material.needsUpdate = true;\r\n });\r\n else\r\n HostApplicationServices.LoadDefaultExr().then(exr =>\r\n {\r\n this.material.envMap = exr;\r\n this.material.needsUpdate = true;\r\n });\r\n\r\n this.material.needsUpdate = true;\r\n if (this.useMap && this.map && !this.map.IsErase)\r\n {\r\n let map = this.map.Object as TextureTableRecord;\r\n let texture = map.GetThreeTexture();\r\n await map.WaitUpdate();\r\n this.material.map = texture;\r\n this.material.needsUpdate = true;\r\n }\r\n else\r\n this.material.map = undefined;\r\n\r\n if (this.type === \"自发光\")\r\n {\r\n this.material.emissiveIntensity = this.selfLuminous;\r\n this.material.emissive.copy(this.material.color);\r\n this.material.emissiveMap = this.material.map;\r\n }\r\n else\r\n {\r\n this.material.emissiveIntensity = 1;\r\n this.material.emissive.setRGB(0, 0, 0);\r\n this.material.emissiveMap = undefined;\r\n }\r\n\r\n if (this.useMap && this.useBumpMap && this.bumpMap && !this.bumpMap.IsErase)\r\n {\r\n let map = this.bumpMap.Object as TextureTableRecord;\r\n let texture = map.GetThreeTexture();\r\n await map.WaitUpdate();\r\n this.material.bumpMap = texture;\r\n this.material.needsUpdate = true;\r\n }\r\n else\r\n this.material.bumpMap = undefined;\r\n\r\n if (this.useMap && this.roughnessMap && this.roughnessMap && !this.roughnessMap.IsErase)\r\n {\r\n let map = this.roughnessMap.Object as TextureTableRecord;\r\n let texture = map.GetThreeTexture();\r\n await map.WaitUpdate();\r\n this.material.roughnessMap = texture;\r\n this.material.needsUpdate = true;\r\n }\r\n else\r\n this.material.roughnessMap = undefined;\r\n\r\n this.material.needsUpdate = true;\r\n\r\n this.AsyncUpdated();\r\n }\r\n get Material(): MeshPhysicalMaterial\r\n {\r\n return this.material;\r\n }\r\n get GoodsInfo()\r\n {\r\n return this._goodsInfo;\r\n }\r\n set GoodsInfo(info: IGoodProps)\r\n {\r\n if (info.color === this._goodsInfo.color\r\n && info.material === this._goodsInfo.material\r\n && info.name === this._goodsInfo.name\r\n )\r\n return;\r\n\r\n this.WriteAllObjectRecord();\r\n Object.assign(this._goodsInfo, info);\r\n }\r\n //#region -------------------------File-------------------------\r\n ReadFile(file: CADFiler)\r\n {\r\n super.ReadFile(file);\r\n let ver = file.Read();\r\n if (ver === 1)\r\n this.name = file.Read();\r\n this.color = file.Read();\r\n this.transparent = file.Read();\r\n this.matalness = file.Read();\r\n this.opacity = file.Read();\r\n this.depthTest = file.Read();\r\n this.map = file.ReadObjectId();\r\n this.bumpMap = file.ReadObjectId();\r\n this.bumpScale = file.Read();\r\n this.roughnessMap = file.ReadObjectId();\r\n this.roughness = file.Read();\r\n this.useMap = file.Read();\r\n this.useBumpMap = file.Read();\r\n this.useRoughnessMap = file.Read();\r\n if (ver <= 2)\r\n file.Read();\r\n if (ver > 2)\r\n {\r\n this._goodsInfo.name = file.Read();\r\n this._goodsInfo.material = file.Read();\r\n this._goodsInfo.color = file.Read();\r\n }\r\n\r\n if (ver > 3)\r\n this.IsFull = file.Read();\r\n\r\n if (ver > 4)\r\n {\r\n this.baseColorLuminance = file.Read();\r\n this.baseColorLightColor.r = file.Read();\r\n this.baseColorLightColor.g = file.Read();\r\n this.baseColorLightColor.b = file.Read();\r\n\r\n this.baseColorDarkColor.r = file.Read();\r\n this.baseColorDarkColor.g = file.Read();\r\n this.baseColorDarkColor.b = file.Read();\r\n\r\n this.baseColorSaturability = file.Read();\r\n\r\n this.opacityContrast = file.Read();\r\n this.opacityBorder = file.Read();\r\n this.opacityMaximum = file.Read();\r\n this.opacityMinimum = file.Read();\r\n\r\n this.specular = file.Read();\r\n this.selfLuminous = file.Read();\r\n\r\n this.fresnelPO = file.Read();\r\n this.fresnelST = file.Read();\r\n this.fresnelLuminance = file.Read();\r\n\r\n this.fresnelLightColor.r = file.Read();\r\n this.fresnelLightColor.g = file.Read();\r\n this.fresnelLightColor.b = file.Read();\r\n\r\n this.fresnelDarkColor.r = file.Read();\r\n this.fresnelDarkColor.g = file.Read();\r\n this.fresnelDarkColor.b = file.Read();\r\n\r\n this.sharpen = file.Read();\r\n\r\n if (ver > 5)\r\n this.UVType = file.Read();\r\n\r\n if (ver > 6)\r\n this.type = file.Read();\r\n if (ver > 7)\r\n this.ref = file.Read();\r\n\r\n if (ver > 8)\r\n {\r\n this.UWroldRep = file.Read();\r\n this.VWroldRep = file.Read();\r\n this.UWroldRo = file.Read();\r\n this.UWorldMove = file.Read();\r\n this.VWorldMove = file.Read();\r\n }\r\n if (ver > 9)\r\n {\r\n this.refraction = file.Read();\r\n this.side = file.Read();\r\n }\r\n }\r\n\r\n this.Update();\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.color);\r\n file.Write(this.transparent);\r\n file.Write(this.matalness);\r\n file.Write(this.opacity);\r\n file.Write(this.depthTest);\r\n file.WriteHardObjectId(this.map);\r\n file.WriteHardObjectId(this.bumpMap);\r\n file.Write(this.bumpScale);\r\n file.WriteHardObjectId(this.roughnessMap);\r\n file.Write(this.roughness);\r\n file.Write(this.useMap);\r\n file.Write(this.useBumpMap);\r\n file.Write(this.useRoughnessMap);\r\n file.Write(this._goodsInfo.name);\r\n file.Write(this._goodsInfo.material);\r\n file.Write(this._goodsInfo.color);\r\n file.Write(this.IsFull);\r\n\r\n //ver 5\r\n file.Write(this.baseColorLuminance);\r\n file.Write(this.baseColorLightColor.r);\r\n file.Write(this.baseColorLightColor.g);\r\n file.Write(this.baseColorLightColor.b);\r\n\r\n file.Write(this.baseColorDarkColor.r);\r\n file.Write(this.baseColorDarkColor.g);\r\n file.Write(this.baseColorDarkColor.b);\r\n\r\n file.Write(this.baseColorSaturability);\r\n\r\n file.Write(this.opacityContrast);\r\n file.Write(this.opacityBorder);\r\n file.Write(this.opacityMaximum);\r\n file.Write(this.opacityMinimum);\r\n\r\n file.Write(this.specular);\r\n file.Write(this.selfLuminous);\r\n\r\n file.Write(this.fresnelPO);\r\n file.Write(this.fresnelST);\r\n file.Write(this.fresnelLuminance);\r\n\r\n file.Write(this.fresnelLightColor.r);\r\n file.Write(this.fresnelLightColor.g);\r\n file.Write(this.fresnelLightColor.b);\r\n\r\n file.Write(this.fresnelDarkColor.r);\r\n file.Write(this.fresnelDarkColor.g);\r\n file.Write(this.fresnelDarkColor.b);\r\n\r\n file.Write(this.sharpen);\r\n\r\n //ver 6\r\n file.Write(this.UVType);\r\n\r\n //ver 7\r\n file.Write(this.type);\r\n\r\n //ver8\r\n file.Write(this.ref);\r\n\r\n //ver9\r\n file.Write(this.UWroldRep);\r\n file.Write(this.VWroldRep);\r\n file.Write(this.UWroldRo);\r\n file.Write(this.UWorldMove);\r\n file.Write(this.VWorldMove);\r\n\r\n //ver10\r\n file.Write(this.refraction);\r\n file.Write(this.side);\r\n }\r\n //#endregion\r\n}\r\n","import { 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 { Box3Ext } from '../../Geometry/Box';\r\nimport { equaln, equalv3, GetBox, IdentityMtx4, UpdateBoundingSphere } from '../../Geometry/GeUtils';\r\nimport { Vec3 } from '../../Geometry/IVec3';\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 { HistorycRecord } from '../HistorycRecord';\r\nimport { ISerialize } from '../ISerialize';\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 HasEdgeRenderType = false;//拥有封边检查绘制模式\r\n protected HasPlaceFaceRenderType = false;//拥有排版面绘制模式\r\n\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 CacheDrawObject() { return this._CacheDrawObject; }\r\n\r\n get SpaceCSNoClone() { return this._SpaceOCS; }\r\n get SpaceOCS()\r\n {\r\n return this._SpaceOCS.clone();\r\n }\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 get SpaceOCSInv()\r\n {\r\n return new Matrix4().getInverse(this._SpaceOCS);\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 CopyInRenderTpye: RenderType; //记录在哪种RenderType下copy的\r\n set Material(materialId: ObjectId)\r\n {\r\n if (materialId === this._MaterialId) return;\r\n\r\n if (this._db && materialId?.Object)//我们放宽校验,当图形未加入到图纸时,我们允许它任意设置材质\r\n {\r\n if (!(materialId.Object instanceof PhysicalMaterialRecord))\r\n throw \"程序内部错误!设置材质错误:该对象不是材质\";\r\n\r\n if (materialId.Object.Db !== this.Db)\r\n throw \"程序内部错误!设置材质错误:不同图纸间材质\";\r\n }\r\n\r\n this.WriteAllObjectRecord();\r\n this._MaterialId = materialId;\r\n for (let [type, obj] of this._CacheDrawObject)\r\n this.UpdateDrawObjectMaterial(type, obj);\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 let undoRec = this.UndoRecord();\r\n if (undoRec)\r\n {\r\n let hisRec = new HistorycRecord();\r\n hisRec.redoData = new EntityColorHistoryRecord(color);\r\n hisRec.undoData = new EntityColorHistoryRecord(this._Color);\r\n undoRec.WriteObjectHistoryPath(this, hisRec);\r\n }\r\n\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()\r\n {\r\n for (let [, obj] of this._CacheDrawObject)\r\n return GetBox(obj);\r\n return GetBox(this.GetDrawObjectFromRenderType());\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 Move(v: Vec3)\r\n {\r\n if (equaln(v.x, 0) && equaln(v.y, 0) && equaln(v.z, 0)) return;\r\n\r\n this.WriteAllObjectRecord();\r\n\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 this._SpaceOCS.elements[12] += v.x;\r\n this._SpaceOCS.elements[13] += v.y;\r\n this._SpaceOCS.elements[14] += v.z;\r\n this.Update(UpdateDraw.Matrix);\r\n return this;\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 get Z() { return this._Matrix.elements[14]; }\r\n set Z(z: number)\r\n {\r\n if (equaln(this.Z, z)) return;\r\n this.Move({ x: 0, y: 0, z: z - this.Z });\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.Move({ x: 0, y: 0, z: -this.Z });\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\r\n protected get CaseShadow()\r\n {\r\n if (!this.MeshMaterial) return true;\r\n return !this.MeshMaterial.transparent || this.MeshMaterial.opacity === 1;\r\n }\r\n\r\n protected get ReceiveShadow()\r\n {\r\n return this.CaseShadow;\r\n }\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 = HostApplicationServices._renderType;\r\n let obj = this.GetDrawObjectFromRenderType(HostApplicationServices._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 if (renderType === RenderType.Edge && !this.HasEdgeRenderType)\r\n renderType = RenderType.Conceptual;\r\n if (renderType === RenderType.PlaceFace && !this.HasPlaceFaceRenderType)\r\n renderType = RenderType.Wireframe;\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 {\r\n this.DeferUpdate();\r\n // if (this.__ReadFileIng__) //!警告\r\n // console.error(\"在读取文件时更新实体的显示!\");\r\n }\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(HostApplicationServices._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 static _xa = new Vector3;\r\n static _ya = new Vector3;\r\n static _za = new Vector3;\r\n /**\r\n * 使用统一的方法设置对象的矩阵.\r\n * 需要对缩放矩形进行重载.避免对象矩阵不是单位矩阵\r\n */\r\n ApplyMatrix(m: Matrix4): this\r\n {\r\n this.WriteAllObjectRecord();\r\n\r\n m.extractBasis(Entity._xa, Entity._ya, Entity._za);\r\n if (\r\n equaln(Entity._xa.lengthSq(), 1, 1e-4) &&\r\n equaln(Entity._ya.lengthSq(), 1, 1e-4) &&\r\n equaln(Entity._za.lengthSq(), 1, 1e-4)\r\n )\r\n {\r\n this._Matrix.multiplyMatrices(m, this._Matrix);\r\n this._SpaceOCS.multiplyMatrices(m, this._SpaceOCS);\r\n if (!equalv3(Entity._xa.cross(Entity._ya).normalize(), Entity._za))\r\n this.ApplyMirrorMatrix(m);\r\n }\r\n else\r\n this.ApplyScaleMatrix(m);\r\n this.Update(UpdateDraw.Matrix);\r\n return this;\r\n }\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 /**\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 GetGripPoints(): Vector3[]\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 GetStretchPoints(): Array\r\n {\r\n return [];\r\n }\r\n\r\n /**\r\n * 拉伸夹点,用于Stretch命令\r\n * @param {Array} indexList 拉伸点索引列表.\r\n * @param {Vector3} vec 移动向量\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 override 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.__ReadFileIng__ = false;\r\n this.Update();\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 {\r\n let id = file.ReadHardObjectId();\r\n if (id) this.ProcessingGroupList.push(id);\r\n }\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 if (undoData instanceof EntityColorHistoryRecord)\r\n this.ColorIndex = undoData.color;\r\n }\r\n\r\n override 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\r\n@Factory\r\nexport class EntityColorHistoryRecord implements ISerialize\r\n{\r\n constructor(public color: number) { }\r\n ReadFile(file: CADFiler): this\r\n {\r\n this.color = file.Read();\r\n return this;\r\n }\r\n WriteFile(file: CADFiler): this\r\n {\r\n file.Write(this.color);\r\n return this;\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, defaultParam);\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 HistoryWs = \"HistoryWs\",\r\n}\r\n","import { Object3D } from \"three\";\r\nimport { Entity } from \"../DatabaseServices/Entity/Entity\";\r\nimport { ObjectId } from \"../DatabaseServices/ObjectId\";\r\nimport { equaln } from \"../Geometry/GeUtils\";\r\nimport { safeEval } from \"./eval\";\r\nimport { StoreageKeys } from \"./StoreageKeys\";\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 (Math.abs(v) < Math.pow(0.1, fractionDigits) * 0.49) return \"0\";\r\n if (!fractionDigits)\r\n return v.toFixed(0);\r\n else\r\n return v.toFixed(fractionDigits).replace(/[.]?0+$/, \"\");\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\nimport { Vec3 } from './IVec3';\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\nexport const ZAxisN = new Vector3(0, 0, -1);\r\n\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: Vec3, v2: Vec3, 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 * @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 * @param {Vector3} v1\r\n * @param {Vector3} v2\r\n * @param {Vector3} [ref] 参考向量,如果为世界坐标系则为0,0,1\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\nlet tempBox = new Box3();\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 = false): 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 //@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 tempBox.copy(geo.boundingBox).applyMatrix4(o.matrixWorld);\r\n box.union(tempBox);\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 {\r\n geo.computeBoundingSphere();\r\n geo.computeBoundingBox();//样条线更新位置和更新点位置后,无法被选中\r\n }\r\n}\r\n\r\n\r\nexport type compareVectorFn = (v1: Vector, v2: Vector) => 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 ComparePointFnGenerate(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: Vector): 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, Quaternion, 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} mtx 矩阵\r\n * @param {number} col 列索引,0x 1y 2z 3org\r\n * @param {Vector3} v 向量或点\r\n */\r\nexport function SetMtxVector(mtx: Matrix4, col: number, v: Vector3)\r\n{\r\n let index = col * 4;\r\n mtx.elements[index] = v.x;\r\n mtx.elements[index + 1] = v.y;\r\n mtx.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 scaleMtx = new Matrix4().makeScale(scale, scale, scale);\r\n if (center) scaleMtx.setPosition(center.clone().multiplyScalar(1 - scale));\r\n return scaleMtx;\r\n}\r\n\r\n//缩放矩阵 不等比例\r\nexport function MakeScaleMatrix(scaleX: number, scaleY: number, scaleZ: number, center?: Vector3)\r\n{\r\n let scaleMtx = new Matrix4().makeScale(scaleX, scaleY, scaleZ);\r\n if (center) scaleMtx.setPosition(center.clone().applyMatrix4(scaleMtx).sub(center).negate());\r\n return scaleMtx;\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, index = 1): Matrix4\r\n{\r\n let cs = new CoordinateSystem().applyMatrix4(mtx);\r\n if (index === 0)\r\n cs.XAxis.negate();\r\n else if (index === 1)\r\n cs.YAxis.negate();\r\n else\r\n cs.ZAxis.negate();\r\n\r\n return cs.getMatrix4(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 cacheVec.z = 0;\r\n\r\n cacheVec.applyMatrix4(mtx);\r\n\r\n vec.x = cacheVec.x;\r\n vec.y = cacheVec.y;\r\n}\r\n\r\nexport function MakeMirrorMtx(planeNormal: Vector3, pos?: Vector3)\r\n{\r\n let mirrorMtx = new Matrix4();\r\n let xAxis = new Vector3(1 - 2 * planeNormal.x ** 2, -2 * planeNormal.x * planeNormal.y, -2 * planeNormal.x * planeNormal.z);\r\n let yAxis = new Vector3(-2 * planeNormal.x * planeNormal.y, 1 - 2 * planeNormal.y ** 2, -2 * planeNormal.y * planeNormal.z);\r\n let zAxis = new Vector3(-2 * planeNormal.x * planeNormal.z, -2 * planeNormal.y * planeNormal.z, 1 - 2 * planeNormal.z ** 2);\r\n mirrorMtx.makeBasis(xAxis, yAxis, zAxis);\r\n\r\n if (pos)\r\n mirrorMtx.setPosition(pos.clone().applyMatrix4(mirrorMtx).sub(pos).negate());\r\n\r\n return mirrorMtx;\r\n}\r\n\r\n/**\r\n * 对向量进行方向变换 (如果是pos 请使用pos.applyMatrix4)\r\n * @param vec 向量\r\n * @param m 矩阵\r\n * @returns vec\r\n */\r\nexport function TransformVector(vec: T, m: Matrix4): T\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\nexport function MakeRotateMatrix4(cen: Vector3, axis: Vector3, angle: number, roMtx: Matrix4 = new Matrix4)\r\n{\r\n roMtx.makeRotationAxis(axis, angle);\r\n roMtx.setPosition(cen.clone().applyMatrix4(roMtx).negate().add(cen));\r\n return roMtx;\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\nlet p = new Vector3;\r\nlet s = new Vector3;\r\nlet q = new Quaternion;\r\n//归一化矩阵 避免轴不是非标准向量\r\nexport function NormalMatrix(mtx: Matrix4)\r\n{\r\n mtx.decompose(p, q, s);\r\n s.set(1, 1, 1);\r\n mtx.compose(p, q, s);\r\n return mtx;\r\n}\r\n\r\n//四舍五入\r\nexport function RoundMatrix(mtx: Matrix4, fuzz = 1e-6)\r\n{\r\n let el = mtx.elements;\r\n for (let i = 0; i < 16; i++)\r\n {\r\n let re = Math.round(el[i]);\r\n if (equaln(re, el[i], fuzz))\r\n el[i] = re;\r\n }\r\n return mtx;\r\n}\r\n\r\nexport const tempMatrix1 = new Matrix4;\r\n\r\nexport const ZMirrorMatrix = MakeMirrorMtx(new Vector3(0, 0, 1));\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 { MathUtils, Vector3 } from \"three\";\r\nimport { equaln, YAxis, ZAxis } 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","/**\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\nexport function FindLast(arr: T[], searchFn: (item: T) => boolean)\r\n{\r\n for (let i = arr.length; i--;)\r\n if (searchFn(arr[i]))\r\n return i;\r\n return -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] 校验对象相等函数,如果相等 则删除e2\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//因为多段线的数据关系,我们需要保留下一段的数据\r\nexport function ArrayRemoveDupSavePre(baseCompareArray: any[], arrs: (any[])[])\r\n{\r\n let index = 0;//set index\r\n let pre = 0;//前一个点\r\n for (let next = 1; next <= baseCompareArray.length; next++)\r\n {\r\n if (baseCompareArray[pre] !== baseCompareArray[next])\r\n {\r\n baseCompareArray[index] = baseCompareArray[pre];\r\n\r\n for (let arr of arrs)\r\n arr[index] = arr[pre];\r\n\r\n index++;\r\n }\r\n\r\n pre++;\r\n }\r\n\r\n baseCompareArray.length = index;\r\n for (let arr of arrs)\r\n arr.length = index;\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","import { EllipseCurve, Shape, Vector2 } from \"three\";\r\nimport { clamp } from \"../Common/Utils\";\r\nimport { equalv2 } from \"../Geometry/GeUtils\";\r\nimport { Arc } from \"./Entity/Arc\";\r\n\r\nlet tempArc: Arc;\r\nexport class Shape2 extends Shape\r\n{\r\n getPoints(divisions: number = 12, optimizeArc = true): Vector2[]\r\n {\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] as EllipseCurve;\r\n let resolution = divisions;\r\n\r\n //@ts-ignore\r\n if (curve && curve.isEllipseCurve)\r\n {\r\n if (optimizeArc)\r\n {\r\n if (!tempArc) tempArc = new Arc;\r\n else tempArc.ClearDraw();\r\n\r\n tempArc.IsClockWise = curve.aClockwise;\r\n tempArc.StartAngle = curve.aStartAngle;\r\n tempArc.EndAngle = curve.aEndAngle;\r\n tempArc.Radius = Math.abs(curve.xRadius);\r\n\r\n //根据圆弧的角度,来确定绘制个数\r\n let count = Math.max(2, Math.abs(Math.ceil((tempArc.AllAngle) / Math.PI)) * divisions);\r\n\r\n resolution = clamp(Math.ceil(tempArc.Length / 20), count, 60);\r\n }\r\n else\r\n resolution = divisions * 2;\r\n }\r\n else\r\n {\r\n //@ts-ignore\r\n resolution = (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\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 { Shape, Vector2 } from 'three';\r\nimport { Shape2 } from '../DatabaseServices/Shape2';\r\nimport { angle, equaln, equalv2, polar } from './GeUtils';\r\n\r\n//解析二维圆弧\r\nclass Arc2d\r\n{\r\n _StartAn: number;\r\n _EndAn: number;\r\n _Center: Vector2;\r\n _Radius: number;\r\n constructor(p1: Vector2, p2: Vector2, bul: number)\r\n {\r\n p1 = p1.clone();\r\n p2 = p2.clone();\r\n\r\n //a (* 2 (atan b))\r\n let a = Math.atan(bul) * 2;\r\n //r (/ (distance p1 p2) 2 (sin a))\r\n let r = p1.distanceTo(p2) / 2 / Math.sin(a);\r\n //c (polar p1 (+ (- (/ pi 2) a) (angle p1 p2)) r)\r\n let c = polar(p1.clone(), Math.PI / 2 - a + angle(p2.clone().sub(p1)), r);\r\n\r\n this._Radius = Math.abs(r);\r\n\r\n this._StartAn = angle(p1.sub(c));\r\n this._EndAn = angle(p2.sub(c));\r\n\r\n this._Center = c;\r\n }\r\n}\r\n\r\n//创建轮廓 通过点表和凸度\r\nexport function CreatePolylinePath(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 prePt = pts[i];\r\n let nextPt = pts[i + 1];\r\n if (equaln(buls[i], 0, 1e-8) || equalv2(prePt, nextPt, 1e-2))\r\n {\r\n shape.lineTo(nextPt.x, nextPt.y);\r\n }\r\n else\r\n {\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(prePt, 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\nexport function CreateShapeFromPoints()\r\n{\r\n\r\n}\r\n","import { FrontSide, 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, side = FrontSide): ShaderMaterialParameters\r\n{\r\n return {\r\n uniforms: {\r\n \"SurfaceColor\": { value: color }\r\n },\r\n \r\n side,\r\n polygonOffset: true,\r\n polygonOffsetFactor: 1,\r\n polygonOffsetUnits: 1\r\n };\r\n}\r\n","import { Color, DoubleSide, FrontSide, LineBasicMaterial, LineDashedMaterial, MeshBasicMaterial, ShaderMaterial, Side, Vector2, Vector3 } from 'three';\r\nimport { LineMaterial } from 'three/examples/jsm/lines/LineMaterial';\r\nimport { HostApplicationServices } from '../ApplicationServices/HostApplicationServices';\r\nimport { GetGoodShaderSimple } from '../GLSL/GoochShader';\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 UseLogBuf = false;\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 private static _WallLineMtlMap = new Map();\r\n static GetWallLineMtl(color: number): LineDashedMaterial\r\n {\r\n if (this._WallLineMtlMap.has(color)) return this._WallLineMtlMap.get(color);\r\n let mtl = new LineDashedMaterial({\r\n color: this.GetColor(color),\r\n dashSize: 10,\r\n gapSize: 10,\r\n });\r\n this._WallLineMtlMap.set(color, mtl);\r\n return mtl;\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, side: Side = FrontSide)\r\n {\r\n let key = `${color}${side}`;\r\n if (this._ConceptualMaterial.has(key))\r\n return this._ConceptualMaterial.get(key);\r\n\r\n let shaderParams = GetGoodShaderSimple(new Vector3().fromArray(this.GetColor(color).toArray()), side);\r\n let mtl = new ShaderMaterial(shaderParams);\r\n this._ConceptualMaterial.set(key, mtl);\r\n return mtl;\r\n }\r\n\r\n static UpdateConceptualMaterial(useLogBuf: boolean)\r\n {\r\n \r\n }\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 \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, color: this.GetColor(color) });\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 mtl = this._BasicTransparentMaterialMap2.get(key);\r\n if (mtl) return mtl;\r\n mtl = new MeshBasicMaterial({ transparent: true, opacity: opacity, color: this.GetColor(color) });\r\n this._BasicTransparentMaterialMap2.set(key, mtl);\r\n return mtl;\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 private static _ConceptualEdgeMaterial: LineBasicMaterial;\r\n static GetConceptualEdgeMaterial()\r\n {\r\n if (!this._ConceptualEdgeMaterial)\r\n this._ConceptualEdgeMaterial = new LineBasicMaterial({ color: this.GetColor(HostApplicationServices.ConceptualEdgeColor).clone(), side: DoubleSide });\r\n\r\n return this._ConceptualEdgeMaterial;\r\n }\r\n static UpdateConceptualEdgeMaterial()\r\n {\r\n if (this._ConceptualEdgeMaterial)\r\n this._ConceptualEdgeMaterial.color.copy(this.GetColor(HostApplicationServices.ConceptualEdgeColor));\r\n }\r\n private static _Physical2EdgeMaterial: LineBasicMaterial;\r\n static GetPhysical2EdgeMaterial()\r\n {\r\n if (!this._Physical2EdgeMaterial)\r\n this._Physical2EdgeMaterial = new LineBasicMaterial({ color: this.GetColor(HostApplicationServices.Physical2EdgeColor).clone(), side: DoubleSide });\r\n\r\n return this._Physical2EdgeMaterial;\r\n }\r\n static UpdatePhysical2EdgeMaterial()\r\n {\r\n if (this._Physical2EdgeMaterial)\r\n this._Physical2EdgeMaterial.color.copy(this.GetColor(HostApplicationServices.Physical2EdgeColor));\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","import { BufferGeometry, Geometry } from \"three\";\r\n\r\nexport const BufferGeometry2GeometryCacheMap = new WeakMap();\r\nglobalThis.fuck = BufferGeometry2GeometryCacheMap;\r\n","import { BufferAttribute, BufferGeometry, Shape, ShapeGeometry, Vector3 } 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 * @param ignoreBoxError 忽略更新点后盒子错误的问题\r\n * @returns 当成功时返回true,更新失败时返回false\r\n */\r\n export function UpdatePts(geo: BufferGeometry, pts: Vector3[], ignoreBoxError = false): 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 || (ignoreBoxError && 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//此时这个Geometry.Dispose后在进行重新生成会比较后,否则属性没有被回收导致内存泄漏\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 { BufferGeometry, Curve as TCurve, Line, Line as TLine, Material, Object3D, Vector3 } from 'three';\r\nimport { Line2 } from 'three/examples/jsm/lines/Line2';\r\nimport { LineGeometry } from 'three/examples/jsm/lines/LineGeometry';\r\nimport { arrayRemoveDuplicateBySort, arraySortByNumber } from '../../Common/ArrayExt';\r\nimport { ColorMaterial } from '../../Common/ColorPalette';\r\nimport { Status } from '../../Common/Status';\r\nimport { BufferGeometryUtils } from '../../Geometry/BufferGeometryUtils';\r\nimport { equaln, equalv3, updateGeometry } 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 get Shape(): TCurve { throw \"未实现\"; }\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 * @param {(number | Vector3)} param\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 */\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 override OnlyRenderType = true;\r\n\r\n //样条线重载了这个,得到了更高的绘制精度\r\n protected GetDrawCount() { return 30; }\r\n\r\n /**\r\n * @param {RenderType} [renderType=RenderType.Wireframe]\r\n */\r\n protected override InitDrawObject(renderType: RenderType = RenderType.Wireframe): Object3D\r\n {\r\n let pts = this.Shape.getPoints(this.GetDrawCount());\r\n if (renderType === RenderType.WireframePrint)\r\n {\r\n let array: number[] = [];\r\n for (let p of pts) array.push(p.x, p.y, 0);\r\n let geometry = new LineGeometry().setPositions(array);\r\n return new Line2(geometry, ColorMaterial.PrintLineMatrial);\r\n }\r\n let geo = new BufferGeometry().setFromPoints(pts);\r\n return new TLine(geo, ColorMaterial.GetLineMaterial(this._Color));\r\n }\r\n\r\n /**\r\n * 重载:更新绘制的实体\r\n * @param {RenderType} type\r\n * @param {Object3D} obj\r\n */\r\n override UpdateDrawObject(type: RenderType, obj: Object3D)\r\n {\r\n let pts = this.Shape.getPoints(this.GetDrawCount());\r\n let plObj = obj as TLine;\r\n let geo = plObj.geometry as BufferGeometry | LineGeometry;\r\n if (geo instanceof LineGeometry)\r\n {\r\n let array: number[] = [];\r\n for (let p of pts) array.push(p.x, p.y, 0);\r\n (geo as LineGeometry).setPositions(array);\r\n }\r\n else\r\n {\r\n //@ts-ignore\r\n for (let p of pts) p.z = 0;\r\n if (!BufferGeometryUtils.UpdatePts(geo, pts as unknown as Vector3[]))\r\n updateGeometry(plObj, new BufferGeometry().setFromPoints(pts));\r\n }\r\n }\r\n\r\n /**\r\n * 重载:更新实体材质\r\n */\r\n override 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 override 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","export enum DragPointType\r\n{\r\n Grip = 0,\r\n Stretch = 1\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, 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 { Box3Ext } from '../../Geometry/Box';\r\nimport { BufferGeometryUtils } from '../../Geometry/BufferGeometryUtils';\r\nimport { AsVector2, equaln, equalv3, isParallelTo, MoveMatrix, updateGeometry } 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 let ocsInv = this.OCSInv;\r\n let sp = this.StartPoint.setZ(0).applyMatrix4(ocsInv);\r\n let ep = this.EndPoint.setZ(0).applyMatrix4(ocsInv);\r\n this._StartPoint.copy(sp);\r\n this._EndPoint.copy(ep);\r\n this.Update();\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\r\n InitDrawObject(renderType: RenderType = RenderType.Wireframe): Object3D\r\n {\r\n let pts = [this._StartPoint, this._EndPoint];\r\n if (renderType === RenderType.WireframePrint)\r\n {\r\n let array: number[] = [];\r\n for (let p of pts) array.push(p.x, p.y, p.z);\r\n let geometry = new LineGeometry().setPositions(array);\r\n return new Line2(geometry, ColorMaterial.PrintLineMatrial);\r\n }\r\n let geo = new BufferGeometry().setFromPoints(pts);\r\n return new TLine(geo, ColorMaterial.GetLineMaterial(this._Color));\r\n }\r\n\r\n /**\r\n * 重载:更新绘制的实体\r\n * @param {RenderType} type\r\n * @param {Object3D} obj\r\n */\r\n UpdateDrawObject(type: RenderType, obj: Object3D)\r\n {\r\n let pts = [this._StartPoint, this._EndPoint];\r\n let plObj = obj as TLine;\r\n let geo = plObj.geometry as BufferGeometry | LineGeometry;\r\n if (geo instanceof LineGeometry)\r\n {\r\n let array: number[] = [];\r\n for (let p of pts) array.push(p.x, p.y, p.z);\r\n (geo as LineGeometry).setPositions(array);\r\n }\r\n else\r\n {\r\n if (!BufferGeometryUtils.UpdatePts(geo, pts as unknown as Vector3[]))\r\n updateGeometry(plObj, new BufferGeometry().setFromPoints(pts));\r\n }\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.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(): Vector3[]\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 || curve.constructor.name === \"RoomWallLine\")\r\n {\r\n return IntersectLineAndLine(this, curve as Line, intType, tolerance);\r\n }\r\n if (curve instanceof Arc || curve.constructor.name === \"RoomWallArc\")\r\n {\r\n return IntersectLineAndArc(this, curve as Arc, 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.SetStartEndPoint(\r\n pts[i],\r\n pts[i + 1]\r\n );\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 || cu.constructor.name === \"RoomWallLine\")\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.SetStartEndPoint(\r\n this.StartPoint.add(derv),\r\n this.EndPoint.add(derv)\r\n );\r\n return [newLine];\r\n }\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 /**\r\n * 返回对象在自身坐标系下的Box\r\n */\r\n get BoundingBoxInOCS(): Box3Ext\r\n {\r\n return new Box3Ext().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 override _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 override 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.OCSNoClone);\r\n }\r\n\r\n get EndPoint(): Vector3\r\n {\r\n return this._EndPoint.clone().applyMatrix4(this.OCSNoClone);\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 SetStartEndPoint(s: Vector3, e: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n let inv = this.OCSInv;\r\n this._StartPoint.copy(s).applyMatrix4(inv);\r\n this._EndPoint.copy(e).applyMatrix4(inv);\r\n this.Update();\r\n }\r\n\r\n //#endregion\r\n}\r\n","import { MathUtils, Matrix3, Matrix4, Shape, Vector3 } from 'three';\r\nimport { arrayLast, arrayRemoveDuplicateBySort } from '../../Common/ArrayExt';\r\nimport { getArcOrCirNearPts, getDeterminantFor2V, getTanPtsOnEllipse, Pts2Polyline } from '../../Common/CurveUtils';\r\nimport { Status } from '../../Common/Status';\r\nimport { ObjectSnapMode } from '../../Editor/ObjectSnapMode';\r\nimport { angle, angleTo, AsVector2, equaln, equalv3, MoveMatrix, rotatePoint } from '../../Geometry/GeUtils';\r\nimport { IntersectEllipse, IntersectEllipseAndCircleOrArc, IntersectEllipseAndLine, IntersectOption, IntersectPolylineAndCurve, reverseIntersectOption } from '../../GraphicsSystem/IntersectWith';\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 { Line } from './Line';\r\nimport { Polyline } from './Polyline';\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\r\n protected ApplyScaleMatrix(m: Matrix4): this\r\n {\r\n //或许我们应该在缩放一下轴尺寸 但是先不做了\r\n let p = this.Position;\r\n p.applyMatrix4(m);\r\n this.Position = p;\r\n return this;\r\n }\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\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 vec.set(0, -1, 0);\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\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.ColorIndex = this.ColorIndex;\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 { 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, equalv2, MoveMatrix, polar, ZeroVec } from '../../Geometry/GeUtils';\r\nimport { Orbit } from '../../Geometry/Orbit';\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, fuzz = 1e-5)\r\n {\r\n return equaln(pt.distanceToSquared(this.Center), this._Radius * this._Radius, fuzz);\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 BoundingBoxInOCS(): Box3Ext\r\n {\r\n return new Box3Ext(new Vector3(-this.Radius, -this.Radius), new Vector3(this.Radius, this.Radius));\r\n }\r\n\r\n get BoundingBox(): Box3Ext\r\n {\r\n let z = this.Normal;\r\n let x = new Vector3;\r\n let y = new Vector3;\r\n Orbit.ComputUpDirection(z, y, x);\r\n let m = new Matrix4().makeBasis(x, y, z).setPosition(this.Center);\r\n //使用任意轴坐标系 以便我们正确的对齐世界坐标系\r\n return this.BoundingBoxInOCS.applyMatrix4(m);\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);\r\n if (equalv2(pt, ZeroVec, 1e-8))\r\n return this.GetPointAtParam(0);\r\n\r\n let a = Math.atan2(pt.y, pt.x);\r\n return polar(new Vector3, a, this._Radius).applyMatrix4(this._Matrix);\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","import { Vec2, Vector2, Vector3 } from \"three\";\r\nimport { arrayLast } from \"../Common/ArrayExt\";\r\nimport { orientation } from \"../Geometry/DoIntersect\";\r\nimport { AsVector2, AsVector3, equaln, equalv2 } from \"../Geometry/GeUtils\";\r\nimport { Arc } from \"./Entity/Arc\";\r\nimport { Curve } from \"./Entity/Curve\";\r\nimport { Line } from \"./Entity/Line\";\r\nimport { Polyline, PolylineProps } from \"./Entity/Polyline\";\r\nimport { Spline } from \"./Spline\";\r\n\r\nexport function SplineConver2Polyline(spl: Spline, tolerance = 0.1): Polyline\r\n{\r\n let cu = spl.Shape;\r\n\r\n let cacheParam = new Map();\r\n let cacheTange = new Map();\r\n\r\n const GetPointAtParam = (param: number) =>\r\n {\r\n let p = cacheParam.get(param);\r\n if (p) return p;\r\n\r\n p = cu.getPoint(param);\r\n cacheParam.set(param, p);\r\n return p;\r\n };\r\n\r\n const GetTangentAtParam = (param: number) =>\r\n {\r\n let t = cacheTange.get(param);\r\n if (t) return t;\r\n\r\n if (equaln(param, 1))\r\n {\r\n if (spl.CloseMark)\r\n t = cu.getPoint(1e-4).sub(GetPointAtParam(param)).normalize();\r\n else\r\n t = GetPointAtParam(param).clone().sub(cu.getPoint(1 - 1e-4)).normalize();\r\n }\r\n else\r\n t = cu.getPoint(param + 1e-4).sub(GetPointAtParam(param)).normalize();\r\n cacheTange.set(param, t);\r\n return t;\r\n };\r\n\r\n let count = spl.EndParam;\r\n let stepx = 1 / count;\r\n\r\n let curves: Curve[] = [];\r\n for (let i = 0; i < 1;)\r\n {\r\n let step = 0.25 * stepx;//0.5的时候也可以有不错的收敛,但是在0.25的时候会有比较贴合的效果\r\n while (true)\r\n {\r\n let param1 = i;\r\n let param2 = Math.min(1, i + step);\r\n\r\n let x = param2 - param1;\r\n let midp1 = GetPointAtParam(param1 + x * 0.25);\r\n let midp2 = GetPointAtParam(param1 + x * 0.75);\r\n\r\n let p1 = GetPointAtParam(param1);\r\n let p2 = GetPointAtParam(param2);\r\n\r\n let t1 = GetTangentAtParam(param1);\r\n let t2 = GetTangentAtParam(param2);\r\n\r\n let [c1, c2] = ComputeBiarc(p1, p2, t1, t2);\r\n\r\n // TestDraw(new Point(midp1));\r\n // TestDraw(new Point(midp2));\r\n\r\n // TestDraw(new Point(c1.GetPointAtParam(0.5)));\r\n // TestDraw(new Point(c2.GetPointAtParam(0.5)));\r\n\r\n if (\r\n c1.GetClosestPointTo(midp1, false).distanceTo(midp1) < tolerance &&\r\n c2.GetClosestPointTo(midp2, false).distanceTo(midp2) < tolerance\r\n )\r\n {\r\n curves.push(c1, c2);\r\n break;\r\n }\r\n else\r\n step = step * 0.5;\r\n }\r\n i += step;\r\n }\r\n\r\n let polyline = Polyline.Combine(curves, 1e-3);\r\n polyline.ApplyMatrix(spl.OCSNoClone);\r\n polyline.ColorIndex = spl.ColorIndex;\r\n return polyline;\r\n}\r\n\r\n//传入的一定是碎点,不是碎点,没有6个点请不要进来\r\nfunction PointsSimplify2Polyline(pts: Vector3[], tolerance = 0.1): Polyline\r\n{\r\n let tolSq = tolerance * tolerance;\r\n let cacheTange = new Map();\r\n\r\n let ptsCount = pts.length;\r\n\r\n const GetIndexAtParam = (param: number) =>\r\n {\r\n if (param === 1) return pts.length - 1;\r\n return Math.floor(ptsCount * param);\r\n };\r\n const GetPointAtParam = (param: number) =>\r\n {\r\n return pts[GetIndexAtParam(param)];\r\n };\r\n\r\n const GetTangentAtParam = (param: number) =>\r\n {\r\n let t = cacheTange.get(param);\r\n if (t) return t;\r\n\r\n let index = Math.floor(ptsCount * param);\r\n if (equaln(param, 1) || index + 1 >= pts.length)\r\n t = arrayLast(pts).clone().sub(pts[pts.length - 1]).normalize();\r\n else\r\n t = pts[index + 1].clone().sub(pts[index]).normalize();\r\n cacheTange.set(param, t);\r\n return t;\r\n };\r\n\r\n let stepx = 1;\r\n\r\n let curves: Curve[] = [];\r\n for (let i = 0; i < 1;)\r\n {\r\n let step = 0.25 * stepx;//0.5的时候也可以有不错的收敛,但是在0.25的时候会有比较贴合的效果\r\n while (true)\r\n {\r\n let param1 = i;\r\n let param2 = Math.min(1, i + step);\r\n\r\n let index1 = GetIndexAtParam(param1);\r\n let index2 = GetIndexAtParam(param2);\r\n if ((index2 - index1) < 4)//当点个数等于4时,我们计算双圆弧插值必然成功.(但是也失去了意义)\r\n {\r\n if (index2 - index1 > 0)\r\n {\r\n let lineD: PolylineProps[] = [];\r\n for (let i = index1; i <= index2; i++)\r\n lineD.push({ pt: AsVector2(pts[i]), bul: 0 });\r\n curves.push(new Polyline(lineD));\r\n }\r\n break;\r\n }\r\n\r\n let x = param2 - param1;\r\n let midp1 = GetPointAtParam(param1 + x * 0.25);\r\n let midp2 = GetPointAtParam(param1 + x * 0.75);\r\n\r\n let p1 = pts[index1];\r\n let p2 = pts[index2];\r\n\r\n let t1 = GetTangentAtParam(param1);\r\n let t2 = GetTangentAtParam(param2);\r\n\r\n let [c1, c2] = ComputeBiarc(p1, p2, t1, t2);\r\n\r\n if (\r\n c1.GetClosestPointTo(midp1, false).distanceToSquared(midp1) < tolSq &&\r\n c2.GetClosestPointTo(midp2, false).distanceToSquared(midp2) < tolSq\r\n )\r\n {\r\n curves.push(c1, c2);\r\n break;\r\n }\r\n else\r\n step = step * 0.5;\r\n }\r\n i += step;\r\n }\r\n\r\n let polyline = Polyline.Combine(curves, 1e-3);\r\n return polyline;\r\n}\r\n\r\n/**\r\n * 将碎点简化为多段线,(尝试转换为简单圆弧,或者使用双圆弧插值)\r\n * @param pts 点表\r\n * @param [tolerance=0.1] 容差\r\n * @param [parseArc=true] 解析成简单圆弧\r\n * @param [lineLengthSq=2000]\r\n * @returns 多段线\r\n */\r\nexport function PointsSimplify2PolylineAndParseArc(pts: Vector2[], buls: number[] = undefined, tolerance = 0.1, parseArc = true, lineLengthSq = 2000): Polyline\r\n{\r\n let tolSq = tolerance * tolerance;\r\n let ptsCount = pts.length;\r\n\r\n const CreateLineOrArc = (startIndex: number, endIndex: number) =>\r\n {\r\n if (!buls || equaln(buls[startIndex], 0, 1e-4))\r\n return new Line(AsVector3(pts[startIndex]), AsVector3(pts[endIndex]));\r\n else\r\n return new Arc().ParseFromBul(AsVector3(pts[startIndex]), AsVector3(pts[endIndex]), buls[startIndex]);\r\n };\r\n\r\n let retPolyline = new Polyline;\r\n let start = 0;\r\n for (let next = start + 1; next <= ptsCount; next++)\r\n {\r\n if (next === ptsCount || pts[next].distanceToSquared(pts[next - 1]) > lineLengthSq || (buls && !equaln(buls[next - 1], 0, 1e-4)))//长度大于50,我们才认为它是一条直线\r\n {\r\n //1.将start->next-1部分组成圆弧\r\n if (parseArc || (next - start) < 6)\r\n while (start < next - 1)\r\n {\r\n if ((next - 1) - start === 1)//直线\r\n {\r\n retPolyline.Join(CreateLineOrArc(start, next - 1));\r\n break;\r\n }\r\n\r\n //第一个三角形的方向\r\n let firstDir = orientation(pts[start], pts[start + 1], pts[start + 2]);\r\n let to = start;\r\n for (; to + 3 < next; to++)\r\n {\r\n let dir = orientation(pts[to + 1], pts[to + 2], pts[to + 3]);\r\n if (dir !== firstDir)\r\n break;\r\n }\r\n\r\n if (start === to)//三个点\r\n {\r\n retPolyline.Join(CreateLineOrArc(start, start + 1));\r\n retPolyline.Join(CreateLineOrArc(start + 1, start + 2));\r\n start = to + 2;\r\n continue;\r\n }\r\n else if ((to - start) < 3)\r\n {\r\n retPolyline.Join(PointsSimplify2Polyline(pts.slice(start, to + 2 + 1).map(AsVector3)));\r\n }\r\n else\r\n {\r\n let sp = pts[start];\r\n let ep = pts[to + 2];\r\n let mp = pts[Math.floor((start + to + 2) / 2)];\r\n let arc = new Arc().FromThreePoint(AsVector3(sp), AsVector3(mp), AsVector3(ep));\r\n\r\n let c = to + 2 - start;\r\n\r\n let p1 = AsVector3(pts[start + Math.floor(c * 0.25)]);\r\n let p2 = AsVector3(pts[start + Math.floor(c * 0.75)]);\r\n if (arc.GetClosestPointTo(p1, false).distanceToSquared(p1) < tolSq\r\n && arc.GetClosestPointTo(p2, false).distanceToSquared(p2) < tolSq)\r\n retPolyline.Join(arc);\r\n else\r\n retPolyline.Join(PointsSimplify2Polyline(pts.slice(start, to + 2 + 1).map(AsVector3)));\r\n }\r\n\r\n start = to + 2;//闪烁到圆弧终点\r\n\r\n if (start === next - 2)\r\n {\r\n retPolyline.Join(PointsSimplify2Polyline(pts.slice(start, next).map(AsVector3)));\r\n start = next;\r\n break;\r\n };\r\n }\r\n else\r\n retPolyline.Join(PointsSimplify2Polyline(pts.slice(start, next).map(AsVector3)));\r\n\r\n //2.加入直线\r\n if (next !== ptsCount)\r\n retPolyline.Join(CreateLineOrArc(next - 1, next));\r\n start = next;\r\n }\r\n }\r\n\r\n return retPolyline;\r\n}\r\n\r\nexport function SmartPointsSimply2Polyline(pts: Vector2[], buls: number[] = undefined, tolerance = 0.1, lineLengthSq = 2000)\r\n{\r\n let pl1 = PointsSimplify2PolylineAndParseArc(pts, buls, tolerance, true, lineLengthSq);\r\n let pl2 = PointsSimplify2PolylineAndParseArc(pts, buls, tolerance, false, lineLengthSq);\r\n\r\n if (pl1.EndParam < pl2.EndParam)\r\n return pl1;\r\n else\r\n return pl2;\r\n}\r\n\r\n/**\r\n * 简化多段线,返回结果比较好的多段线\r\n * @param pl\r\n * @param [tolerance=0.1]\r\n * @param [lineLengthSq=2000]\r\n * @returns 返回undefined时,简化失败\r\n */\r\nexport function SmartPolylineSimply2Polyline(pl: Polyline, tolerance = 0.1, lineLengthSq = 2000): Polyline | undefined\r\n{\r\n if (pl.EndParam < 3) return;\r\n\r\n let ld = pl.LineData;\r\n let pts: Vector2[] = [ld[0].pt];\r\n let buls: number[] = [ld[0].bul];\r\n let prep = pts[0];\r\n for (let i = 1; i < ld.length; i++)\r\n {\r\n let d = ld[i];\r\n let p = d.pt;\r\n if (!equalv2(p, prep, 1e-3))\r\n {\r\n pts.push(p);\r\n buls.push(d.bul);\r\n prep = p;\r\n }\r\n }\r\n\r\n if (pl.CloseMark && !equalv2(pts[0], arrayLast(pts)))\r\n pts.push(pts[0].clone());\r\n\r\n let npl = SmartPointsSimply2Polyline(pts, pl.LineData.map(p => p.bul), tolerance, lineLengthSq);\r\n npl.ApplyMatrix(pl.OCSNoClone);\r\n npl.ColorIndex = pl.ColorIndex;\r\n return npl;\r\n}\r\n\r\n//types\r\nfunction Vec2(x: number, y: number)\r\n{\r\n this.x = x;\r\n this.y = y;\r\n}\r\n\r\nlet c_Epsilon = 0.0001;\r\n\r\n// math functions\r\nfunction Sqr(val: number)\r\n{\r\n return val * val;\r\n}\r\nfunction IsEqualEps(lhs: number, rhs: number)\r\n{\r\n return Math.abs(lhs - rhs) <= c_Epsilon;\r\n}\r\n\r\nfunction ToNumber_Safe(input: number)\r\n{\r\n let output = Number(input);\r\n return isNaN(output) ? 0 : output;\r\n}\r\n\r\nfunction Vec2_Add(lhs: Vec2, rhs: Vec2)\r\n{\r\n return new Vec2(lhs.x + rhs.x, lhs.y + rhs.y);\r\n}\r\nfunction Vec2_Sub(lhs: Vec2, rhs: Vec2)\r\n{\r\n return new Vec2(lhs.x - rhs.x, lhs.y - rhs.y);\r\n}\r\nfunction Vec2_Scale(lhs: { x: number; y: number; }, scale: number)\r\n{\r\n return new Vec2(lhs.x * scale, lhs.y * scale);\r\n}\r\nfunction Vec2_AddScaled(lhs: Vec2, rhs: Vec2, scale: number)\r\n{\r\n return new Vec2(lhs.x + rhs.x * scale, lhs.y + rhs.y * scale);\r\n}\r\n\r\nfunction Vec2_Dot(lhs: Vec2, rhs: Vec2)\r\n{\r\n return lhs.x * rhs.x + lhs.y * rhs.y;\r\n}\r\n\r\nfunction Vec2_MagSqr(val: { x: number; y: number; })\r\n{\r\n return val.x * val.x + val.y * val.y;\r\n}\r\n\r\nfunction CreateArcFromEdge(p1: Vec2, t1: Vec2, p2: Vec2, fromP1: boolean): Arc | Line\r\n{\r\n let chord = Vec2_Sub(p2, p1);\r\n let n1 = new Vec2(-t1.y, t1.x);\r\n let chordDotN1 = Vec2_Dot(chord, n1);\r\n\r\n if (IsEqualEps(chordDotN1, 0))\r\n return new Line(AsVector3(p1), AsVector3(p2));\r\n else\r\n {\r\n let radius = Vec2_MagSqr(chord) / (2 * chordDotN1);\r\n let center = Vec2_AddScaled(p1, n1, radius);\r\n\r\n let p1Offset = Vec2_Sub(p1, center);\r\n let p2Offset = Vec2_Sub(p2, center);\r\n\r\n let p1Ang1 = Math.atan2(p1Offset.y, p1Offset.x);\r\n let p2Ang1 = Math.atan2(p2Offset.y, p2Offset.x);\r\n if (p1Offset.x * t1.y - p1Offset.y * t1.x > 0)\r\n return new Arc(AsVector3(center), Math.abs(radius), p1Ang1, p2Ang1, !fromP1);\r\n else\r\n return new Arc(AsVector3(center), Math.abs(radius), p1Ang1, p2Ang1, fromP1);\r\n }\r\n}\r\n\r\n/**\r\n * 计算双圆弧插值的圆弧\r\n * @param p1 起点\r\n * @param p2 终点\r\n * @param t1 起点切线\r\n * @param t2 终点切线\r\n * @returns 两个圆弧(或者其中一个是直线)\r\n */\r\nexport function ComputeBiarc(p1: Vec2, p2: Vec2, t1: Vec2, t2: Vec2): [Arc | Line, Arc | Line]\r\n{\r\n let v = Vec2_Sub(p2, p1);\r\n let vMagSqr = Vec2_MagSqr(v);\r\n\r\n let vDotT1 = Vec2_Dot(v, t1);\r\n\r\n if (true)//自动d1 d2=d1\r\n {\r\n let t = Vec2_Add(t1, t2);\r\n let tMagSqr = Vec2_MagSqr(t);\r\n\r\n let equalTangents = IsEqualEps(tMagSqr, 4.0);\r\n\r\n let perpT1 = IsEqualEps(vDotT1, 0.0);\r\n if (equalTangents && perpT1) //2个半圆\r\n {\r\n let angle = Math.atan2(v.y, v.x);\r\n let center1 = Vec2_AddScaled(p1, v, 0.25);\r\n let center2 = Vec2_AddScaled(p1, v, 0.75);\r\n let radius = Math.sqrt(vMagSqr) * 0.25;\r\n let cross = v.x * t1.y - v.y * t1.x;\r\n\r\n return [\r\n new Arc(AsVector3(center1), radius, angle, angle + Math.PI, cross < 0),\r\n new Arc(AsVector3(center2), radius, angle, angle + Math.PI, cross > 0)\r\n ];\r\n }\r\n else\r\n {\r\n let vDotT = Vec2_Dot(v, t);\r\n\r\n let d1: number;\r\n if (equalTangents)\r\n d1 = vMagSqr / (4 * vDotT1);\r\n else\r\n {\r\n let denominator = 2 - 2 * Vec2_Dot(t1, t2);\r\n let discriminant = Sqr(vDotT) + denominator * vMagSqr;\r\n d1 = (Math.sqrt(discriminant) - vDotT) / denominator;\r\n }\r\n\r\n let joint = Vec2_Scale(Vec2_Sub(t1, t2), d1);\r\n joint = Vec2_Add(joint, p1);\r\n joint = Vec2_Add(joint, p2);\r\n joint = Vec2_Scale(joint, 0.5);\r\n\r\n return [\r\n CreateArcFromEdge(p1, t1, joint, true),\r\n CreateArcFromEdge(p2, t2, joint, false)\r\n ];\r\n }\r\n }\r\n\r\n //使用自定义d1\r\n else\r\n {\r\n let d1_min = -500;\r\n let d1_max = 500;\r\n let d1 = d1_min + (d1_max - d1_min) * ToNumber_Safe(60) / 100.0;\r\n\r\n let vDotT2 = Vec2_Dot(v, t2);\r\n let t1DotT2 = Vec2_Dot(t1, t2);\r\n let denominator = (vDotT2 - d1 * (t1DotT2 - 1));\r\n\r\n if (IsEqualEps(denominator, 0.0))\r\n {\r\n //第二个圆弧是半圆\r\n let joint = Vec2_AddScaled(p1, t1, d1);\r\n joint = Vec2_AddScaled(joint, t2, vDotT2 - d1 * t1DotT2);\r\n\r\n return [\r\n CreateArcFromEdge(p1, t1, joint, true),\r\n CreateArcFromEdge(p2, t2, joint, false)\r\n ];\r\n }\r\n else\r\n {\r\n let d2 = (0.5 * vMagSqr - d1 * vDotT1) / denominator;\r\n\r\n let invLen = 1.0 / (d1 + d2);\r\n\r\n let joint = Vec2_Scale(Vec2_Sub(t1, t2), d1 * d2);\r\n joint = Vec2_AddScaled(joint, p2, d1);\r\n joint = Vec2_AddScaled(joint, p1, d2);\r\n joint = Vec2_Scale(joint, invLen);\r\n\r\n return [\r\n CreateArcFromEdge(p1, t1, joint, true),\r\n CreateArcFromEdge(p2, t2, joint, false)\r\n ];\r\n }\r\n }\r\n}\r\n","import { CatmullRomCurve3, Matrix3, Vector3 } from 'three';\r\nimport { arrayLast } from '../Common/ArrayExt';\r\nimport { ObjectSnapMode } from '../Editor/ObjectSnapMode';\r\nimport { AsVector2, AsVector3, equalv3 } from '../Geometry/GeUtils';\r\nimport { Factory } from './CADFactory';\r\nimport { CADFiler } from './CADFiler';\r\nimport { Curve } from './Entity/Curve';\r\nimport { Polyline } from './Entity/Polyline';\r\nimport { SplineConver2Polyline } from './SplineConver2Polyline';\r\n\r\n\r\nconst DrawSplitCount = 120;\r\n\r\n@Factory\r\nexport class Spline extends Curve\r\n{\r\n private _ClosedMark: boolean = false;\r\n constructor(private _PointList: Vector3[] = [])\r\n {\r\n super();\r\n }\r\n\r\n get Shape()\r\n {\r\n return new CatmullRomCurve3(this.Points, this._ClosedMark);\r\n }\r\n\r\n get Length()\r\n {\r\n //TODO:这个的性能挺低的(因为还需要重新获取一遍点表(如果我们有绘制对象,应该用绘制对象的点表来计算长度))\r\n return this.Shape.getLength();\r\n }\r\n\r\n get Points()\r\n {\r\n return this._PointList;\r\n }\r\n set Points(pts: Vector3[])\r\n {\r\n if (pts.length < 2) return;\r\n this.WriteAllObjectRecord();\r\n let ocsInv = this.OCSInv;\r\n this._PointList = pts.map(p => p.clone().applyMatrix4(ocsInv));\r\n\r\n if (pts.length > 2 && equalv3(this._PointList[0], arrayLast(this._PointList), 1e-3))\r\n {\r\n this._PointList.pop();\r\n this._ClosedMark = true;\r\n }\r\n\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 if (this._ClosedMark === v) return;\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\r\n get EndParam()\r\n {\r\n return this._ClosedMark ? this._PointList.length : this._PointList.length - 1;\r\n }\r\n\r\n GetClosestPointTo(pt: Vector3, extend: boolean): Vector3\r\n {\r\n return this.Convert2Polyline().GetClosestPointTo(pt, extend);\r\n }\r\n\r\n GetOffsetCurves(offsetDist: number): Array\r\n {\r\n if (offsetDist === 0) return [];\r\n let pld = this._PointList.map(p =>\r\n {\r\n return { pt: AsVector2(p), bul: 0 };\r\n });\r\n\r\n let pl = new Polyline(pld);\r\n let pls = pl.GetOffsetCurves(offsetDist);\r\n\r\n return pls.map(pl =>\r\n {\r\n let pts = pl.LineData.map(p => AsVector3(p.pt));\r\n let spl = new Spline(pts);\r\n spl.OCS = this._Matrix;\r\n spl._ClosedMark = this._ClosedMark;\r\n return spl;\r\n });\r\n }\r\n\r\n GetGripPoints()\r\n {\r\n return this._PointList.map(p => p.clone().applyMatrix4(this.OCSNoClone));\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 vec = vec.clone().applyMatrix4(this.OCSInv.setPosition(0, 0, 0)).setZ(0);\r\n this.WriteAllObjectRecord();\r\n for (let index of indexList)\r\n this._PointList[index].add(vec);\r\n this.Update();\r\n }\r\n MoveStretchPoints(indexList: Array, vec: Vector3)\r\n {\r\n vec = vec.clone().applyMatrix4(this.OCSInv.setPosition(0, 0, 0)).setZ(0);\r\n this.WriteAllObjectRecord();\r\n for (let index of indexList)\r\n this._PointList[index].add(vec);\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\r\n protected GetDrawCount()\r\n {\r\n return this.EndParam * DrawSplitCount;\r\n }\r\n\r\n Convert2Polyline(): Polyline\r\n {\r\n return SplineConver2Polyline(this);\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 if (ver > 1)\r\n this._ClosedMark = file.Read();\r\n }\r\n WriteFile(file: CADFiler)\r\n {\r\n super.WriteFile(file);\r\n file.Write(2);//ver\r\n file.Write(this._PointList.length);\r\n this._PointList.forEach(p => file.Write(p.toArray()));\r\n file.Write(this._ClosedMark);\r\n }\r\n}\r\n","import { Box3, Vector3 } from \"three\";\r\nimport { arrayPushArray } from \"../Common/ArrayExt\";\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 //交点参数集\r\n intersect2: Map = new Map();\r\n\r\n intersect3: [Curve, Curve, Vector3[]][] = [];\r\n\r\n /**\r\n * @param {Curve[]} cus 请注意数组的顺序会被更改,如果你在意数组的顺序,请拷贝数组后传进来\r\n * @memberof CurveIntersection\r\n */\r\n constructor(cus: Curve[], parseIntersectionParam = false, intType = IntersectOption.ExtendNone, protected fuzz = 1e-6, parseRecord = false)\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 (parseRecord)\r\n this.intersect3.push([c1, c2, pts]);\r\n\r\n if (parseIntersectionParam)\r\n {\r\n this.AppendIntersectionParams(c1, ints.map(i => [i.thisParam, i.pt]));\r\n this.AppendIntersectionParams(c2, ints.map(i => [i.argParam, i.pt]));\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, Vector3][])\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 arrayPushArray(arr, 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) || (p.thisParam < 0 ? 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) || (p.argParam < 0 ? 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 { 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 for (let hashpart of hashparts)\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\nconst _overlap_ = \"_overlap_\";\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 = [];//外轮廓和内轮廓重叠时,只有外轮廓有数据,可以使用RegionParse.RegionsIsOverlap来取得\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\r\n maxWalk[_overlap_] = true;\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 //大小圈重叠\r\n static RegionsIsOverlap(Route: Route[])\r\n {\r\n return Boolean(Route[_overlap_]);\r\n }\r\n\r\n private 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 private 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 protected 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 > 1e-4 && param < 0.9999)\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\nexport function 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 { arrayPushArray } from \"../Common/ArrayExt\";\r\nimport { Contour } from \"../DatabaseServices/Contour\";\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 { Spline } from \"../DatabaseServices/Spline\";\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 CreateContours(curves: Curve[], fuzz = 1e-4): Contour[]\r\n{\r\n let contours: Contour[] = [];\r\n let extendsMinDistSq = fuzz * fuzz;\r\n //炸开多段线(防止自交多段线)\r\n let newCurves: Curve[] = [];\r\n for (let cu of curves)\r\n {\r\n if (cu instanceof Circle)\r\n contours.push(Contour.CreateContour(cu.Clone()));//避免将原始曲线传递给板,导致撤销这个圆失败\r\n else if (cu instanceof Polyline)\r\n arrayPushArray(newCurves, cu.Explode());\r\n else if (cu instanceof Spline)\r\n {\r\n let pl = cu.Convert2Polyline();\r\n if (pl.IsClose)\r\n contours.push(Contour.CreateContour(pl, false));\r\n else\r\n newCurves.push(pl);\r\n }\r\n else if (cu instanceof Ellipse)\r\n Contour.CreateContour(cu.Convert2Polyline(), false);\r\n else\r\n newCurves.push(cu);\r\n }\r\n\r\n let intersect = new CurveIntersection2(newCurves, 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 arrayPushArray(ipts, 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 arrayPushArray(tempCus, c.Explode());\r\n else\r\n tempCus.push(c);\r\n }\r\n\r\n arrayPushArray(curves2, 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 let contour = Contour.CreateContour(curves, false);\r\n if (contour)\r\n contours.push(contour);\r\n }\r\n return contours;\r\n}\r\n\r\nexport function CreateContour2(curves: Curve[], fuzz = 1e-4): Contour | undefined\r\n{\r\n return CreateContours(curves, fuzz)[0];\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.ExtendNone);\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 { 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 { CreateContour2 } from \"../Geometry/CreateContour2\";\r\nimport { Route } from \"../Geometry/CurveMap\";\r\nimport { equaln, equalv2, 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 //同心圆\r\n if (this._Curve instanceof Circle && target._Curve instanceof Circle && equalv2(this._Curve.Center, target._Curve.Center, 1e-3))\r\n {\r\n if (this._Curve.Radius > target._Curve.Radius)\r\n return { intersectionList: [target._Curve], unionList: [this._Curve] };\r\n else\r\n return { intersectionList: [this._Curve], unionList: [target._Curve] };\r\n }\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.ExtendNone, 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.ExtendNone, 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) ?? CreateContour2(cs);\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.ExtendNone, 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//也许有一天这个中点算法需要改一下, 使用.MidPoint比较稳妥\r\nfunction fastCurveInCurve(sourceCu: Polyline | Circle, targetCu: Curve)\r\n{\r\n return sourceCu.PtInCurve(targetCu.Midpoint);\r\n}\r\n\r\n//当交点小于等于1时\r\nexport function fastCurveInCurve2(sourceCu: Polyline | Circle, targetCu: Curve)\r\n{\r\n return sourceCu.PtInCurve(targetCu.StartPoint) ||\r\n sourceCu.PtInCurve(targetCu.Midpoint);\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 ep?: Vector3;\r\n preCurve?: Curve;\r\n nextCurve?: Curve;\r\n paddingCurve?: Curve[];\r\n}\r\n\r\nexport class CurveTreeNode\r\n{\r\n children: this[];\r\n box: Box3;\r\n used: boolean;\r\n\r\n Create(curve: Curve, box?: Box3): this { return new (this.constructor)(curve, box) as this; }\r\n\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.ExtendNone)\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(this.Create(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: this[] = [];\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 this.RepairResultPolylineClosemark();\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 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.nextCurve = curveNext;\r\n curveResNext.preCurve = 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.ExtendNone, 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.ExtendNone);\r\n let ipts2 = cu2.IntersectWith(l2, IntersectOption.ExtendNone);\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.preCurve && d.preCurve instanceof Arc)\r\n {\r\n let a = d.preCurve;\r\n if (Math.sign(a.Bul) !== this._OffsetDistSign && a.AllAngle > 1e-6)\r\n {\r\n let ipts = a.IntersectWith(l1, IntersectOption.ExtendNone);\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.nextCurve && d.nextCurve instanceof Arc)\r\n {\r\n let a = d.nextCurve;\r\n if (Math.sign(a.Bul) !== this._OffsetDistSign && a.AllAngle > 1e-6)\r\n {\r\n let ipts = a.IntersectWith(l2, IntersectOption.ExtendNone);\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, 8e-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 private RepairResultPolylineClosemark()\r\n {\r\n if (!this._RetCurves.length) return;\r\n\r\n if (this._Polyline.CloseMark)\r\n {\r\n if (!equalv2(this._Polyline.LineData[0].pt, arrayLast(this._Polyline.LineData).pt, 8e-2))//缺省一个点\r\n {\r\n for (let pl of this._RetCurves)\r\n {\r\n if (pl.IsClose && //封闭\r\n equaln(arrayLast(pl.LineData).bul, 0, 1e-5) &&//是直线\r\n equalv2(pl.LineData[0].pt, arrayLast(pl.LineData).pt, 8e-2))//首尾重复(一般已经是了)\r\n {\r\n pl.LineData.pop();//移除最后一点\r\n pl.CloseMark = true;\r\n }\r\n }\r\n }\r\n else\r\n {\r\n for (let pl of this._RetCurves)\r\n {\r\n if (pl.IsClose)\r\n pl.CloseMark = true;\r\n }\r\n }\r\n }\r\n else if (this._IsClose)\r\n {\r\n for (let pl of this._RetCurves)\r\n {\r\n let firstP = pl.LineData[0].pt;\r\n let lastP = arrayLast(pl.LineData).pt;\r\n if (equalv2(firstP, lastP, 8e-2))\r\n lastP.copy(firstP);\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\nexport function EntityEncode2(c1: Curve, c2: Curve)\r\n{\r\n return EntityEncode(c1) & EntityEncode(c2);\r\n}\r\n\r\n//表示这个是一个正常的曲线,不是0长度的线,也不是0长度的圆弧\r\nexport function 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 { Vec2, 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.GetBulgeAt(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\nexport function IsPointInPolygon(pt: Vec2, pts: Vec2[])\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","import { Box3, Matrix3, Matrix4, Shape, Vec2, Vector2, Vector3 } from 'three';\r\nimport { arrayLast, arrayRemoveDuplicateBySort, changeArrayStartIndex } from '../../Common/ArrayExt';\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 { CreatePolylinePath } from '../../Geometry/CreatePolylinePath';\r\nimport { AsVector2, AsVector3, equaln, equalv2, equalv3, MatrixIsIdentityCS } from '../../Geometry/GeUtils';\r\nimport { IntersectOption, IntersectPolylineAndCurve } from '../../GraphicsSystem/IntersectWith';\r\nimport { OffsetPolyline } from '../../GraphicsSystem/OffsetPolyline';\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\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 UpdateOCSTo(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.OCSNoClone, 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.NumberOfVertices,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 let inv = this.OCSInv;\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(inv);\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 let inv = this.OCSInv;\r\n for (let i = 0; i < oldPts.length; i++)\r\n {\r\n let newP = oldPts[i].applyMatrix4(inv);\r\n let newBul = -this.GetBulgeAt(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\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\r\n GetBulgeAt(index: number): number\r\n {\r\n return this._LineData[index].bul;\r\n }\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\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 FromPoints2d(pts: Vec2[]): this\r\n {\r\n this.WriteAllObjectRecord();\r\n this._LineData.length = 0;\r\n for (let p of pts)\r\n this._LineData.push({ pt: AsVector2(p), bul: 0 });\r\n this.Update();\r\n return this;\r\n }\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.GetBulgeAt(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.GetBulgeAt(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 */\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.OCSNoClone);\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 cuCount = paramFloor > this.EndParam ? this.EndParam : paramFloor;\r\n\r\n let dist = 0;\r\n //首先计算完整曲线的长度\r\n for (let i = 0; i < cuCount; i++)\r\n {\r\n dist += this.GetCurveAtIndex(i).Length;\r\n }\r\n\r\n //参数已经大于索引,证明参数在线外.\r\n if (paramFloor !== cuCount)\r\n {\r\n dist += this.GetCurveAtParam(param).GetDistAtParam(param - cuCount);\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 if (equaln(dist, 0)) return 0;\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 let normal = pl.Normal;\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 {\r\n let dir = equalv3(normal, cu.Normal.negate(), 1e-3) ? -1 : 1;\r\n bul = cu.Bul * dir;\r\n }\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 //偏移\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-5))\r\n curve = new Line(AsVector3(d1.pt), AsVector3(d2.pt)).ApplyMatrix(this.OCSNoClone);\r\n else\r\n curve = new Arc().ParseFromBul(d1.pt, d2.pt, d1.bul).ApplyMatrix(this.OCSNoClone);\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.ExtendNone);\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(): Shape\r\n {\r\n let { pts, buls } = this.PtsBuls;\r\n return CreatePolylinePath(pts, buls);\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.GetBulgeAt(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\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 ptCount = this._LineData.length;\r\n\r\n let frontIndex = cuIndex - 1;\r\n if (this._ClosedMark)\r\n frontIndex = FixIndex(frontIndex, ptCount);\r\n\r\n if (frontIndex >= 0 && this.GetBulgeAt(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 !== ptCount - 1) && this.GetBulgeAt(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 ptCount = this._LineData.length;\r\n\r\n for (let index of indexList)\r\n {\r\n if (index >= ptCount)\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, ptCount);\r\n nextIndex = FixIndex(nextIndex, ptCount);\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 count = file.Read();\r\n for (let i = 0; i < count; 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 { ComparePointFnGenerate, 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 ExtendNone = 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(ComparePointFnGenerate(\"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.ExtendNone;\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 { Box3, Matrix3, Matrix4, Vector2, Vector3 } from 'three';\r\nimport { getArcOrCirNearPts, getCircleCenter, GetTanPtsOnArcOrCircle } from '../../Common/CurveUtils';\r\nimport { reviseMirrorMatrix, SetMtxVector, TransformVector } from '../../Common/Matrix4Utils';\r\nimport { Status } from '../../Common/Status';\r\nimport { ObjectSnapMode } from '../../Editor/ObjectSnapMode';\r\nimport { Box3Ext } from '../../Geometry/Box';\r\nimport { angle, AsVector3, clampRad, equaln, equalv2, equalv3, MoveMatrix, polar, ZeroVec } from '../../Geometry/GeUtils';\r\nimport { Orbit } from '../../Geometry/Orbit';\r\nimport { IntersectArcAndArc, IntersectCircleAndArc, IntersectEllipseAndCircleOrArc, IntersectLineAndArc, IntersectOption, IntersectPolylineAndCurve, reverseIntersectOption } from '../../GraphicsSystem/IntersectWith';\r\nimport { Factory } from '../CADFactory';\r\nimport { CADFiler } from '../CADFiler';\r\nimport { Shape2 } from '../Shape2';\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 = ZeroVec, 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 Shape2();\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 SetMtxVector(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 private get BoundingBoxPtsInOCS()\r\n {\r\n let pts = [\r\n polar(new Vector3(), this._StartAngle, this._Radius),\r\n polar(new Vector3(), this._EndAngle, this._Radius),\r\n ];\r\n\r\n if (this.ParamOnCurve(this.GetParamAtAngle(0)))\r\n pts.push(new Vector3(this._Radius, 0));\r\n\r\n if (this.ParamOnCurve(this.GetParamAtAngle(Math.PI / 2)))\r\n pts.push(new Vector3(0, this._Radius));\r\n\r\n if (this.ParamOnCurve(this.GetParamAtAngle(Math.PI)))\r\n pts.push(new Vector3(-this._Radius, 0));\r\n\r\n if (this.ParamOnCurve(this.GetParamAtAngle(Math.PI * 3 / 2)))\r\n pts.push(new Vector3(0, -this._Radius));\r\n return pts;\r\n }\r\n\r\n private static _X = new Vector3;\r\n private static _Y = new Vector3;\r\n private static _Z = new Vector3;\r\n private static _Mtx = new Matrix4;\r\n get BoundingBox(): Box3\r\n {\r\n Arc._Z.setFromMatrixColumn(this._Matrix, 2);\r\n Orbit.ComputUpDirection(Arc._Z, Arc._Y, Arc._X);\r\n\r\n Arc._Mtx.makeBasis(Arc._X, Arc._Y, Arc._Z).setPosition(this._Matrix.elements[12], this._Matrix.elements[13], this._Matrix.elements[14]);\r\n\r\n let pts = [\r\n polar(new Vector3(), this._StartAngle, this._Radius),\r\n polar(new Vector3(), this._EndAngle, this._Radius),\r\n ];\r\n\r\n let ocsInv = this.OCSInv;\r\n\r\n for (let p of [new Vector3(this._Radius), new Vector3(0, this._Radius), new Vector3(-this._Radius), new Vector3(0, -this._Radius)])\r\n {\r\n p.applyMatrix4(Arc._Mtx).applyMatrix4(ocsInv);\r\n if (this.ParamOnCurve(this.GetParamAtAngle(angle(p))))\r\n pts.push(p);\r\n }\r\n\r\n for (let p of pts)\r\n p.applyMatrix4(this.OCSNoClone);\r\n\r\n return new Box3Ext().setFromPoints(pts);\r\n }\r\n\r\n /**\r\n * 返回对象在自身坐标系下的Box\r\n */\r\n get BoundingBoxInOCS(): Box3Ext\r\n {\r\n return new Box3Ext().setFromPoints(this.BoundingBoxPtsInOCS);\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 // if (equaln(v, this._StartAngle)) return;//优化导致测试用例失败\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 // if (equaln(v, this._EndAngle)) return;//优化导致测试用例失败\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.OCSNoClone);\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 private static __PointTemp__ = new Vector3;\r\n GetAngleAtPoint(pt: Vector3)\r\n {\r\n return angle(Arc.__PointTemp__.copy(pt).applyMatrix4(this.OCSInv));\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 || curve.constructor.name === \"RoomWallArc\")\r\n {\r\n return IntersectArcAndArc(this, curve as Arc, intType);\r\n }\r\n if (curve instanceof Line || curve.constructor.name === \"RoomWallLine\")\r\n {\r\n return SwapParam(IntersectLineAndArc(curve as Line, 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 * ref http://www.lee-mac.com/bulgeconversion.html\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 //a (* 2 (atan b))\r\n let a = Math.atan(bul) * 2;\r\n //r (/ (distance p1 p2) 2 (sin a))\r\n let r = p1.distanceTo(p2) / 2 / Math.sin(a);\r\n //c (polar p1 (+ (- (/ pi 2) a) (angle p1 p2)) r)\r\n let c = polar(p1.clone(), Math.PI / 2 - a + angle(p2.clone().sub(p1)), r);\r\n\r\n this._Radius = Math.abs(r);\r\n\r\n this._StartAngle = angle(p1.sub(c));\r\n this._EndAngle = angle(p2.sub(c));\r\n\r\n this._Clockwise = bul < 0;\r\n\r\n this.Center = c.applyMatrix4(this.OCSNoClone);\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 this;\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 if (!center)\r\n {\r\n this.ParseFromBul(pt1.applyMatrix4(this.OCSNoClone), pt3.applyMatrix4(this.OCSNoClone), 1e-3);//faker line\r\n return this;\r\n };\r\n\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 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 index = indexList[0];\r\n\r\n if (index > 2)\r\n this.Center = this.Center.add(vec);\r\n else\r\n {\r\n let p1 = polar(new Vector3, this._StartAngle, this._Radius);\r\n let p2 = polar(new Vector3, this.GetAngleAtParam(0.5), this._Radius);\r\n let p3 = polar(new Vector3, this._EndAngle, this._Radius);\r\n\r\n vec = TransformVector(vec.clone(), this.OCSInv).setZ(0);\r\n\r\n [p1, p2, p3][index].add(vec);\r\n\r\n let center = getCircleCenter(p1, p2, p3);\r\n if (!center)//三点共线 使用faker arc\r\n {\r\n this.ParseFromBul(p1.applyMatrix4(this.OCSNoClone), p3.applyMatrix4(this.OCSNoClone), 1e-3);\r\n this.Update();\r\n return;\r\n }\r\n\r\n //起始角度 端点角度\r\n this._StartAngle = angle(p1.clone().sub(center));\r\n this._EndAngle = angle(p3.clone().sub(center));\r\n if (equaln(this._StartAngle, this._EndAngle, 1e-5))//差不多也是三点共线,只不过逃逸了\r\n {\r\n this.ParseFromBul(p1.applyMatrix4(this.OCSNoClone), p3.applyMatrix4(this.OCSNoClone), 1e-3);\r\n this.Update();\r\n return;\r\n }\r\n\r\n //用圆心和其中一个点求距离得到半径:\r\n this._Radius = center.distanceTo(p1);\r\n\r\n this.Center = center.clone().applyMatrix4(this.OCS);\r\n\r\n //求出向量p1->p2,p1->p3\r\n let v1 = p2.clone().sub(p1);\r\n let v2 = p3.clone().sub(p1);\r\n\r\n this._Clockwise = v1.cross(v2).z < 0;\r\n\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 pt = pt.clone().applyMatrix4(this.OCSInv);\r\n if (equalv2(pt, ZeroVec, 1e-8))\r\n return this.GetPointAtParam(0);\r\n\r\n let a = angle(pt);\r\n let param = this.GetParamAtAngle(a);\r\n if (extend || this.ParamOnCurve(param))\r\n return polar(new Vector3, a, this._Radius).applyMatrix4(this._Matrix);\r\n\r\n if (param < 0) return this.GetPointAtParam(0);\r\n else return this.GetPointAtParam(1);\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\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 { 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 { Spline } from '../DatabaseServices/Spline';\r\nimport { Count } from '../Geometry/Count';\r\nimport { CurveMap, Vertice } from '../Geometry/CurveMap';\r\nimport { AsVector2, AsVector3, equaln, equalv2, equalv3, isIntersect, isParallelTo, isPerpendicularityTo, XAxis, YAxis, ZeroVec } 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, arrayRemoveDuplicateBySort, arrayRemoveIf, 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 (equaln(temp, 0, 1e-5))\r\n {\r\n return;\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 cirAng = Math.PI * 2 - cirAng;\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 else if (cu instanceof Spline)\r\n return GetPointAtCurveDir(cu.Convert2Polyline(), pt);\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.GetBulgeAt(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.OCSNoClone;\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 arrayRemoveIf(cus, c => c.Length < LINK_FUZZ);\r\n\r\n let cir: Circle;\r\n arrayRemoveDuplicateBySort(cus, (c1, c2) =>\r\n {\r\n if (cir) return true;\r\n\r\n let status = c1.Join(c2, false, LINK_FUZZ);\r\n if (status === Status.ConverToCircle)\r\n {\r\n let arc = c1 as Arc;\r\n cir = new Circle(arc.Center, arc.Radius);\r\n return true;\r\n }\r\n return status === Status.True;\r\n });\r\n\r\n if (cir)\r\n {\r\n cus.length = 0;\r\n cus.push(cir);\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 const IsNorZeroVector = (v: Vector3) => v && !equalv3(v, ZeroVec, 1e-3);\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 || c instanceof Circle)\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 if (IsNorZeroVector(v))\r\n {\r\n v.normalize().cross(firstV);\r\n if (IsNorZeroVector(v))//避免平行向量\r\n {\r\n normal = v.normalize();\r\n break;\r\n }\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 (IsNorZeroVector(fv))//先判断零向量\r\n firstV = fv.normalize();//再归一化\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(), 1e-5))\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(), 1e-2))\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))\r\n 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 let rects: Polyline[] = [];\r\n let endParam = outline.EndParam;\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 let res2 = c2.IntersectWith2(outline, IntersectOption.ExtendThis);\r\n let pars: number[] = [];\r\n for (let i of res) pars.push(i.argParam);\r\n for (let i of res2) pars.push(i.argParam);\r\n for (let i = 0; i < pars.length; i++)\r\n {\r\n let p = pars[i];\r\n if (p < 0) p = 0;//请参照测试用例\r\n else if (p > endParam) p = endParam;//请参照测试用例\r\n else p = Math.floor(p);\r\n\r\n pars[i] = p;\r\n }\r\n pars.sort((a, b) => a - b);\r\n arrayRemoveDuplicateBySort(pars);\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 { 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 { Box3, Matrix3, Matrix4, Path, Shape as TShape, Vector3 } from 'three';\r\nimport { arrayRemoveIf } from '../Common/ArrayExt';\r\nimport { ObjectSnapMode } from '../Editor/ObjectSnapMode';\r\nimport { IntersectBox2 } from '../Geometry/Box';\r\nimport { equaln } from '../Geometry/GeUtils';\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\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 // TestDraw(this._Outline.Curve.Clone()); //测试代码\r\n // TestDraw(targetShape._Outline.Curve.Clone());\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 {\r\n console.warn(\"未知情况\");//qiannianzhou_lvzhijia.test.ts触发这个 本质是轮廓+轮廓会产生新的洞!\r\n\r\n //TODO: 这是个BUG\r\n // let f = new CADFiler;\r\n // f.Write(3);\r\n // c.Curve.ColorIndex = 1;\r\n // f.WriteObject(c.Curve);\r\n // f.WriteObject(ic.Curve);\r\n // ic.Curve.ColorIndex = 2;\r\n // f.WriteObject(unions.holes[0].Curve);\r\n // unions.holes[0].Curve.ColorIndex = 3;\r\n // copyTextToClipboard(f.ToString());\r\n }\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.UpdateOCSTo(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 { Matrix4 } from 'three';\r\nimport { IntersectBox2 } from '../Geometry/Box';\r\nimport { BoolOpeartionType } from '../GraphicsSystem/BoolOperateUtils';\r\nimport { CADFiler } from './CADFiler';\r\nimport { Shape } from './Shape';\r\n\r\n\r\nexport class ShapeManager\r\n{\r\n constructor(private _ShapeList: Shape[] = [])\r\n {\r\n\r\n }\r\n\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 if (type === RenderType.Physical)\r\n {\r\n let mesh = obj as Mesh;\r\n mesh.material = this.MeshMaterial;\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 BrName = \"brName\",\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 DrawNumber = \"drawNumber\",\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 { AutoRecord } from '../AutoRecord';\r\nimport { Factory } from '../CADFactory';\r\nimport { CADFiler } from '../CADFiler';\r\nimport { Entity } from '../Entity/Entity';\r\nimport { ObjectId } from '../ObjectId';\r\n\r\n@Factory\r\nexport class Hole extends Entity\r\n{\r\n @AutoRecord FId: ObjectId;\r\n @AutoRecord MId: ObjectId;//层板钉:{mid=层板} 排钻:{mid=面}\r\n protected _Height: number;\r\n @AutoRecord OtherHalfTongKong: ObjectId;\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 Clone()\r\n {\r\n let ent = super.Clone();\r\n ent.OtherHalfTongKong = null;\r\n return ent;\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 if (ver >= 6)\r\n {\r\n this.OtherHalfTongKong = file.ReadSoftObjectId();\r\n }\r\n\r\n }\r\n WriteFile(file: CADFiler)\r\n {\r\n super.WriteFile(file);\r\n file.Write(6);//ver\r\n file.Write(this._Height);\r\n file.WriteSoftObjectId(this.FId);\r\n file.WriteSoftObjectId(this.MId);\r\n file.WriteSoftObjectId(this.OtherHalfTongKong);\r\n }\r\n}\r\n","import { BufferGeometry, CylinderBufferGeometry, Float32BufferAttribute, LineSegments, Matrix3, Matrix4, Mesh, Object3D, Shape as TShape, Vector3 } from \"three\";\r\nimport { ColorMaterial } from '../../Common/ColorPalette';\r\nimport { DisposeThreeObj, Object3DRemoveAll } from '../../Common/Dispose';\r\nimport { FixIndex } from \"../../Common/Utils\";\r\nimport { ObjectSnapMode } from \"../../Editor/ObjectSnapMode\";\r\nimport { Box3Ext } from \"../../Geometry/Box\";\r\nimport { RenderType } from \"../../GraphicsSystem/RenderType\";\r\nimport { CADFactory, Factory } from '../CADFactory';\r\nimport { CADFiler } from '../CADFiler';\r\nimport { Circle } from \"../Entity/Circle\";\r\nimport { Hole } from \"./Hole\";\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 return this.BoundingBoxInOCS.applyMatrix4(this._Matrix);\r\n }\r\n\r\n /**\r\n * 返回对象在自身坐标系下的Box\r\n */\r\n get BoundingBoxInOCS(): Box3Ext\r\n {\r\n return new Box3Ext(new Vector3(-this._Radius, -this._Radius, 0), new Vector3(this._Radius, this._Radius, this._Height));\r\n }\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 Erase(isErase: boolean = true)\r\n {\r\n if (isErase === this.IsErase) return;\r\n super.Erase(isErase);\r\n if (!isErase) return;\r\n\r\n if (this.OtherHalfTongKong && !this.OtherHalfTongKong.IsErase)\r\n {\r\n let cy = this.OtherHalfTongKong.Object as this;\r\n cy.Type = GangDrillType.Ymj;\r\n cy.OtherHalfTongKong = null;\r\n }\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 { 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 = 0, //正面\r\n Reverse = 1, //反面\r\n Arbitrary = 2 //任意\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 ISealingData extends IHighSealedItem\r\n{\r\n length: number;\r\n type?: string;\r\n shop?: string;\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\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\n\r\nexport interface LightConfigOption extends IBaseOption\r\n{\r\n Intensity: number;\r\n lightColor: string;\r\n temperature: number;\r\n IndirectLightingIntensity: number;\r\n SpecularScale: number;\r\n CaseShadow: boolean;\r\n}\r\n\r\nexport interface PointLightOption extends LightConfigOption\r\n{\r\n SourceRadius: number;\r\n SoftSourceRadius: number;\r\n SourceLength: number;\r\n}\r\n\r\nexport interface SpotLightOption extends LightConfigOption\r\n{\r\n Angle: number;\r\n InnerConeAngle: number;\r\n SourceRadius: number;\r\n SoftSourceRadius: number;\r\n SourceLength: number;\r\n AttenuationRadius: number;\r\n ShowHelper: boolean;\r\n}\r\n\r\nexport interface RectAreaLightOption extends LightConfigOption\r\n{\r\n Width: number;\r\n Height: number;\r\n BarnDoorAngle: number;\r\n BarnDoorLength: number;\r\n AttenuationRadius: number;\r\n ShowHelper: boolean;\r\n}\r\n\r\nexport interface RightPlaneLightOption\r\n{\r\n version: number;\r\n ShowHemiLight: boolean;\r\n SkyLightColor: string;\r\n SkyLightIntensity: number;\r\n SkyLightIndirectLightingIntensity: number;\r\n ShowSunLight: boolean;\r\n SunLightIntensity: number;\r\n SunLightIndirectLightingIntensity: number;\r\n SunLightColor: string;\r\n SunLightTemperature: number;\r\n SunLightElevationDeg: number;\r\n SunLightRotateDeg: number;\r\n ShowExposure: boolean;\r\n AutoExposure: boolean;\r\n ExposureCompensation: number;\r\n SunTime: string;\r\n}\r\n\r\nexport interface ModifyTextsConfigOption\r\n{\r\n changeTexts: [string, string][];\r\n}\r\n\r\nexport interface KJLImportConfigOption extends IBaseOption\r\n{\r\n materials: MaterialMapOption[];\r\n isImportVirtualModel: boolean;\r\n}\r\nexport interface MaterialMapOption\r\n{\r\n id: string; //引用材质ID\r\n kjlName: string; //酷家乐基础材质名称\r\n}\r\n\r\nexport interface ViewportConfigOption\r\n{\r\n view: number;\r\n wireFrame: string;\r\n}\r\n\r\nexport interface Viewport2ConfigOption\r\n{\r\n align: string;\r\n view1: number,\r\n view2: number,\r\n wireFrame: string[],\r\n}\r\nexport interface Viewport3ConfigOption\r\n{\r\n align: string;\r\n view: number[],\r\n wireFrame: string[],\r\n}\r\n\r\nexport interface Viewport4ConfigOption\r\n{\r\n view: number[],\r\n wireFrame: string[],\r\n}\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\n\r\nexport interface SingleBoardOption extends BoardConfigOption\r\n{\r\n rotateX: number;\r\n rotateY: number;\r\n rotateZ: number;\r\n drawNumber?: 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 name: string;\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 RadioType\r\n{\r\n lefttop = \"1\",\r\n leftbottom = \"2\",\r\n righttop = \"3\",\r\n rightbottom = \"4\",\r\n}\r\n\r\nexport interface IBatchModifyPanelOption extends IBaseOption\r\n{\r\n length: string;\r\n width: string;\r\n thick: string;\r\n position: RadioType;\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\r\nexport interface CommonPanelConfigOption\r\n{\r\n orderType: string;\r\n}\r\n","import { Box3, Matrix4, Vector3 } from \"three\";\r\nimport { HostApplicationServices } from \"../../ApplicationServices/HostApplicationServices\";\r\nimport { EBoardKeyList } from \"../../Common/BoardKeyList\";\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 { 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 { isParallelTo, rotatePoint, ZAxis } from \"../../Geometry/GeUtils\";\r\nimport { DrillType } from \"../../UI/Store/BoardInterface\";\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 (HostApplicationServices.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\r\n if (Math.abs(derv.x) > Math.abs(derv.y))\r\n {\r\n if (derv.x > 0)\r\n option.down = hightDrill[i];\r\n else\r\n option.up = hightDrill[i];\r\n }\r\n else\r\n {\r\n if (derv.y > 0)\r\n option.right = hightDrill[i];\r\n else\r\n option.left = hightDrill[i];\r\n }\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\r\n if (Math.abs(derv.x) > Math.abs(derv.y))\r\n {\r\n if (derv.x > 0)\r\n highDrill.push(option.down);\r\n else\r\n highDrill.push(option.up);\r\n }\r\n else\r\n {\r\n if (derv.y > 0)\r\n highDrill.push(option.right);\r\n else\r\n highDrill.push(option.left);\r\n }\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 { 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 { 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","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 { 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 { EBoardKeyList } from \"../../Common/BoardKeyList\";\r\nimport { ComposingType, FaceDirection, IBaseOption, LinesType } from \"./BoardInterface\";\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 Include = \"//\",\r\n}\r\n","import { IBaseOption } from \"./BoardInterface\";\r\nimport { ITemplateParam } from \"./RightPanelStore/ITemplateParam\";\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 useRule: boolean;\r\n changeTemplateBoardNameOfOpenDir: boolean;//使用模块时,修改板件名称\r\n frontAndBackDrill: boolean; //正反面排孔\r\n}\r\n\r\n/**\r\n * 铰链数据接口\r\n */\r\nexport interface IHingeConfigOption extends IBaseOption\r\n{\r\n hingeCount: number; //铰链\r\n hindeTopDist: number;\r\n hindeBottomDist: number;\r\n useRule: boolean,\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?: ITemplateParam[];\r\n title?: string;\r\n isHandle?: boolean;\r\n isHinge?: boolean;\r\n tagName?: string;\r\n isKuGan?: boolean;\r\n diy_logo?: string;\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 \"./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 { EBoardKeyList } from \"../../Common/BoardKeyList\";\r\nimport { IBaseOption } from \"./BoardInterface\";\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 isExtendsBH2: boolean;//是否继承\r\n followNarrow: boolean;//酒格补板前缩跟随\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","export enum EOrderType\r\n{\r\n ByCreate = \"create_date desc\",\r\n ByCreate2 = \"create_date\",\r\n ByUpdate = \"update_date desc\",\r\n ByUpdate2 = \"update_date\",\r\n ByName = \"name\",\r\n ByName2 = \"name desc\",\r\n}\r\n","import { Curve2RecOption } from \"../Add-on/twoD2threeD/Modals/Curve2RecOption\";\r\nimport { IParseBoardNameOption, IRec2BrOption, IRect2Br2Option } from \"../Add-on/twoD2threeD/R2bInterface\";\r\nimport { EBoardKeyList } from \"../Common/BoardKeyList\";\r\nimport { IUpdateBoardInfosOption } from \"../UI/Components/Board/UpdateBoardInfointerface\";\r\nimport { EMetalsType, ICompHardwareOption, ICylMetalsOption, IExtMetalsOption, IToplineOption } from \"../UI/Components/RightPanel/RightPanelInterface\";\r\nimport { IKuGangDrawOption } from \"../UI/Components/Template/TemplateInterface\";\r\nimport { ECompareType, IBoardFindOption } from \"../UI/Store/BoardFindInterface\";\r\nimport { BehindBoardOption, BehindHeightPositon, BoardProcessOption, BoardType, BrRelativePos, ClosingStripOption, CommonPanelConfigOption, ComposingType, CurtailType, FaceDirection, IBatchModifyPanelOption, IBoardBatchCurtailOption, KJLImportConfigOption, LayerBoardOption, LayerNailOption, LinesType, ModifyTextsConfigOption, PointLightOption, RadioType, RectAreaLightOption, RightPlaneLightOption, SideBoardOption, SingleBoardOption, SpotLightOption, StripType, TBBoardOption, VerticalBoardOption, Viewport2ConfigOption, Viewport3ConfigOption, Viewport4ConfigOption, ViewportConfigOption } from \"../UI/Store/BoardInterface\";\r\nimport { DoorPosType, HandleHorPos, HandleVePos, IDoorConfigOption, IDrawerConfigOption, IHingeConfigOption } from \"../UI/Store/DoorInterface\";\r\nimport { IHSOption } from \"../UI/Store/HSInterface\";\r\nimport { ELatticeArrayType, ILatticeOption } from \"../UI/Store/LatticeInterface\";\r\nimport { EFullDir, EFullType, EWineRackType, EWRackArrayType, IWineRackOption } from \"../UI/Store/WineRackInterface\";\r\nimport { EOrderType } from \"./OrderType\";\r\n\r\nexport const DefaultLayerBoardConfig: LayerBoardOption = {\r\n version: 3,\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: 3,\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: 3,\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 isExtendsBH2: false,\r\n followNarrow: false,\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 DefaultViewportConfigOption: ViewportConfigOption = {\r\n view: 3,\r\n wireFrame: \"打印模式\",\r\n};\r\nObject.freeze(DefaultViewportConfigOption);\r\n\r\nexport const DefaultViewport2ConfigOption: Viewport2ConfigOption = {\r\n align: \"垂直\",\r\n wireFrame: [\"打印模式\", \"打印模式\"],\r\n view1: 1,\r\n view2: 3,\r\n};\r\nObject.freeze(DefaultViewport2ConfigOption);\r\n\r\nexport const DefaultViewport3ConfigOption: Viewport3ConfigOption = {\r\n align: \"V\",\r\n wireFrame: [\"打印模式\", \"打印模式\", \"打印模式\"],\r\n view: [4, 3, 7],\r\n};\r\nObject.freeze(DefaultViewport3ConfigOption);\r\n\r\nexport const DefaultViewport4ConfigOption: Viewport4ConfigOption = {\r\n view: [4, 1, 3, 7],\r\n wireFrame: [\"打印模式\", \"打印模式\", \"打印模式\", \"打印模式\"],\r\n};\r\nObject.freeze(DefaultViewport4ConfigOption);\r\n\r\nexport const DefaultModifyTextsOption: ModifyTextsConfigOption = {\r\n changeTexts: Array.from({ length: 5 }, () => [\"\", \"\"]),\r\n};\r\nObject.freeze(DefaultModifyTextsOption);\r\n\r\nexport const DefaultKJImportOption: KJLImportConfigOption = {\r\n version: 2,\r\n materials: [],\r\n isImportVirtualModel: true\r\n};\r\nObject.freeze(DefaultKJImportOption);\r\n\r\nexport const DefaultPointLightOption: PointLightOption = {\r\n version: 1,\r\n lightColor: \"#FFFFFF\",\r\n temperature: 6500,\r\n Intensity: 100,\r\n IndirectLightingIntensity: 1,\r\n SpecularScale: 1,\r\n SourceRadius: 10,\r\n SoftSourceRadius: 0,\r\n SourceLength: 0,\r\n CaseShadow: true,\r\n};\r\nObject.freeze(DefaultPointLightOption);\r\n\r\nexport const DefaultSpotLightOption: SpotLightOption = {\r\n version: 1,\r\n lightColor: \"#FFFFFF\",\r\n temperature: 6500,\r\n Intensity: 100,\r\n IndirectLightingIntensity: 1,\r\n SpecularScale: 1,\r\n SourceRadius: 0,\r\n SoftSourceRadius: 0,\r\n SourceLength: 0,\r\n Angle: 40,\r\n InnerConeAngle: 0,\r\n AttenuationRadius: 300,\r\n CaseShadow: true,\r\n ShowHelper: true,\r\n};\r\nObject.freeze(DefaultSpotLightOption);\r\n\r\nexport const DefaultRectAreaLightOption: RectAreaLightOption = {\r\n version: 1,\r\n lightColor: \"#FFFFFF\",\r\n temperature: 6500,\r\n Intensity: 100,\r\n IndirectLightingIntensity: 1,\r\n SpecularScale: 1,\r\n AttenuationRadius: 300,\r\n Width: 150,\r\n Height: 150,\r\n BarnDoorAngle: 90,\r\n BarnDoorLength: 20,\r\n CaseShadow: true,\r\n ShowHelper: true,\r\n};\r\nObject.freeze(DefaultRectAreaLightOption);\r\n\r\nexport const DefaultRightPlaneLightOption: RightPlaneLightOption = {\r\n version: 2,\r\n ShowHemiLight: true,\r\n ShowSunLight: true,\r\n SkyLightColor: \"#FFFFFF\",\r\n SkyLightIntensity: 1,\r\n SkyLightIndirectLightingIntensity: 1,\r\n SunLightIntensity: 50,\r\n SunLightIndirectLightingIntensity: 1,\r\n SunLightColor: \"#FFFFFF\",\r\n SunLightTemperature: 6500,\r\n SunLightElevationDeg: 60,\r\n SunLightRotateDeg: 300,\r\n ShowExposure: true,\r\n AutoExposure: false,\r\n ExposureCompensation: 0,\r\n SunTime: \"默认\",\r\n};\r\nObject.freeze(DefaultRightPlaneLightOption);\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 drawNumber: 1\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: 5,\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 useRule: false,\r\n changeTemplateBoardNameOfOpenDir: true,\r\n frontAndBackDrill: false,\r\n};\r\nObject.freeze(DefaultDoorOption);\r\nexport const DefaultHingeOption: IHingeConfigOption = {\r\n hingeCount: 0,\r\n hindeTopDist: 0,\r\n hindeBottomDist: 0,\r\n useRule: false,\r\n};\r\nObject.freeze(DefaultHingeOption);\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 DefaultBatchModifyPanelOption: IBatchModifyPanelOption = {\r\n version: 1,\r\n length: \"L\",\r\n width: \"W\",\r\n thick: \"H\",\r\n position: RadioType.lefttop,\r\n};\r\nObject.freeze(DefaultBatchModifyPanelOption);\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 forceUseUCS: false,\r\n ForceUseFrontViewCS: false,\r\n};\r\nObject.freeze(DefaultCurve2RecOption);\r\n\r\nexport const DefaultUpdateInfoOption: IUpdateBoardInfosOption = {\r\n version: 2,\r\n [EBoardKeyList.BrName]: \"\",\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 isChaiDan: true,\r\n condition: {\r\n [EBoardKeyList.BrName]: false,\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 isChaiDan: true,\r\n autoCutOption: { isAutoCut: false, isRelevance: false }\r\n }\r\n};\r\n\r\nObject.freeze(DefaultUpdateInfoOption);\r\n\r\nexport const DefaultKuGanOption: IKuGangDrawOption = {\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 upDist: 0,\r\n downDist: 0,\r\n};\r\nObject.freeze(DefaultKuGanOption);\r\n\r\n\r\nexport const DefaultParseBoardNameOPtion: IParseBoardNameOption = {\r\n version: 1,\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 isBack: true,\r\n backName: \"背板\",\r\n isAloneStripName: true,//收口条名字独立\r\n};\r\nObject.freeze(DefaultParseBoardNameOPtion);\r\n\r\nexport const DefaultR2bOption: IRec2BrOption = {\r\n version: 5,\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 ...DefaultParseBoardNameOPtion,\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 backBrTemplateId: \"\",\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 closeStripThickness: 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\r\nexport const DefaultHSOption: IHSOption = {\r\n version: 1,\r\n isAll: true,\r\n isHide: true,\r\n isDelete: false,\r\n behind: false,\r\n layer: false,\r\n vertial: false,\r\n footer: false,\r\n tbBoard: false,\r\n specialShape: false,\r\n hole: false,\r\n door: false,\r\n drawer: false,\r\n closingStrip: false,\r\n winerack: false,\r\n wood: false,\r\n nails: false,\r\n topline: false,\r\n handle: false,\r\n hinge: false,\r\n hwComposity: false,\r\n lattice: false,\r\n dim: false,\r\n curve: false,\r\n line: false,\r\n polyline: false,\r\n circle: false,\r\n arc: false\r\n};\r\n\r\nexport const DefaultCommonPanelOption: CommonPanelConfigOption = {\r\n orderType: EOrderType.ByUpdate,\r\n};\r\nObject.freeze(DefaultCommonPanelOption);\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 true => t2 , false => t1\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","\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\nexport const ReportErrorWrap = {\r\n ReportError: undefined,\r\n IsProduction: false,\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(4);\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(4);\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 { 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 { Box3, 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 { UpdateDraw } from \"../../Common/Status\";\r\nimport { ObjectSnapMode } from \"../../Editor/ObjectSnapMode\";\r\nimport { equaln, 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.GetConceptualEdgeMaterial())\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.GetPhysical2EdgeMaterial())\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.GetConceptualEdgeMaterial())\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.GetPhysical2EdgeMaterial())\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\r\n get BoundingBox()\r\n {\r\n let geom = this.MeshGeometry;\r\n\r\n if (!geom)\r\n {\r\n console.error(\"SweepSolid无法建模\");\r\n return new Box3;\r\n }\r\n\r\n if (!geom.boundingBox)\r\n geom.computeBoundingBox();\r\n\r\n return geom.boundingBox.clone().applyMatrix4(this._Matrix);\r\n }\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 ApplyMatrix(m: Matrix4)\r\n {\r\n this.WriteAllObjectRecord();\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 if (!equalv3(xA.clone().cross(yA).normalize(), zA))\r\n this.ApplyMirrorMatrix(m);\r\n else\r\n {\r\n this._Matrix.multiplyMatrices(m, this._Matrix);\r\n this._SpaceOCS.multiplyMatrices(m, this._SpaceOCS);\r\n this.Update(UpdateDraw.Matrix);\r\n }\r\n }\r\n else\r\n {\r\n this.ApplyScaleMatrix(m);\r\n }\r\n return this;\r\n }\r\n protected ApplyMirrorMatrix(m: Matrix4)\r\n {\r\n if (!this.Id)\r\n {\r\n this._Matrix.multiplyMatrices(m, this._Matrix);\r\n return this;\r\n }\r\n let ocsInv = this.OCSInv;\r\n this._PathCurve.ApplyMatrix(this.OCS).ApplyMatrix(m).ApplyMatrix(ocsInv);\r\n\r\n let mtx = this._PathCurve.OCS;\r\n let mtxInv = new Matrix4().getInverse(mtx);\r\n this._PathCurve.ApplyMatrix(mtxInv);\r\n this._SpaceOCS.copy(this._Matrix);\r\n this._Matrix.multiplyMatrices(this._Matrix, mtx);\r\n\r\n this.Update(UpdateDraw.Geometry);\r\n return this;\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, AutoRecordObject } 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 @AutoRecordObject 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(): Curve[]\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(): Curve[]\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 { HostApplicationServices } from \"../../ApplicationServices/HostApplicationServices\";\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 { GetBoardSealingData, GetSealedBoardContour } from \"../../GraphicsSystem/CalcEdgeSealing\";\r\nimport { IHardwareType, Production } from \"../../Production/Product\";\r\nimport { HoleInBoard } from \"../DrawDrilling/HoleUtils\";\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: (key: string, block: Board, size: number) => void; getHoles?: (name: string, hole: CylinderHole) => void; };\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 let holes = ids.map(id => id.Object).filter(h => h) as Hole[];\r\n\r\n if (!holes[0] || !HoleInBoard(holes, b))\r\n continue;\r\n\r\n let isTk = false;\r\n let spliteName: string;\r\n let hole: Hole;\r\n let pxlCount = 0;\r\n findHole:\r\n for (let objId of ids)\r\n {\r\n let gd = objId.Object as CylinderHole | ExtrudeHole;\r\n if (!gd || gd.IsErase) break;\r\n\r\n const group = gd.GroupId?.Object as GroupRecord;\r\n\r\n if (!group)\r\n {\r\n Toaster({ message: `柜名:${b.BoardProcessOption.cabinetName} 板名:${b.Name} 的排钻的编组丢失,统计排钻个数时会丢失该个数!`, timeout: 5000, intent: Intent.DANGER });\r\n break;\r\n }\r\n\r\n if (gd instanceof CylinderHole)\r\n {\r\n switch (gd.Type)\r\n {\r\n case GangDrillType.Pxl:\r\n pxlCount++;\r\n break;\r\n case GangDrillType.Ljg:\r\n case GangDrillType.Ymj:\r\n break;\r\n case GangDrillType.TK:\r\n isTk = true;\r\n break;\r\n case GangDrillType.Wood:\r\n case GangDrillType.WoodPXL:\r\n spliteName = \"木销\";\r\n break;\r\n default:\r\n break findHole;\r\n }\r\n options?.getHoles && options?.getHoles(spliteName || group.Name || \"未命名\", gd);\r\n }\r\n else\r\n {\r\n if (gd.isThrough)\r\n isTk = true;\r\n }\r\n if (!spliteName)\r\n spliteName = group.Name || \"未命名\";\r\n if (!hole)\r\n hole = gd;\r\n }\r\n\r\n if (spliteName && hole)\r\n {\r\n if (isTk && HostApplicationServices.chaidanOption.statTk)\r\n {\r\n addDrillToMap(\"通孔\" + spliteName, hole);\r\n }\r\n else if (pxlCount === 2 && HostApplicationServices.chaidanOption.statSt)\r\n {\r\n addDrillToMap(\"双头\" + spliteName, hole);\r\n }\r\n else\r\n {\r\n addDrillToMap(spliteName, hole);\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 = GetBoardSealingData(GetSealedBoardContour(b, true, true));\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 && options.sealGruopKey)\r\n {\r\n options.sealGruopKey(k, b, data.size);\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","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","import { BufferGeometry, Float32BufferAttribute, Geometry, Line, LineBasicMaterial, LineSegments, Matrix4, Object3D, Vector3 } from \"three\";\r\nimport { ColorMaterial } from \"../Common/ColorPalette\";\r\nimport { FixIndex } from \"../Common/Utils\";\r\nimport { ExtrudeHole } from \"../DatabaseServices/3DSolid/ExtrudeHole\";\r\nimport { Contour } from \"../DatabaseServices/Contour\";\r\nimport { Board } from \"../DatabaseServices/Entity/Board\";\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 { MatrixIsIdentityCS, MoveMatrix } from \"./GeUtils\";\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\n//使用lineseg来生成拉伸的边框,避免生成过多的实体导致的drawcall次数增多\r\nexport function FastWireframe(br: ExtrudeSolid, color = 0, divCount = 6, optArc = true): Line[]\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(divCount, optArc);\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.OCSNoClone);\r\n\r\n let edge = new LineSegments(edgeGeo, material);\r\n edge.applyMatrix4(cu.OCSNoClone);\r\n\r\n let result = [line, edge];\r\n\r\n let ocsInv = br.OCSInv;\r\n\r\n if (br.Grooves.length < 100)\r\n for (let g of br.Grooves)\r\n {\r\n let m = ocsInv.clone().multiply(g.OCSNoClone);\r\n let lines = FastWireframe(g, color, 3, false);\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\n\r\nlet tempP = new Vector3;\r\nexport function FastExtrudeEdgeGeometry(ext: ExtrudeSolid, color = 0, divCount = 6, optArc = true, coords: number[] = [], inv: Matrix4 = undefined)\r\n{\r\n color = color || ext.ColorIndex;\r\n\r\n let thickness = ext.Thickness;\r\n\r\n let cu = ext.ContourCurve;\r\n let pts = cu.Shape.getPoints(divCount, optArc);\r\n\r\n let startIndex = coords.length / 3;\r\n\r\n for (let i = 0; i < pts.length; i++)\r\n {\r\n let p = pts[i];\r\n let nextp = pts[FixIndex(i + 1, pts)];\r\n //底面\r\n coords.push(p.x, p.y, 0, nextp.x, nextp.y, 0);\r\n //顶面\r\n coords.push(p.x, p.y, thickness, nextp.x, nextp.y, thickness);\r\n\r\n if (p[\"_mask_\"])//侧面\r\n coords.push(p.x, p.y, 0, p.x, p.y, thickness);\r\n }\r\n\r\n let m = inv ? (ext.Grooves.length ? inv.clone() : inv).multiply(cu.OCSNoClone) : cu.OCSNoClone;\r\n\r\n if (!MatrixIsIdentityCS(m))\r\n {\r\n let count = coords.length / 3;\r\n for (let i = startIndex; i < count; i++)\r\n {\r\n let a = i * 3;\r\n let b = a + 1;\r\n let c = a + 2;\r\n\r\n tempP.set(coords[a], coords[b], coords[c]);\r\n tempP.applyMatrix4(m);\r\n coords[a] = tempP.x;\r\n coords[b] = tempP.y;\r\n coords[c] = tempP.z;\r\n }\r\n }\r\n\r\n let ocsInv = inv ? (inv.multiply(ext.OCSInv)) : ext.OCSInv;\r\n optArc = ext.Grooves.length < 100;\r\n for (let g of ext.Grooves)\r\n {\r\n FastExtrudeEdgeGeometry(g, color, divCount, optArc, coords, ocsInv.clone().multiply(g.OCSNoClone));\r\n }\r\n\r\n return coords;\r\n}\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, Vector3 } from \"three\";\r\nimport { arrayLast, arrayPushArray } from \"../Common/ArrayExt\";\r\nimport { FixIndex } from \"../Common/Utils\";\r\nimport { equalv3 } from \"./GeUtils\";\r\n\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 arrayPushArray(pts, GenerateExtrudeEdgeGeometryPoints(cs, height));\r\n let geo = new BufferGeometry().setFromPoints(pts);\r\n return geo;\r\n}\r\n\r\n//拉伸点表成为Geom\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\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 geom3 from \"@jscad/modeling/src/geometries/geom3\";\r\nimport { Geom3 } from \"@jscad/modeling/src/geometries/types\";\r\nimport { Mat4 } from \"@jscad/modeling/src/maths/mat4\";\r\nimport { Vec3 } from \"@jscad/modeling/src/maths/vec3\";\r\nimport { intersect } from \"@jscad/modeling/src/operations/booleans\";\r\nimport { Matrix4 } from \"three\";\r\n\r\nexport interface Geom3Res\r\n{\r\n polygons: Array<{\r\n vertices: Array,\r\n plane: [number, number, number, number];\r\n }>;\r\n}\r\n\r\nexport function CSGIntersect(csg1: Geom3, csg2: Geom3, csg2tranfrom: Matrix4): Geom3Res\r\n{\r\n //因为内部使用geom3进行box cache 所以我们新建了一个geom3 避免被cache导致错误\r\n let csg1Clone = geom3.create(csg1.polygons.concat());\r\n let csg2Clone = geom3.create(csg2.polygons.concat());\r\n csg2Clone.transforms = csg2tranfrom.elements as Mat4;\r\n return intersect(csg1Clone, csg2Clone) as unknown as Geom3Res;\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","import { Matrix4 } from \"three\";\r\nimport { arrayLast, arrayRemoveDuplicateBySort } from \"../../../Common/ArrayExt\";\r\nimport { equalv3 } from \"../../../Geometry/GeUtils\";\r\nimport { EPS, _CSGDEBUG } from \"../constants\";\r\nimport { IsMirror } from \"./IsMirrot\";\r\nimport { Plane } from \"./Plane\";\r\nimport { Vector3D } from \"./Vector3\";\r\nimport { Vertex3D } from \"./Vertex3\";\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 arrayRemoveDuplicateBySort(backVertices, (v1, v2) => equalv3(v1.pos, v2.pos, EPS));\r\n if (backVertices.length > 2 && equalv3(backVertices[0].pos, arrayLast(backVertices).pos, EPS))\r\n backVertices.pop();\r\n arrayRemoveDuplicateBySort(frontVertices, (v1, v2) => equalv3(v1.pos, v2.pos, EPS));\r\n if (frontVertices.length > 2 && equalv3(frontVertices[0].pos, arrayLast(frontVertices).pos, EPS))\r\n frontVertices.pop();\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 /**\r\n * 是一个凸多边形\r\n * @param vertices 顶点列表\r\n * @param planenormal 平面法线\r\n * @returns true:是凸多边形 false:不是凸多边形\r\n */\r\n static verticesConvex(vertices: Vertex3D[], planenormal: Vector3D): boolean\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 geom3, { Geom3 } from \"@jscad/modeling/src/geometries/geom3\";\r\nimport { create, Poly3 } from \"@jscad/modeling/src/geometries/poly3\";\r\nimport { Vec3 } from \"@jscad/modeling/src/maths/vec3\";\r\nimport { BufferGeometry, Face3, Geometry, Vector2, Vector3 } from \"three\";\r\nimport { Geom3Res } from \"../../Common/CSGIntersect\";\r\nimport { AsVector2, AsVector3, 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 = AsVector3(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 = AsVector3(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(AsVector3(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 AsVector2(firstVertex.uv),\r\n AsVector2(poly.vertices[i + 1].uv),\r\n AsVector2(poly.vertices[i + 2].uv)\r\n ]);\r\n }\r\n }\r\n return geo;\r\n}\r\n\r\nexport function Geometry2CSG2(geometry: Geometry | BufferGeometry): Geom3\r\n{\r\n if (geometry instanceof BufferGeometry)\r\n geometry = new Geometry().fromBufferGeometry(geometry);\r\n\r\n let polygons: Poly3[] = [];\r\n for (let i = 0; i < geometry.faces.length; i++)\r\n {\r\n let face = geometry.faces[i];\r\n let vertices: Vec3[] = [];\r\n if (face instanceof Face3)\r\n {\r\n vertices.push(geometry.vertices[face.a].toArray() as Vec3);\r\n vertices.push(geometry.vertices[face.b].toArray() as Vec3);\r\n vertices.push(geometry.vertices[face.c].toArray() as Vec3);\r\n }\r\n polygons.push(create(vertices));\r\n }\r\n return geom3.create(polygons);\r\n}\r\n\r\nexport function CSG2Geometry2(csg: Geom3 | Geom3Res): Geometry\r\n{\r\n let geo = new Geometry;\r\n for (let poly of csg.polygons)\r\n {\r\n //@ts-ignore\r\n let normal = new Vector3().fromArray(poly.plane);\r\n\r\n let startIndex = geo.vertices.length;\r\n for (let v of poly.vertices)\r\n geo.vertices.push(new Vector3().fromArray(v));\r\n\r\n for (let i = poly.vertices.length - 3; i >= 0; i--)\r\n {\r\n let f = new Face3(\r\n startIndex,\r\n startIndex + i + 1,\r\n startIndex + i + 2,\r\n normal);\r\n\r\n geo.faces.push(f);\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","import { Poly3 } from \"@jscad/modeling/src/geometries/types\";\r\nimport { Vec3 } from \"@jscad/modeling/src/maths/vec3\";\r\nimport { Vector3 } from \"three\";\r\nimport { Geom3Res } from \"../Common/CSGIntersect\";\r\nimport { ToFixed } from \"../Common/Utils\";\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?: Geom3Res, 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: Poly3)\r\n {\r\n let strs = poly.vertices.map(p => this.GenerateP(p));\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().fromArray(v3);\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: Map = new Map();\r\n private GenerateP(v: Vec3)\r\n {\r\n let str = v.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 { Vec2, Vector2, Vector3 } from \"three\";\r\nimport { FixIndex } from \"../Common/Utils\";\r\nimport { AsVector3 } from \"./GeUtils\";\r\n\r\n/**\r\n * 快速的对点表进行偏移\r\n * @param contour\r\n * @param [offsetDist=1]\r\n * @param [ignoreSpike=true] 忽略尖角优化(如果不忽略,那么尖角将会变钝(有点奇怪))\r\n * @returns 偏移后的点表\r\n */\r\nexport function FastOffset(contour: Vector3[], offsetDist = 1, ignoreSpike = true): Vector3[]\r\n{\r\n let res: Vector3[] = [];\r\n\r\n for (let i = 0; i < contour.length; i++)\r\n {\r\n let v = AsVector3(getBevelVec(contour[i], contour[FixIndex(i - 1, contour)], contour[FixIndex(i + 1, contour)]));\r\n // TestDraw(new Line(contour[i], contour[i].clone().add(v)), 3);\r\n let p = v.multiplyScalar(offsetDist).add(contour[i]);\r\n res.push(p);\r\n }\r\n return res;\r\n}\r\n\r\n//Ref:threejs ExtrudeGeometry源码\r\nfunction getBevelVec(inPt: Vec2, inPrev: Vec2, inNext: Vec2, ignoreSpike = true): Vector2\r\n{\r\n\r\n // computes for inPt the corresponding point inPt' on a new contour\r\n // shifted by 1 unit (length of normalized vector) to the left\r\n // if we walk along contour clockwise, this new contour is outside the old one\r\n //\r\n // inPt' is the intersection of the two lines parallel to the two\r\n // adjacent edges of inPt at a distance of 1 unit on the left side.\r\n\r\n let v_trans_x: number, v_trans_y: number, shrink_by: number; // resulting translation vector for inPt\r\n\r\n // good reading for geometry algorithms (here: line-line intersection)\r\n // http://geomalgorithms.com/a05-_intersect-1.html\r\n\r\n const v_prev_x = inPt.x - inPrev.x,\r\n v_prev_y = inPt.y - inPrev.y;\r\n const v_next_x = inNext.x - inPt.x,\r\n v_next_y = inNext.y - inPt.y;\r\n\r\n const v_prev_lensq = (v_prev_x * v_prev_x + v_prev_y * v_prev_y);\r\n\r\n // check for collinear edges\r\n const collinear0 = (v_prev_x * v_next_y - v_prev_y * v_next_x);\r\n\r\n if (Math.abs(collinear0) > Number.EPSILON)\r\n {\r\n // not collinear\r\n // length of vectors for normalizing\r\n const v_prev_len = Math.sqrt(v_prev_lensq);\r\n const v_next_len = Math.sqrt(v_next_x * v_next_x + v_next_y * v_next_y);\r\n // shift adjacent points by unit vectors to the left\r\n const ptPrevShift_x = (inPrev.x - v_prev_y / v_prev_len);\r\n const ptPrevShift_y = (inPrev.y + v_prev_x / v_prev_len);\r\n\r\n const ptNextShift_x = (inNext.x - v_next_y / v_next_len);\r\n const ptNextShift_y = (inNext.y + v_next_x / v_next_len);\r\n // scaling factor for v_prev to intersection point\r\n const sf = ((ptNextShift_x - ptPrevShift_x) * v_next_y -\r\n (ptNextShift_y - ptPrevShift_y) * v_next_x) /\r\n (v_prev_x * v_next_y - v_prev_y * v_next_x);\r\n\r\n // vector from inPt to intersection point\r\n\r\n v_trans_x = (ptPrevShift_x + v_prev_x * sf - inPt.x);\r\n v_trans_y = (ptPrevShift_y + v_prev_y * sf - inPt.y);\r\n\r\n // Don't normalize!, otherwise sharp corners become ugly\r\n // but prevent crazy spikes\r\n const v_trans_lensq = (v_trans_x * v_trans_x + v_trans_y * v_trans_y);\r\n if (v_trans_lensq <= 2 || ignoreSpike)\r\n return new Vector2(v_trans_x, v_trans_y);\r\n else\r\n shrink_by = Math.sqrt(v_trans_lensq / 2);\r\n }\r\n else\r\n {\r\n // handle special case of collinear edges\r\n let direction_eq = false; // assumes: opposite\r\n\r\n if (v_prev_x > Number.EPSILON)\r\n {\r\n if (v_next_x > Number.EPSILON)\r\n direction_eq = true;\r\n }\r\n else\r\n {\r\n if (v_prev_x < - Number.EPSILON)\r\n {\r\n if (v_next_x < - Number.EPSILON)\r\n direction_eq = true;\r\n }\r\n else\r\n {\r\n if (Math.sign(v_prev_y) === Math.sign(v_next_y))\r\n direction_eq = true;\r\n }\r\n }\r\n\r\n if (direction_eq || ignoreSpike)\r\n {\r\n // console.log(\"Warning: lines are a straight sequence\");\r\n v_trans_x = - v_prev_y;\r\n v_trans_y = v_prev_x;\r\n shrink_by = Math.sqrt(v_prev_lensq);\r\n }\r\n else\r\n {\r\n // console.log(\"Warning: lines are a straight spike\");\r\n v_trans_x = v_prev_x;\r\n v_trans_y = v_prev_y;\r\n shrink_by = Math.sqrt(v_prev_lensq / 2);\r\n }\r\n }\r\n return new Vector2(v_trans_x / shrink_by, v_trans_y / shrink_by);\r\n}\r\n","import { Vector3 } from \"three\";\r\nimport { arraySortByNumber } from \"../../Common/ArrayExt\";\r\nimport { clamp } from \"../../Common/Utils\";\r\nimport { Arc } from \"../../DatabaseServices/Entity/Arc\";\r\nimport { Circle } from \"../../DatabaseServices/Entity/Circle\";\r\nimport { ExtrudeContourCurve } from \"../../DatabaseServices/Entity/Extrude\";\r\nimport { AsVector3 } from \"../GeUtils\";\r\n\r\nconst ARC_SplitLength = 4;//圆的分段长度\r\nconst Arc_MinSplitCount = 12;//圆的最小分段个数\r\nconst ARC_MaxSplitCount = 360;//圆的最大分段个数\r\n\r\n/**\r\n *\r\n * @param cu\r\n */\r\nexport function SplitCurveParams(cu: ExtrudeContourCurve): number[]\r\n{\r\n let xparams: number[] = [];\r\n if (cu instanceof Circle)\r\n {\r\n let splitCount = cu.Radius / ARC_SplitLength;\r\n splitCount = clamp(Math.floor(splitCount), Arc_MinSplitCount, ARC_MaxSplitCount);\r\n for (let i = 0; i < splitCount; i++)\r\n xparams.push(i / splitCount);\r\n }\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.GetBulgeAt(i) !== 0)\r\n {\r\n let arc = cu.GetCurveAtIndex(i) as Arc;\r\n let splitCount = arc.Radius / ARC_SplitLength;\r\n splitCount = clamp(Math.floor(splitCount), Arc_MinSplitCount, ARC_MaxSplitCount);\r\n if (splitCount === 0)\r\n 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)\r\n continue;\r\n\r\n for (let p of params)\r\n {\r\n if (p > 1e-5 && p < 0.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\nexport function SplitCurvePoints(cu: ExtrudeContourCurve): Vector3[]\r\n{\r\n let pts: Vector3[] = [];\r\n if (cu instanceof Circle)\r\n {\r\n let splitCount = cu.Radius / ARC_SplitLength;\r\n splitCount = clamp(Math.floor(splitCount), Arc_MinSplitCount, ARC_MaxSplitCount);\r\n for (let i = 0; i < splitCount; i++)\r\n pts.push(cu.GetPointAtParam(i / splitCount));\r\n }\r\n\r\n else\r\n //分段1\r\n for (let i = 0; i < cu.EndParam; i++)\r\n {\r\n pts.push(AsVector3(cu.GetPoint2dAt(i)).applyMatrix4(cu.OCSNoClone));\r\n if (cu.GetBulgeAt(i) !== 0)\r\n {\r\n let arc = cu.GetCurveAtIndex(i) as Arc;\r\n let splitCount = arc.Radius / ARC_SplitLength;\r\n splitCount = clamp(Math.floor(splitCount), Arc_MinSplitCount, ARC_MaxSplitCount);\r\n if (splitCount === 0)\r\n continue;\r\n\r\n let divParam = 1 / splitCount;\r\n for (let j = 1; j < splitCount - 1; j++)\r\n {\r\n let p = arc.GetPointAtParam(divParam * j);\r\n pts.push(p);\r\n }\r\n }\r\n }\r\n pts.push(cu.EndPoint);\r\n return pts;\r\n}\r\n\r\nexport function SplitArcParams(arc: Arc): number[]\r\n{\r\n let splitCount = arc.Radius / ARC_SplitLength;\r\n splitCount = clamp(Math.floor(splitCount), Arc_MinSplitCount, ARC_MaxSplitCount);\r\n if (splitCount === 0)\r\n return [];\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)\r\n return [];\r\n\r\n return params.filter(p => p > 1e-5 && p < 9.99999);\r\n}\r\n","import Flatbush from 'flatbush';\r\nimport { Box3, BufferGeometry, Float32BufferAttribute, MathUtils, Matrix4, Shape as TShape, ShapeUtils, Vector3 } from \"three\";\r\nimport { arrayPushArray, arrayRemoveDuplicateBySort, arraySortByNumber } from \"../../Common/ArrayExt\";\r\nimport { curveLinkGroup } from \"../../Common/CurveUtils\";\r\nimport { FixIndex } from \"../../Common/Utils\";\r\nimport { Contour, fastCurveInCurve2 } from \"../../DatabaseServices/Contour\";\r\nimport { Board } from \"../../DatabaseServices/Entity/Board\";\r\nimport { Circle } from \"../../DatabaseServices/Entity/Circle\";\r\nimport { Curve } from \"../../DatabaseServices/Entity/Curve\";\r\nimport { ExtrudeContourCurve, ExtrudeSolid, MaxDrawGrooveCount } 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\nimport { SplitCurveParams } from './SplitCurveParams';\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: ExtrudeContourCurve): 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.UpdateOCSTo(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时,表示它是一个洞(如果有多层时,使用IsHole判断)\r\n\r\n box: Box3;\r\n area: number;\r\n constructor(public contour: Contour, public children: ContourTreeNode[] = []) { }\r\n\r\n SetParent(node: ContourTreeNode)\r\n {\r\n if (this.parent)\r\n throw \"ContourTreeNode重复设置父对象\";\r\n this.parent = node;\r\n node.children.push(this);\r\n }\r\n\r\n get Depth(): number\r\n {\r\n let depth = 0;\r\n let parent = this.parent;\r\n while (parent)\r\n {\r\n depth++;\r\n parent = parent.parent;\r\n\r\n if (depth > 10)\r\n throw \"ContourTreeNode嵌套超过10层\";\r\n }\r\n return depth;\r\n }\r\n\r\n get IsHole(): boolean\r\n {\r\n return this.Depth % 2 === 1;\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.concat();\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 arrayPushArray(vertices, 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 if (contourNodes.length < 2) return;\r\n\r\n let fb = new Flatbush(contourNodes.length);\r\n for (let node of contourNodes)\r\n {\r\n node.box = node.contour.BoundingBox;\r\n node.area = node.contour.Area;\r\n fb.add(node.box.min.x, node.box.min.y, node.box.max.x, node.box.max.y);\r\n }\r\n fb.finish();\r\n\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\r\n let ids = fb.search(node1.box.min.x, node1.box.min.y, node1.box.max.x, node1.box.max.y);\r\n ids.sort((i1, i2) => contourNodes[i1].area - contourNodes[i2].area);\r\n for (let id of ids)\r\n {\r\n if (id === i) continue;\r\n\r\n let node2 = contourNodes[id];\r\n if (node2.parent === node1 || node2.area < node1.area) continue;//避免自己的儿子成为自己的父亲\r\n\r\n if (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\nexport class 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\r\n if (pre < this.end)//避免最后一个切割元素小于终点时没有补上最后一个\r\n ret.push(new Tape(pre, this.end, this.bottom, this.top));\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\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: ExtrudeContourCurve,\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 = equaln(vs[0].x, vs[1].x, 1e-2);\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(arr: number[], el: number): number\r\n{\r\n let m = 0;\r\n let n = arr.length - 1;\r\n while (m <= n)\r\n {\r\n let k = (n + m) >> 1;\r\n let cmp = (el - arr[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: ExtrudeContourCurve, cu2: ExtrudeContourCurve, reverseParse = false): [CurveParamRangeRelation, CurveParamRangeRelation]\r\n{\r\n let ins = GetIntersection(cu1, cu2);\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\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 let a1 = cu1.Area, a2 = cu2.Area;\r\n\r\n if (a2 > a1 && cu2.PtInCurve(cu1.StartPoint))//cu2包含cu1\r\n c1Res.container.push([0, cu1.EndParam]);\r\n else\r\n c1Res.outer.push([0, cu1.EndParam]);\r\n\r\n if (a1 > a2 && cu1.PtInCurve(cu2.StartPoint))//cu1包含cu2\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 if (ins.length === 1)\r\n {\r\n let a1 = cu1.Area, a2 = cu2.Area;\r\n\r\n if (a2 > a1 && fastCurveInCurve2(cu2, cu1))//cu2包含cu1\r\n c1Res.container.push([0, cu1.EndParam]);\r\n else\r\n c1Res.outer.push([0, cu1.EndParam]);\r\n\r\n if (a1 > a2 && fastCurveInCurve2(cu1, cu2))//cu1包含cu2\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 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: ExtrudeContourCurve, 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\r\n\r\n/**\r\n *\r\n * @param orgStart 被裁剪范围的起点(如果起点大于终点,那么表示 s->end + 0->e)\r\n * @param orgEnd\r\n * @param clipStart\r\n * @param clipEnd\r\n * @param end\r\n * @returns\r\n */\r\nexport function SubtractRange(orgStart: number, orgEnd: number, clipStart: number, clipEnd: number, end: number): Range[]\r\n{\r\n if (orgStart < 0\r\n || orgEnd < 0\r\n || orgEnd > end\r\n || orgStart > end\r\n || clipStart < 0\r\n || clipEnd < 0\r\n || clipStart > end\r\n || clipEnd > end) return [];\r\n\r\n if (orgStart > orgEnd)\r\n return SubtractRange(orgStart, end, clipStart, clipEnd, end).concat(SubtractRange(0, orgEnd, clipStart, clipEnd, end));\r\n if (clipStart > clipEnd)\r\n {\r\n let arr = SubtractRange(orgStart, orgEnd, clipStart, end, end);\r\n let rem: [number, number][] = [];\r\n for (let s of arr)\r\n arrayPushArray(rem, SubtractRange(s[0], s[1], 0, clipEnd, end));\r\n return rem;\r\n }\r\n\r\n if (clipStart >= orgEnd || clipEnd <= orgStart)\r\n return [[orgStart, orgEnd]];\r\n\r\n if (clipStart <= orgStart)// c1 a1 b1\r\n {\r\n if (clipEnd >= orgEnd) return [];\r\n return [[clipEnd, orgEnd]];\r\n }\r\n\r\n if (clipEnd < orgEnd)\r\n return [[orgStart, clipStart], [clipEnd, orgEnd]];\r\n return [[orgStart, clipStart]];\r\n}\r\n\r\nexport function 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 arrayPushArray(temps, SubtractRange2(r, sr, end));\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, rotateUv: boolean = false)\r\n {\r\n this.GenerateMeshData(br, rotateUv);\r\n }\r\n\r\n protected GenerateMeshData(br: ExtrudeSolid, rotateUv: boolean)\r\n {\r\n this.edgeAndLidBuilder = new EdgeGeometryBuild(this.br.Thickness);\r\n rotateUv = rotateUv || (br instanceof Board && br.BoardProcessOption.lines === LinesType.Reverse);\r\n\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 if (grooves.length < MaxDrawGrooveCount)//只能绘制1000个以下的造型\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.UpdateOCSTo(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.UpdateOCSTo(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.ExtendNone);\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 { Box3, BufferAttribute, BufferGeometry, Material, Matrix4, Mesh, Vector3 } from \"three\";\r\nimport { USE_WORLD_UV, U_WORLD_MOVE, U_WORLD_REP, V_WORLD_MOVE, V_WORLD_REP } from \"../../Add-on/testEntity/USE_WORLD_UV\";\r\nimport { XAxis, XAxisN, YAxis, YAxisN, ZAxis, ZAxisN } from \"../../Geometry/GeUtils\";\r\nimport { Orbit } from \"../../Geometry/Orbit\";\r\n\r\nconst DIRS = [XAxis, YAxis, ZAxis, XAxisN, YAxisN, ZAxisN];\r\nfunction GetFaceDir(direction: Vector3): Vector3\r\n{\r\n let absx = Math.abs(direction.x);\r\n let absy = Math.abs(direction.y);\r\n let absz = Math.abs(direction.z);\r\n\r\n let face = - 1.0;\r\n if (absx > absz)\r\n {\r\n if (absx > absy)\r\n face = direction.x > 0 ? 0 : 3;\r\n else\r\n face = direction.y > 0 ? 1 : 4;\r\n }\r\n else\r\n {\r\n if (absz > absy)\r\n face = direction.z > 0 ? 2 : 5;\r\n else\r\n face = direction.y > 0 ? 1 : 4;\r\n }\r\n return DIRS[face];\r\n}\r\n\r\nexport class GenUVForWorld\r\n{\r\n InvMtxMap = new Map();\r\n\r\n private _Z = new Vector3;\r\n private _X = new Vector3;\r\n private _Y = new Vector3;\r\n private _Box = new Box3;\r\n private _Box2 = new Box3;\r\n GetMtxInv(normalX: number, normalY: number, normalZ: number)\r\n {\r\n this._Z.set(normalX, normalY, normalZ);\r\n let n = GetFaceDir(this._Z);\r\n let mtx = this.InvMtxMap.get(n);\r\n if (mtx)\r\n return mtx;\r\n\r\n this._Z.copy(n);\r\n Orbit.ComputUpDirection(this._Z, this._Y, this._X);\r\n mtx = new Matrix4().makeBasis(this._X, this._Y, this._Z);\r\n mtx.getInverse(mtx);\r\n\r\n this.InvMtxMap.set(n, mtx);\r\n return mtx;\r\n }\r\n\r\n GenUV(mesh: Mesh)\r\n {\r\n if (Array.isArray(mesh.material))\r\n {\r\n let geo = mesh.geometry;\r\n if (!geo.boundingBox)\r\n geo.computeBoundingBox();\r\n let normals = geo.getAttribute(\"normal\") as BufferAttribute;\r\n let pos = geo.getAttribute(\"position\") as BufferAttribute;\r\n let uvs = geo.getAttribute(\"uv\") as BufferAttribute;\r\n for (let i = 0; i < mesh.material.length; i++)\r\n {\r\n let mtl = mesh.material[i];\r\n if (mtl[USE_WORLD_UV])\r\n {\r\n this._Box.makeEmpty();\r\n let g = mesh.geometry.groups[i];\r\n for (let y = 0; y < g.count; y++)\r\n {\r\n let index = (y + g.start) * 3;\r\n this._X.set(pos.array[index], pos.array[index + 1], pos.array[index + 2]);\r\n this._Box.expandByPoint(this._X);\r\n }\r\n\r\n for (let y = 0; y < g.count; y++)\r\n {\r\n let index = (y + g.start) * 3;\r\n let mtx = this.GetMtxInv(normals.array[index], normals.array[index + 1], normals.array[index + 2]);\r\n\r\n this._X.set(pos.array[index], pos.array[index + 1], pos.array[index + 2]);\r\n\r\n this._X.applyMatrix4(mtx);\r\n\r\n this._Box2.copy(this._Box).applyMatrix4(mtx);\r\n\r\n //@ts-ignore\r\n uvs.array[(y + g.start) * 2] = (((this._X.x - (this._Box2.min.x + this._Box2.max.x) * 0.5)) * 1e-2 + mtl[U_WORLD_MOVE]) * mtl[U_WORLD_REP] + 0.5;\r\n //@ts-ignore\r\n uvs.array[(y + g.start) * 2 + 1] = (((this._X.y - (this._Box2.min.y + this._Box2.max.y) * 0.5)) * 1e-2 - mtl[V_WORLD_MOVE]) * mtl[V_WORLD_REP] + 0.5;\r\n }\r\n uvs.needsUpdate = true;\r\n }\r\n }\r\n }\r\n\r\n else\r\n {\r\n let mtl = mesh.material;\r\n if (mtl[USE_WORLD_UV])\r\n this.GenGeoUV(mesh.geometry, mtl, 1e-2);\r\n }\r\n }\r\n\r\n GenGeoUV(geo: BufferGeometry, mtl: Material, scale = 1e-3)\r\n {\r\n if (!geo.boundingBox)\r\n geo.computeBoundingBox();\r\n\r\n let normals = geo.getAttribute(\"normal\") as BufferAttribute;\r\n let pos = geo.getAttribute(\"position\") as BufferAttribute;\r\n let uvs = geo.getAttribute(\"uv\") as BufferAttribute;\r\n for (let y = 0; y < pos.count; y++)\r\n {\r\n let index = y * 3;\r\n let mtx = this.GetMtxInv(normals.array[index], normals.array[index + 1], normals.array[index + 2]);\r\n\r\n this._X.set(pos.array[index], pos.array[index + 1], pos.array[index + 2]);\r\n\r\n this._X.applyMatrix4(mtx);\r\n\r\n this._Box.copy(geo.boundingBox);\r\n this._Box.applyMatrix4(mtx);\r\n\r\n //@ts-ignore\r\n uvs.array[y * 2] = (((this._X.x - (this._Box.min.x + this._Box.max.x) * 0.5)) * scale + mtl[U_WORLD_MOVE]) * mtl[U_WORLD_REP] + 0.5;\r\n //@ts-ignore\r\n uvs.array[y * 2 + 1] = (((this._X.y - (this._Box.min.y + this._Box.max.y) * 0.5)) * scale + mtl[V_WORLD_MOVE]) * mtl[V_WORLD_REP] + 0.5;\r\n }\r\n uvs.needsUpdate = true;\r\n }\r\n}\r\n","import { Geom3 } from '@jscad/modeling/src/geometries/types';\r\nimport Flatbush from 'flatbush';\r\nimport { Box3, BoxGeometry, BufferGeometry, ExtrudeGeometry, ExtrudeGeometryOptions, Float32BufferAttribute, Geometry, InstancedInterleavedBuffer, InterleavedBufferAttribute, Line as TLine, LineSegments, Matrix3, Matrix4, Mesh, Object3D, 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, arrayPushArray, arrayRemoveIf, arrayRemoveOnce, arraySortByNumber, arraySum } from \"../../Common/ArrayExt\";\r\nimport { ColorMaterial } from \"../../Common/ColorPalette\";\r\nimport { CSGIntersect } from '../../Common/CSGIntersect';\r\nimport { equalCurve, PolylineSpliteRect } from \"../../Common/CurveUtils\";\r\nimport { DisposeThreeObj, Object3DRemoveAll } from \"../../Common/Dispose\";\r\nimport { Log } from \"../../Common/Log\";\r\nimport { reviseMirrorMatrix, SetMtxVector, tempMatrix1, TransformVector, Vector2ApplyMatrix4 } from \"../../Common/Matrix4Utils\";\r\nimport { Status, UpdateDraw } from \"../../Common/Status\";\r\nimport { Geometry2CSG2 } 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 { FastExtrudeEdgeGeometry, FastWireframe } from \"../../Geometry/CreateWireframe\";\r\nimport { EdgesGeometry } from \"../../Geometry/EdgeGeometry\";\r\nimport { ExtrudeGeometryBuilder } from \"../../Geometry/ExtrudeMeshGeomBuilder/ExtrudeEdgeGeometry2\";\r\nimport { AsVector2, 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 { GenUVForWorld } from './GenUVForWorld';\r\nimport { Line } from \"./Line\";\r\nimport { Polyline } from \"./Polyline\";\r\nimport { Region } from \"./Region\";\r\n\r\nexport type ExtrudeContourCurve = Polyline | Circle;\r\nexport type ExtrudeContour = Polyline | Circle | ExtrudeSolid | Region;\r\n\r\nexport const MaxDrawGrooveCount = 1000;//最大的绘制槽个数(但是还是会绘制线)\r\n\r\n\r\n@Factory\r\nexport class ExtrudeSolid extends Entity\r\n{\r\n /*\r\n y-----------\r\n ^ |\r\n | ↑ |\r\n | | | height\r\n | ↓ |\r\n | |\r\n 0---width->x\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 * 出于优化考虑,可能未初始化,请注意调用this.ContourCurve\r\n * 形状位于WCS 0点位置,不随OCS变化而变化\r\n */\r\n protected contourCurve: ExtrudeContourCurve;\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 set Material(materialId: ObjectId)\r\n {\r\n let oldMaterial = this.Material ?? this._db?.DefaultMaterial.objectId;\r\n super.Material = materialId;\r\n\r\n let isf_old = Boolean((oldMaterial?.Object as PhysicalMaterialRecord)?.IsFull);\r\n let isf_new = Boolean((materialId?.Object as PhysicalMaterialRecord)?.IsFull);\r\n if (isf_old !== isf_new)\r\n this.Update();\r\n else if ((materialId?.Object as PhysicalMaterialRecord)?.UseWorldUV)\r\n {\r\n if (this._MeshGeometry)\r\n this.GenWorldUV(this._MeshGeometry);\r\n }\r\n }\r\n\r\n get Material() { return super.Material; }\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 if (this.width > 0 && this.height > 0 && this.thickness > 0)\r\n return new Box3Ext(new Vector3, new Vector3(this.width, this.height, this.thickness));\r\n else\r\n return new Box3Ext().setFromPoints([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\r\n for (let g of this.grooves)\r\n {\r\n g._SpaceOCS.copy(this._SpaceOCS);//因为在镜像的时候 没有设置这个会导致错误 所以拷贝一下\r\n g.objectId = new ObjectId;\r\n g.ApplyMatrix(m);\r\n g.objectId = undefined;\r\n }\r\n\r\n //由于修改矩阵会导致矩阵错误\r\n this.csg = undefined;\r\n this.AutoUpdate = updateBak;\r\n\r\n let te = m.elements;\r\n let scaleXSq = te[0] * te[0] + te[1] * te[1] + te[2] * te[2];\r\n let scaleYSq = te[4] * te[4] + te[5] * te[5] + te[6] * te[6];\r\n let scaleZSq = te[8] * te[8] + te[9] * te[9] + te[10] * te[10];\r\n\r\n if (!equaln(scaleXSq, 1, 1e-4) || !equaln(scaleYSq, 1, 1e-4) || !equaln(scaleZSq, 1, 1e-4))\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.OCSNoClone);\r\n cu.ApplyMatrix(m);\r\n cu.ApplyMatrix(this.OCSInv);\r\n this.CheckContourCurve();\r\n return this;\r\n }\r\n protected ApplyMirrorMatrix(m: Matrix4)\r\n {\r\n this.WriteAllObjectRecord();\r\n const curve = this.ContourCurve;\r\n if (curve instanceof Polyline && !equalv3(curve.Position, ZeroVec))\r\n {\r\n let pts = curve.LineData;\r\n if (equalv2(pts[0].pt, arrayLast(pts).pt))\r\n pts.pop();\r\n let ocs = curve.OCSNoClone;\r\n for (let p of pts)\r\n {\r\n Vector2ApplyMatrix4(ocs, p.pt);\r\n }\r\n curve.OCS = IdentityMtx4;\r\n }\r\n let nor = this.Normal.applyMatrix4(this.SpaceOCSInv.setPosition(ZeroVec));\r\n if (equaln(Math.abs(nor.z), 1))\r\n {\r\n reviseMirrorMatrix(this._Matrix, 1);\r\n if (curve instanceof Circle)\r\n {\r\n curve.ApplyMatrix(new Matrix4().makeRotationX(Math.PI));\r\n }\r\n else\r\n {\r\n reviseMirrorMatrix(curve.OCSNoClone, 1);\r\n }\r\n\r\n this.SetContourCurve(curve);\r\n }\r\n else if (equaln(Math.abs(nor.x), 1))\r\n {\r\n reviseMirrorMatrix(this._Matrix, 2);\r\n this._Matrix.setPosition(this.Position.add(this.Normal.multiplyScalar(-this.Thickness)));\r\n }\r\n else\r\n {\r\n reviseMirrorMatrix(this._Matrix, 0);\r\n if (curve instanceof Circle)\r\n {\r\n curve.ApplyMatrix(new Matrix4().makeRotationY(Math.PI));\r\n }\r\n else\r\n {\r\n reviseMirrorMatrix(curve.OCSNoClone, 0);\r\n }\r\n\r\n this.SetContourCurve(curve);\r\n }\r\n\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: ExtrudeContourCurve)\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坐标系0点\r\n */\r\n SetContourCurve(curve: ExtrudeContourCurve)\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\r\n let x = new Vector3().setFromMatrixColumn(ocs, 0);\r\n let y = new Vector3().setFromMatrixColumn(ocs, 1);\r\n let z = new Vector3().setFromMatrixColumn(ocs, 2);\r\n let z1 = x.cross(y);\r\n\r\n let isMirror = equaln(ocs.elements[10], -1, 1e-4) || !equalv3(z, z1);\r\n let isRotate = !equaln(ocs.elements[0], 1);\r\n\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 ocsInv = this.OCSInv;\r\n let x = TransformVector(xAxis.clone(), ocsInv).setZ(0).normalize();\r\n if (equalv3(ZeroVec, x, 1e-5)) return this;\r\n\r\n this.WriteAllObjectRecord();\r\n\r\n let a = Math.atan2(x.y, x.x);\r\n\r\n x.transformDirection(this._Matrix);\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 this.ContourCurve.ApplyMatrix(tempMatrix1.makeRotationZ(-a));//复用了这个矩阵\r\n this.CheckContourCurve();\r\n if (this.contourCurve instanceof Polyline)\r\n this.contourCurve.UpdateOCSTo(IdentityMtx4);\r\n\r\n this.Update();\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 = 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, 1e-3))\r\n holes.push(Contour.CreateContour(g.ContourCurve.Clone().ApplyMatrix(this.OCSInv.multiply(g.OCSNoClone)), 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 arrayPushArray(grooves, gs);\r\n }\r\n if (grooves.length === 0) return false;\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 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.OCSNoClone);\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.OCSNoClone);\r\n pts.push(\r\n ...l.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform)\r\n );\r\n }\r\n\r\n if (this.grooves.length < 100)\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.OCSNoClone); });\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.GetBulgeAt(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\r\n private csg: Geom3;\r\n get CSG(): Geom3\r\n {\r\n if (this.csg) return this.csg;\r\n\r\n this.csg = Geometry2CSG2(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\r\n //0不平行 1同向,2反向 () 这里保证判断平行和判断方向相反的判断方式是一样的 #I3BUSY\r\n const __eqfuzz__ = 1e-3;\r\n let parType = equalv3(n1, n2, __eqfuzz__) ? 1 : equalv3(n1, n2.clone().negate(), __eqfuzz__) ? 2 : 0;\r\n\r\n if (parType > 0)\r\n {\r\n target = target.Clone().ClearDraw();\r\n if (parType === 2)\r\n {\r\n let mtx = target._Matrix;\r\n SetMtxVector(mtx, 2, n1);\r\n let p = n1.setFromMatrixColumn(mtx, 3);\r\n p.add(n2.multiplyScalar(target.thickness));\r\n SetMtxVector(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 ibox.getSize(size);\r\n if (size.x < 1 || size.y < 1 || size.z < 0.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 //必须修正向量,否则会出错 #I3BUSY\r\n xv.normalize();\r\n yv.normalize();\r\n zv.normalize();\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 interCSG = CSGIntersect(this.CSG, target.CSG, this.OCSInv.multiply(target.OCSNoClone));\r\n\r\n //测试绘制\r\n // TestDraw(new Mesh(CSG2Geometry2(interBSP), ColorMaterial.GetConceptualMaterial(1, DoubleSide)));\r\n\r\n let topology = new BSPGroupParse(interCSG);\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: ExtrudeContourCurve[] = [];\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 if (this.grooves.length < 2) return;\r\n //生命周期:初始化->used->undefined\r\n type ExtData = {\r\n index: number;\r\n used: boolean;\r\n box: Box3;\r\n };\r\n\r\n //构建二维空间索引\r\n let ocsInv = this.OCSInv;\r\n let mtx = new Matrix4;\r\n let fb = new Flatbush(this.grooves.length);\r\n for (let i = 0; i < this.grooves.length; i++)\r\n {\r\n let g = this.grooves[i];\r\n mtx.multiplyMatrices(ocsInv, g.OCSNoClone);\r\n let cu = g.ContourCurve.Clone().ApplyMatrix(mtx);\r\n let box = cu.BoundingBox;\r\n g.TempData = { index: i, used: false, box };\r\n fb.add(box.min.x, box.min.y, box.max.x, box.max.y);\r\n }\r\n fb.finish();\r\n\r\n let retGs: ExtrudeSolid[] = [];//新的槽列表\r\n\r\n for (let i = 0; i < this.grooves.length; i++)\r\n {\r\n let startG = this.grooves[i];\r\n\r\n if (startG.TempData === undefined)//已经被使用\r\n continue;\r\n\r\n retGs.push(startG);\r\n\r\n let stack = [startG];\r\n\r\n for (let j = 0; j < stack.length; j++)\r\n {\r\n let g = stack[j];\r\n let gd = g.TempData as ExtData;//能入栈的都是未被使用的\r\n\r\n let ids = fb.search(gd.box.min.x - 1e-2, gd.box.min.y - 1e-2, gd.box.max.x + 1e-2, gd.box.max.y + 1e-2, (id =>\r\n {\r\n if (id <= i) return false;//(id比它小(如果能合并 早就合并了))\r\n let gd = this.grooves[id].TempData as ExtData;\r\n return gd && !gd.used;//判断被使用\r\n }));\r\n\r\n for (let id of ids)\r\n {\r\n let ng = this.grooves[id];\r\n if (equaln(startG.knifeRadius, ng.knifeRadius, 1e-3) && startG.Join(ng) === Status.True)\r\n {\r\n (ng.TempData as ExtData).used = true;\r\n stack.push(ng);\r\n }\r\n }\r\n\r\n g.TempData = undefined;//总是保证被使用的造型这个数据为空\r\n }\r\n }\r\n\r\n if (retGs.length !== this.grooves.length)\r\n {\r\n this.grooves = retGs;\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 (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\r\n //分裂后重新将排钻实体设置给不同的实体\r\n HandleSpliteEntitys(splitEntitys: this[]) { }\r\n\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\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.GetConceptualEdgeMaterial())\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\r\n Object.defineProperty(mesh, \"castShadow\", {\r\n get: () => this.CaseShadow\r\n });\r\n Object.defineProperty(mesh, \"receiveShadow\", {\r\n get: () => this.CaseShadow\r\n });\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\r\n Object.defineProperty(mesh, \"castShadow\", {\r\n get: () => this.CaseShadow\r\n });\r\n Object.defineProperty(mesh, \"receiveShadow\", {\r\n get: () => this.CaseShadow\r\n });\r\n\r\n return new Object3D().add(\r\n mesh,\r\n new LineSegments(this.EdgeGeometry, ColorMaterial.GetPhysical2EdgeMaterial())\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 if (this.__CacheSplitExtrudes)\r\n for (let e of this.__CacheSplitExtrudes)\r\n e._MaterialId = this._MaterialId;\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 if (grooves.length < 1000)\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 this.GenWorldUV(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 if (grooves.length < MaxDrawGrooveCount)\r\n this._EdgeGeometry = builder.EdgeGeometry;\r\n this.UpdateUV(null, null);\r\n this.GenWorldUV(this._MeshGeometry);\r\n\r\n return this._MeshGeometry;\r\n }\r\n\r\n private _EdgeGeometry: EdgesGeometry | BufferGeometry;\r\n 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\r\n if (this._EdgeGeometry)\r\n return this._EdgeGeometry;\r\n\r\n //这里我们超过100就用这个,为了性能 和MaxDrawGrooveCount不一致\r\n if (this.grooves.length > 100 || this.grooves.every(g => equaln(g.thickness, this.thickness)) || this.grooves.length === 0)\r\n {\r\n let coords = FastExtrudeEdgeGeometry(this, this.ColorIndex, 20, true);\r\n let edgeGeo = new BufferGeometry();\r\n edgeGeo.setAttribute('position', new Float32BufferAttribute(coords, 3));\r\n this._EdgeGeometry = edgeGeo;\r\n return this._EdgeGeometry;\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 mtl = (this.Material?.Object as PhysicalMaterialRecord) ?? this.Db?.DefaultMaterial;\r\n\r\n if (mtl?.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\r\n GenWorldUV(geo: BufferGeometry)\r\n {\r\n let mtl = (this.Material?.Object as PhysicalMaterialRecord) ?? this.Db?.DefaultMaterial;\r\n\r\n if (mtl?.UseWorldUV)\r\n {\r\n let gen = new GenUVForWorld;\r\n gen.GenGeoUV(geo, mtl.Material);\r\n }\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.GetConceptualEdgeMaterial())\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\r\n Object.defineProperty(mesh, \"castShadow\", {\r\n get: () => this.CaseShadow\r\n });\r\n Object.defineProperty(mesh, \"receiveShadow\", {\r\n get: () => this.CaseShadow\r\n });\r\n\r\n return obj.add(\r\n mesh,\r\n new LineSegments(this.EdgeGeometry, ColorMaterial.GetPhysical2EdgeMaterial())\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 ExtrudeContourCurve;\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 { 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 { AsVector3, equaln, equalv2, equalv3, ZeroVec } from \"../../Geometry/GeUtils\";\r\nimport { GenerateExtrudeEdgeGeometry } from \"../../Geometry/SimpleExtrudeEdgeGeometry\";\r\nimport { ScaleUV } from \"../../Geometry/UVUtils\";\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 { ExtrudeContourCurve, ExtrudeSolid } from \"../Entity/Extrude\";\r\nimport { GenUVForWorld } from \"../Entity/GenUVForWorld\";\r\nimport { Polyline } from \"../Entity/Polyline\";\r\nimport { PhysicalMaterialRecord } from \"../PhysicalMaterialRecord\";\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: ExtrudeContourCurve = 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: ExtrudeContourCurve)\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 Erase(isErase: boolean = true)\r\n {\r\n if (isErase === this.IsErase) return;\r\n super.Erase(isErase);\r\n if (!isErase) return;\r\n\r\n if (this.OtherHalfTongKong && !this.OtherHalfTongKong.IsErase)\r\n {\r\n let cy = this.OtherHalfTongKong.Object as this;\r\n cy.isThrough = false;\r\n cy.OtherHalfTongKong = null;\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.OCSNoClone);\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: 6,\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\r\n let mtl = this.Material?.Object as PhysicalMaterialRecord ?? this.Db?.DefaultMaterial;\r\n if (mtl?.UseWorldUV)\r\n {\r\n let bgeo = new BufferGeometry().fromGeometry(geo);\r\n let gen = new GenUVForWorld();\r\n gen.GenGeoUV(bgeo, mtl.Material);\r\n return bgeo;\r\n }\r\n else\r\n ScaleUV(geo);\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.GetBulgeAt(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.OCSNoClone);\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.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.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.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.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.Conceptual || 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.Physical)\r\n {\r\n let mesh = obj as Mesh;\r\n mesh.material = this.MeshMaterial;\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 ExtrudeContourCurve;\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 { 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 { Matrix3, Matrix4, Object3D, Vector3 } from \"three\";\r\nimport { AddEntityDrawObject } from \"../../Common/AddEntityDrawObject\";\r\nimport { arrayPushArray, 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 abstract 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 /**\r\n * 返回对象在自身坐标系下的Box\r\n */\r\n override get BoundingBoxInOCS(): Box3Ext\r\n {\r\n //这个代码可能是错误的. 当复合实体是子实体时,复合实体的矩阵和世界坐标垂直,但是父实体没有垂直时,此时的结果是错误的 所以注释掉这个代码\r\n // if (\r\n // (equaln(this._Matrix.elements[0], 1, 1e-5) ||\r\n // equaln(this._Matrix.elements[1], 1, 1e-5) ||\r\n // equaln(this._Matrix.elements[2], 1, 1e-5)\r\n // //3\r\n // )\r\n // &&\r\n // (equaln(this._Matrix.elements[4], 1, 1e-5) ||\r\n // equaln(this._Matrix.elements[5], 1, 1e-5) ||\r\n // equaln(this._Matrix.elements[6], 1, 1e-5)\r\n // //7\r\n // )\r\n // &&\r\n // (equaln(this._Matrix.elements[8], 1, 1e-5) ||\r\n // equaln(this._Matrix.elements[9], 1, 1e-5) ||\r\n // equaln(this._Matrix.elements[10], 1, 1e-5)\r\n // )\r\n // )\r\n // return this.GetBoundingBoxInMtx(this.OCSInv);\r\n // else\r\n {\r\n let box = new Box3Ext;\r\n for (let e of this.Entitys)\r\n box.union(e.BoundingBoxInOCS.applyMatrix4(e.OCSNoClone));\r\n return box;\r\n }\r\n }\r\n\r\n //#region 绘制\r\n // OnlyRenderType = true; //我们现在不需要这样,因为我们每个绘制类型的Object的子实体都有子实体的渲染类型(唯一的缺点可能是渲染速度变慢了?)\r\n /**\r\n * 初始化绘制的threejs实体,子类型重载该函数初始化绘制实体.\r\n */\r\n override 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.OCSNoClone);\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\r\n //实体在被内嵌时,它绘制对象的世界矩阵会被影响,所以这里我们不直接计算它的盒子,而是用绘制对象的盒子来计算包围盒,避免错误\r\n //例如 复合扫略实体 的ZoomObject在这个实现下是错误的(因为扫略实体也是直接取绘制对象的包围盒)\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.OCSNoClone);\r\n // }\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\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 rtype = renderType;\r\n if (renderType === RenderType.Print && e.IsOnlyRender)\r\n rtype += 100;\r\n\r\n let o = e.GetDrawObjectFromRenderType(rtype);\r\n if (o)\r\n {\r\n o.traverse(obj => obj.userData = {});\r\n AddEntityDrawObject(obj, e, rtype);\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 {\r\n if (!e.Db) e.SetDatabase(this.Db);\r\n e.Material = id;\r\n }\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 arrayPushArray(pts, e.Clone().ApplyMatrix(this.OCSNoClone).GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform));\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 ApplyMirrorMatrix(m: Matrix4)\r\n {\r\n if (this.Id)\r\n this.Update(UpdateDraw.Geometry);\r\n return this;\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 { DefaultCompositeMetalsOption } from \"../../Editor/DefaultConfig\";\r\nimport { ICompHardwareOption } from \"../../UI/Components/RightPanel/RightPanelInterface\";\r\nimport { AutoRecord, AutoRecordObject } from \"../AutoRecord\";\r\nimport { Factory } from \"../CADFactory\";\r\nimport { CADFiler } from \"../CADFiler\";\r\nimport { CompositeEntity } from \"../Entity/CompositeEntity\";\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 @AutoRecordObject HardwareOption: ICompHardwareOption = { ...DefaultCompositeMetalsOption };\r\n @AutoRecord DataList: [string, string][] = [];\r\n @AutoRecord RelevanceBoards: ObjectId[] = [];\r\n @AutoRecord RelevanceHardware: ObjectId[] = []; //当这个实体为复合板时,关联五金的信息\r\n /**\r\n *\r\n * @param [checkIsHole=false] true:只获取是孔的实体 false:返回所有实体\r\n * @param [checkFilter] 过滤函数\r\n * @returns\r\n */\r\n GetAllEntity(checkIsHole: boolean = false, checkFilter?: (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 (!checkIsHole || e.HardwareOption.isHole)\r\n holes.push(...e.GetAllEntity(checkIsHole, checkFilter).map(h => h.ApplyMatrix(this.OCSNoClone)));\r\n }\r\n else\r\n {\r\n if (!checkFilter || checkFilter(e))\r\n holes.push(e.Clone().ApplyMatrix(this.OCSNoClone));\r\n }\r\n }\r\n return holes;\r\n }\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 file.Read(),\r\n file.Read()\r\n ];\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 > 2)\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 this.RelevanceBoards.push(file.ReadSoftObjectId());\r\n }\r\n\r\n if (v > 3)\r\n {\r\n let count = file.Read();\r\n this.RelevanceHardware.length = 0;\r\n for (let i = 0; i < count; i++)\r\n this.RelevanceHardware.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(4);\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 file.Write(this.RelevanceHardware.length);\r\n for (let id of this.RelevanceHardware)\r\n file.WriteSoftObjectId(id);\r\n }\r\n}\r\n","import { Box3, Matrix4, Vector3 } from \"three\";\r\nimport { MatrixPlanarizere } from \"../../Common/Matrix4Utils\";\r\nimport { Contour } from \"../../DatabaseServices/Contour\";\r\nimport { Board } from \"../../DatabaseServices/Entity/Board\";\r\nimport { Polyline } from \"../../DatabaseServices/Entity/Polyline\";\r\nimport { Region } from \"../../DatabaseServices/Entity/Region\";\r\nimport { BoolOpeartionType } from \"../../GraphicsSystem/BoolOperateUtils\";\r\nimport { Box3Ext } from \"../Box\";\r\nimport { equaln, XAxis } from \"../GeUtils\";\r\nimport { BoardFaceType } from \"./BoardGetFace\";\r\n\r\nexport interface BoardFaceParams\r\n{\r\n type: BoardFaceType;\r\n length: number;\r\n width: number;\r\n localBoard: Board;\r\n matrix4: Matrix4;\r\n region?: Region;\r\n isRect?: boolean;\r\n drillType?: string;\r\n}\r\nexport class Face\r\n{\r\n type: BoardFaceType;\r\n Length: number;\r\n Width: number;\r\n private _Region: Region;\r\n LocalBoard: Board;\r\n InterBoard: Board; //提供侧面的作为相交面\r\n isEqualType: boolean = false;\r\n OCS: Matrix4 = new Matrix4();\r\n IsRect: boolean = true;\r\n DrillType: string;\r\n constructor(parameters?: BoardFaceParams)\r\n {\r\n if (parameters)\r\n {\r\n this.type = parameters.type;\r\n this._Region = parameters.region;\r\n this.LocalBoard = parameters.localBoard;\r\n this.OCS = parameters.matrix4;\r\n this.Length = parameters.length;\r\n this.Width = parameters.width;\r\n if (parameters.isRect !== undefined)\r\n this.IsRect = parameters.isRect;\r\n if (parameters.drillType)\r\n this.DrillType = parameters.drillType;\r\n else\r\n this.DrillType = this.LocalBoard.BoardProcessOption.drillType;\r\n }\r\n }\r\n get Region()\r\n {\r\n if (!this._Region)\r\n this._Region = Region.CreateFromCurves([new Polyline().Rectangle(this.Length, this.Width)]);\r\n return this._Region;\r\n }\r\n get OCSInv()\r\n {\r\n return new Matrix4().getInverse(this.OCS);\r\n }\r\n get Normal()\r\n {\r\n return new Vector3().setFromMatrixColumn(this.OCS, 2);\r\n }\r\n Intersect(f: Face): Face[]\r\n {\r\n //获得侧面和非侧面\r\n let [sideFace, noSideFace] = this.type === BoardFaceType.Side ? [this, f] : [f, this];\r\n\r\n //布尔面和被布尔面得差异矩阵\r\n let diffMtx = sideFace.OCSInv.multiply(noSideFace.OCS);\r\n MatrixPlanarizere(diffMtx);\r\n\r\n let isSuccess = false;\r\n\r\n let x = new Vector3().setFromMatrixColumn(diffMtx, 0);\r\n let ang = x.angleTo(XAxis);\r\n //盒子旋转0,90,180度不会被破坏\r\n let canUseBoxCalc = equaln(ang, 0) || equaln(ang, Math.PI / 2) || equaln(ang, Math.PI);\r\n\r\n let retBoxs: Box3Ext[] = [];\r\n let sizes: Vector3[] = [];\r\n\r\n //如果不是矩形,用布尔运算,如果\r\n if (!noSideFace.IsRect || !canUseBoxCalc)\r\n {\r\n let sideReg = sideFace.Region?.Clone();\r\n if (!sideReg || !noSideFace.Region) return [];\r\n\r\n let toReg = noSideFace.Region.Clone().ApplyMatrix(diffMtx);\r\n isSuccess = sideReg.BooleanOper(toReg, BoolOpeartionType.Intersection);\r\n for (let s of sideReg.ShapeManager.ShapeList)\r\n {\r\n let box = s.BoundingBox as Box3Ext;\r\n retBoxs.push(box);\r\n sizes.push(box.getSize(new Vector3()));\r\n }\r\n }\r\n else\r\n {\r\n let retBox = new Box3Ext(new Vector3(), new Vector3(sideFace.Length, sideFace.Width));\r\n\r\n let p1 = new Vector3().setFromMatrixPosition(diffMtx);\r\n let p2 = new Vector3(noSideFace.Length, noSideFace.Width).applyMatrix4(diffMtx);\r\n let box3 = new Box3Ext().setFromPoints([p1, p2]);\r\n\r\n if (retBox.intersectsBox(box3))\r\n {\r\n retBox.intersect(box3);\r\n let size = retBox.getSize(new Vector3());\r\n isSuccess = !equaln(size.x * size.y, 0);\r\n retBoxs = [retBox];\r\n sizes = [size];\r\n }\r\n }\r\n\r\n let newFaces: Face[] = [];\r\n\r\n if (isSuccess)\r\n {\r\n for (let i = 0; i < sizes.length; i++)\r\n {\r\n let newFace = new Face();\r\n //提供侧面的板件作为相交面\r\n newFace.LocalBoard = noSideFace.LocalBoard;\r\n newFace.InterBoard = sideFace.LocalBoard;\r\n\r\n newFace.Length = sizes[i].x;\r\n newFace.Width = sizes[i].y;\r\n\r\n let min = retBoxs[i].min;\r\n min.applyMatrix4(sideFace.OCS);\r\n\r\n //构建碰撞面坐标系\r\n newFace.OCS = sideFace.OCS.clone().setPosition(min);\r\n\r\n newFace.DrillType = sideFace.DrillType;\r\n //都是侧面\r\n if (this.type === f.type)\r\n newFace.isEqualType = true;\r\n newFaces.push(newFace);\r\n }\r\n }\r\n return newFaces;\r\n }\r\n IsIntersect(f: Face, fuzz = 1e-6, currentCoverBoxes: Box3[] = []): { isInt: boolean, coverBoxesList?: Box3[]; }\r\n {\r\n //获得侧面和非侧面\r\n let [sideFace, noSideFace] = this.type === BoardFaceType.Side ? [this, f] : [f, this];\r\n\r\n //布尔面和被布尔面得差异矩阵\r\n let diffMtx = sideFace.OCSInv.multiply(noSideFace.OCS);\r\n MatrixPlanarizere(diffMtx);\r\n\r\n let x = new Vector3().setFromMatrixColumn(diffMtx, 0);\r\n let ang = x.angleTo(XAxis);\r\n //盒子旋转0,90,180度不会被破坏\r\n let canUseBoxCalc = equaln(ang, 0) || equaln(ang, Math.PI / 2) || equaln(ang, Math.PI);\r\n\r\n //如果不是矩形,用布尔运算,如果\r\n if (!noSideFace.IsRect || !canUseBoxCalc)\r\n {\r\n let c1 = new Polyline().Rectangle(sideFace.Length, sideFace.Width);\r\n let c2 = noSideFace.LocalBoard.ContourCurve.Clone().ApplyMatrix(diffMtx);\r\n let box = c1.BoundingBox.intersect(c2.BoundingBox);\r\n\r\n let size = box.getSize(new Vector3);\r\n\r\n if (equaln(size.x * size.y, 0))\r\n return { isInt: false, coverBoxesList: currentCoverBoxes };\r\n\r\n let con1 = Contour.CreateContour(c1);\r\n let con2 = Contour.CreateContour(c2);\r\n let cs = con1.IntersectionBoolOperation(con2);\r\n let width = 0;\r\n let boxList: Box3[] = [];\r\n //当前碰撞区域如果遮光直接退出\r\n for (let c of cs)\r\n {\r\n let b = c.BoundingBox;\r\n b.getSize(size);\r\n width += size.x;\r\n if (width / sideFace.Length > fuzz)\r\n return { isInt: true };\r\n boxList.push(b);\r\n }\r\n if (currentCoverBoxes.length === 0)\r\n {\r\n return { isInt: false, coverBoxesList: boxList };\r\n }\r\n //与旧盒子合并后测试是否遮光\r\n width = 0;\r\n while (currentCoverBoxes.length > 0)\r\n {\r\n let b = currentCoverBoxes.pop();\r\n let isInt = false;\r\n for (let box of boxList)\r\n {\r\n if (box.intersectsBox(b))\r\n {\r\n isInt = true;\r\n box.union(b);\r\n break;\r\n }\r\n }\r\n if (!isInt)\r\n boxList.push(b);\r\n }\r\n\r\n for (let b of boxList)\r\n {\r\n b.getSize(size);\r\n width += size.x;\r\n if (width / sideFace.Length > fuzz)\r\n return { isInt: true };\r\n }\r\n\r\n return { isInt: false, coverBoxesList: boxList };\r\n }\r\n else\r\n {\r\n let retBox = new Box3Ext(new Vector3(), new Vector3(sideFace.Length, sideFace.Width));\r\n\r\n let p1 = new Vector3().setFromMatrixPosition(diffMtx);\r\n let p2 = new Vector3(noSideFace.Length, noSideFace.Width).applyMatrix4(diffMtx);\r\n let box3 = new Box3Ext().setFromPoints([p1, p2]);\r\n\r\n if (retBox.intersectsBox(box3))\r\n {\r\n retBox.intersect(box3);\r\n let size = retBox.getSize(new Vector3());\r\n if (equaln(size.x * size.y, 0) || size.y / sideFace.Width <= fuzz)\r\n return { isInt: false, coverBoxesList: currentCoverBoxes };\r\n\r\n if (size.x / sideFace.Length > fuzz)\r\n return { isInt: true };\r\n if (currentCoverBoxes.length === 0)\r\n {\r\n return { isInt: false, coverBoxesList: [retBox] };\r\n }\r\n for (let b of currentCoverBoxes)\r\n {\r\n if (b.intersectsBox(retBox))\r\n {\r\n b.union(retBox);\r\n retBox = null;\r\n break;\r\n }\r\n }\r\n if (retBox)\r\n currentCoverBoxes.push(retBox);\r\n let width = 0;\r\n for (let b of currentCoverBoxes)\r\n {\r\n b.getSize(size);\r\n width += size.x;\r\n if (width / sideFace.Length > fuzz)\r\n return { isInt: true };\r\n }\r\n\r\n return { isInt: false, coverBoxesList: currentCoverBoxes };\r\n }\r\n return { isInt: false, coverBoxesList: currentCoverBoxes };\r\n }\r\n }\r\n}\r\n","import { Matrix4, Vector3 } from \"three\";\r\nimport { MergeCurvelist } from \"../../Common/CurveUtils\";\r\nimport { MakeMirrorMtx } 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\n\r\n\r\nexport const CanDrawHoleFuzz = 0.1;\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 mtx = MakeMirrorMtx(ZAxis);\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, mtx),\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, zFuzz: number): 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(), 1e-4))\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, zFuzz);\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, 1e-5) && x.y > 0) || x.x < -1e-5)\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","\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 { Vector3 } from \"three\";\r\nimport { arrayRemoveIf } from \"../../Common/ArrayExt\";\r\nimport { ConverCircleToPolyline, curveLinkGroup, equalCurve, IRectInfo } 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, ComparePointFnGenerate, 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 = ComparePointFnGenerate(\"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 { HostApplicationServices } from \"../../ApplicationServices/HostApplicationServices\";\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 { ExtrudeContourCurve } 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 { 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: boolean): Curve[]\r\n {\r\n let outline = shape.Outline.Curve;\r\n if (isOut)\r\n outline = outline.Clone();\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 //理论上最大的宽度为1220,所以2000已经是种仁慈.\r\n //更好的算法应该是, 如果线不在outline里面, 那么已经算是错误的,但是理论上如果线已经往外偏太多了,就一定会使得这个判断生效\r\n if (offsetDist > 2000)\r\n throw \"无法加工的造型!已经超过了最大的走刀范围2000!\";\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 //是否和孤岛相交\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\r\n let vailHoles: Contour[] = [];\r\n\r\n //内偏(走刀方式)\r\n let outlineOffsetCusOfTool = GetOffsetCurves(outline, dir * knifRadius).filter(c => c.IsClose) as Curve[];\r\n let maxArea = Math.max(...(outlineOffsetCusOfTool.map(c => c.Area)));\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 holeOffsetCurve = holeOffsetCus[i];//网洞走刀曲线\r\n for (let j = 0; j < outlineOffsetCusOfTool.length; j++)\r\n {\r\n let outlineCurveOffsetInside = outlineOffsetCusOfTool[j];\r\n if (h.Curve.IntersectWith(outlineCurveOffsetInside, 0).length > 0)\r\n {\r\n if (!(equalCurve(holeOffsetCurve, outlineCurveOffsetInside) || isTargetCurInOrOnSourceCur(outlineCurveOffsetInside as Polyline, h.Curve)))\r\n {\r\n isVail = false;\r\n break;\r\n }\r\n else if (isTargetCurInOrOnSourceCur(h.Curve, outlineCurveOffsetInside as Polyline))\r\n {\r\n offsetCus.push(outlineCurveOffsetInside);\r\n isVail = false;\r\n break;\r\n }\r\n }\r\n else if (holeOffsetCurve.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 /**用于测试走刀路径 */\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 && HostApplicationServices.chaidanOption.useDefaultRad)\r\n modelings.forEach(m => m.knifeRadius = HostApplicationServices.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 < HostApplicationServices.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 */\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\r\n //获取造型走刀\r\n GetModelFeedPath(br: { Thickness: number, ContourCurve: ExtrudeContourCurve; }, modeling: IModeling): Curve[]\r\n {\r\n const brThickness = br.Thickness;\r\n let cus: Curve[] = [];\r\n let { shape, thickness, knifeRadius, addLen, addWidth, addDepth } = modeling;\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, modeling.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, true);\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\r\n /**\r\n * 获取所有的轮廓\r\n * @param cus\r\n * @param retCus 不能组成轮廓的线被添加到这里\r\n * @returns\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 return cons;\r\n }\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 (HostApplicationServices.chaidanOption.useDefaultRad)\r\n modelings[i].knifeRadius = HostApplicationServices.chaidanOption.radius;\r\n let m = modelings[i];\r\n let cu = m.shape.Outline.Curve;\r\n if (cu instanceof Circle && cu.Radius < HostApplicationServices.chaidanOption.modeling2HoleRad + 1e-6)\r\n continue;\r\n let cus = this.GetModelFeedPath(br, m);\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 < HostApplicationServices.chaidanOption.modeling2HoleRad + 1e-6)\r\n continue;\r\n if (HostApplicationServices.chaidanOption.useDefaultRad)\r\n m.knifeRadius = HostApplicationServices.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: ExtrudeContourCurve, 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","import { Vector2, Vector3 } from \"three\";\r\nimport { ConverCircleToPolyline } from \"../Common/CurveUtils\";\r\nimport { Vector2ApplyMatrix4 } from \"../Common/Matrix4Utils\";\r\nimport { Arc } from \"../DatabaseServices/Entity/Arc\";\r\nimport { Circle } from \"../DatabaseServices/Entity/Circle\";\r\nimport { Polyline } from \"../DatabaseServices/Entity/Polyline\";\r\nimport { equaln } from \"../Geometry/GeUtils\";\r\n\r\n\r\n/**轮廓(多段线Pts Bul)数据 */\r\nexport interface IContourData\r\n{\r\n pts: Vector2[];\r\n buls: number[];\r\n}\r\n\r\n\r\n//转换成多段线点表(pts bul)\r\nexport function ConverToPtsBul(cu: Polyline | Circle, isOutline = true): IContourData\r\n{\r\n let ptsBuls: IContourData;\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 ptsBuls = cu.PtsBuls;\r\n }\r\n let ocs = cu.OCSNoClone;\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//转换成多段线点表(pts bul)\r\nexport function ConverArcToPtsBul(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 result.pts.push(arc.StartPoint);\r\n result.buls.push(bul);\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","import { Box3, Matrix4, Vector2, Vector3 } from \"three\";\r\nimport { SCALAR } from \"../Add-on/DrawDrilling/HoleUtils\";\r\nimport { lookOverBoardInfosTool } from \"../Add-on/LookOverBoardInfos/LookOverBoardInfosTool\";\r\nimport { HostApplicationServices } from \"../ApplicationServices/HostApplicationServices\";\r\nimport { EBoardKeyList } from \"../Common/BoardKeyList\";\r\nimport { MergeCurvelist } from \"../Common/CurveUtils\";\r\nimport { IsDev } from \"../Common/Deving\";\r\nimport { ParseExpr, safeEval } from \"../Common/eval\";\r\nimport { Log } from \"../Common/Log\";\r\nimport { SendReport } from \"../Common/Report\";\r\nimport { ShowSelectObjects } from \"../Common/ShowSelectObjects\";\r\nimport { Intent, Toaster } from \"../Common/Toaster\";\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 { Contour } from \"../DatabaseServices/Contour\";\r\nimport { Arc } from \"../DatabaseServices/Entity/Arc\";\r\nimport { Board, I2DModeingItem, IKnifeInfo, IModeling } from \"../DatabaseServices/Entity/Board\";\r\nimport { Circle } from \"../DatabaseServices/Entity/Circle\";\r\nimport { ExtrudeContourCurve } 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 { Shape } from \"../DatabaseServices/Shape\";\r\nimport { CanDrawHoleFuzz } from \"../Geometry/DrillParse/BoardGetFace\";\r\nimport { angleTo, equaln, equalv3, IsBetweenA2B, isIntersect2, isParallelTo, MoveMatrix, XAxis } from \"../Geometry/GeUtils\";\r\nimport { GetBoardSealingData, 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, ISealingData } from \"../UI/Store/BoardInterface\";\r\nimport { Entity } from './../DatabaseServices/Entity/Entity';\r\nimport { ICompHardwareOption } from './../UI/Components/RightPanel/RightPanelInterface';\r\nimport { ConverArcToPtsBul, ConverToPtsBul, IContourData } from \"./Convert2PtsBul\";\r\n\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\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 interface IDrillingOption\r\n{\r\n position: Vector3;\r\n radius: number;\r\n type: GangDrillType;\r\n depth: number;\r\n face: FaceDirection;\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 brThickness: number;\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 orgContour = GetSealedBoardContour(br, true, true);\r\n if (!orgContour || equaln(orgContour.Area, 0))\r\n {\r\n Toaster({\r\n message: br.Name + \" 轮廓错误,可能存在轮廓自交,请检查后重新拆单!(错误的板已经选中,您可以按住鼠标中键查看该板!)(使用FISC命令可以修复自交轮廓!)\",\r\n timeout: 8000,\r\n intent: Intent.DANGER,\r\n });\r\n Report([br.__OriginalEnt__ ?? br], br.Name + \" 轮廓错误\");\r\n return undefined;\r\n }\r\n let sealedOutline = GetSealedBoardContour(br, false);\r\n\r\n if (!sealedOutline || equaln(sealedOutline.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.__OriginalEnt__ ?? br], br.Name + \"扣除封边轮廓有误\");\r\n return;\r\n }\r\n let offsetTanslation = sealedOutline.BoundingBox.min;\r\n sealedOutline.Position = sealedOutline.Position.sub(offsetTanslation);\r\n let sealedOutlinePtsBul = ConverToPtsBul(sealedOutline);//不分裂圆弧转点表\r\n //外轮廓去掉最后的闭合点\r\n sealedOutlinePtsBul.pts.pop();\r\n sealedOutlinePtsBul.buls.pop();\r\n let size = sealedOutline.BoundingBox.getSize(new Vector3);\r\n\r\n //不扣除封边的轮廓信息\r\n let originOutlinePtsBul = ConverToPtsBul(orgContour);\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 = ConverToPtsBul(br.ContourCurve);//不分裂圆弧转点表\r\n\r\n return {\r\n info: GetBoardInfo(br, size),\r\n originOutlin: originOutlinePtsBul,//拼错了 未扣封边的点表\r\n outline: sealedOutlinePtsBul, //扣完封边的点表\r\n sealing: GetBoardSealingData(orgContour),\r\n modeling,\r\n holes: GetBoardHolesData(br, offsetTanslation, orgContour),\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 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\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 < HostApplicationServices.chaidanOption.modeling2HoleRad + 1e-6)\r\n continue;\r\n if (HostApplicationServices.chaidanOption.useDefaultRad)\r\n m.knifeRadius = HostApplicationServices.chaidanOption.radius;\r\n\r\n data.push({\r\n outline: ConverToPtsBul(cu.Clone(), false),\r\n holes: m.shape.Holes.map(h => ConverToPtsBul(h.Curve.Clone(), 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 < HostApplicationServices.chaidanOption.modeling2HoleRad + 1e-6)\r\n continue;\r\n if (HostApplicationServices.chaidanOption.useDefaultRad)\r\n m.knifeRadius = HostApplicationServices.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: ExtrudeContourCurve) => ConverToPtsBul(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: ConverToPtsBul(cu.Clone(), false),\r\n holes: m.shape.Holes.map(h => ConverToPtsBul(h.Curve.Clone(), 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): ExtrudeContourCurve | undefined\r\n {\r\n let con: ExtrudeContourCurve = GetSpliteOutlineBySpliteSize(br);\r\n if (con)\r\n return con;\r\n\r\n con = br.ContourCurve;\r\n if (con instanceof Circle) return con.Clone();\r\n\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\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, \"L\");\r\n let spliteWidth = safeEval(br.BoardProcessOption.spliteWidth, param, \"W\");\r\n let spliteThickness = safeEval(br.BoardProcessOption.spliteThickness, param, \"H\");\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 //获得拆单轮廓(如果没有,那么将返回空,如果有,返回多段线)\r\n export function GetSpliteOutlineBySpliteSize(br: Board): Polyline | null\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: ExtrudeContourCurve): 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, CanDrawHoleFuzz)) 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, CanDrawHoleFuzz) ? FaceDirection.Front : FaceDirection.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 < HostApplicationServices.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: ExtrudeContourCurve, 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 (HostApplicationServices.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: ExtrudeContourCurve)\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: FaceDirection;\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 sp = position.clone().setZ(0).add(d.Normal.multiplyScalar(- CanDrawHoleFuzz).applyMatrix4(roMat));//加长线(以便加大容差)\r\n let ep = position.clone().setZ(0).add(d.Normal.multiplyScalar(d.Height + CanDrawHoleFuzz).applyMatrix4(roMat));//加长线\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.warn(\"侧孔与板无交点,无法加工该侧孔!\");\r\n return;\r\n }\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, CanDrawHoleFuzz) ? FaceDirection.Front : FaceDirection.Back;\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: ExtrudeContourCurve, 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 //区间没有交集\r\n if (!(Math.max(z0, 0) < (Math.min(z1, br.Thickness) - CanDrawHoleFuzz))) return;\r\n\r\n if (!(z0 < CanDrawHoleFuzz || z1 > (br.Thickness - CanDrawHoleFuzz)))//禁止在中间挖洞\r\n {\r\n Log(`警告:板:{${br.Name}}的孔嵌在板中间,无法加工,已经跳过!`);\r\n return;\r\n }\r\n\r\n if (!(outline.PtInCurve(p)))//在轮廓内\r\n {\r\n Log(`警告:板:{${br.Name}}的孔不在板轮廓内,无法加工,已经跳过!`);\r\n return;\r\n }\r\n\r\n if (groovesOutlines.some(g => g.PtInCurve(p)))//在洞内\r\n {\r\n Log(`警告:板:{${br.Name}}的孔在造型内,无法加工,已经跳过!`);\r\n return;\r\n }\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 ? FaceDirection.Back : FaceDirection.Front,\r\n angle: angle,\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 Log(`警告:板:${br.Name}的排钻嵌在板件内部,已经跳过!`);\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.model = ParseExpr(data.model, { L: size.x, W: size.y, H: size.z });\r\n data.factory = ParseExpr(data.factory, { L: size.x, W: size.y, H: size.z });\r\n data.brand = ParseExpr(data.brand, { 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\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: ConverToPtsBul(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\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 = ConverArcToPtsBul(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\r\n export function GetChaiDanFeedingPath(data: IChaiDanFeedingData)\r\n {\r\n const { thickness, boardContour, dir, addLen, addWidth, addDepth, knifeRadius, brThickness } = 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: brThickness, 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: ExtrudeContourCurve) => ConverToPtsBul(c, false));\r\n }\r\n}\r\n","import Flatbush from 'flatbush';\r\nimport { Box3, Vector3 } from \"three\";\r\nimport { Curve } from \"../DatabaseServices/Entity/Curve\";\r\nimport { XAxis, YAxis } from '../Geometry/GeUtils';\r\n\r\n/**\r\n * 分析曲线的上下左右位置的线\r\n * @param curves\r\n */\r\nexport function ParseEdgeSealDir(curves: Curve[]): [number, number, number, number]\r\n{\r\n let boxAll = new Box3;\r\n let boxs: Box3[] = [];\r\n\r\n let fb = new Flatbush(curves.length);\r\n\r\n for (let c of curves)\r\n {\r\n let box = c.BoundingBox;\r\n boxs.push(box);\r\n boxAll.union(box);\r\n\r\n fb.add(box.min.x, box.min.y, box.max.x, box.max.y);\r\n }\r\n\r\n fb.finish();\r\n\r\n let leftids = fb.search(boxAll.min.x - 1, boxAll.min.y - 1, boxAll.min.x + 1, boxAll.max.y + 1);\r\n let rightids = fb.search(boxAll.max.x - 1, boxAll.min.y - 1, boxAll.max.x + 1, boxAll.max.y + 1);\r\n let topids = fb.search(boxAll.min.x - 1, boxAll.max.y - 1, boxAll.max.x + 1, boxAll.max.y + 1);\r\n let bottomids = fb.search(boxAll.min.x - 1, boxAll.min.y - 1, boxAll.max.x + 1, boxAll.min.y + 1);\r\n\r\n const FindBestCurveIndex = (ids: number[], dirRef: Vector3) =>\r\n {\r\n if (ids.length === 1) return ids[0];\r\n\r\n let maxLength = -Infinity;\r\n let bestIndex = -1;\r\n for (let id of ids)\r\n {\r\n let c = curves[id];\r\n let dir = c.EndPoint.sub(c.StartPoint).normalize();\r\n let length = Math.abs(dir.dot(dirRef));//取模(模越长 表示和dirRef越平行(接近))\r\n if (length > maxLength)\r\n {\r\n bestIndex = id;\r\n maxLength = length;\r\n }\r\n }\r\n return bestIndex;\r\n };\r\n\r\n let left = FindBestCurveIndex(leftids, YAxis);\r\n let right = FindBestCurveIndex(rightids, YAxis);\r\n let top = FindBestCurveIndex(topids, XAxis);\r\n let bottom = FindBestCurveIndex(bottomids, XAxis);\r\n\r\n return [left, right, top, bottom];\r\n}\r\n","import { arrayPushArray } from \"../Common/ArrayExt\";\r\nimport { 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 { ExtrudeContourCurve } from \"../DatabaseServices/Entity/Extrude\";\r\nimport { Line } from \"../DatabaseServices/Entity/Line\";\r\nimport { Polyline } from \"../DatabaseServices/Entity/Polyline\";\r\nimport { CreateContour2 } from \"../Geometry/CreateContour2\";\r\nimport { equaln, equalv3, isParallelTo, SelectNearP, XAxis } from \"../Geometry/GeUtils\";\r\nimport { Production } from \"../Production/Product\";\r\nimport { IHighSealedItem, ISealingData } from \"../UI/Store/BoardInterface\";\r\nimport { IntersectOption } from \"./IntersectWith\";\r\nimport { ParseEdgeSealDir } from \"./ParseEdgeSealDir\";\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\nexport function CalcEdgeSealing(cus: Curve[], highSeals?: IHighSealedItem[])\r\n{\r\n if (cus.length <= 1) return;\r\n\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))//反向共线 later 在front内\r\n {\r\n //删除线\r\n cus.splice(laterIndex, 1);\r\n highSeals?.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))//反向共线 front 在 later内\r\n {\r\n //删除线\r\n cus.splice(i, 1);\r\n highSeals?.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 => refLine.PtOnCurve(p) && refLine2.PtOnCurve(p));\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 //删除线\r\n cus.splice(i, 1);\r\n highSeals?.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 highSeals?.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 if (cus.length < 2) return false;\r\n\r\n //后面线点无效,如果是起始线,则删除,否则缓存原始线,继续尝试连接\r\n if (par > 1 - 1e-6)\r\n {\r\n if (laterIndex === 0)\r\n {\r\n //删除线\r\n cus.shift();\r\n highSeals?.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\n//与GetBoardSealingCurves相关\r\nexport function GetBoardHighSeal(br: Board, sealcus: Curve[]): IHighSealedItem[]\r\n{\r\n if (br.BoardProcessOption[EBoardKeyList.SpliteHeight]\r\n && br.BoardProcessOption[EBoardKeyList.SpliteWidth]\r\n && br.BoardProcessOption[EBoardKeyList.SpliteThickness]\r\n )\r\n {\r\n return [\r\n { size: parseFloat(br.BoardProcessOption.sealedDown) },\r\n { size: parseFloat(br.BoardProcessOption.sealedRight) },\r\n { size: parseFloat(br.BoardProcessOption.sealedUp) },\r\n { size: parseFloat(br.BoardProcessOption.sealedLeft) },\r\n ];\r\n }\r\n\r\n let highSeals = br.BoardProcessOption.highSealed.filter(d => d.size !== null && d.size !== undefined);\r\n\r\n //若未设置高级封边,把上下左右封边存入高级封边\r\n if (sealcus.length !== highSeals.length || !br.IsSpecialShape)\r\n {\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 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\r\n if (Math.abs(derv.x) > Math.abs(derv.y))\r\n {\r\n if (derv.x > 0)\r\n highSeals.push({ size: sealDown });\r\n else\r\n highSeals.push({ size: sealUp });\r\n }\r\n else\r\n {\r\n if (derv.y > 0)\r\n highSeals.push({ size: sealRight });\r\n else\r\n highSeals.push({ size: sealLeft });\r\n }\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 //当存在拆单尺寸时\r\n if (br.BoardProcessOption[EBoardKeyList.SpliteHeight]\r\n && br.BoardProcessOption[EBoardKeyList.SpliteWidth]\r\n && br.BoardProcessOption[EBoardKeyList.SpliteThickness]\r\n )\r\n {\r\n const param = { L: br.Height, W: br.Width, H: br.Thickness };\r\n let width = safeEval(br.BoardProcessOption[EBoardKeyList.SpliteWidth], param, \"W\");\r\n let height = safeEval(br.BoardProcessOption[EBoardKeyList.SpliteHeight], param, \"L\");\r\n let cu = new Polyline().Rectangle(width, height);\r\n return cu.Explode();\r\n }\r\n\r\n let cu: ExtrudeContourCurve = 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 ExtrudeContourCurve;\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\nconst SEAL_VALUE_KEY = \"__highSeals__\";\r\n\r\n\r\n/**\r\n * 获取板件轮廓\r\n * 结果轮廓拆单用,统一逆时针数据\r\n * hasSealing 轮廓是否包含封边\r\n * 用户计算拆单侧孔面id\r\n *\r\n * //返回的曲线中 如果 hasSealing isParseSeal 那么将可以取出封边信息\r\n */\r\nexport function GetSealedBoardContour(br: Board, hasSealing: boolean, isParseSeal = false): Polyline | Circle | undefined\r\n{\r\n let area2 = br.ContourCurve.Area2;\r\n if (Math.abs(area2) < 10)\r\n return;\r\n\r\n let offsetCus: Curve[] = [];\r\n let curves = GetBoardSealingCurves(br);\r\n let dir = Math.sign(area2);\r\n\r\n let highSealsExpd: ISealingData[];//展开后的封边信息(仅在未扣除封边的分支中计算)\r\n if (hasSealing)\r\n {\r\n let highSeals: IHighSealedItem[];\r\n if (isParseSeal)\r\n {\r\n highSeals = GetBoardHighSeal(br, curves);\r\n highSealsExpd = [];\r\n }\r\n\r\n for (let i = 0; i < curves.length; i++)\r\n {\r\n let curve = curves[i];\r\n\r\n const PushCurve = (c: Curve) =>\r\n {\r\n offsetCus.push(c);\r\n highSealsExpd?.push({ size: highSeals[i].size, length: c.Length });\r\n };\r\n\r\n if (curve instanceof Polyline)\r\n for (let cu of curve.Explode())\r\n PushCurve(cu);\r\n else\r\n PushCurve(curve);\r\n }\r\n }\r\n else\r\n {\r\n let highSeals = GetBoardHighSeal(br, curves);\r\n\r\n //圆的dir始终等于1\r\n // if (cus[0] instanceof Circle)\r\n // dir = 1;\r\n\r\n //所有的封边都一样时\r\n if (highSeals.every(s => equaln(s.size, highSeals[0].size), 1e-3))\r\n {\r\n let brContour = br.ContourCurve;\r\n\r\n //当存在拆单尺寸时\r\n if (br.BoardProcessOption[EBoardKeyList.SpliteHeight]\r\n && br.BoardProcessOption[EBoardKeyList.SpliteWidth]\r\n && br.BoardProcessOption[EBoardKeyList.SpliteThickness]\r\n )\r\n {\r\n const param = { L: br.Height, W: br.Width, H: br.Thickness };\r\n let width = safeEval(br.BoardProcessOption[EBoardKeyList.SpliteWidth], param, \"W\");\r\n let height = safeEval(br.BoardProcessOption[EBoardKeyList.SpliteHeight], param, \"L\");\r\n brContour = new Polyline().Rectangle(width, height);\r\n }\r\n\r\n let retPl: ExtrudeContourCurve;\r\n\r\n if (!highSeals[0].size || equaln(highSeals[0].size, 0, 1e-3))\r\n {\r\n retPl = brContour.Clone();\r\n if (dir < 0)\r\n retPl.Reverse();\r\n }\r\n else\r\n {\r\n retPl = brContour.GetOffsetCurves(-highSeals[0].size * dir)[0] as ExtrudeContourCurve;\r\n\r\n if (retPl && !retPl.IsClose)\r\n {\r\n //某些情况下,这里会出现非闭合轮廓\r\n retPl = CreateContour2([retPl])?.Curve;\r\n }\r\n\r\n if (retPl && retPl.Area2 < 0)\r\n retPl.Reverse();\r\n }\r\n\r\n if (retPl) return retPl;\r\n }\r\n\r\n for (let i = 0; i < curves.length; i++)\r\n {\r\n let cs: Curve[];\r\n if (!highSeals[i].size)\r\n cs = [curves[i].Clone()];\r\n else\r\n cs = curves[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 arrayPushArray(offsetCus, c.Explode());\r\n else\r\n offsetCus.push(c);\r\n }\r\n }\r\n }\r\n\r\n if (offsetCus.length === 1 && offsetCus[0] instanceof Circle)\r\n {\r\n let cir = offsetCus[0];\r\n\r\n if (highSealsExpd) cir[SEAL_VALUE_KEY] = highSealsExpd;\r\n\r\n return cir;\r\n }\r\n\r\n if (!CalcEdgeSealing(offsetCus, highSealsExpd)) return;\r\n let pl = Polyline.FastCombine(offsetCus, LINK_FUZZ);\r\n if (pl && dir < 0)\r\n {\r\n pl.Reverse();\r\n highSealsExpd?.reverse();\r\n }\r\n\r\n if (highSealsExpd) pl[SEAL_VALUE_KEY] = highSealsExpd;\r\n\r\n return pl;\r\n}\r\n\r\nexport function GetBoardSealingData(curve: Polyline | Circle)\r\n{\r\n let sealData = curve[SEAL_VALUE_KEY] as ISealingData[];\r\n if (curve instanceof Circle)\r\n {\r\n sealData[0].length *= 0.5;\r\n sealData.push({ ...sealData[0] });\r\n }\r\n return sealData;\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 = GetBoardSealingCurves(br);\r\n\r\n //现在我们不管是否有拆单尺寸,我们总是关系封边值\r\n // let param = { L: br.Height, W: br.Width, H: br.Thickness };\r\n // let spliteHeight = safeEval(br.BoardProcessOption.spliteHeight, param, \"L\");\r\n // let spliteWidth = safeEval(br.BoardProcessOption.spliteWidth, param, \"W\");\r\n // let spliteThickness = safeEval(br.BoardProcessOption.spliteThickness, param, \"H\");\r\n // if ((spliteHeight && spliteWidth && spliteThickness) || !br.IsSpecialShape && cus.length === 4)\r\n\r\n if (!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).normalize();\r\n if (isParallelTo(derv, XAxis, 1e-4))\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 else\r\n {\r\n let [left, right, top, bottom] = ParseEdgeSealDir(cus);\r\n br.BoardProcessOption[EBoardKeyList.LeftSealed] = edges[left].size.toString();\r\n br.BoardProcessOption[EBoardKeyList.RightSealed] = edges[right].size.toString();\r\n br.BoardProcessOption[EBoardKeyList.UpSealed] = edges[top].size.toString();\r\n br.BoardProcessOption[EBoardKeyList.DownSealed] = edges[bottom].size.toString();\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 = Math.abs(feedingDepth * Math.tan(knifAngle));\r\n let cus = polyline.Explode();\r\n arrayRemoveIf(cus, c => c.Length < 0.01);\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.clone());\r\n }\r\n if (c2 instanceof Arc)\r\n c2 = new Line(curP.clone(), curP.clone().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 //向量与平分线,参照倒角代码\r\n let derv1 = c1.GetFistDeriv(0).normalize();\r\n let derv2 = c2.GetFistDeriv(0).normalize();\r\n let bisectorVec = derv1.clone().negate().add(derv2).multiplyScalar(0.5);\r\n\r\n let co1 = c1.GetOffsetCurves(x * Math.sign(derv1.cross(bisectorVec).z))[0];\r\n let co2 = c2.GetOffsetCurves(x * Math.sign(derv2.cross(bisectorVec).z))[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 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","import { Geometry, Line as TLine, LineSegments, Matrix3, Matrix4, Mesh, Object3D, ShapeGeometry, UVGenerator, Vector3 } from 'three';\r\nimport { Board2Regions } from '../../Add-on/BoardEditor/Board2Regions';\r\nimport { DeserializationBoard2DModeingData, DeserializationBoard3DModeingData, deserializationBoardData, SerializeBoard2DModeingData, SerializeBoard3DModeingData, serializeBoardData } from '../../Add-on/BoardEditor/SerializeBoardData';\r\nimport { CyHoleInBoard, InitRectBoardHoleOption, SetRectHighHole, TempRectHoleOption } from '../../Add-on/DrawDrilling/HoleUtils';\r\nimport { HostApplicationServices } from '../../ApplicationServices/HostApplicationServices';\r\nimport { arrayRemoveIf, arraySortByNumber, arraySum } from '../../Common/ArrayExt';\r\nimport { EBoardKeyList } from '../../Common/BoardKeyList';\r\nimport { ColorMaterial } from '../../Common/ColorPalette';\r\nimport { tempMatrix1, TransformVector, ZMirrorMatrix } from '../../Common/Matrix4Utils';\r\nimport { UpdateDraw } from '../../Common/Status';\r\nimport { ObjectSnapMode } from '../../Editor/ObjectSnapMode';\r\nimport { boardUVGenerator, boardUVGenerator2 } from '../../Geometry/BoardUVGenerator';\r\nimport { BufferGeometryUtils } from '../../Geometry/BufferGeometryUtils';\r\nimport { equaln, equalv3, IdentityMtx4, XAxis, XAxisN, YAxis, YAxisN, ZAxis, ZeroVec } from '../../Geometry/GeUtils';\r\nimport { PointShapeUtils } from '../../Geometry/PointShapeUtils';\r\nimport { GetBoardHighSeal, GetBoardSealingCurves, HandleRectBoardSealingData } from '../../GraphicsSystem/CalcEdgeSealing';\r\nimport { RenderType } from '../../GraphicsSystem/RenderType';\r\nimport { VData2Curve, VKnifToolPath } from '../../GraphicsSystem/ToolPath/VKnifToolPath';\r\nimport { BoardOpenDir, BoardProcessOption, BoardType, ComposingType, FaceDirection, IHighSealedItem, LinesType } from '../../UI/Store/BoardInterface';\r\nimport { CylinderHole } from '../3DSolid/CylinderHole';\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 { Arc } from './Arc';\r\nimport { Circle } from './Circle';\r\nimport { DragPointType } from './DragPointType';\r\nimport { Entity } from './Entity';\r\nimport { ExtrudeContourCurve, ExtrudeSolid } from './Extrude';\r\nimport { Polyline } from './Polyline';\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\n//排钻配置名是合法的\r\nfunction IsValidDriName(name: string): boolean\r\n{\r\n return name === \"不排\" || HostApplicationServices.DrillConfigs.has(name);\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 protected HasEdgeRenderType = true;\r\n protected HasPlaceFaceRenderType = true;\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\r\n //更新封边检查的显示\r\n if (!this.__ReadFileIng__ && key === EBoardKeyList.HighSealed)\r\n {\r\n let obj = this.CacheDrawObject.get(RenderType.Edge);\r\n if (obj)\r\n {\r\n this.UpdateDrawObject(RenderType.Edge, obj);\r\n obj.updateMatrixWorld(true);\r\n }\r\n }\r\n return true;\r\n }\r\n let result = Reflect.set(target, key, value, receiver);\r\n\r\n if (!this.__ReadFileIng__)//看起来使用 this.ReadFileIng 似乎也是没问题的\r\n {\r\n if (key === EBoardKeyList.Lines)\r\n this.Update(UpdateDraw.Geometry);\r\n else if (key === EBoardKeyList.ComposingFace)\r\n {\r\n let obj = this.CacheDrawObject.get(RenderType.PlaceFace);\r\n if (obj)\r\n {\r\n this.UpdateDrawObject(RenderType.PlaceFace, obj);\r\n obj.updateMatrixWorld(true);\r\n }\r\n }\r\n }\r\n\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.WriteAllObjectRecord();\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 = [...HostApplicationServices.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\r\n let dridatas: string[];\r\n let ocsInv: Matrix4;\r\n if (brs.some(br => br.__OriginalEnt__))\r\n {\r\n if (this._BoardProcessOption.highDrill\r\n && this._BoardProcessOption.highDrill.length > 1\r\n && !this._BoardProcessOption.highDrill.every(d => d === this._BoardProcessOption.drillType))\r\n dridatas = this._BoardProcessOption.highDrill;\r\n\r\n ocsInv = this.OCSInv;\r\n }\r\n\r\n //拆单或者bbs的时候会重新加入最新的原板件的排钻和层板钉数据\r\n for (let br of brs)\r\n {\r\n if (br.__OriginalEnt__)\r\n {\r\n br._Name = this._Name;\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 if (dridatas)\r\n {\r\n br.BoardProcessOption.highDrill = [];//因为上面用了拷贝,所以这里不能直接改它的数据(我们新建一个数组来改它,否则原始板件的数据就被改掉了)\r\n //矩阵对齐\r\n let m = br.OCS.premultiply(ocsInv);\r\n for (let i = 0; i < br.contourCurve.EndParam; i++)\r\n {\r\n let p = br.contourCurve.GetPointAtParam(i + 0.5);\r\n p.applyMatrix4(m);\r\n\r\n let cp = this.contourCurve.GetClosestPointTo(p, false);\r\n let cparam = this.contourCurve.GetParamAtPoint2(cp);\r\n if (cparam !== undefined)\r\n {\r\n let newDri = dridatas[Math.floor(cparam)];\r\n br._BoardProcessOption.highDrill[i] = newDri ?? br._BoardProcessOption.drillType;\r\n }\r\n else\r\n br._BoardProcessOption.highDrill[i] = br._BoardProcessOption.drillType;\r\n }\r\n }\r\n else//填充默认类型就好了\r\n br._BoardProcessOption.highDrill = Array(br.contourCurve.EndParam).fill(br._BoardProcessOption.drillType);\r\n\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.OCSNoClone));\r\n cu.Erase(false);//当内部造型超过100个时,不校验时,这个曲线就是erase的状态,所以设置这个状态,避免无法绘制出来\r\n if (cu instanceof Circle)//这里保证这个圆是正常坐标系 I3BUSY#note_4525213\r\n cu.OCS = new Matrix4().setPosition(cu.Position);\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.OCSNoClone));\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\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.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.ContourCurve = hole.Curve;\r\n subG.Thickness = model.thickness;\r\n\r\n g.AppendGroove(subG);\r\n }\r\n\r\n //不需要处理正反面的原因是因为Get时保留了曲线的高度,导致生成的槽位置已经在指定位置\r\n\r\n g.ApplyMatrix(this.OCSNoClone);\r\n\r\n this.grooves.push(g);\r\n }\r\n this.GrooveCheckAllAutoSplit();\r\n this.Update();\r\n }\r\n\r\n get Modeling2D()\r\n {\r\n return [...this._2DModelingList];\r\n }\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\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 if (this._2DModelingList.length === 0) return;\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 if (this._3DModelingList.length === 0) return;\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 if (this.grooves.length === 0) return;\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 && !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 YAxis,\r\n XAxisN,\r\n ZAxis\r\n );\r\n break;\r\n case BoardType.Vertical:\r\n roMat.makeBasis(\r\n YAxis,\r\n ZAxis,\r\n XAxis\r\n );\r\n break;\r\n case BoardType.Behind:\r\n roMat.makeBasis(\r\n XAxis,\r\n ZAxis,\r\n YAxisN\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 if (type === this._BoardType) return;\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 if (n === this._Name) return;\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: ExtrudeContourCurve)\r\n {\r\n //标识是否被初始化\r\n TempRectHoleOption.up = undefined;\r\n\r\n let needRename = !IsValidDriName(this.BoardProcessOption.drillType);\r\n if (!this.contourCurve || cu.EndParam !== this.contourCurve.EndParam || needRename)\r\n {\r\n let defaultType = this._BoardProcessOption.drillType;\r\n if (needRename)\r\n {\r\n defaultType = HostApplicationServices.DrillConfigs.size ? HostApplicationServices.DrillConfigs.entries().next().value[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 }\r\n\r\n /**\r\n * 在不改变Normal和实体显示的情况下,修改X轴的指向\r\n * @param xAxis\r\n */\r\n override SetXAxis(xAxis: Vector3, isKeepLines = false): this\r\n {\r\n let ocsInv = this.OCSInv;\r\n let x = TransformVector(xAxis.clone(), ocsInv).setZ(0).normalize();\r\n if (equalv3(ZeroVec, x, 1e-5)) return this;\r\n\r\n this.WriteAllObjectRecord();\r\n\r\n let highSeals: IHighSealedItem[];\r\n if (this.isRect)\r\n highSeals = GetBoardHighSeal(this, GetBoardSealingCurves(this));\r\n\r\n let a = Math.atan2(x.y, x.x);\r\n\r\n if (isKeepLines && this.BoardProcessOption.lines !== LinesType.CanReversal && (equaln(x.y, 1, 1e-5) || equaln(x.y, -1, 1e-5)))\r\n this.BoardProcessOption.lines = 1 - this.BoardProcessOption.lines;//翻转纹路 1=>0 0=>1\r\n\r\n x.transformDirection(this._Matrix);\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 this.ContourCurve.ApplyMatrix(tempMatrix1.makeRotationZ(-a));//复用了这个矩阵\r\n this.CheckContourCurve();\r\n if (this.contourCurve instanceof Polyline)\r\n this.contourCurve.UpdateOCSTo(IdentityMtx4);\r\n\r\n if (this.isRect)\r\n HandleRectBoardSealingData(this, highSeals);//这里不可以用缓存的曲线 否则分析错误,必须重新开始分析曲线\r\n\r\n this.Update();\r\n return this;\r\n }\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)\r\n {\r\n if (!this.Id)\r\n {\r\n // super.ApplyMirrorMatrix(m); //这个变更导致镜像错误 因为实体没有正常的被更新. 所以需要注意的是,如果需要镜像变更,需要给实体一个id!!!\r\n return this;\r\n }\r\n\r\n this.ContourCurve;//因为下面翻转孔面的代码,所以必须初始化这个\r\n\r\n let hasSplitSize = (this.BoardProcessOption[EBoardKeyList.SpliteHeight]\r\n && this.BoardProcessOption[EBoardKeyList.SpliteWidth]\r\n && this.BoardProcessOption[EBoardKeyList.SpliteThickness]\r\n );\r\n\r\n let highSeals = GetBoardHighSeal(this, GetBoardSealingCurves(this));\r\n\r\n super.ApplyMirrorMatrix(m);\r\n\r\n if (this.contourCurve.Area2 < 0)\r\n {\r\n this.contourCurve.Reverse();\r\n highSeals.reverse();\r\n this.BoardProcessOption.highSealed?.reverse();\r\n this.BoardProcessOption.highDrill?.reverse();\r\n\r\n if (hasSplitSize)\r\n {\r\n [\r\n this.BoardProcessOption.sealedUp,\r\n this.BoardProcessOption.sealedLeft,\r\n this.BoardProcessOption.sealedDown,\r\n this.BoardProcessOption.sealedRight,\r\n ]\r\n =\r\n [\r\n this.BoardProcessOption.sealedUp,\r\n this.BoardProcessOption.sealedRight,\r\n this.BoardProcessOption.sealedDown,\r\n this.BoardProcessOption.sealedLeft,\r\n ];\r\n }\r\n }\r\n else\r\n this.BoardProcessOption[EBoardKeyList.BigHole] = 1 - this.BoardProcessOption[EBoardKeyList.BigHole];//反转大孔面\r\n\r\n this.BoardProcessOption.highSealed = highSeals;\r\n\r\n if (!hasSplitSize && this.isRect)\r\n HandleRectBoardSealingData(this, highSeals);\r\n //重新构建SpaceOCS\r\n this._SpaceOCS.multiplyMatrices(this._Matrix, new Matrix4().getInverse(this.RotateMat));\r\n\r\n //\"左\",\"右\"互换\r\n if (this.Name.includes(\"左\"))\r\n this.Name = this.Name.replace(\"左\", \"右\");\r\n else if (this.Name.includes(\"右\"))\r\n this.Name = this.Name.replace(\"右\", \"左\");\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 _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\r\n //分裂后重新将排钻实体设置给不同的实体\r\n override HandleSpliteEntitys(splitEntitys: this[])\r\n {\r\n if (!splitEntitys.length) return;\r\n this.WriteAllObjectRecord();\r\n\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\r\n //如果没有开排钻反应器,那么需要重新关联排钻\r\n //排钻列表\r\n let dris: [ObjectId, ObjectId[][]][] = [];\r\n if (!HostApplicationServices.openDrillingReactor)\r\n {\r\n for (let d of this._DrillList)\r\n {\r\n dris.push(d);\r\n\r\n //离婚,分割财产\r\n let fbr = d[0]?.Object as Board;\r\n if (fbr)\r\n {\r\n fbr.WriteAllObjectRecord();\r\n fbr._DrillList.delete(this.Id);\r\n }\r\n }\r\n\r\n this._DrillList.clear();//开启反应器时,这个行为由排钻重排控制,没有开启时,我们暂时清空,下面会重新计算关联\r\n }\r\n\r\n //清除所有层板钉(因为下面会重新关联)(这个和排钻反应器没有关联,必须全部清除)\r\n this._LayerNails.length = 0;\r\n\r\n //所有的实体,包括自己\r\n let ents: this[] = [this].concat(splitEntitys);\r\n\r\n for (let en of ents)\r\n {\r\n let ocsInv = en.OCSInv;\r\n //把层板钉送给有缘人\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 if (en === this)\r\n {\r\n this._LayerNails.push(id);\r\n return false;\r\n }\r\n //异形换位,把排钻给别人\r\n if (n.MId === this.Id)\r\n n.MId = en.Id;\r\n else if (n.FId === this.Id)\r\n n.FId = en.Id;\r\n //新的板需要关联这个id\r\n en._LayerNails.push(id);\r\n return false;\r\n }\r\n return true;\r\n });\r\n\r\n //如果没有开排钻反应器,那么需要重新关联排钻\r\n if (!HostApplicationServices.openDrillingReactor)\r\n {\r\n for (let d of dris)\r\n {\r\n let [bid, drIdss] = d;\r\n let board = bid?.Object as Board;//另一个父亲\r\n\r\n drIdss = drIdss.filter(ids =>\r\n {\r\n if (!ids[0]?.Object || ids[0].IsErase) return false;\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 if (board)//重新拥有父亲的身份.\r\n board.AppendDrillList(en.Id, [ids]);\r\n\r\n en.AppendDrillList(bid, [ids]);//拥有新的母亲的身份\r\n\r\n for (let h of holes)\r\n {\r\n //成了别人的新娘\r\n if (h.FId === this.Id)\r\n h.FId = en.Id;\r\n if (h.MId === this.Id)\r\n h.MId = en.Id;\r\n }\r\n return false;\r\n }\r\n }\r\n else\r\n {\r\n //直接删除,毫不留情\r\n for (let id of ids)\r\n {\r\n let object = id?.Object;\r\n if (object && !object.IsErase)\r\n object.Erase();\r\n }\r\n return false;\r\n }\r\n return true;\r\n });\r\n\r\n d[1] = drIdss;\r\n }\r\n\r\n }\r\n\r\n }\r\n\r\n //删除无父母的排钻\r\n for (let d of dris)\r\n {\r\n for (let ids of d[1])\r\n for (let id of ids)\r\n {\r\n let object = id?.Object;\r\n if (object && !object.IsErase)\r\n object.Erase();\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 this.UpdateDrawObject(renderType, obj);\r\n }\r\n else if (renderType === RenderType.PlaceFace)\r\n {\r\n obj = new Object3D;\r\n this.UpdateDrawObject(renderType, 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\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 else if (renderType === RenderType.PlaceFace)\r\n {\r\n let isArbitrary = this._BoardProcessOption[EBoardKeyList.ComposingFace] === ComposingType.Arbitrary;\r\n\r\n obj.add(new Mesh(this.MeshGeometry, ColorMaterial.GetConceptualMaterial(8)),\r\n new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(7))\r\n );\r\n\r\n if (!isArbitrary)\r\n obj.add(this.GetPlaceFace());\r\n }\r\n this.HandleBoardMaterial(renderType, obj);\r\n\r\n return o;\r\n }\r\n\r\n private get PlaceColor() { return this._Color === 8 ? 9 : this._Color; }\r\n //获得绘制的放置网格\r\n GetPlaceFace(): Mesh\r\n {\r\n let shapeGeom = new ShapeGeometry(this.contourCurve.Shape);\r\n let isBack = this._BoardProcessOption[EBoardKeyList.ComposingFace] !== ComposingType.Positive;\r\n shapeGeom.applyMatrix4(this.contourCurve.OCSNoClone);\r\n shapeGeom.translate(0, 0, isBack ? -0.2 : this.thickness + 0.5);\r\n let mesh = new Mesh(shapeGeom, ColorMaterial.GetBasicMaterialDoubleSide(this.PlaceColor));\r\n return mesh;\r\n }\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) && HostApplicationServices.showLines && this.IsChaiDan)\r\n obj.add(...this.GetLinesDir());\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\r\n UpdateDrawObjectMaterial(renderType: RenderType, obj: Object3D)\r\n {\r\n super.UpdateDrawObjectMaterial(renderType, obj);\r\n\r\n if (renderType === RenderType.PlaceFace)\r\n {\r\n let face = obj.children[2] as Mesh;\r\n if (!face) return;\r\n face.material = ColorMaterial.GetBasicMaterialDoubleSide(this.PlaceColor);\r\n }\r\n\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\r\n CheckSealing(obj: Object3D)\r\n {\r\n let sealingInfo = new Map(HostApplicationServices.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\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 if (!polyline) continue;//多段线可能偏移失败\r\n\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 else if (snapMode === ObjectSnapMode.Mid)\r\n {\r\n for (let vm of this._2DModelingList)\r\n {\r\n let ps = vm.path.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform);\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 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 // if (this.width === 0 || this.height === 0) //板件变成0长度,无法绘制\r\n // this._isErase = true;\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\r\n file.Write(this._LayerNails.length);\r\n for (let nail of this._LayerNails)\r\n file.WriteHardObjectId(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 { arrayRemoveDuplicateBySort } from \"../../../Common/ArrayExt\";\r\n\r\ntype Range = [number, number];\r\n\r\nconst COMPARE_FUNC = (sparam: number, range: Range) => sparam - range[0];\r\n\r\n//寻找插入位置\r\nexport function InsertRangeIndex(ranges: Range[], sparam: number)\r\n{\r\n return InsertSortedIndex(ranges, sparam, COMPARE_FUNC);\r\n}\r\n\r\n//返回可以插入的位置\r\nexport function InsertSortedIndex(array: T[], element: E, comparefunc: (a: E, 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) // element > testelement\r\n leftbound = testindex + 1;\r\n else if (compareresult === 0)//因为函数 FindBestRange 会取index-1 来取范围\r\n leftbound = testindex + 1;\r\n else\r\n rightbound = testindex;\r\n }\r\n return leftbound;\r\n}\r\n\r\n/**\r\n * 插入范围,并且合并范围\r\n */\r\nexport function InsertRangeAndUnion(\r\n ranges: Range[],\r\n sparam: number,\r\n eparam: number,\r\n insertIndex = InsertRangeIndex(ranges, sparam)\r\n)\r\n{\r\n if (insertIndex !== 0 && (sparam - 1e-6) <= (ranges[insertIndex - 1][1]))//和前面一个范围合并\r\n {\r\n //传染\r\n let s = insertIndex;\r\n for (; s < ranges.length; s++)\r\n {\r\n let r = ranges[s];\r\n if ((r[0] - 1e-6) < eparam)\r\n {\r\n if (r[1] >= (eparam - 1e-6))\r\n {\r\n eparam = r[1];\r\n s++;\r\n break;\r\n }\r\n //else continue\r\n }\r\n else\r\n break;\r\n }\r\n ranges.splice(insertIndex, s - insertIndex);\r\n ranges[insertIndex - 1][1] = eparam;//合并成功\r\n }\r\n else if (insertIndex !== ranges.length && eparam + 1e-6 > ranges[insertIndex][0]) //和后面的合并\r\n {\r\n let nextRange = ranges[insertIndex];\r\n nextRange[0] = sparam;\r\n nextRange[1] = Math.max(eparam, nextRange[1]);\r\n\r\n eparam = nextRange[1];\r\n\r\n //传染\r\n insertIndex++;\r\n let s = insertIndex;\r\n for (; s < ranges.length; s++)\r\n {\r\n let r = ranges[s];\r\n if (r[0] <= (eparam + 1e-6))\r\n {\r\n if ((r[1] + 1e-6) >= eparam)\r\n {\r\n eparam = r[1];\r\n s++;\r\n break;\r\n }\r\n //else continue\r\n }\r\n else\r\n break;\r\n }\r\n ranges.splice(insertIndex, s - insertIndex);\r\n ranges[insertIndex - 1][1] = eparam;//合并成功\r\n }\r\n else\r\n {\r\n ranges.splice(insertIndex, 0, [sparam, eparam]);\r\n }\r\n\r\n return ranges;\r\n}\r\n\r\n//范围并集\r\nexport function RangeUnion(ranges: Range[])\r\n{\r\n arrayRemoveDuplicateBySort(ranges, (r1, r2) =>\r\n {\r\n if (r1[1] >= r2[1])\r\n return true;\r\n\r\n if (r1[1] >= r2[0])\r\n {\r\n r1[1] = r2[1];\r\n return true;\r\n }\r\n\r\n return false;\r\n });\r\n\r\n return ranges;\r\n}\r\n\r\n//范围交集\r\nexport function Intersection(range1: Range, range2: Range): Range | undefined\r\n{\r\n let min = Math.max(range1[0], range2[0]);\r\n let max = Math.min(range1[1], range2[1]);\r\n\r\n if (max > min) return [min, max];\r\n}\r\n","import { Box3, Vector3 } from \"three\";\r\nimport { arrayRemoveDuplicateBySort } from \"../../../Common/ArrayExt\";\r\nimport { equalv3 } from \"../../../Geometry/GeUtils\";\r\nimport { IntersectOption } from \"../../../GraphicsSystem/IntersectWith\";\r\nimport { equaln } from \"../../../Nest/Common/Util\";\r\nimport { Contour } from \"../../Contour\";\r\nimport { Arc } from \"../../Entity/Arc\";\r\nimport { Curve } from \"../../Entity/Curve\";\r\nimport { Line } from \"../../Entity/Line\";\r\nimport { Polyline } from \"../../Entity/Polyline\";\r\nimport { InsertRangeAndUnion, InsertRangeIndex } from \"./RangeUtils\";\r\n\r\n\r\nexport class CurveTrim\r\n{\r\n _TrimParams: [number, number][] = [];\r\n _IsErase = false;\r\n public _Box: Box3;\r\n constructor(public _curve: Line | Arc)\r\n {\r\n this._Box = _curve.BoundingBox.expandByVector(new Vector3(0.01, 0.01));\r\n }\r\n\r\n TrimBy(contour: Contour, box: Box3, saveSyntropy = false)\r\n {\r\n if (this._IsErase) return;\r\n\r\n //交点参数列表\r\n let iParams = this._curve.IntersectWith2(contour.Curve, IntersectOption.ExtendNone).map(p => p.thisParam).filter(p => p > 1e-6 && p < 0.999999);\r\n iParams.push(0, 1);\r\n iParams.sort((a, b) => a - b);\r\n arrayRemoveDuplicateBySort(iParams, (a1, a2) => equaln(a1, a2, 1e-6));\r\n\r\n if (iParams.length === 2)//[0,1]全包含 或者在外部\r\n {\r\n let p = this.GetPointAtParam(0.5);\r\n if (this.PointInContour(p, contour, box, saveSyntropy))\r\n this._IsErase = true;\r\n return;\r\n }\r\n\r\n for (let i = 0; i < iParams.length - 1; i++)\r\n {\r\n let sparam = iParams[i], eparam = iParams[i + 1];\r\n\r\n let insertIndex = InsertRangeIndex(this._TrimParams, iParams[i]);\r\n\r\n if (insertIndex !== 0 && this._TrimParams[insertIndex - 1][1] > eparam)//包含在已经被切割的范围内,那么直接不用重复判断 (只可能被前一段包含)\r\n continue;\r\n\r\n let midParam = (sparam + eparam) * 0.5;\r\n let p = this.GetPointAtParam(midParam);\r\n if (this.PointInContour(p, contour, box, saveSyntropy))\r\n {\r\n InsertRangeAndUnion(this._TrimParams, sparam, eparam, insertIndex);\r\n\r\n if (this._TrimParams.length === 1 && this._TrimParams[0][0] === 0 && this._TrimParams[0][1] === 1)\r\n {\r\n this._IsErase = true;\r\n return;\r\n }\r\n }\r\n }\r\n\r\n }\r\n\r\n PointInContour(p: Vector3, contour: Contour, contourBox: Box3, saveSyntropy = false)\r\n {\r\n return contourBox.containsPoint(p) && (contour.Curve.PtInCurve(p) && !contour.Curve.PtOnCurve(p));\r\n }\r\n\r\n TrimParam(sparam: number, eparam: number)\r\n {\r\n let insertIndex = InsertRangeIndex(this._TrimParams, sparam);\r\n\r\n if (insertIndex !== 0 && this._TrimParams[insertIndex - 1][1] > eparam)//包含在已经被切割的范围内,那么直接不用重复判断 (只可能被前一段包含)\r\n return;\r\n InsertRangeAndUnion(this._TrimParams, sparam, eparam, insertIndex);\r\n\r\n if (this._TrimParams.length === 1 && this._TrimParams[0][0] < 1e-6 && this._TrimParams[0][1] > (1 - 1e-6))\r\n {\r\n this._IsErase = true;\r\n }\r\n }\r\n\r\n GetPointAtParam(param: number): Vector3\r\n {\r\n return this._curve.GetPointAtParam(param);\r\n }\r\n\r\n get Curves(): Curve[]\r\n {\r\n return [];\r\n }\r\n}\r\n\r\nexport class CurveTrimLine extends CurveTrim\r\n{\r\n constructor(curve: Line,\r\n private derv: Vector3,\r\n private _Sp = curve.StartPoint,\r\n private _Fd = curve.GetFistDeriv(0))\r\n {\r\n super(curve);\r\n }\r\n\r\n override GetPointAtParam(param: number): Vector3\r\n {\r\n return this._Fd.clone().multiplyScalar(param).add(this._Sp);\r\n }\r\n\r\n override PointInContour(p: Vector3, contour: Contour, contourBox: Box3, saveSyntropy = false)\r\n {\r\n if (!contourBox.containsPoint(p)) return false;\r\n\r\n let pl = contour.Curve as Polyline;\r\n for (let i = 0; i < pl.EndParam; i++)\r\n {\r\n let cu = pl.GetCurveAtIndex(i);\r\n if (cu instanceof Line)\r\n {\r\n let d = cu.GetClosestAtPoint(p, true);\r\n if (cu.ParamOnCurve(d.param) && equalv3(d.closestPt, p, 1e-5))//点在线上\r\n {\r\n let derv = cu.GetFistDeriv(d.param).normalize();\r\n return equalv3(derv, this.derv, 1e-4) || (saveSyntropy && equalv3(derv.negate(), this.derv, 1e-4));//因为墙体为顺时针 轮廓为逆时针 所以这里相等=反向\r\n }\r\n }\r\n else\r\n {\r\n if (cu.PtOnCurve(p, 1e-5))\r\n {\r\n let derv = cu.GetFistDeriv(cu.GetParamAtPoint2(p)).normalize();\r\n return equalv3(this.derv, derv, 1e-4) || (saveSyntropy && equalv3(derv.negate(), this.derv, 1e-4));\r\n }\r\n }\r\n }\r\n\r\n return contour.Curve.PtInCurve(p);\r\n }\r\n\r\n override get Curves(): Line[]\r\n {\r\n if (this._IsErase) return [];\r\n\r\n if (this._TrimParams.length === 0) return [this._curve as Line];\r\n\r\n let lines: Line[] = [];\r\n\r\n if (this._TrimParams[0][0] !== 0)\r\n lines.push(new Line(this.GetPointAtParam(0), this.GetPointAtParam(this._TrimParams[0][0])));\r\n\r\n for (let i = 0; i < this._TrimParams.length - 1; i++)\r\n {\r\n let param1 = this._TrimParams[i][1];\r\n let param2 = this._TrimParams[i + 1][0];\r\n lines.push(new Line(this.GetPointAtParam(param1), this.GetPointAtParam(param2)));\r\n }\r\n\r\n if (this._TrimParams[this._TrimParams.length - 1][1] !== 1)\r\n lines.push(new Line(this.GetPointAtParam(this._TrimParams[this._TrimParams.length - 1][1]), this.GetPointAtParam(1)));\r\n\r\n return lines;\r\n }\r\n}\r\n\r\nexport class CurveTrimArc extends CurveTrim\r\n{\r\n constructor(\r\n public _curve: Arc,\r\n private _IsLeft = false\r\n )\r\n {\r\n super(_curve);\r\n }\r\n override PointInContour(p: Vector3, contour: Contour, contourBox: Box3, saveSyntropy = false)\r\n {\r\n if (!contourBox.containsPoint(p)) return false;\r\n\r\n let pl = contour.Curve as Polyline;\r\n let thisDerv = this._curve.GetFistDeriv(p).normalize();\r\n if (this._IsLeft) thisDerv.negate();\r\n\r\n for (let i = 0; i < pl.EndParam; i++)\r\n {\r\n let cu = pl.GetCurveAtIndex(i);\r\n if (cu instanceof Line)\r\n {\r\n let d = cu.GetClosestAtPoint(p, true);\r\n if (cu.ParamOnCurve(d.param) && equalv3(d.closestPt, p, 1e-5))//点在线上 //这个代码似乎是错误的,因为直线和圆弧不可能重合\r\n {\r\n let derv = cu.GetFistDeriv(d.param).normalize();\r\n return equalv3(derv, thisDerv, 1e-4) || (saveSyntropy && equalv3(derv.negate(), thisDerv, 1e-4));//因为墙体为顺时针 轮廓为逆时针 所以这里相等=反向\r\n }\r\n }\r\n else\r\n {\r\n if (cu.PtOnCurve(p, 1e-5))\r\n {\r\n let cuDerv = cu.GetFistDeriv(cu.GetParamAtPoint2(p)).normalize();\r\n return equalv3(thisDerv, cuDerv, 1e-4) || (saveSyntropy && equalv3(cuDerv.negate(), thisDerv, 1e-4));\r\n }\r\n }\r\n }\r\n\r\n return contour.Curve.PtInCurve(p);\r\n }\r\n\r\n override get Curves(): Arc[]\r\n {\r\n if (this._IsErase) return [];\r\n\r\n if (this._TrimParams.length === 0) return [this._curve];\r\n\r\n let arcs: Arc[] = [];\r\n let center = this._curve.Center;\r\n for (let i = 0; i < this._TrimParams.length - 1; i++)\r\n {\r\n let param1 = this._TrimParams[i][1];\r\n let param2 = this._TrimParams[i + 1][0];\r\n arcs.push(new Arc(center, this._curve.Radius, this._curve.GetAngleAtParam(param1), this._curve.GetAngleAtParam(param2), this._curve.IsClockWise));\r\n }\r\n\r\n if (this._TrimParams[0][0] !== 0)\r\n arcs.push(new Arc(center, this._curve.Radius, this._curve.StartAngle, this._curve.GetAngleAtParam(this._TrimParams[0][0]), this._curve.IsClockWise));\r\n\r\n if (this._TrimParams[this._TrimParams.length - 1][1] !== 1)\r\n arcs.push(new Arc(center, this._curve.Radius, this._curve.GetAngleAtParam(this._TrimParams[this._TrimParams.length - 1][1]), this._curve.EndAngle, this._curve.IsClockWise));\r\n\r\n return arcs;\r\n }\r\n}\r\n\r\nexport function CreateCurveTrim(cu: Line | Arc)\r\n{\r\n if (cu instanceof Line) return new CurveTrimLine(cu, undefined);\r\n else return new CurveTrimArc(cu);\r\n}\r\n","import { Matrix4, Vector2, Vector3 } 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 return this;\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 { Entity } from \"../DatabaseServices/Entity/Entity\";\r\n\r\nexport function EntityUpdateWrap(ent: Entity, exec: Function)\r\n{\r\n let bak = ent.AutoUpdate;\r\n ent.AutoUpdate = false;\r\n exec();\r\n ent.DeferUpdate();\r\n ent.AutoUpdate = bak;\r\n}\r\n\r\nexport function EntitysUpdateWrap(ens: Entity[], exec: Function)\r\n{\r\n let baks = ens.map(e => e.AutoUpdate);\r\n exec();\r\n for (let i = 0; i < ens.length; i++)\r\n {\r\n let en = ens[i];\r\n en.DeferUpdate();\r\n en.AutoUpdate = baks[i];\r\n }\r\n}\r\n","import * as clipperLib from \"js-angusj-clipper/web\"; // nodejs style require\r\n\r\nexport let clipperCpp: { lib?: clipperLib.ClipperLibWrapper; } = {};\r\nexport function InitClipperCpp(): Promise\r\n{\r\n if (clipperCpp.lib) return;\r\n if (!globalThis.document)\r\n globalThis.document = {} as any;\r\n return new Promise((res, rej) =>\r\n {\r\n clipperLib.loadNativeClipperLibInstanceAsync(\r\n // let it autodetect which one to use, but also available WasmOnly and AsmJsOnly\r\n \r\n clipperLib.NativeClipperLibRequestedFormat.AsmJsOnly\r\n\r\n ).then(c =>\r\n {\r\n clipperCpp.lib = c;\r\n res();\r\n // console.log(\"载入成功!\");//不再需要\r\n });\r\n });\r\n}\r\n","import { Factory } from \"../../CADFactory\";\r\nimport { Entity } from \"../../Entity/Entity\";\r\n\r\n\r\n/**\r\n * 户型元件的基类\r\n * 墙 平面(地板 天花)\r\n */\r\n@Factory\r\nexport class RoomBase extends Entity\r\n{\r\n}\r\n","import { equaln } from \"../../../../../Geometry/GeUtils\";\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 { RoomBase } from \"../../RoomBase\";\r\nimport { RoomWallBase } from \"../RoomWallBase\";\r\n\r\n\r\n/**\r\n * 墙上的洞\r\n *\r\n * 这个类接管了墙上的洞的绘制,以便可以直接在视图上操作这个洞(选择到洞,并且拖动) 但是同时我们也需要拿到原始墙的信息,保持材质(或者白墙? 独立材质?)\r\n */\r\n@Factory\r\nexport class RoomHoleBase extends RoomBase\r\n{\r\n @AutoRecord RelevancyWalls: ObjectId[] = [];//关联的墙体列表\r\n\r\n protected _Height = 800;\r\n\r\n constructor() { super(); }\r\n\r\n public get Height()\r\n {\r\n return this._Height;\r\n }\r\n public set Height(value)\r\n {\r\n if (equaln(value, this._Height, 1e-4)) return;\r\n this.WriteAllObjectRecord();\r\n this._Height = value;\r\n this.Update();\r\n }\r\n\r\n //#region -------------------------File-------------------------\r\n //对象从文件中读取数据,初始化自身\r\n protected override _ReadFile(file: CADFiler)\r\n {\r\n let ver = file.Read();\r\n super._ReadFile(file);\r\n this._Height = file.Read();\r\n\r\n if (ver > 1)\r\n {\r\n let count = file.Read();\r\n this.RelevancyWalls.length = 0;\r\n for (let i = 0; i < count; i++)\r\n {\r\n let id = file.ReadObjectId();\r\n if (id)\r\n this.RelevancyWalls.push(id as ObjectId);\r\n }\r\n }\r\n }\r\n //对象将自身数据写入到文件.\r\n override WriteFile(file: CADFiler)\r\n {\r\n file.Write(2);\r\n super.WriteFile(file);\r\n file.Write(this._Height);\r\n\r\n file.Write(this.RelevancyWalls.length);\r\n for (let id of this.RelevancyWalls)\r\n file.WriteObjectId(id);\r\n }\r\n //局部撤销\r\n override ApplyPartialUndo(undoData: CADObject)\r\n {\r\n super.ApplyPartialUndo(undoData);\r\n }\r\n //#endregion\r\n}\r\n","import { Face3, Geometry, LineSegments, Matrix3, Mesh, Object3D, ShapeUtils, Vector2, Vector3 } from \"three\";\r\nimport { arrayPushArray } from \"../../../../../Common/ArrayExt\";\r\nimport { ColorMaterial } from \"../../../../../Common/ColorPalette\";\r\nimport { ObjectSnapMode } from \"../../../../../Editor/ObjectSnapMode\";\r\nimport { Box3Ext } from \"../../../../../Geometry/Box\";\r\nimport { CreatePolylinePath } from \"../../../../../Geometry/CreatePolylinePath\";\r\nimport { AsVector3, equalv2, ZAxis } from \"../../../../../Geometry/GeUtils\";\r\nimport { RenderType } from \"../../../../../GraphicsSystem/RenderType\";\r\nimport { Factory } from \"../../../../CADFactory\";\r\nimport { CADFiler } from \"../../../../CADFiler\";\r\nimport { CADObject } from \"../../../../CADObject\";\r\nimport { Curve } from \"../../../../Entity/Curve\";\r\nimport { Line } from \"../../../../Entity/Line\";\r\nimport { Polyline } from \"../../../../Entity/Polyline\";\r\nimport { LEFT_ROTATE_MTX2 } from \"../../../ParseService/GetCurveParam\";\r\nimport { RoomWallBase } from \"../RoomWallBase\";\r\nimport { RoomWallLine } from \"../RoomWallLine\";\r\nimport { RoomHoleBase } from \"./RoomHoleBase\";\r\n\r\nenum HoleType\r\n{\r\n Door = 1,\r\n Window = 2,\r\n LWindow = 3,\r\n UWindow = 4,\r\n}\r\n\r\n/**\r\n * 折线洞 例如 转角窗 或者U型窗\r\n */\r\n@Factory\r\nexport class RoomHolePolyline extends RoomHoleBase\r\n{\r\n //虽然使用了三维的点,但是我们实际使用的是二维的点 z总是等于0\r\n private _Points: Vector3[] = [];\r\n private _FakerWalls: RoomWallBase[] = [];\r\n public set FakerWalls(_FakerWalls: RoomWallBase[])\r\n {\r\n this._FakerWalls = _FakerWalls;\r\n this.LidCurves = [];\r\n this.Regions = [];\r\n for (let w of this._FakerWalls)\r\n {\r\n arrayPushArray(this.LidCurves, w.LidCurves);\r\n if (w.Region)\r\n this.Regions.push(w.Region);\r\n w.OCSNoClone.elements[14] = this._Matrix.elements[14];\r\n w.Height = this.Height;\r\n\r\n if (w instanceof RoomWallLine && w.Length > 1e-6)\r\n w.UpdateOCSToMinBox();\r\n }\r\n }\r\n get FakerWalls(): RoomWallBase[] { return this._FakerWalls; }\r\n\r\n constructor() { super(); }\r\n\r\n override get BoundingBoxInOCS(): Box3Ext\r\n {\r\n let box = new Box3Ext;\r\n let inv = this.OCSInv;\r\n for (let w of this._FakerWalls)\r\n box.union(w.GetBoundingBoxInMtx(inv));\r\n return box;\r\n return new Box3Ext().copy(this.BoundingBox).applyMatrix4(this.OCSInv);\r\n }\r\n\r\n get Points() { return this._Points.map(p => p.clone().applyMatrix4(this.OCSNoClone)); }\r\n set Points(pts: Vector3[])\r\n {\r\n this.WriteAllObjectRecord();\r\n let inv = this.OCSInv;\r\n this._Points = pts.map(p => p.clone().applyMatrix4(inv).setZ(0));\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 let pts: Vector3[] = [];\r\n\r\n if (this.LidCurves)\r\n {\r\n let line = new Line;\r\n let inv = this.OCSInv;\r\n for (let lid of this.LidCurves)\r\n {\r\n let sp = lid.StartPoint.applyMatrix4(inv).setZ(0);\r\n let ep = lid.EndPoint.applyMatrix4(inv).setZ(0);\r\n\r\n line.StartPoint = sp.clone().applyMatrix4(this.OCSNoClone);\r\n line.EndPoint = sp.setZ(this._Height).applyMatrix4(this.OCSNoClone);\r\n\r\n arrayPushArray(pts, line.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform));\r\n\r\n line.StartPoint = ep.clone().applyMatrix4(this.OCSNoClone);\r\n line.EndPoint = ep.setZ(this._Height).applyMatrix4(this.OCSNoClone);\r\n\r\n arrayPushArray(pts, line.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform));\r\n }\r\n }\r\n\r\n if (this.Regions)\r\n {\r\n for (let region of this.Regions)\r\n {\r\n region.Z = this.Z;//我们拥有它\r\n\r\n arrayPushArray(pts, region.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform));\r\n\r\n region.Z += this._Height;\r\n\r\n arrayPushArray(pts, region.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform));\r\n }\r\n }\r\n return pts;\r\n }\r\n\r\n GetGripPoints(): Vector3[]\r\n {\r\n return this.Points;\r\n }\r\n\r\n MoveGripPoints(ids: number[], vec: Vector3)\r\n {\r\n\r\n }\r\n\r\n GetStretchPoints(): Array\r\n {\r\n return this.Points;\r\n }\r\n\r\n MoveStretchPoints(ids: Array, vec: Vector3)\r\n {\r\n }\r\n\r\n get FakerPoints()\r\n {\r\n let pts: Vector3[] = [];\r\n\r\n for (let w of this._FakerWalls)\r\n pts.push(w.StartPoint);\r\n if (this._FakerWalls.length)\r\n pts.push(this._FakerWalls[this._FakerWalls.length - 1].EndPoint);\r\n\r\n return pts;\r\n }\r\n //使用FakerWalls来更新这个洞的信息\r\n UpdatePoints(checkChange: boolean = false)\r\n {\r\n let pts = this.FakerPoints;\r\n\r\n this.WriteAllObjectRecord();\r\n\r\n if (pts.length === 2)\r\n {\r\n let x = pts[1].clone().sub(pts[0]).normalize();\r\n let z = ZAxis;\r\n let y = z.clone().cross(x).normalize();\r\n this._Matrix.makeBasis(x, y, z).setPosition(pts[0]);\r\n }\r\n else\r\n this._Matrix.setPosition(pts[1]);\r\n\r\n let ocsInv = this.OCSInv;\r\n for (let p of pts) p.applyMatrix4(ocsInv);\r\n\r\n this._Points = pts;\r\n this.Update();\r\n }\r\n\r\n //#region Draw\r\n LidCurves: Curve[];//窗户的开始和结束,我们接管了这个的绘制\r\n Regions: Polyline[];//窗户的区域,我们接管了这个的绘制(包括上面)\r\n\r\n override UpdateDrawGeometry()\r\n {\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 private _EdgeGeometry: Geometry;\r\n get EdgeGeometry()\r\n {\r\n if (this._EdgeGeometry) return this._EdgeGeometry;\r\n\r\n this._EdgeGeometry = new Geometry();\r\n\r\n let inv = this.OCSInv;\r\n\r\n let pts: Vector3[] = this._EdgeGeometry.vertices;\r\n\r\n if (this.LidCurves)\r\n for (let lid of this.LidCurves)\r\n {\r\n //TODO:是否真的需要切换到本地坐标系 (如果我们使用墙体上的曲线,那么需要 如果我们使用本地坐标系计算曲线 则不需要)\r\n let sp = lid.StartPoint.applyMatrix4(inv).setZ(0);\r\n let ep = lid.EndPoint.applyMatrix4(inv).setZ(0);\r\n\r\n pts.push(sp, sp.clone().setZ(this._Height),\r\n ep, ep.clone().setZ(this._Height),\r\n );\r\n }\r\n\r\n if (this.Regions)\r\n {\r\n for (let region of this.Regions)\r\n {\r\n region.Z = this.Z;//我们拥有它\r\n let lined = region.MatrixAlignTo2(this.OCSNoClone);\r\n\r\n if (region.CloseMark && !equalv2(lined.pts[0], lined.pts[lined.pts.length - 1], 1e-4))\r\n {\r\n lined.pts.push(lined.pts[0]);\r\n lined.buls.push(0);\r\n }\r\n\r\n let path = CreatePolylinePath(lined.pts, lined.buls);\r\n let rpts = path.getPoints(30);\r\n\r\n // let wallTopHeight = 0;\r\n // if (this.FakerHoles[0])\r\n // wallTopHeight = this.FakerHoles[0].Position.z + this.FakerHoles[0].Height - this.Position.z;\r\n\r\n for (let i = 1; i < rpts.length; i++)\r\n {\r\n let pre = AsVector3(rpts[i - 1]);\r\n let p = AsVector3(rpts[i]);\r\n\r\n pts.push(pre.setZ(0), p.setZ(0));\r\n pts.push(pre.clone().setZ(this._Height), p.clone().setZ(this._Height));\r\n\r\n // if (wallTopHeight)\r\n // pts.push(pre.clone().setZ(wallTopHeight), p.clone().setZ(wallTopHeight));\r\n }\r\n }\r\n }\r\n\r\n return this._EdgeGeometry;\r\n }\r\n\r\n private _MeshGeometry: Geometry;\r\n get MeshGeometry()\r\n {\r\n if (this._MeshGeometry) return this._MeshGeometry;\r\n\r\n this._MeshGeometry = new Geometry();\r\n\r\n let inv = this.OCSInv;\r\n let geo = this._MeshGeometry;\r\n\r\n if (this.LidCurves)\r\n for (let lid of this.LidCurves)\r\n {\r\n let startIndex = geo.vertices.length;\r\n\r\n //TODO:是否真的需要切换到本地坐标系 (如果我们使用墙体上的曲线,那么需要 如果我们使用本地坐标系计算曲线 则不需要)\r\n let p1 = lid.StartPoint.applyMatrix4(inv).setZ(0);\r\n let p2 = lid.EndPoint.applyMatrix4(inv).setZ(0);\r\n\r\n geo.vertices.push(p1.setZ(0), p2.setZ(0));\r\n geo.vertices.push(p1.clone().setZ(this._Height));\r\n geo.vertices.push(p2.clone().setZ(this._Height));\r\n\r\n let startX = 0;\r\n let endX = lid.Length * 1e-3;\r\n\r\n let startZ = 0;\r\n let endZ = this._Height * 1e-3;\r\n\r\n let normal = p2.clone().sub(p1).normalize();\r\n LEFT_ROTATE_MTX2.applyVector(normal);\r\n\r\n geo.faces.push(\r\n new Face3(startIndex, startIndex + 2, startIndex + 1, normal),\r\n new Face3(startIndex + 1, startIndex + 2, startIndex + 3, normal),\r\n );\r\n\r\n geo.faceVertexUvs[0].push(\r\n [new Vector2(startX, startZ), new Vector2(startX, endZ), new Vector2(endX, startZ)],\r\n [new Vector2(endX, startZ), new Vector2(startX, endZ), new Vector2(endX, endZ)],\r\n );\r\n }\r\n\r\n if (this.Regions)\r\n for (let region of this.Regions)\r\n {\r\n region.OCSNoClone.elements[14] = this._Matrix.elements[14];//我们拥有它\r\n let lined = region.MatrixAlignTo2(this.OCSNoClone);\r\n\r\n if (region.CloseMark && !equalv2(lined.pts[0], lined.pts[lined.pts.length - 1], 1e-4))\r\n {\r\n lined.pts.push(lined.pts[0]);\r\n lined.buls.push(0);\r\n }\r\n\r\n let path = CreatePolylinePath(lined.pts, lined.buls);\r\n let rpts = path.getPoints(30);\r\n\r\n let faces = ShapeUtils.triangulateShape(rpts, []);\r\n let startIndex = geo.vertices.length;\r\n for (let p of rpts) geo.vertices.push(new Vector3(p.x, p.y, 0));\r\n for (let p of rpts) geo.vertices.push(new Vector3(p.x, p.y, this._Height));\r\n\r\n let normal = this.Normal;\r\n let normaln = normal.clone().negate();\r\n for (let i = 0; i < faces.length; i++)\r\n {\r\n let [a, b, c] = faces[i];\r\n geo.faces.push(new Face3(startIndex + a, startIndex + b, startIndex + c, normal));\r\n let uvs = faces[i].map(index => rpts[index].clone().multiplyScalar(1e-3));\r\n geo.faceVertexUvs[0].push(uvs);\r\n\r\n geo.faces.push(new Face3(startIndex + rpts.length + c, startIndex + rpts.length + b, startIndex + rpts.length + a, normaln));\r\n geo.faceVertexUvs[0].push(uvs.concat().reverse().map(v => v.clone()));\r\n }\r\n }\r\n\r\n return this._MeshGeometry;\r\n }\r\n\r\n\r\n InitDrawObject(renderType: RenderType = RenderType.Wireframe): Object3D\r\n {\r\n 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\r\n let obj = new Object3D;\r\n if (renderType === RenderType.Wireframe || renderType === RenderType.Jig)\r\n {\r\n return new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(4));\r\n }\r\n else if (renderType === RenderType.Conceptual)\r\n {\r\n let mesh = new Mesh(this.MeshGeometry, ColorMaterial.GetConceptualMaterial(this.ColorIndex));\r\n let line = new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(this.ColorIndex));\r\n obj.add(mesh, line);\r\n }\r\n return obj;\r\n }\r\n\r\n /**\r\n * 重载:更新绘制的实体\r\n * @param {RenderType} renderType\r\n * @param {Object3D} obj\r\n */\r\n UpdateDrawObject(renderType: RenderType, obj: Object3D)\r\n {\r\n if (renderType === RenderType.Wireframe || renderType === RenderType.Jig)\r\n {\r\n let line = obj as LineSegments;\r\n if (line.geometry !== this.EdgeGeometry)\r\n {\r\n line.geometry.dispose();\r\n line.geometry = this.EdgeGeometry;\r\n }\r\n }\r\n else if (renderType === RenderType.Conceptual)\r\n {\r\n let mesh = obj.children[0] as Mesh;\r\n if (mesh.geometry !== this.MeshGeometry)\r\n {\r\n mesh.geometry.dispose();\r\n mesh.geometry = this.MeshGeometry;\r\n }\r\n\r\n let line = obj.children[1] as LineSegments;\r\n if (line.geometry !== this.EdgeGeometry)\r\n {\r\n line.geometry.dispose();\r\n line.geometry = this.EdgeGeometry;\r\n }\r\n }\r\n else if (renderType === RenderType.Physical)\r\n {\r\n let mesh = obj as Mesh;\r\n if (mesh.geometry !== this.MeshGeometry)\r\n {\r\n mesh.geometry.dispose();\r\n mesh.geometry = this.MeshGeometry;\r\n }\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 LineSegments;\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 //#endregion\r\n\r\n //#region -------------------------File-------------------------\r\n //对象从文件中读取数据,初始化自身\r\n protected override _ReadFile(file: CADFiler)\r\n {\r\n let ver = file.Read();\r\n super._ReadFile(file);\r\n\r\n this._Points.length = 0;\r\n let count = file.Read();\r\n for (let i = 0; i < count; i++)\r\n {\r\n let p = new Vector3(file.Read(), file.Read(), 0);\r\n this._Points.push(p);\r\n }\r\n }\r\n //对象将自身数据写入到文件.\r\n override WriteFile(file: CADFiler)\r\n {\r\n file.Write(1);\r\n super.WriteFile(file);\r\n\r\n file.Write(this._Points.length);\r\n for (let p of this._Points)\r\n {\r\n file.Write(p.x);\r\n file.Write(p.y);\r\n }\r\n }\r\n //局部撤销\r\n ApplyPartialUndo(undoData: CADObject)\r\n {\r\n super.ApplyPartialUndo(undoData);\r\n }\r\n //#endregion\r\n}\r\n","\r\nexport enum WallSnapMode\r\n{\r\n None = 0,\r\n Center = 1,\r\n Out = 2,\r\n All = 3\r\n}\r\n","import { Line as TLine, Mesh, Object3D } from \"three\";\r\nimport { ColorMaterial } from \"../../../../Common/ColorPalette\";\r\nimport { equaln } 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 { CADObject } from \"../../../CADObject\";\r\nimport { Arc } from \"../../../Entity/Arc\";\r\nimport { Curve } from \"../../../Entity/Curve\";\r\nimport { Line } from \"../../../Entity/Line\";\r\nimport { Polyline } from \"../../../Entity/Polyline\";\r\nimport { ObjectId } from \"../../../ObjectId\";\r\nimport { RoomBase } from \"../RoomBase\";\r\nimport { RoomHolePolyline } from \"./Hole/RoomHolePolyline\";\r\nimport { WallSnapMode } from \"./WallSnapMode\";\r\n\r\nexport const CURVE_FACE_TYPE_KEY = \"__CURVE_FACE_TYPE_KEY__\";//用来存储墙体类型的key\r\n\r\nexport enum WallFaceType\r\n{\r\n Inside = 0,//内部\r\n Pillar = 1,//柱子\r\n Outside = 2,//外墙\r\n}\r\n\r\ninterface HoleData\r\n{\r\n StartParam: number;\r\n EndParam: number;\r\n Bottom: number;\r\n Top: number;\r\n}\r\n\r\n@Factory\r\nexport abstract class RoomWallBase extends RoomBase\r\n{\r\n static SnapMode: WallSnapMode = WallSnapMode.All;\r\n\r\n @AutoRecord RelevancyHoles: ObjectId[] = [];\r\n Holes: HoleData[] = [];\r\n\r\n get RealHoles(): HoleData[]\r\n {\r\n return this.Holes.filter(h => h.EndParam > h.StartParam && h.Top > h.Bottom);\r\n }\r\n\r\n protected _Thickness = 120;\r\n protected _Height = 2700;\r\n\r\n get Height()\r\n {\r\n return this._Height;\r\n }\r\n set Height(_newHeight)\r\n {\r\n if (_newHeight <= 0.1 || equaln(this._Height, _newHeight)) return;\r\n this.WriteAllObjectRecord();\r\n this._Height = _newHeight;\r\n this.Update();\r\n }\r\n\r\n get Thickness() { return this._Thickness; }\r\n set Thickness(t: number)\r\n {\r\n if (t <= 0.1 || equaln(this._Thickness, t)) return;\r\n this.WriteAllObjectRecord();\r\n this._Thickness = t;\r\n this.Update();\r\n }\r\n\r\n\r\n //中心轴线\r\n get CenterAxisCurve(): Arc | Line { return; }\r\n\r\n //从曲线更新墙体\r\n UpdateCurve(cu: Curve) { }\r\n\r\n //绘制相关\r\n LeftCurves: (Arc | Line)[];\r\n RightCurves: (Arc | Line)[];\r\n LidCurves: (Arc | Line)[];\r\n Region: Polyline;\r\n\r\n UpdateDrawObjectMaterial(renderType: RenderType, obj: Object3D)\r\n {\r\n if (renderType === RenderType.Wireframe)\r\n {\r\n let l = obj.children[1] 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 //绘制相关_end\r\n\r\n //为了支持F后正确的保持洞\r\n override CopyFrom(obj: CADObject)\r\n {\r\n let bak = this.RelevancyHoles.concat();\r\n super.CopyFrom(obj);\r\n this.RelevancyHoles = bak;\r\n }\r\n\r\n //为了支持F,看起来不大行\r\n // override Clone(): this\r\n // {\r\n // let ent = super.Clone();\r\n // ent.Holes = this.Holes.concat();\r\n // return ent;\r\n // }\r\n\r\n //#region -------------------------File-------------------------\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._Thickness = file.Read();\r\n\r\n if (ver > 1)\r\n {\r\n let count = file.Read();\r\n this.RelevancyHoles.length = 0;\r\n for (let i = 0; i < count; i++)\r\n {\r\n let id = file.ReadObjectId();\r\n if (id)\r\n this.RelevancyHoles.push(id as ObjectId);\r\n }\r\n }\r\n\r\n if (ver > 2)\r\n {\r\n this._Height = file.Read();\r\n }\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(3);\r\n super.WriteFile(file);\r\n file.Write(this._Thickness);\r\n\r\n file.Write(this.RelevancyHoles.length);\r\n for (let id of this.RelevancyHoles)\r\n file.WriteObjectId(id);\r\n\r\n file.Write(this._Height);\r\n }\r\n //#endregion\r\n}\r\n\r\n// @ts-ignore\r\nexport interface RoomWallBase extends RoomBase, Curve { }\r\n\r\nexport const CURVE_MESH_NAMES = [\r\n \"Shape\",\r\n \"GetDrawCount\",\r\n\r\n \"Midpoint\",\r\n \"MidParam\",\r\n \"StartParam\",\r\n \"EndParam\",\r\n \"Area\",\r\n \"Area2\",\r\n \"Length\",\r\n \"IsClose\",\r\n \"IsClockWise\",\r\n\r\n \"GetPointAtParam\",\r\n \"GetPointAtDistance\",\r\n \"GetDistAtParam\",\r\n \"GetDistAtPoint\",\r\n \"GetParamAtPoint\",\r\n \"GetParamAtPoint2\",\r\n \"GetParamAtDist\",\r\n \"GetClosestAtPoint\",\r\n \"GetFistDeriv\",\r\n \"GetFistDerivAngle\",\r\n \"GetSplitCurves\",\r\n \"GetCurveAtParamRange\",\r\n \"GetSplitCurvesByPts\",\r\n \"Extend\",\r\n \"Join\",\r\n \"Reverse\",\r\n \"PtOnCurve\",\r\n \"PtOnCurve2\",\r\n \"PtOnCurve3\",\r\n \"ParamOnCurve\",\r\n \"GetOffsetCurves\",\r\n \"GetClosestPointTo\",\r\n \"IntersectWith\",\r\n \"IntersectWith2\",\r\n \"SplitParamSort\",\r\n\r\n \"SetStartEndPoint\",\r\n];\r\n\r\n// This can live anywhere in your codebase:\r\nexport function applyMixins(derivedCtor: any, constructor: any, methons = CURVE_MESH_NAMES)\r\n{\r\n for (let name of methons)\r\n Object.defineProperty(\r\n derivedCtor.prototype,\r\n name,\r\n Object.getOwnPropertyDescriptor(constructor.prototype, name) ?? Object.getOwnPropertyDescriptor(Curve.prototype, name) ?? Object.create(null)\r\n );\r\n}\r\n","import { BufferGeometry, Face3, Geometry, Line as TLine, LineSegments, MathUtils, Matrix3, Mesh, Object3D, ShapeUtils, Vector2, Vector3 } from \"three\";\r\nimport { HostApplicationServices } from \"../../../../ApplicationServices/HostApplicationServices\";\r\nimport { arrayPushArray } from \"../../../../Common/ArrayExt\";\r\nimport { ColorMaterial } from \"../../../../Common/ColorPalette\";\r\nimport { ObjectSnapMode } from \"../../../../Editor/ObjectSnapMode\";\r\nimport { BufferGeometryUtils } from \"../../../../Geometry/BufferGeometryUtils\";\r\nimport { SubtractRange, Tape } from \"../../../../Geometry/ExtrudeMeshGeomBuilder/ExtrudeEdgeGeometry2\";\r\nimport { SplitArcParams, SplitCurvePoints } from \"../../../../Geometry/ExtrudeMeshGeomBuilder/SplitCurveParams\";\r\nimport { AsVector2, AsVector3, clampRad, equaln, updateGeometry, ZeroVec } from \"../../../../Geometry/GeUtils\";\r\nimport { RenderType } from \"../../../../GraphicsSystem/RenderType\";\r\nimport { Factory } from \"../../../CADFactory\";\r\nimport { CADFiler } from \"../../../CADFiler\";\r\nimport { Arc } from \"../../../Entity/Arc\";\r\nimport { Curve } from \"../../../Entity/Curve\";\r\nimport { Line } from \"../../../Entity/Line\";\r\nimport { Polyline } from \"../../../Entity/Polyline\";\r\nimport { GetArcParam, GetLineParam } from \"../../ParseService/GetCurveParam\";\r\nimport { applyMixins, CURVE_FACE_TYPE_KEY, CURVE_MESH_NAMES, RoomWallBase, WallFaceType } from \"./RoomWallBase\";\r\nimport { WallSnapMode } from \"./WallSnapMode\";\r\n\r\nconst SnapTempLine = new Line;\r\n@Factory\r\nexport class RoomWallArc extends RoomWallBase\r\n{\r\n constructor(_Center: Vector3 = new Vector3(),\r\n private _Radius = 0.1,\r\n private _StartAngle = 0.1,\r\n private _EndAngle = 0.1,\r\n /**\r\n * 曲线为顺时针\r\n */\r\n private _Clockwise = true,\r\n _Thickness = 120\r\n\r\n )\r\n {\r\n super();\r\n this._Matrix.setPosition(_Center);\r\n this._StartAngle = clampRad(_StartAngle);\r\n this._EndAngle = clampRad(_EndAngle);\r\n this.Thickness = _Thickness;\r\n }\r\n\r\n //中心轴线\r\n override get CenterAxisCurve(): Arc | Line\r\n {\r\n if (this._Radius < (this.Thickness * 0.6) || Math.abs(this.Bul) < 0.0015)\r\n return new Line(this.StartPoint, this.EndPoint);\r\n let arc = new Arc(\r\n ZeroVec,\r\n this._Radius,\r\n this._StartAngle,\r\n this._EndAngle,\r\n this._Clockwise\r\n );\r\n arc.OCSNoClone.copy(this.OCSNoClone);\r\n return arc;\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 let pts = [];\r\n pts = pts.concat(Arc.prototype.GetObjectSnapPoints.call(this, snapMode, pickPoint, lastPoint, viewXform));\r\n const CurveSnap = (curve: Curve) =>\r\n {\r\n let bakZ = curve.Z;\r\n //底部线\r\n arrayPushArray(pts, curve.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform));\r\n\r\n //顶部线\r\n curve.Z += this._Height;\r\n arrayPushArray(pts, curve.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform));\r\n curve.Z = bakZ;\r\n\r\n let spep = [curve.StartPoint, curve.EndPoint];\r\n for (let p of spep)\r\n {\r\n let l = new Line(p, p.clone().setZ(p.z + this._Height));\r\n arrayPushArray(pts, l.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform));\r\n }\r\n };\r\n\r\n if (this.LeftCurves && (RoomWallBase.SnapMode & WallSnapMode.Out) > 0)\r\n {\r\n this.LeftCurves.forEach(CurveSnap);\r\n this.RightCurves.forEach(CurveSnap);\r\n this.LidCurves.forEach(CurveSnap);\r\n }\r\n\r\n return pts;\r\n }\r\n\r\n GetGripPoints(): Array\r\n {\r\n let pts = [\r\n this.StartPoint,\r\n this.GetPointAtParam(0.5),\r\n this.EndPoint,\r\n this.Center.clone(),\r\n ];\r\n let count = pts.length;\r\n\r\n for (let i = 0; i < count; i++)\r\n pts.push(pts[i].clone().setZ(pts[i].z + this._Height));\r\n return pts;\r\n }\r\n\r\n MoveGripPoints(indexList: Array, vec: Vector3)\r\n {\r\n if (indexList.length > 0)\r\n {\r\n let index = indexList[0];\r\n if (index >= 4) index -= 4;\r\n Arc.prototype.MoveGripPoints.call(this, [index], vec);\r\n }\r\n }\r\n\r\n GetStretchPoints(): Vector3[]\r\n {\r\n return Arc.prototype.GetStretchPoints.call(this);\r\n }\r\n MoveStretchPoints(indexList: number[], vec: Vector3): void\r\n {\r\n return Arc.prototype.MoveStretchPoints.call(this, indexList, vec);\r\n }\r\n\r\n //#region //绘制\r\n\r\n\r\n UpdateDrawGeometry()\r\n {\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\r\n private _EdgeGeometry: BufferGeometry;\r\n private _MeshGeometry: Geometry;\r\n get EdgeGeometry()\r\n {\r\n if (this._EdgeGeometry) return this._EdgeGeometry;\r\n\r\n for (let hole of this.Holes)\r\n if (hole.StartParam > hole.EndParam)\r\n [hole.StartParam, hole.EndParam] = [hole.EndParam, hole.StartParam];\r\n\r\n let pts: Vector3[];\r\n if (!this.LeftCurves)\r\n {\r\n let sign = this._Clockwise ? -1 : 1;\r\n\r\n if (this.Length > 0.1)\r\n {\r\n let left = new Arc(ZeroVec, this._Radius - sign * this.Thickness * 0.5, this._StartAngle, this._EndAngle, this._Clockwise);\r\n let right = new Arc(ZeroVec, this._Radius + sign * this.Thickness * 0.5, this._StartAngle, this._EndAngle, this._Clockwise);\r\n\r\n let leftPts = left.Shape.getPoints(this.GetDrawCount()).map(AsVector3);\r\n let rightPts = right.Shape.getPoints(this.GetDrawCount()).map(AsVector3);\r\n\r\n let leftPts2 = leftPts.map(p => p.clone().setZ(this._Height));\r\n let rightPts2 = rightPts.map(p => p.clone().setZ(this._Height));\r\n\r\n pts = [\r\n leftPts[0], leftPts[0].clone().setZ(this._Height),\r\n leftPts[leftPts.length - 1], leftPts[leftPts.length - 1].clone().setZ(this._Height),\r\n\r\n rightPts[0], rightPts[0].clone().setZ(this._Height),\r\n rightPts[rightPts.length - 1], rightPts[rightPts.length - 1].clone().setZ(this._Height),\r\n\r\n leftPts.shift()];\r\n\r\n for (let p of leftPts) pts.push(p, p);\r\n rightPts.reverse();\r\n for (let p of rightPts) pts.push(p, p);\r\n pts.push(pts[0]);\r\n\r\n //顶部\r\n pts.push(leftPts2.shift());\r\n for (let p of leftPts2) pts.push(p, p);\r\n rightPts2.reverse();\r\n for (let p of rightPts2) pts.push(p, p);\r\n }\r\n else\r\n pts = [];\r\n }\r\n else\r\n {\r\n pts = [];\r\n let inv = this.OCSInv;\r\n const DrawCurve = (curve: Curve, _leftRanges: [number, number][], _rightRanges: [number, number][]) =>\r\n {\r\n if (curve instanceof Line)\r\n {\r\n let p1 = curve.StartPoint.applyMatrix4(inv);\r\n let p2 = curve.EndPoint.applyMatrix4(inv);\r\n pts.push(p1, p2);\r\n\r\n for (let range of _leftRanges)\r\n pts.push(p1.clone().setZ(range[0]), p1.clone().setZ(range[1]));\r\n for (let range of _rightRanges)\r\n pts.push(p2.clone().setZ(range[0]), p2.clone().setZ(range[1]));\r\n\r\n pts.push(p1.clone().setZ(this._Height), p2.clone().setZ(this._Height));\r\n }\r\n else//arc\r\n {\r\n let cpts = curve.Shape.getPoints(this.GetDrawCount()).map(AsVector3);\r\n let topPts = cpts.map(p => p.clone().setZ(this._Height));\r\n\r\n //底部\r\n pts.push(cpts[0]);\r\n for (let i = 1; i < cpts.length - 1; i++)\r\n {\r\n let p = cpts[i];\r\n pts.push(p, p);\r\n }\r\n pts.push(cpts[cpts.length - 1]);\r\n\r\n //顶部\r\n pts.push(topPts[0]);\r\n for (let i = 1; i < topPts.length - 1; i++)\r\n {\r\n let p = topPts[i];\r\n pts.push(p, p);\r\n }\r\n pts.push(topPts[topPts.length - 1]);\r\n\r\n //竖线\r\n for (let range of _leftRanges)\r\n pts.push(cpts[0].clone().setZ(range[0]), cpts[0].clone().setZ(range[1]));\r\n for (let range of _rightRanges)\r\n pts.push(cpts[cpts.length - 1].clone().setZ(range[0]), cpts[cpts.length - 1].clone().setZ(range[1]));\r\n }\r\n };\r\n\r\n let lidRanges: [number, number][] = [[0, this._Height]];\r\n let leftRanges = lidRanges;\r\n let rightRanges = lidRanges;\r\n for (let hole of this.Holes)\r\n {\r\n if (equaln(hole.StartParam, 0))\r\n {\r\n let newLeftRanges = [];\r\n for (let range of leftRanges)\r\n arrayPushArray(newLeftRanges, SubtractRange(range[0], range[1], hole.Bottom, hole.Top, 1e5));\r\n leftRanges = newLeftRanges;\r\n }\r\n\r\n if (equaln(hole.EndParam, 1))\r\n {\r\n let newRightRanges = [];\r\n for (let range of rightRanges)\r\n arrayPushArray(newRightRanges, SubtractRange(range[0], range[1], hole.Bottom, hole.Top, 1e5));\r\n rightRanges = newRightRanges;\r\n }\r\n }\r\n\r\n for (let i = 0; i < this.LeftCurves.length; i++)\r\n {\r\n let curve = this.LeftCurves[i];\r\n DrawCurve(curve, i === 0 ? leftRanges : lidRanges, (i === this.LeftCurves.length - 1) ? rightRanges : lidRanges);\r\n }\r\n for (let i = 0; i < this.RightCurves.length; i++)\r\n {\r\n let curve = this.RightCurves[i];\r\n DrawCurve(curve, i === 0 ? leftRanges : lidRanges, (i === this.RightCurves.length - 1) ? rightRanges : lidRanges);\r\n }\r\n for (let i = 0; i < this.LidCurves.length; i++)\r\n {\r\n let curve = this.LidCurves[i];\r\n DrawCurve(curve, lidRanges, lidRanges);\r\n }\r\n }\r\n\r\n this._EdgeGeometry = BufferGeometryUtils.CreateFromPts(pts);\r\n return this._EdgeGeometry;\r\n }\r\n get MeshGeometry()\r\n {\r\n if (this._MeshGeometry) return this._MeshGeometry;\r\n\r\n this._MeshGeometry = new Geometry;\r\n\r\n let geo = this._MeshGeometry;\r\n let normal = this.Normal;\r\n let normaln = normal.clone().negate();\r\n let center = this.Center;\r\n let inv = this.OCSInv;\r\n\r\n let thisParam = new GetArcParam(this as unknown as Arc);\r\n\r\n const BuildLeftFace = (curve: Curve) =>\r\n {\r\n let materialIndex = 0;\r\n if (curve[CURVE_FACE_TYPE_KEY] === WallFaceType.Outside)\r\n {\r\n \r\n materialIndex = 1;\r\n }\r\n\r\n if (curve instanceof Line)\r\n {\r\n let tapes = [new Tape(0, 1, 0, this._Height)];\r\n let curveParam = new GetLineParam(curve);\r\n let holes = this.RealHoles;\r\n if (holes.length)\r\n {\r\n for (let hole of holes)\r\n {\r\n let start = equaln(hole.StartParam, 0) ? 0 : MathUtils.clamp(curveParam.GetParamAtPoint(thisParam.GetPointAtParam(hole.StartParam)), 0, 1);\r\n let end = equaln(hole.EndParam, 1) ? 1 : MathUtils.clamp(curveParam.GetParamAtPoint(thisParam.GetPointAtParam(hole.EndParam)), 0, 1);\r\n if (start > end) [start, end] = [end, start];\r\n let holeTape = new Tape(start, end, hole.Bottom, hole.Top);\r\n\r\n let newTapes: Tape[] = [];\r\n for (let tape of tapes)\r\n arrayPushArray(newTapes, tape.Clip(holeTape));\r\n\r\n tapes = newTapes;\r\n }\r\n }\r\n\r\n for (let tape of tapes)\r\n {\r\n let startIndex = geo.vertices.length;\r\n\r\n let p1 = curveParam.GetPointAtParam(tape.start).applyMatrix4(inv);\r\n let p2 = curveParam.GetPointAtParam(tape.end).applyMatrix4(inv);\r\n geo.vertices.push(p1.setZ(tape.bottom), p2.setZ(tape.bottom));\r\n geo.vertices.push(p1.clone().setZ(tape.top));\r\n geo.vertices.push(p2.clone().setZ(tape.top));\r\n\r\n let startX = curveParam.Length * 1e-3 * tape.start;\r\n let endX = curveParam.Length * 1e-3 * tape.end;\r\n\r\n let startZ = tape.bottom * 1e-3;\r\n let endZ = tape.top * 1e-3;\r\n\r\n geo.faces.push(\r\n new Face3(startIndex, startIndex + 2, startIndex + 1, curveParam.LeftDir, undefined, materialIndex),\r\n new Face3(startIndex + 1, startIndex + 2, startIndex + 3, curveParam.LeftDir, undefined, materialIndex),\r\n );\r\n\r\n geo.faceVertexUvs[0].push(\r\n [new Vector2(startX, startZ), new Vector2(startX, endZ), new Vector2(endX, startZ)],\r\n [new Vector2(endX, startZ), new Vector2(startX, endZ), new Vector2(endX, endZ)],\r\n );\r\n }\r\n }\r\n else\r\n {\r\n let arc = curve as Arc;\r\n\r\n let tapes = [new Tape(0, 1, 0, this._Height)];\r\n let curveParam = new GetArcParam(arc);\r\n\r\n let holes = this.RealHoles;\r\n if (holes.length)\r\n {\r\n for (let hole of holes)\r\n {\r\n let start = equaln(hole.StartParam, 0) ? 0 : MathUtils.clamp(curveParam.GetParamAtPoint(thisParam.GetPointAtParam(hole.StartParam)), 0, 1);\r\n let end = equaln(hole.EndParam, 1) ? 1 : MathUtils.clamp(curveParam.GetParamAtPoint(thisParam.GetPointAtParam(hole.EndParam)), 0, 1);\r\n if (start === end) continue;\r\n if (start > end) [start, end] = [end, start];\r\n let holeTape = new Tape(start, end, hole.Bottom, hole.Top);\r\n\r\n let newTapes: Tape[] = [];\r\n for (let tape of tapes)\r\n arrayPushArray(newTapes, tape.Clip(holeTape));\r\n\r\n tapes = newTapes;\r\n }\r\n }\r\n\r\n if (this.Holes.length)\r\n {\r\n let length = arc.Length;\r\n let params: number[] = SplitArcParams(arc);\r\n\r\n //需要合并顶点,所以建立一个map\r\n let cacheIndex: { [key: string]: number; } = {};\r\n const GetIndex = (param: number, z: number) =>\r\n {\r\n let key = `${param}_${z}`;\r\n let index = cacheIndex[key];\r\n if (index === undefined)\r\n {\r\n index = geo.vertices.length;\r\n cacheIndex[key] = index;\r\n geo.vertices.push(curveParam.GetPointAtParam(param).applyMatrix4(inv).setZ(z));\r\n }\r\n return index;\r\n };\r\n\r\n for (let tapeaaaaa of tapes)\r\n {\r\n for (let tape of tapeaaaaa.Split(params))\r\n {\r\n let p1Index = GetIndex(tape.start, tape.bottom);\r\n let p2Index = GetIndex(tape.end, tape.bottom);\r\n let p3Index = GetIndex(tape.start, tape.top);\r\n let p4Index = GetIndex(tape.end, tape.top);\r\n\r\n let startX = length * 1e-3 * tape.start;\r\n let endX = length * 1e-3 * tape.end;\r\n\r\n let startZ = tape.bottom * 1e-3;\r\n let endZ = tape.top * 1e-3;\r\n\r\n let dir = arc.GetPointAtParam((tape.start + tape.end) * 0.5).applyMatrix4(inv).divideScalar(arc.Radius);\r\n\r\n geo.faces.push(\r\n new Face3(p1Index, p3Index, p2Index, dir, undefined, materialIndex),\r\n new Face3(p2Index, p3Index, p4Index, dir, undefined, materialIndex),\r\n );\r\n\r\n geo.faceVertexUvs[0].push(\r\n [new Vector2(startX, startZ), new Vector2(startX, endZ), new Vector2(endX, startZ)],\r\n [new Vector2(endX, startZ), new Vector2(startX, endZ), new Vector2(endX, endZ)],\r\n );\r\n }\r\n }\r\n }\r\n else\r\n {\r\n let startIndex = geo.vertices.length;\r\n\r\n let pts = curve.Shape.getPoints(this.GetDrawCount()).map(AsVector3);\r\n let pts2 = pts.map(p => p.clone().setZ(this._Height));\r\n arrayPushArray(geo.vertices, pts);\r\n arrayPushArray(geo.vertices, pts2);\r\n\r\n let count = pts.length;\r\n let length = curve.Length * 1e-3;\r\n let divLength = length / pts.length;\r\n for (let i = 1; i < count; i++)\r\n {\r\n let pre = i - 1;\r\n\r\n let preX = pre * divLength;\r\n let nowX = i * divLength;\r\n\r\n let dir = pts[i].clone().add(pts[pre]).multiplyScalar(0.5).divideScalar(arc.Radius);\r\n geo.faces.push(\r\n new Face3(startIndex + i, startIndex + pre, startIndex + pre + count, dir, undefined, materialIndex),\r\n new Face3(startIndex + i + count, startIndex + i, startIndex + pre + count, dir, undefined, materialIndex),\r\n );\r\n geo.faceVertexUvs[0].push(\r\n [new Vector2(nowX, 0), new Vector2(preX, 0), new Vector2(preX, this._Height * 1e-3)],\r\n [new Vector2(nowX, this._Height * 1e-3), new Vector2(nowX, 0), new Vector2(preX, this._Height * 1e-3)],\r\n );\r\n }\r\n }\r\n }\r\n };\r\n const BuildRightFace = (curve: Curve) =>\r\n {\r\n let materialIndex = 0;\r\n if (curve[CURVE_FACE_TYPE_KEY] === WallFaceType.Outside)\r\n {\r\n \r\n materialIndex = 1;\r\n }\r\n\r\n if (curve instanceof Line)\r\n {\r\n let tapes = [new Tape(0, 1, 0, this._Height)];\r\n let curveParam = new GetLineParam(curve);\r\n\r\n let holes = this.RealHoles;\r\n if (holes.length)\r\n {\r\n for (let hole of holes)\r\n {\r\n let start = equaln(hole.StartParam, 0) ? 0 : curveParam.GetParamAtPoint(thisParam.GetPointAtParam(hole.StartParam));\r\n let end = equaln(hole.EndParam, 1) ? 1 : curveParam.GetParamAtPoint(thisParam.GetPointAtParam(hole.EndParam));\r\n if (start > end) [start, end] = [end, start];\r\n let holeTape = new Tape(start, end, hole.Bottom, hole.Top);\r\n\r\n let newTapes: Tape[] = [];\r\n for (let tape of tapes)\r\n arrayPushArray(newTapes, tape.Clip(holeTape));\r\n\r\n tapes = newTapes;\r\n }\r\n }\r\n\r\n for (let tape of tapes)\r\n {\r\n let startIndex = geo.vertices.length;\r\n\r\n let p1 = curveParam.GetPointAtParam(tape.start).applyMatrix4(inv);\r\n let p2 = curveParam.GetPointAtParam(tape.end).applyMatrix4(inv);\r\n geo.vertices.push(p1.setZ(tape.bottom), p2.setZ(tape.bottom));\r\n geo.vertices.push(p1.clone().setZ(tape.top));\r\n geo.vertices.push(p2.clone().setZ(tape.top));\r\n\r\n let startX = curveParam.Length * 1e-3 * tape.start;\r\n let endX = curveParam.Length * 1e-3 * tape.end;\r\n\r\n let startZ = tape.bottom * 1e-3;\r\n let endZ = tape.top * 1e-3;\r\n\r\n geo.faces.push(\r\n new Face3(startIndex, startIndex + 1, startIndex + 2, curveParam.RightDir, undefined, materialIndex),\r\n new Face3(startIndex + 1, startIndex + 3, startIndex + 2, curveParam.RightDir, undefined, materialIndex),\r\n );\r\n\r\n geo.faceVertexUvs[0].push(\r\n [new Vector2(startX, startZ), new Vector2(endX, startZ), new Vector2(startX, endZ)],\r\n [new Vector2(endX, startZ), new Vector2(endX, endZ), new Vector2(startX, endZ)],\r\n );\r\n }\r\n }\r\n else\r\n {\r\n let arc = curve as Arc;\r\n\r\n let tapes = [new Tape(0, 1, 0, this._Height)];\r\n let curveParam = new GetArcParam(arc);\r\n\r\n let holes = this.RealHoles;\r\n if (holes.length)\r\n {\r\n for (let hole of holes)\r\n {\r\n let start = equaln(hole.StartParam, 0) ? 0 : curveParam.GetParamAtPoint(thisParam.GetPointAtParam(hole.StartParam));\r\n let end = equaln(hole.EndParam, 1) ? 1 : curveParam.GetParamAtPoint(thisParam.GetPointAtParam(hole.EndParam));\r\n if (start > end) [start, end] = [end, start];\r\n let holeTape = new Tape(start, end, hole.Bottom, hole.Top);\r\n\r\n let newTapes: Tape[] = [];\r\n for (let tape of tapes)\r\n arrayPushArray(newTapes, tape.Clip(holeTape));\r\n\r\n tapes = newTapes;\r\n }\r\n\r\n let length = arc.Length;\r\n let params: number[] = SplitArcParams(arc);\r\n\r\n //需要合并顶点,所以建立一个map\r\n let cacheIndex: { [key: string]: number; } = {};\r\n const GetIndex = (param: number, z: number) =>\r\n {\r\n let key = `${param}_${z}`;\r\n let index = cacheIndex[key];\r\n if (index === undefined)\r\n {\r\n index = geo.vertices.length;\r\n cacheIndex[key] = index;\r\n geo.vertices.push(curveParam.GetPointAtParam(param).applyMatrix4(inv).setZ(z));\r\n }\r\n return index;\r\n };\r\n\r\n for (let tapeaaaaa of tapes)\r\n {\r\n for (let tape of tapeaaaaa.Split(params))\r\n {\r\n let p1Index = GetIndex(tape.start, tape.bottom);\r\n let p2Index = GetIndex(tape.end, tape.bottom);\r\n let p3Index = GetIndex(tape.start, tape.top);\r\n let p4Index = GetIndex(tape.end, tape.top);\r\n\r\n let startX = length * 1e-3 * tape.start;\r\n let endX = length * 1e-3 * tape.end;\r\n\r\n let startZ = tape.bottom * 1e-3;\r\n let endZ = tape.top * 1e-3;\r\n\r\n let dir = arc.GetPointAtParam((tape.start + tape.end) * 0.5).applyMatrix4(inv).divideScalar(-arc.Radius);\r\n\r\n geo.faces.push(\r\n new Face3(p1Index, p2Index, p3Index, dir, undefined, materialIndex),\r\n new Face3(p2Index, p4Index, p3Index, dir, undefined, materialIndex),\r\n );\r\n\r\n geo.faceVertexUvs[0].push(\r\n [new Vector2(startX, startZ), new Vector2(endX, startZ), new Vector2(startX, endZ)],\r\n [new Vector2(endX, startZ), new Vector2(endX, endZ), new Vector2(startX, endZ)],\r\n );\r\n }\r\n }\r\n }\r\n else\r\n {\r\n let arc = curve as Arc;\r\n let startIndex = geo.vertices.length;\r\n\r\n let pts = curve.Shape.getPoints(this.GetDrawCount()).map(AsVector3);\r\n let pts2 = pts.map(p => p.clone().setZ(this._Height));\r\n arrayPushArray(geo.vertices, pts);\r\n arrayPushArray(geo.vertices, pts2);\r\n\r\n let length = curve.Length * 1e-3;\r\n let divLength = length / pts.length;\r\n\r\n let count = pts.length;\r\n for (let i = 1; i < count; i++)\r\n {\r\n let pre = i - 1;\r\n\r\n let preX = pre * divLength;\r\n let nowX = i * divLength;\r\n\r\n let dir = pts[i].clone().add(pts[pre]).multiplyScalar(0.5).divideScalar(-arc.Radius);\r\n geo.faces.push(\r\n new Face3(startIndex + pre, startIndex + i, startIndex + pre + count, dir, undefined, materialIndex),\r\n new Face3(startIndex + i, startIndex + i + count, startIndex + pre + count, dir, undefined, materialIndex),\r\n );\r\n geo.faceVertexUvs[0].push(\r\n [new Vector2(preX, 0), new Vector2(nowX, 0), new Vector2(preX, this._Height * 1e-3)],\r\n [new Vector2(nowX, 0), new Vector2(nowX, this._Height * 1e-3), new Vector2(preX, this._Height * 1e-3)],\r\n );\r\n }\r\n }\r\n }\r\n };\r\n const BuildRegionFace = (region: Polyline) =>\r\n {\r\n let ocsInv = this.OCSInv;\r\n let pts = SplitCurvePoints(region).map(p => AsVector2(p.applyMatrix4(ocsInv)));\r\n\r\n let faces = ShapeUtils.triangulateShape(pts, []);\r\n\r\n //top\r\n let startIndex = geo.vertices.length;\r\n for (let p of pts) geo.vertices.push(new Vector3(p.x, p.y, this._Height));\r\n if (HostApplicationServices.DrawWallBottomFace) for (let p of pts) geo.vertices.push(new Vector3(p.x, p.y, 0));\r\n\r\n for (let i = 0; i < faces.length; i++)\r\n {\r\n let [a, b, c] = faces[i];\r\n geo.faces.push(new Face3(startIndex + a, startIndex + b, startIndex + c, normal));\r\n let uvs = faces[i].map(index => pts[index].clone());\r\n geo.faceVertexUvs[0].push(uvs);\r\n\r\n if (HostApplicationServices.DrawWallBottomFace)\r\n {\r\n geo.faces.push(new Face3(startIndex + pts.length + c, startIndex + pts.length + b, startIndex + pts.length + a, normaln));\r\n geo.faceVertexUvs[0].push(uvs.concat().reverse().map(v => v.clone()));\r\n }\r\n }\r\n\r\n // //todo:为了优化显示 我们可以把侧面也画出来 (应该使用和酷家乐一样的技术 在视线对准时,隐藏整个墙)\r\n // let d = this._EndPoint.clone().sub(this._StartPoint).normalize();\r\n // let pre = pts[pts.length - 1];\r\n // let tempV = new Vector3;\r\n // for (let i = 0; i < pts.length; i++)\r\n // {\r\n // let p = pts[i];\r\n // tempV.set(p.x - pre.x, p.y - pre.y, 0).normalize();\r\n // //todo:盖子会重复绘制\r\n // if (!isParallelTo(d, tempV, 1e-3) && !isPerpendicularityTo(d, tempV, 1e-3))\r\n // {\r\n // startIndex = geo.vertices.length;\r\n // geo.vertices.push(AsVector3(pre), AsVector3(p));\r\n // geo.vertices.push(AsVector3(pre).setZ(this._Height));\r\n // geo.vertices.push(AsVector3(p).setZ(this._Height));\r\n\r\n // LEFT_ROTATE_MTX2.applyVector(tempV);\r\n // tempV.negate();\r\n\r\n // let n = tempV.clone();\r\n\r\n // geo.faces.push(\r\n // new Face3(startIndex, startIndex + 1, startIndex + 2, n),\r\n // new Face3(startIndex + 1, startIndex + 3, startIndex + 2, n),\r\n // );\r\n\r\n // geo.faceVertexUvs[0].push(\r\n // [new Vector2(), new Vector2(0, 0), new Vector2(0, 0)],\r\n // [new Vector2(0, 0), new Vector2(0, 0), new Vector2(0, 0)],\r\n // );\r\n // }\r\n\r\n // pre = p;\r\n // }\r\n };\r\n\r\n if (!this.LeftCurves)\r\n {\r\n let sign = this._Clockwise ? -1 : 1;\r\n if (this.Length > 0.1)\r\n {\r\n let left = new Arc(ZeroVec, this._Radius - sign * this.Thickness * 0.5, this._StartAngle, this._EndAngle, this._Clockwise);\r\n let right = new Arc(ZeroVec, this._Radius + sign * this.Thickness * 0.5, this._StartAngle, this._EndAngle, this._Clockwise);\r\n left.OCS = this.OCSNoClone;\r\n right.OCS = this.OCSNoClone;\r\n\r\n BuildLeftFace(left);\r\n BuildRightFace(right);\r\n let lid1 = new Line(left.StartPoint, right.StartPoint);\r\n let lid2 = new Line(right.EndPoint, left.EndPoint);\r\n BuildRightFace(lid1);\r\n BuildRightFace(lid2);\r\n\r\n let region = Polyline.Combine([left, lid2, right, lid1]);\r\n if (region) BuildRegionFace(region);\r\n }\r\n }\r\n else\r\n {\r\n this.LeftCurves.forEach(BuildLeftFace);\r\n this.RightCurves.forEach(BuildRightFace);\r\n this.LidCurves.forEach(BuildRightFace);\r\n\r\n if (this.Region) BuildRegionFace(this.Region);\r\n }\r\n\r\n geo.computeVertexNormals();\r\n geo.verticesNeedUpdate = true;\r\n geo.uvsNeedUpdate = true;\r\n\r\n return this._MeshGeometry;\r\n }\r\n\r\n InitDrawObject(renderType: RenderType = RenderType.Wireframe): Object3D\r\n {\r\n if (renderType === RenderType.Physical)\r\n {\r\n let mesh = new Mesh(this.MeshGeometry, this.MeshMaterial);\r\n mesh.castShadow = true;\r\n return mesh;\r\n }\r\n\r\n let obj = new Object3D;\r\n if (renderType === RenderType.Wireframe || renderType === RenderType.Jig)\r\n {\r\n let pts = this.Shape.getPoints(this.GetDrawCount()).map(AsVector3);\r\n let geo = new BufferGeometry().setFromPoints(pts);\r\n let axisLine = new TLine(geo, ColorMaterial.GetWallLineMtl(1));\r\n axisLine.computeLineDistances();\r\n obj.add(axisLine);\r\n\r\n let outline = new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(this.ColorIndex));\r\n obj.add(outline);\r\n }\r\n else if (renderType === RenderType.Conceptual)\r\n {\r\n let mesh = new Mesh(this.MeshGeometry, ColorMaterial.GetConceptualMaterial(this.ColorIndex));\r\n obj.add(mesh);\r\n\r\n let outline = new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(this.ColorIndex));\r\n obj.add(outline);\r\n }\r\n return obj;\r\n }\r\n\r\n /**\r\n * 重载:更新绘制的实体\r\n * @param {RenderType} renderType\r\n * @param {Object3D} obj\r\n */\r\n UpdateDrawObject(renderType: RenderType, obj: Object3D)\r\n {\r\n if (renderType === RenderType.Wireframe || renderType === RenderType.Jig)\r\n {\r\n let [axisLine, outline] = obj.children as [TLine, TLine];\r\n\r\n let pts = this.Shape.getPoints(this.GetDrawCount()).map(AsVector3);\r\n if (!BufferGeometryUtils.UpdatePts(axisLine.geometry, pts))\r\n updateGeometry(axisLine, BufferGeometryUtils.CreateFromPts(pts));\r\n axisLine.computeLineDistances();\r\n\r\n // if (this._Radius <= this.Thickness * 0.5)\r\n // return; //会退化成直线 所以不return了\r\n\r\n if (outline.geometry !== this.EdgeGeometry)\r\n {\r\n outline.geometry.dispose();\r\n outline.geometry = this.EdgeGeometry;\r\n }\r\n }\r\n else if (renderType === RenderType.Conceptual)\r\n {\r\n let mesh = obj.children[0] as Mesh;\r\n if (mesh.geometry !== this.MeshGeometry)\r\n {\r\n mesh.geometry.dispose();\r\n mesh.geometry = this.MeshGeometry;\r\n }\r\n\r\n let outline = obj.children[1] as LineSegments;\r\n if (outline.geometry !== this.EdgeGeometry)\r\n {\r\n outline.geometry.dispose();\r\n outline.geometry = this.EdgeGeometry;\r\n }\r\n }\r\n else if (renderType === RenderType.Physical)\r\n {\r\n let mesh = obj as Mesh;\r\n if (mesh.geometry !== this.MeshGeometry)\r\n {\r\n mesh.geometry.dispose();\r\n mesh.geometry = this.MeshGeometry;\r\n }\r\n }\r\n }\r\n //#endregion\r\n\r\n //#region -------------------------File-------------------------\r\n //对象应该实现dataIn和DataOut的方法,为了对象的序列化和反序列化\r\n\r\n //对象从文件中读取数据,初始化自身\r\n protected override _ReadFile(file: CADFiler)\r\n {\r\n super._ReadFile(file);\r\n let ver = file.Read();\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 //对象将自身数据写入到文件.\r\n override 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\nconst ARC_MEHTON_NAMES = [\r\n \"Center\",\r\n \"Normal\",\r\n \"BoundingBoxPtsInOCS\",\r\n \"Radius\",\r\n \"IsClockWise\",\r\n \"StartAngle\",\r\n \"EndAngle\",\r\n\r\n \"StartPoint\",\r\n \"EndPoint\",\r\n\r\n \"ApplyScaleMatrix\",\r\n \"ApplyMirrorMatrix\",\r\n\r\n \"GetParamAtAngle\",\r\n \"GetParamAtAngle2\",\r\n \"GetAngleAtParam\",\r\n \"GetAngleAtPoint\",\r\n\r\n \"AllAngle\",\r\n \"Bul\",\r\n\r\n \"ComputeAnlge\",\r\n \"ParseFromBul\",\r\n \"FromThreePoint\",\r\n];\r\n\r\n//@ts-ignore\r\nexport interface RoomWallArc extends RoomWallBase, Arc { }\r\napplyMixins(RoomWallArc, Arc, ARC_MEHTON_NAMES.concat(CURVE_MESH_NAMES));\r\n","import Flatbush from 'flatbush';\r\nimport { Vector2, Vector3 } from 'three';\r\nimport { CURVE_FACE_TYPE_KEY, RoomWallBase, WallFaceType } from \"../../Entity/Wall/RoomWallBase\";\r\nimport { CreateGetCurveParam, GetCurveParam } from \"../GetCurveParam\";\r\nimport { InsertSortedIndex, Intersection } from '../RangeUtils';\r\n\r\ntype Range = [number, number];\r\n\r\nexport interface WallRange extends Range\r\n{\r\n left: WallFaceType;\r\n right: WallFaceType;\r\n}\r\n\r\nexport class RoomWallPlaceIHoleHelper\r\n{\r\n protected _ParamGets: GetCurveParam[] = [];\r\n protected _ParamRanges: ([number, number][])[] = [];\r\n protected _Fb: Flatbush;\r\n\r\n constructor(public _Walls: RoomWallBase[])\r\n {\r\n this.GenFb();\r\n this.ParseWallCanPlaceHoleRange();\r\n }\r\n\r\n FindBestPlace(p: Vector3)\r\n {\r\n let ids = this._Fb.neighbors(p.x, p.y, 50, 200);//50个 200距离\r\n\r\n let minDist = Infinity;\r\n let minId = -1;\r\n let cpParam: number;\r\n for (let id of ids)\r\n {\r\n if (this._ParamRanges[id].length === 0)\r\n continue; //没有可以放置的区域\r\n\r\n let paramGet = this._ParamGets[id];\r\n let param = paramGet.GetParamAtPoint(p);\r\n if (param < 0 || param > 1) continue;//不在墙上\r\n let cp = paramGet.GetPointAtParam(param);\r\n\r\n if (p.z < cp.z - 1 || p.z > cp.z + 2800) continue;//线在上墙就行\r\n\r\n let dist = Vector2.prototype.distanceToSquared.call(cp, p);\r\n if (dist < minDist)\r\n {\r\n minDist = dist;\r\n minId = id;\r\n cpParam = param;\r\n }\r\n }\r\n if (minId === -1 || minDist > 90000)//300*300=90000\r\n return;\r\n\r\n let range = FindBestRange(cpParam, this._ParamRanges[minId]) as unknown as WallRange;\r\n if (range)\r\n return {\r\n wall: this._Walls[minId],\r\n range,\r\n cpParam,\r\n getParam: this._ParamGets[minId]\r\n };\r\n }\r\n\r\n private GenFb()\r\n {\r\n if (!this._Walls.length) return;\r\n\r\n this._Fb = new Flatbush(this._Walls.length);\r\n for (let wall of this._Walls)\r\n {\r\n let box = wall.BoundingBox;\r\n this._Fb.add(box.min.x, box.min.y, box.max.x, box.max.y);\r\n }\r\n this._Fb.finish();\r\n }\r\n\r\n ParseWallCanPlaceHoleRange()\r\n {\r\n for (let wall of this._Walls)\r\n {\r\n let param = CreateGetCurveParam(wall);\r\n this._ParamGets.push(param);\r\n this._ParamRanges.push(ParseWallRange(wall, param));\r\n }\r\n }\r\n}\r\n\r\n\r\n//找到一个合适的位置放置直线洞\r\nexport function FindBestRange(param: number, ranges: [number, number][], fuzz = 1e-5): [number, number]\r\n{\r\n //二分搜索\r\n let index = InsertSortedIndex(ranges, param, (v, range) => v - range[0] + fuzz);\r\n\r\n let range = ranges[index - 1];\r\n\r\n //参数在范围内\r\n if (range && (range[0] - fuzz) <= param && param <= (range[1] + fuzz))\r\n return range;\r\n\r\n // //参数在范围外\r\n // if (index === 0)\r\n // {\r\n // return ranges[0];\r\n // }\r\n // else if (index === ranges.length)\r\n // {\r\n // return ranges[ranges.length - 1];\r\n // }\r\n // else\r\n // {\r\n // let nextRange = ranges[index + 1];\r\n // if (nextRange[0] - param < param - range[1])\r\n // return nextRange;\r\n // else\r\n // return range;\r\n // }\r\n}\r\n\r\nexport function ParseWallRange(wall: RoomWallBase, getParam = CreateGetCurveParam(wall))\r\n{\r\n let leftParams: [number, number][] = wall.LeftCurves.map(c =>\r\n {\r\n let range = [getParam.GetParamAtPoint(c.StartPoint), getParam.GetParamAtPoint(c.EndPoint)] as [number, number];\r\n range[CURVE_FACE_TYPE_KEY] = c[CURVE_FACE_TYPE_KEY];\r\n return range;\r\n });\r\n let rightParams: [number, number][] = wall.RightCurves.map(c =>\r\n {\r\n let range = [getParam.GetParamAtPoint(c.StartPoint), getParam.GetParamAtPoint(c.EndPoint)] as [number, number];\r\n range[CURVE_FACE_TYPE_KEY] = c[CURVE_FACE_TYPE_KEY];\r\n return range;\r\n });\r\n\r\n leftParams.sort((a, b) => a[0] - b[0]);\r\n rightParams.sort((a, b) => a[0] - b[0]);\r\n\r\n let ranges: [number, number][] = [];\r\n for (let seg1 of rightParams)\r\n {\r\n let [min, max] = seg1;\r\n for (let seg2 of leftParams)\r\n {\r\n let [min2, max2] = seg2;\r\n if (min > max2) continue;\r\n if (max < min2) break;\r\n\r\n let range = Intersection(seg1, seg2);\r\n if (range)\r\n {\r\n ranges.push(range);\r\n range[\"left\"] = seg2[CURVE_FACE_TYPE_KEY];\r\n range[\"right\"] = seg1[CURVE_FACE_TYPE_KEY];\r\n }\r\n }\r\n }\r\n\r\n return ranges as unknown as WallRange[];\r\n}\r\n","import { MathUtils } from \"three\";\r\nimport { Arc } from \"../api\";\r\nimport { arrayLast } from \"../Common/ArrayExt\";\r\nimport { CADObject } from \"../DatabaseServices/CADObject\";\r\nimport { Curve } from \"../DatabaseServices/Entity/Curve\";\r\nimport { RoomHolePolyline } from \"../DatabaseServices/Room/Entity/Wall/Hole/RoomHolePolyline\";\r\nimport { RoomWallArc } from \"../DatabaseServices/Room/Entity/Wall/RoomWallArc\";\r\nimport { RoomWallBase } from \"../DatabaseServices/Room/Entity/Wall/RoomWallBase\";\r\nimport { RoomWallLine } from \"../DatabaseServices/Room/Entity/Wall/RoomWallLine\";\r\nimport { CreateGetCurveParam } from \"../DatabaseServices/Room/ParseService/GetCurveParam\";\r\nimport { FindBestRange, ParseWallRange } from \"../DatabaseServices/Room/ParseService/Hole/RoomWallPlaceIHoleHelper\";\r\nimport { RoomWallParse } from \"../DatabaseServices/Room/ParseService/RoomWallParse\";\r\nimport { CurveMap } from \"../Geometry/CurveMap\";\r\nimport { equalv2 } from \"../Geometry/GeUtils\";\r\n\r\n\r\n/**\r\n * 更新墙与洞的关联性\r\n */\r\nexport async function UpdateRelevanceWallHole(ents: CADObject[])\r\n{\r\n let updated = new Set();\r\n\r\n //更新墙,顺便更新洞\r\n const UpdateWall = (wall: RoomWallBase) =>\r\n {\r\n if (updated.has(wall)) return;\r\n updated.add(wall);//避免重入\r\n\r\n //先更新洞,因为洞可能会修复位置\r\n for (let holeId of wall.RelevancyHoles)//更新关联的洞\r\n {\r\n if (holeId.IsErase) continue;\r\n\r\n let hole = holeId.Object;\r\n if (wall.IsErase)\r\n hole.Erase();\r\n\r\n UpdateHole(hole);//这里如果只更新洞,那么有可能关联的其他的墙会逃逸\r\n }\r\n\r\n UpdateWallHolesDataAndUpdateDraw(wall);\r\n };\r\n\r\n //更新洞,顺便更新关联的墙?\r\n const UpdateHole = (hole: RoomHolePolyline) =>\r\n {\r\n if (updated.has(hole)) return;\r\n updated.add(hole);//避免重入\r\n\r\n //先更新洞,因为洞可能会修复位置\r\n UpdateHoleFakerWallsAndUpdateDraw(hole);\r\n\r\n for (let wallId of hole.RelevancyWalls)\r\n {\r\n if (wallId.IsErase) continue;\r\n\r\n let wall = wallId.Object as RoomWallBase;\r\n if (updated.has(wall)) continue;\r\n\r\n UpdateWall(wall);\r\n }\r\n };\r\n\r\n\r\n for (let en of ents)\r\n {\r\n if (en instanceof RoomWallBase)\r\n UpdateWall(en);\r\n else if (en instanceof RoomHolePolyline)\r\n UpdateHole(en);\r\n }\r\n}\r\n\r\n\r\n/**\r\n * 更新墙的洞的数据,并且更新绘制\r\n */\r\nexport function UpdateWallHolesDataAndUpdateDraw(wall: RoomWallBase)\r\n{\r\n wall.Holes = [];\r\n\r\n let getParam = CreateGetCurveParam(wall);\r\n\r\n let z = wall.OCSNoClone.elements[14];\r\n for (let hole of wall.RelevancyHoles)\r\n {\r\n if (hole.IsErase)\r\n {\r\n wall.Holes.push({ StartParam: 0, EndParam: 0, Bottom: 0, Top: 0 });\r\n continue;\r\n }\r\n\r\n let holeObj = hole.Object as RoomHolePolyline;\r\n let index = holeObj.RelevancyWalls.indexOf(wall.Id);\r\n if (index < 0) continue;\r\n\r\n let sp = holeObj.Points[index];\r\n let ep = holeObj.Points[index + 1];\r\n\r\n let startParam = getParam.GetParamAtPoint(sp);\r\n let endParam = getParam.GetParamAtPoint(ep);\r\n if (startParam > endParam) [startParam, endParam] = [endParam, startParam];\r\n let bottom = holeObj.Position.z - z;\r\n let top = holeObj.Height + bottom;\r\n\r\n wall.Holes.push({ StartParam: startParam, EndParam: endParam, Bottom: bottom, Top: top });\r\n }\r\n\r\n wall.Update();\r\n return wall;\r\n}\r\n\r\n\r\n/**\r\n * 更新网洞的绘制\r\n * 在墙移动的时候,或者网洞变化的时候 这个网洞的绘制就需要被更新\r\n */\r\nexport function UpdateHoleFakerWallsAndUpdateDraw(hole: RoomHolePolyline)\r\n{\r\n if (hole.IsErase) return;\r\n\r\n let fakerWalls = hole.RelevancyWalls.map(w => w.Object.Clone());\r\n\r\n let pts = hole.Points;\r\n if (pts.length < 2)\r\n {\r\n hole.Erase();\r\n return;\r\n }\r\n\r\n if (pts.length === 2)\r\n {\r\n\r\n let p1 = pts[0];\r\n let p2 = pts[1];\r\n\r\n let wall = fakerWalls[0];\r\n let orgWall = hole.RelevancyWalls[0].Object;\r\n let paramGet = CreateGetCurveParam(orgWall);\r\n\r\n let ranges = ParseWallRange(orgWall, paramGet);\r\n\r\n let [p1Param, p1Closeto] = paramGet.GetParamAtPoint2(p1);\r\n let [p2Param, p2Closeto] = paramGet.GetParamAtPoint2(p2);\r\n\r\n let range1 = FindBestRange(p1Param, ranges);\r\n let range2 = FindBestRange(p2Param, ranges);\r\n\r\n if (p1Closeto && p2Closeto)\r\n {\r\n if (range1 && range1 === range2)\r\n {\r\n wall.StartPoint = p1;\r\n wall.EndPoint = p2;\r\n\r\n if (wall instanceof RoomWallArc && p1Param > p2Param)\r\n (wall as unknown as Arc).IsClockWise = !wall.IsClockWise;\r\n }\r\n else\r\n {\r\n let range = range1 ?? range2 ?? FindBestRange((p1Param + p2Param) * 0.5, ranges);\r\n if (!range)\r\n {\r\n hole.Erase();\r\n return;\r\n }\r\n\r\n p1Param = MathUtils.clamp(p1Param, range[0], range[1]);\r\n p2Param = MathUtils.clamp(p2Param, range[0], range[1]);\r\n\r\n wall.StartPoint = paramGet.GetPointAtParam(p1Param);\r\n wall.EndPoint = paramGet.GetPointAtParam(p2Param);\r\n\r\n if (wall instanceof RoomWallArc && p1Param > p2Param)\r\n (wall as unknown as Arc).IsClockWise = !wall.IsClockWise;\r\n }\r\n }\r\n else\r\n {\r\n let index = orgWall.RelevancyHoles.indexOf(hole.Id);\r\n let holeData = orgWall.Holes[index];\r\n if (!holeData)\r\n {\r\n hole.Erase();\r\n return;\r\n };\r\n\r\n if (p2Param > p1Param)\r\n {\r\n p1Param = holeData.StartParam;\r\n p2Param = holeData.EndParam;\r\n }\r\n else\r\n {\r\n p1Param = holeData.EndParam;\r\n p2Param = holeData.StartParam;\r\n }\r\n\r\n let range = FindBestRange(p1Param, ranges) ?? FindBestRange(p1Param, ranges) ?? FindBestRange((p1Param + p2Param) * 0.5, ranges);\r\n if (!range)\r\n {\r\n hole.Erase();\r\n return;\r\n }\r\n\r\n p1Param = MathUtils.clamp(p1Param, range[0], range[1]);\r\n p2Param = MathUtils.clamp(p2Param, range[0], range[1]);\r\n\r\n wall.StartPoint = paramGet.GetPointAtParam(p1Param);\r\n wall.EndPoint = paramGet.GetPointAtParam(p2Param);\r\n\r\n if (wall instanceof RoomWallArc && p1Param > p2Param)\r\n (wall as unknown as Arc).IsClockWise = !wall.IsClockWise;\r\n }\r\n\r\n new RoomWallParse(false, undefined, false).Parse(fakerWalls);\r\n hole.FakerWalls = fakerWalls;\r\n\r\n let newPts = hole.FakerPoints;\r\n if (pts.some((p, i) => !equalv2(p, newPts[i], 1e-4)))\r\n hole.UpdatePoints();\r\n hole.Update();\r\n return;\r\n }\r\n\r\n //pts.length >2\r\n let curvemap = new CurveMap();\r\n for (let w of fakerWalls)\r\n curvemap.AddCurveToMap(w as unknown as Curve, false, false, false);\r\n\r\n if (curvemap._Vertices.length !== pts.length)\r\n {\r\n hole.Erase();\r\n return;\r\n }\r\n\r\n if (pts.length === 3)\r\n {\r\n let v = curvemap._Vertices.find(v => v.routes.length === 2);\r\n if (!v)//拐角点丢失\r\n {\r\n hole.Erase();\r\n return;\r\n }\r\n\r\n let r1 = v.routes.find(r => r.curve === fakerWalls[0] as unknown as Curve);\r\n let r2 = v.routes.find(r => r.curve === fakerWalls[1] as unknown as Curve);\r\n if (!r1.isReverse) fakerWalls[0].Reverse();\r\n if (r2.isReverse) fakerWalls[1].Reverse();\r\n\r\n // if (!equalv2(v.position, pts[1], 1e-4))//拐角点不再对齐\r\n // {\r\n // let length1 = GetHoleLengthOfIndex(hole, 0);\r\n // let length2 = GetHoleLengthOfIndex(hole, 1);\r\n\r\n // fakerWalls[0].StartPoint = fakerWalls[0].GetPointAtDistance(fakerWalls[0].Length - length1);\r\n // fakerWalls[1].EndPoint = fakerWalls[1].GetPointAtDistance(length2);\r\n // }\r\n // else//拐角点仍然对齐\r\n {\r\n {\r\n let length1 = GetHoleLengthOfIndex(hole, 0);\r\n let orgWall = hole.RelevancyWalls[0].Object;\r\n let ranges = ParseWallRange(orgWall);\r\n if (!r1.isReverse)\r\n length1 = Math.min(length1, orgWall.Length * ranges[0][1]);\r\n else\r\n length1 = Math.min(length1, orgWall.Length * (1 - arrayLast(ranges)[0]));\r\n\r\n fakerWalls[0].StartPoint = fakerWalls[0].GetPointAtDistance(fakerWalls[0].Length - length1);\r\n }\r\n\r\n {\r\n let length2 = GetHoleLengthOfIndex(hole, 1);\r\n let orgWall = hole.RelevancyWalls[1].Object;\r\n let ranges = ParseWallRange(orgWall);\r\n if (r2.isReverse)\r\n length2 = Math.min(length2, orgWall.Length * (1 - arrayLast(ranges)[0]));\r\n else\r\n length2 = Math.min(length2, orgWall.Length * ranges[0][1]);\r\n\r\n fakerWalls[1].EndPoint = fakerWalls[1].GetPointAtDistance(length2);\r\n }\r\n }\r\n }\r\n else if (pts.length === 4)\r\n {\r\n let v1 = curvemap._Vertices.find(v => v.routes.length === 2 && v.routes.some(r => r.curve === fakerWalls[0] as unknown as Curve));\r\n let v2 = curvemap._Vertices.find(v => v.routes.length === 2 && v.routes.some(r => r.curve === fakerWalls[2] as unknown as Curve));\r\n\r\n if (!v1 || !v2)\r\n {\r\n hole.Erase();\r\n return;\r\n }\r\n\r\n let r1 = v1.routes.find(r => r.curve === fakerWalls[0] as unknown as Curve);\r\n let r2 = v2.routes.find(r => r.curve === fakerWalls[2] as unknown as Curve);\r\n\r\n let r3 = v1.routes.find(r => r.curve === fakerWalls[1] as unknown as Curve);\r\n if (r3.isReverse) fakerWalls[1].Reverse();\r\n\r\n if (!r1.isReverse) fakerWalls[0].Reverse();\r\n if (r2.isReverse) fakerWalls[2].Reverse();\r\n\r\n {\r\n let length1 = GetHoleLengthOfIndex(hole, 0);\r\n let length2 = GetHoleLengthOfIndex(hole, 2);\r\n\r\n {\r\n let orgWall = hole.RelevancyWalls[0].Object;\r\n let ranges = ParseWallRange(orgWall);\r\n if (!r1.isReverse)\r\n length1 = Math.min(length1, orgWall.Length * ranges[0][1]);\r\n else\r\n length1 = Math.min(length1, orgWall.Length * (1 - arrayLast(ranges)[0]));\r\n\r\n fakerWalls[0].StartPoint = fakerWalls[0].GetPointAtDistance(fakerWalls[0].Length - length1);\r\n }\r\n\r\n {\r\n let orgWall = hole.RelevancyWalls[2].Object;\r\n let ranges = ParseWallRange(orgWall);\r\n if (r3.isReverse)\r\n length2 = Math.min(length2, orgWall.Length * (1 - arrayLast(ranges)[0]));\r\n else\r\n length2 = Math.min(length2, orgWall.Length * ranges[0][1]);\r\n\r\n fakerWalls[2].EndPoint = fakerWalls[2].GetPointAtDistance(length2);\r\n }\r\n }\r\n }\r\n\r\n new RoomWallParse(false, undefined, false).Parse(fakerWalls);\r\n hole.FakerWalls = fakerWalls;\r\n\r\n let newPts = hole.FakerPoints;\r\n if (pts.some((p, i) => !equalv2(p, newPts[i], 1e-4)))\r\n hole.UpdatePoints();\r\n hole.Update();\r\n}\r\n\r\n\r\nexport function GetHoleLengthOfIndex(hole: RoomHolePolyline, index: number): number\r\n{\r\n if (hole.RelevancyWalls && hole.RelevancyWalls[index]?.Object)\r\n {\r\n let wall = hole.RelevancyWalls[index].Object;\r\n\r\n if (wall instanceof RoomWallLine)\r\n return hole.Points[index].distanceTo(hole.Points[index + 1]);\r\n else if (wall instanceof RoomWallArc)\r\n {\r\n let p1 = hole.Points[index];\r\n let p2 = hole.Points[index + 1];\r\n\r\n let param1 = wall.GetParamAtPoint(p1.clone().setZ(wall.Z));\r\n let param2 = wall.GetParamAtPoint(p2.clone().setZ(wall.Z));\r\n\r\n if (!isNaN(param1) && !isNaN(param2))\r\n return Math.abs(wall.GetDistAtParam(param1) - wall.GetDistAtParam(param2));\r\n\r\n let b = p1.distanceTo(p2);\r\n if (b < 1e-4) return 0;\r\n let r = wall.Radius;\r\n let l = 2 * Math.asin(b / (2 * r)) * r;//http://zhidao.baidu.com/question/553357442/answer/1393358387\r\n return l;\r\n }\r\n }\r\n return 0;\r\n}\r\n","import { arrayRemoveIf } from \"../Common/ArrayExt\";\r\nimport { Database } from \"../DatabaseServices/Database\";\r\nimport { Entity } from \"../DatabaseServices/Entity/Entity\";\r\nimport { TemplateRecord } from \"../DatabaseServices/Template/TemplateRecord\";\r\n\r\nexport function Purge(db: Database): void\r\n{\r\n db.hm.Clear();\r\n let bakEnable = db.hm.Enable;\r\n db.hm.Enable = false;\r\n\r\n //应该避免占位空间被PU(占位空间内没有实体,也没有子层)\r\n arrayRemoveIf(db.TemplateTable.Objects, t =>\r\n {\r\n if (!t || t.IsErase) return true;\r\n\r\n let allEnts: Entity[] = [];\r\n t.Traverse(ct =>\r\n {\r\n for (let id of ct.Objects)\r\n {\r\n if (id.Object)\r\n allEnts.push(id.Object as Entity);\r\n }\r\n });\r\n\r\n if (allEnts.length && allEnts.every(e => e.IsErase))\r\n {\r\n t.Erase();\r\n t.Traverse(ct => ct.Erase());//PU所有子层\r\n return true;\r\n }\r\n\r\n //否则PU本层\r\n t.Purge();\r\n });\r\n\r\n //再次清理,避免子模块没了之后,父模块还引用它\r\n for (let t of db.TemplateTable.Objects)\r\n t.Children = t.Children.filter(c => !c.IsErase);\r\n\r\n arrayRemoveIf(db.GroupTable.Objects, g =>\r\n {\r\n if (!g || g.IsErase) return true;\r\n g.Purge();\r\n return g.Entitys.length === 0;\r\n });\r\n\r\n //由于我们现在Goodbye会将Object清空,所以为了模块能正确的pu,我们把这个延后了\r\n arrayRemoveIf(db.ModelSpace.Entitys, e =>\r\n {\r\n let isErase = e.IsErase;\r\n if (isErase) e.GoodBye();\r\n return isErase;\r\n });\r\n\r\n arrayRemoveIf(db.Lights.Entitys, e =>\r\n {\r\n let isErase = e.IsErase;\r\n if (isErase) e.GoodBye();\r\n return isErase;\r\n });\r\n\r\n arrayRemoveIf(db.LayoutSpace.Entitys, e =>\r\n {\r\n let isErase = e.IsErase;\r\n if (isErase) e.GoodBye();\r\n return isErase;\r\n });\r\n\r\n arrayRemoveIf(db.ProcessingGroupTable.Objects, e =>\r\n {\r\n if (!e || e.IsErase) return true;\r\n e.Purge();\r\n return e.Objects.length === 0;\r\n });\r\n db.hm.Enable = bakEnable;\r\n}\r\n\r\n//裁剪树 有时候会有不好的行为,仅在copy.ts中使用\r\nexport function PurgeTemplateTreeRoot(db: Database)\r\n{\r\n for (let t of db.TemplateTable.Objects)\r\n {\r\n if (t.IsRoot && t.Objects.length === 0)\r\n {\r\n t.Erase();\r\n\r\n let children = t.Children.concat();//必须备份,否则子实体设置Parent=undefined时错误\r\n t.Children = [];\r\n for (let ctId of children)\r\n {\r\n let ct = ctId.Object as TemplateRecord;\r\n ct.Parent = undefined;\r\n }\r\n }\r\n }\r\n arrayRemoveIf(db.TemplateTable.Objects, t => t.IsErase);\r\n}\r\n","import { Factory } from './CADFactory';\r\nimport { CADFiler } from './CADFiler';\r\nimport { CADObject } from './CADObject';\r\nimport { Database } from './Database';\r\n\r\n@Factory\r\nexport class CreateObjectData extends CADObject\r\n{\r\n private CADFiler: CADFiler = new CADFiler();\r\n\r\n //用于记录创建的对象\r\n CreateObject: CADObject;\r\n\r\n /**\r\n * 如果是实体新建,那么不需要调用`Save`,历史记录会在命令结束的时候调用.\r\n * 如果是实体删除,那么请自行调用`Save`.\r\n */\r\n constructor(public Object?: CADObject)\r\n {\r\n super();\r\n }\r\n\r\n //记录数据,在命令结束的时候记录\r\n Save()\r\n {\r\n if (this.Object && this.CADFiler.Data.length === 0)\r\n {\r\n this.CADFiler.Data.length = 0;\r\n this.CADFiler.WriteObject(this.Object);\r\n }\r\n return this;\r\n }\r\n\r\n GetObject(db: Database): CADObject\r\n {\r\n this.CADFiler.Reset();\r\n this.CADFiler.database = db;\r\n this.Object = this.CADFiler.ReadObject();\r\n this.CADFiler.Reset();\r\n return this.Object;\r\n }\r\n\r\n //#region -----------------------------File-----------------------------\r\n //对象应该实现dataIn和DataOut的方法,为了对象的序列化和反序列化\r\n //对象从文件中读取数据,初始化自身\r\n ReadFile(file: CADFiler)\r\n {\r\n file.Read();//ver;\r\n let data = file.Read();\r\n this.CADFiler.Data = data;\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(1);//ver\r\n file.Write(this.CADFiler.Data);\r\n }\r\n //#endregion -----------------------------File End-----------------------------\r\n}\r\n","import { Factory } from './CADFactory';\r\nimport { CADFiler } from './CADFiler';\r\nimport { CADObject } from './CADObject';\r\n\r\n@Factory\r\nexport class RemoveObjectData extends CADObject\r\n{\r\n private index: T;\r\n\r\n RemoveObject: CADObject;//用于记录被删除的对象\r\n constructor(index?: T)\r\n {\r\n super();\r\n this.index = index;\r\n }\r\n get Index()\r\n {\r\n return this.index;\r\n }\r\n\r\n //#region -----------------------------File-----------------------------\r\n //对象应该实现dataIn和DataOut的方法,为了对象的序列化和反序列化\r\n\r\n //对象从文件中读取数据,初始化自身\r\n ReadFile(file: CADFiler)\r\n {\r\n file.Read();//ver\r\n this.index = file.Read();\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(1);\r\n file.Write(this.index);\r\n }\r\n //局部撤销\r\n ApplyPartialUndo(file: CADObject)\r\n { }\r\n //#endregion -----------------------------File End-----------------------------\r\n}\r\n","import { observable } from \"mobx\";\r\nimport { Status } from \"../Common/Status\";\r\nimport { Factory } from \"./CADFactory\";\r\nimport { CADFiler } from \"./CADFiler\";\r\nimport { CADObject } from \"./CADObject\";\r\nimport { CreateObjectData } from \"./CreateObjectData\";\r\nimport { HistorycRecord } from \"./HistorycRecord\";\r\nimport { RemoveObjectData } from \"./RemoveObjectData\";\r\nimport { SymbolTableRecord } from \"./SymbolTableRecord\";\r\n\r\n@Factory\r\nexport class SymbolTable extends CADObject\r\n{\r\n /**\r\n * 符号列表,支持迭代,请勿直接修改数据\r\n */\r\n @observable Symbols = new Map();\r\n\r\n Add(record: SymbolTableRecord, isCheckObjectCleanly = true): Status\r\n {\r\n if (this.Symbols.has(record.Name))\r\n return Status.DuplicateRecordName;\r\n\r\n if (!isCheckObjectCleanly)\r\n record.SetDefaultDb(this._db);\r\n else if (this._db)\r\n record.SetOwnerDatabase(this._db);\r\n\r\n record.Owner = this.objectId;\r\n\r\n this.Symbols.set(record.Name, record);\r\n return Status.True;\r\n }\r\n\r\n Remove(record: SymbolTableRecord)\r\n {\r\n let selfRecord = this.Symbols.get(record.Name);\r\n if (selfRecord === record)\r\n {\r\n let undoRec = this.UndoRecord();\r\n if (undoRec)\r\n {\r\n let hisRec = new HistorycRecord();\r\n hisRec.undoData = new CreateObjectData(selfRecord).Save();\r\n hisRec.redoData = new RemoveObjectData(selfRecord.Name);\r\n\r\n undoRec.WriteObjectHistoryPath(this, hisRec);\r\n }\r\n\r\n this.Symbols.delete(record.Name);\r\n }\r\n }\r\n\r\n GetAt(name: string): SymbolTableRecord | undefined\r\n {\r\n return this.Symbols.get(name);\r\n }\r\n\r\n Has(name: string)\r\n {\r\n return this.Symbols.has(name);\r\n }\r\n\r\n AllocateName(name: string): string\r\n {\r\n for (let i = 1; i < this.Symbols.size + 2; i++)\r\n {\r\n let newName = `${name}${i}`;\r\n if (!this.Has(newName))\r\n return newName;\r\n }\r\n }\r\n\r\n ChangeRecordName(record: SymbolTableRecord, newName: string): boolean\r\n {\r\n if (this.Has(newName)) return false;\r\n this.Symbols.delete(record.Name);\r\n this.Symbols.set(newName, record);\r\n return true;\r\n }\r\n\r\n //#region -------------------------File-------------------------\r\n ReadFile(file: CADFiler)\r\n {\r\n super.ReadFile(file);\r\n let ver = file.Read();\r\n let count = file.Read();\r\n this.Symbols.clear();\r\n for (let i = 0; i < count; i++)\r\n {\r\n if (ver === 1)\r\n file.Read();\r\n let record = file.ReadObject() as SymbolTableRecord;\r\n if (record)\r\n this.Symbols.set(record.Name, record);\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.Symbols.size);\r\n for (let [key, record] of this.Symbols)\r\n {\r\n file.WriteObject(record);\r\n }\r\n }\r\n\r\n //局部撤销\r\n ApplyPartialUndo(undoData: CADObject)\r\n {\r\n if (undoData instanceof CreateObjectData)\r\n {\r\n let record = undoData.GetObject(this._db) as SymbolTableRecord;\r\n this.Symbols.set(record.Name, record);\r\n undoData.CreateObject = record;\r\n }\r\n else if (undoData instanceof RemoveObjectData)\r\n {\r\n let obj = this.Symbols.get(undoData.Index as string);\r\n this.Symbols.delete(undoData.Index as string);\r\n undoData.RemoveObject = obj;\r\n }\r\n // else if (undoData instanceof RenameObjectData)\r\n // {\r\n // let record = this.GetAt(undoData._oldName);\r\n // this.Symbols.delete(undoData._oldName);\r\n // this.Symbols.set(undoData._newName, record);\r\n // }\r\n }\r\n}\r\n","import { SymbolTable } from \"./SymbolTable\";\r\nimport { Factory } from \"./CADFactory\";\r\n\r\n@Factory\r\nexport class BlockTable extends SymbolTable\r\n{\r\n\r\n}\r\n","import { Factory } from './CADFactory';\r\nimport { CADFiler } from './CADFiler';\r\nimport { CADObject } from './CADObject';\r\nimport { CreateObjectData } from './CreateObjectData';\r\nimport { HistorycRecord } from './HistorycRecord';\r\nimport { RemoveObjectData } from './RemoveObjectData';\r\n\r\n@Factory\r\nexport class ObjectCollection extends CADObject\r\n{\r\n Objects: T[] = [];\r\n\r\n Destroy()\r\n {\r\n super.Destroy();\r\n this.Objects.length = 0;\r\n }\r\n\r\n /**\r\n * @param object\r\n * @param isCheckObjectCleanly 检查对象是否清白,如果对象不清白,那么将会被拒绝加入到集合.\r\n */\r\n Append(object: T, isCheckObjectCleanly = true)\r\n {\r\n if (isCheckObjectCleanly && object.Id)\r\n {\r\n console.warn(\"尝试加入已经分配id的对象!\");\r\n return;\r\n }\r\n if (this._db && !object.Id)\r\n object.SetOwnerDatabase(this._db);\r\n else\r\n object.SetDatabase(this._db);\r\n\r\n this.Objects.push(object);\r\n this.AppendEvent(object);\r\n\r\n let undoRec = this.UndoRecord();\r\n if (undoRec)\r\n {\r\n let hisRec = new HistorycRecord();\r\n hisRec.redoData = new CreateObjectData(object);\r\n hisRec.undoData = new RemoveObjectData(this.Objects.length - 1);\r\n\r\n undoRec.WriteObjectHistoryPath(this, hisRec);\r\n }\r\n\r\n return object.Id;\r\n }\r\n AppendEvent(obj: T)\r\n {\r\n\r\n }\r\n Remove(obj: T)\r\n {\r\n let index = this.Objects.indexOf(obj);\r\n this.RemoveIndex(index);\r\n }\r\n\r\n RemoveIndex(index: number)\r\n {\r\n if (index === -1)\r\n return;\r\n let obj = this.Objects[index];\r\n this.Objects.splice(index, 1);\r\n\r\n let undoRec = this.UndoRecord();\r\n if (undoRec)\r\n {\r\n let hisRec = new HistorycRecord();\r\n hisRec.undoData = new CreateObjectData(obj).Save();\r\n hisRec.redoData = new RemoveObjectData(index);\r\n\r\n undoRec.WriteObjectHistoryPath(this, hisRec);\r\n }\r\n if (obj)\r\n obj.GoodBye();\r\n\r\n return obj;\r\n }\r\n\r\n //#region -----------------------------File-----------------------------\r\n //对象应该实现dataIn和DataOut的方法,为了对象的序列化和反序列化\r\n\r\n //对象从文件中读取数据,初始化自身\r\n ReadFile(file: CADFiler)\r\n {\r\n this.Objects.length = 0;\r\n super.ReadFile(file);\r\n let cout = file.Read();\r\n for (let i = 0; i < cout; i++)\r\n {\r\n let obj = file.ReadObject() as T;\r\n if (obj) this.Objects.push(obj);\r\n }\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n super.WriteFile(file);\r\n file.Write(this.Objects.length);\r\n for (let obj of this.Objects)\r\n file.WriteObject(obj);\r\n }\r\n //局部撤销\r\n ApplyPartialUndo(undoData: CADObject)\r\n {\r\n if (undoData instanceof CreateObjectData)\r\n {\r\n let obj = undoData.GetObject(this._db) as T;\r\n this.Objects.push(obj);\r\n this.AppendEvent(obj);\r\n undoData.CreateObject = obj;\r\n }\r\n else if (undoData instanceof RemoveObjectData)\r\n {\r\n let obj = this.RemoveIndex(undoData.Index);\r\n undoData.RemoveObject = obj;\r\n }\r\n }\r\n //#endregion -----------------------------File End-----------------------------\r\n}\r\n","import { end } from 'xaop';\r\nimport { Status } from '../Common/Status';\r\nimport { Factory } from './CADFactory';\r\nimport { CADFiler } from './CADFiler';\r\nimport { Database } from './Database';\r\nimport { Entity } from './Entity/Entity';\r\nimport { ObjectCollection } from './ObjectCollection';\r\nimport { SymbolTableRecord } from './SymbolTableRecord';\r\n\r\n@Factory\r\nexport class BlockTableRecord extends SymbolTableRecord\r\n{\r\n EntityCol = new ObjectCollection();\r\n constructor()\r\n {\r\n super();\r\n end(this.EntityCol, this.EntityCol.AppendEvent, (e: Entity) => { this.AppendEvent(e); });\r\n }\r\n\r\n SetOwnerDatabase(db: Database)\r\n {\r\n super.SetOwnerDatabase(db);\r\n this.EntityCol.SetOwnerDatabase(db);\r\n return this;\r\n }\r\n\r\n get Entitys()\r\n {\r\n return this.EntityCol.Objects;\r\n }\r\n Add(obj: Entity, isCheckObjectCleanly = true): Status\r\n {\r\n this.Append(obj, isCheckObjectCleanly);\r\n return Status.True;\r\n }\r\n\r\n Append(entity: Entity, isCheckObjectCleanly = true)\r\n {\r\n this.EntityCol.Append(entity, isCheckObjectCleanly);\r\n entity.Owner = this.objectId;\r\n }\r\n\r\n AppendEvent(entity: Entity)\r\n {\r\n }\r\n\r\n Remove(entity: Entity)\r\n {\r\n this.EntityCol.Remove(entity);\r\n }\r\n\r\n Destroy()\r\n {\r\n super.Destroy();\r\n this.EntityCol.Destroy();\r\n }\r\n\r\n //#region -------------------------File-------------------------\r\n //对象从文件中读取数据,初始化自身\r\n ReadFile(file: CADFiler)\r\n {\r\n let ver = file.Read();\r\n super.ReadFile(file);\r\n this.EntityCol.ReadFile(file);\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(1);\r\n super.WriteFile(file);\r\n this.EntityCol.WriteFile(file);\r\n }\r\n //#endregion\r\n}\r\n","import { AllObjectData } from \"./AllObjectData\";\r\nimport { Factory } from './CADFactory';\r\nimport { CADFiler } from './CADFiler';\r\nimport { HistorycRecord } from './HistorycRecord';\r\nimport { ObjectId } from './ObjectId';\r\n\r\n@Factory\r\nexport class ObjectAllDataHistoryRecord extends HistorycRecord\r\n{\r\n constructor(public RecordEntityId?: ObjectId)\r\n {\r\n super();\r\n if (RecordEntityId)\r\n this.undoData = new AllObjectData(this.RecordEntityId.Object);\r\n }\r\n\r\n WriteRedo()\r\n {\r\n this.redoData = new AllObjectData(this.RecordEntityId.Object);\r\n }\r\n\r\n //#region -------------------------File-------------------------\r\n //对象从文件中读取数据,初始化自身\r\n ReadFile(file: CADFiler)\r\n {\r\n let ver = file.Read();\r\n super.ReadFile(file);\r\n this.RecordEntityId = file.ReadObjectId();\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(1);\r\n super.WriteFile(file);\r\n file.WriteObjectId(this.RecordEntityId);\r\n }\r\n //#endregion\r\n}\r\n","import { Factory } from './CADFactory';\r\nimport { CADFiler } from './CADFiler';\r\nimport { CADObject } from './CADObject';\r\nimport { CreateObjectData } from './CreateObjectData';\r\nimport { EraseEntityData } from \"./EraseEntityData\";\r\nimport { HistorycRecord } from './HistorycRecord';\r\nimport { ObjectAllDataHistoryRecord } from './ObjectAllDataHistoryRecord';\r\nimport { ObjectId } from './ObjectId';\r\n\r\n/**\r\n * 命令的历史记录\r\n */\r\n@Factory\r\nexport class CommandHistoryRecord extends CADObject\r\n{\r\n constructor(public CommandName = \"\")\r\n {\r\n super();\r\n }\r\n //历史记录表\r\n private _HistoryList = new Map();\r\n private _CreateObjects = new Map();\r\n\r\n get HistoryList(): Map\r\n {\r\n return this._HistoryList;\r\n }\r\n\r\n private GetObjectHistoryList(id: ObjectId)\r\n {\r\n if (!this._HistoryList.has(id))\r\n this._HistoryList.set(id, []);\r\n return this._HistoryList.get(id);\r\n }\r\n\r\n EndCommand()\r\n {\r\n for (let [id, hrs] of this._HistoryList)\r\n {\r\n let hr = this.GetObjectAllDataRecord(hrs);\r\n if (hr)\r\n hr.WriteRedo();\r\n }\r\n\r\n for (let [, hr] of this._CreateObjects)\r\n {\r\n let h = hr.redoData as CreateObjectData;\r\n h.Save();\r\n }\r\n }\r\n\r\n //获取对象快照记录(如果有的话)\r\n GetObjectAllDataRecord(historyList: HistorycRecord[]): ObjectAllDataHistoryRecord | undefined\r\n {\r\n if (historyList.length > 0)\r\n {\r\n let hr = historyList[historyList.length - 1];\r\n if (hr instanceof ObjectAllDataHistoryRecord)\r\n return hr;\r\n }\r\n }\r\n\r\n //对象写入历史记录\r\n WriteObjectHistoryPath(obj: CADObject, history: HistorycRecord)\r\n {\r\n if (!obj || this._CreateObjects.has(obj))//某些时候obj可能为空\r\n return;\r\n\r\n let hrs = this.GetObjectHistoryList(obj.Id);\r\n if (this.GetObjectAllDataRecord(hrs))\r\n return;\r\n\r\n if (history.redoData instanceof CreateObjectData)\r\n this._CreateObjects.set(history.redoData.Object, history);\r\n\r\n hrs.push(history);\r\n }\r\n\r\n WriteObjectSnapshoot(obj: CADObject): void\r\n {\r\n if (!obj.Id)\r\n {\r\n console.warn(\"错误!CreateObjectHistory\");\r\n return;\r\n }\r\n\r\n if (this._CreateObjects.has(obj))\r\n return;\r\n\r\n let hrs = this.GetObjectHistoryList(obj.Id);\r\n if (this.GetObjectAllDataRecord(hrs))\r\n return;\r\n\r\n let hr = new ObjectAllDataHistoryRecord(obj.Id);\r\n hrs.push(hr);\r\n }\r\n\r\n CreateEraseHistory(obj: CADObject, isErase: boolean)\r\n {\r\n let hr = new HistorycRecord();\r\n hr.undoData = new EraseEntityData(!isErase);\r\n hr.redoData = new EraseEntityData(isErase);\r\n this.WriteObjectHistoryPath(obj, hr);\r\n }\r\n\r\n //#region -------------------------File-------------------------\r\n //对象应该实现dataIn和DataOut的方法,为了对象的序列化和反序列化\r\n\r\n\r\n //对象从文件中读取数据,初始化自身\r\n ReadFile(file: CADFiler)\r\n {\r\n let ver = file.Read();\r\n this.CommandName = file.Read();\r\n let cout = file.Read();\r\n\r\n this._HistoryList.clear();\r\n for (let i = 0; i < cout; i++)\r\n {\r\n let id = file.ReadObjectId();\r\n let length = file.Read();\r\n let hrs: HistorycRecord[] = [];\r\n this._HistoryList.set(id, hrs);\r\n for (let j = 0; j < length; j++)\r\n {\r\n let hr = file.ReadObject() as HistorycRecord;\r\n hrs.push(hr);\r\n }\r\n }\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(1);\r\n file.Write(this.CommandName);\r\n file.Write(this._HistoryList.size);\r\n for (let [id, hrs] of this._HistoryList)\r\n {\r\n file.WriteObjectId(id);\r\n file.Write(hrs.length);\r\n for (let hr of hrs)\r\n {\r\n file.WriteObject(hr);\r\n }\r\n }\r\n }\r\n //#endregion\r\n}\r\n","import { RenderType } from \"../../GraphicsSystem/RenderType\";\r\nimport { Factory } from \"../CADFactory\";\r\nimport { CADFiler } from \"../CADFiler\";\r\nimport { CADObject } from \"../CADObject\";\r\n\r\n@Factory\r\nexport class CameraSnapshootRecord extends CADObject\r\n{\r\n Name: string = \"\";\r\n _CameraData = new CADFiler;\r\n\r\n get RenderType(): RenderType\r\n {\r\n return this._CameraData.Data[7];\r\n }\r\n\r\n //#region -------------------------File-------------------------\r\n\r\n //对象从文件中读取数据,初始化自身\r\n ReadFile(file: CADFiler)\r\n {\r\n let ver = file.Read();\r\n this._CameraData.Data = file.Read();\r\n this.Name = file.Read();\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(1);\r\n file.Write(this._CameraData.Data);\r\n file.Write(this.Name);\r\n }\r\n //#endregion\r\n}\r\n","import { CADFiler } from \"./CADFiler\";\r\nimport { ObjectId, RelevancyType } from \"./ObjectId\";\r\n\r\nexport class DeepCloneFiler extends CADFiler\r\n{\r\n constructor(public idMaping = new Map())\r\n {\r\n super();\r\n }\r\n\r\n ReadObjectId()\r\n {\r\n let index = this.Read();\r\n if (index <= 0) return;\r\n\r\n let id = this.idMaping.get(index);\r\n if (id) return id;\r\n\r\n id = new ObjectId();\r\n this.idMaping.set(index, id);\r\n\r\n return id;\r\n }\r\n\r\n ReadSoftObjectId()\r\n {\r\n let id = this.ReadObjectId();\r\n if (id)\r\n id._RelevancyType = RelevancyType.Soft;\r\n return id;\r\n }\r\n\r\n ReadHardObjectId()\r\n {\r\n let id = this.ReadObjectId();\r\n if (id)\r\n id._RelevancyType = RelevancyType.Hard;\r\n return id;\r\n }\r\n\r\n hardObjectIds: Set = new Set();\r\n cloned: Set = new Set();\r\n WriteHardObjectId(id: ObjectId)\r\n {\r\n if (id && id.Index >= 100 && !this.cloned.has(id.Index)) //当存在id时,表示对象正在被拷贝,或者已经拷贝完成\r\n this.hardObjectIds.add(id.Index);\r\n\r\n return this.WriteObjectId(id);\r\n }\r\n}\r\n","import { Factory } from \"./CADFactory\";\r\nimport { GroupRecord } from \"./GroupTableRecord\";\r\nimport { ObjectCollection } from \"./ObjectCollection\";\r\nimport { CADFiler } from \"./CADFiler\";\r\nimport { Status } from \"../Common/Status\";\r\n\r\n@Factory\r\nexport class GroupTable extends ObjectCollection\r\n{\r\n\r\n Append(object: GroupRecord, isCheckObjectCleanly = true)\r\n {\r\n let id = super.Append(object, isCheckObjectCleanly);\r\n\r\n if (id)\r\n object.Owner = this.Id;\r\n\r\n return id;\r\n }\r\n\r\n Add(record: GroupRecord, isCheckObjectCleanly = true): Status\r\n {\r\n let id = this.Append(record, isCheckObjectCleanly);\r\n if (id)\r\n return Status.True;\r\n else\r\n return Status.False;\r\n }\r\n\r\n //对象从文件中读取数据,初始化自身\r\n ReadFile(file: CADFiler)\r\n {\r\n let ver = file.Read();\r\n super.ReadFile(file);\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(1);\r\n super.WriteFile(file);\r\n }\r\n //#endregion\r\n\r\n}\r\n","\r\nexport let CommandState = {\r\n CommandIng: false,\r\n};\r\n","import { LogEnable, ReportErrorWrap } from '../Common/Log';\r\nimport { Intent, Toaster } from '../Common/Toaster';\r\nimport { CommandState } from '../Editor/CommandState';\r\nimport { Factory } from './CADFactory';\r\nimport { CADFiler } from './CADFiler';\r\nimport { CADObject } from './CADObject';\r\nimport { CommandHistoryRecord } from './CommandHistoryRecord';\r\n\r\n/**\r\n * 历史记录管理\r\n *\r\n * 关于子命令标记:\r\n * 当子命令标记出现的时候,才允许出现局部撤销,否则命令执行中不允许撤销,触发命令重写了撤销和重做的事件.\r\n */\r\n@Factory\r\nexport class HistoricManage extends CADObject\r\n{\r\n curIndex: number = -1; //当前执行位置,也就是当前的状态, undo时,撤销当前状态,redo时,应用下一个状态\r\n lockIndex = -1; //锁定极限撤销索引(将无法在往前撤销)\r\n historyRecord: CommandHistoryRecord[] = []; //历史记录\r\n doing: boolean = false;//正在执行工作 例如: 文件读取中 撤销中 重做中\r\n Enable: boolean = true;\r\n\r\n _SignalCommandHistory: HistoricManage;\r\n\r\n constructor(public useSubCommand = true)\r\n {\r\n super();\r\n }\r\n\r\n Clear()\r\n {\r\n this.historyRecord.length = 0;\r\n this.curIndex = -1;\r\n }\r\n\r\n //对象从文件中读取数据,初始化自身\r\n ReadFile(file: CADFiler)\r\n {\r\n let ver = file.Read();\r\n this.curIndex = file.Read();\r\n let cout = file.Read();\r\n this.historyRecord = [];\r\n for (let i = 0; i < cout; i++)\r\n {\r\n this.historyRecord.push(file.ReadObject() as CommandHistoryRecord);\r\n }\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(1);\r\n file.Write(this.curIndex);\r\n file.Write(this.historyRecord.length);\r\n for (let rec of this.historyRecord)\r\n {\r\n file.WriteObject(rec);\r\n }\r\n }\r\n\r\n //命令正在当前状态\r\n get IsNow(): boolean\r\n {\r\n return this.historyRecord.length !== 0 && this.curIndex === this.historyRecord.length - 1;\r\n }\r\n\r\n get UndoData(): CommandHistoryRecord\r\n {\r\n if (this.doing || this.Enable === false)\r\n return undefined;\r\n if (!this.IsNow)\r\n {\r\n this.StartCmd(\"\");\r\n if (LogEnable.Display)\r\n console.warn(\"未标记命令!\");\r\n }\r\n\r\n if (!CommandState.CommandIng)\r\n {\r\n //避免用户心理负担,暂时关闭这个,使用遥测\r\n if (!ReportErrorWrap.IsProduction && ReportErrorWrap.ReportError)\r\n {\r\n ReportErrorWrap.ReportError(new Error().stack, \"命令未执行中,但是却产生了错误了记录!\");\r\n Toaster({\r\n message: \"警告:命令未执行中,但是却产生了错误了历史记录! (不会造成图纸错误,但是会影响撤销(Ctrl+Z)重做(Ctrl+Y),请与我们联系,将错误报告给我们)\",\r\n timeout: 5000,\r\n intent: Intent.WARNING,\r\n key: \"no_command_his\"\r\n });\r\n }\r\n // else jest会警告这个\r\n // console.error(\"命令未执行中,但是却产生了错误了记录!\");\r\n }\r\n\r\n if (this._SignalCommandHistory && CommandState.CommandIng)\r\n return this._SignalCommandHistory.UndoData;\r\n else\r\n return this.historyRecord[this.historyRecord.length - 1];\r\n }\r\n\r\n //开始子命令标记\r\n StartMark(subCommandName = \"\")\r\n {\r\n if (!this.useSubCommand)\r\n return;\r\n\r\n if (!this._SignalCommandHistory)\r\n this._SignalCommandHistory = new HistoricManage(false);\r\n\r\n this._SignalCommandHistory.EndCmd();\r\n this._SignalCommandHistory.StartCmd(subCommandName);\r\n }\r\n\r\n /**\r\n * 不要在命令中直接调用这个函数!\r\n * 请调用 commandMachine.CommandStart\r\n */\r\n StartCmd(cmdName: string)\r\n {\r\n if (cmdName === \"REDO\" || cmdName === \"U\") return;\r\n\r\n //删除当前状态以后的所有状态\r\n this.historyRecord.splice(this.curIndex + 1, this.historyRecord.length - (this.curIndex + 1));\r\n this.historyRecord.push(new CommandHistoryRecord(cmdName));\r\n this.curIndex = this.historyRecord.length - 1;\r\n }\r\n\r\n CurrentHasHistory(): boolean\r\n {\r\n let lastRec = this.historyRecord[this.curIndex];\r\n if (!lastRec) return false;\r\n this.MergeSubCommmand(lastRec);\r\n return lastRec.HistoryList.size > 0;\r\n }\r\n\r\n //结束当前的命令,返回是否写入历史记录\r\n EndCmd(): boolean\r\n {\r\n if (!this.IsNow)\r\n return false;\r\n let lastRec = this.historyRecord[this.curIndex];\r\n if (lastRec)\r\n {\r\n this.MergeSubCommmand(lastRec);\r\n lastRec.EndCommand();\r\n if (lastRec.HistoryList.size === 0)\r\n {\r\n this.historyRecord.pop();\r\n this.curIndex--;\r\n return false;\r\n }\r\n // else if (this.historyRecord.length > 20)//最大历史记录个数为20 (如果在这边直接删除记录,会导致临时编辑器错误)\r\n // {\r\n // this.historyRecord.shift();\r\n // this.curIndex--;\r\n // }\r\n else if (this.historyRecord.length !== 0 && this.historyRecord.length % 50 === 0)\r\n Toaster({\r\n message: `警告:已经有${this.historyRecord.length}个命令历史记录了,建议您使用PU命令进行清理,避免图纸卡顿和崩溃!`,\r\n timeout: 15000,\r\n intent: Intent.WARNING,\r\n });\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n /**\r\n * 获得这个命令修改的对象列表\r\n */\r\n get ChangeObjects(): Set\r\n {\r\n let lastRec = this.historyRecord[this.curIndex];\r\n\r\n let objects = new Set();\r\n if (lastRec)\r\n {\r\n this.MergeSubCommmand(lastRec);\r\n for (let [id] of lastRec.HistoryList)\r\n {\r\n objects.add(id.Object);\r\n }\r\n }\r\n return objects;\r\n }\r\n GetRangeChangeObject(startIndex: number, endIndex: number): Set\r\n {\r\n let objects = new Set();\r\n for (let i = startIndex; i < endIndex; i++)\r\n for (let [id] of this.historyRecord[i].HistoryList)\r\n objects.add(id.Object);\r\n return objects;\r\n }\r\n\r\n /**\r\n * 合并命令历史记录,因为命令记录器允许存在子记录,所以当命令结束时,应该把子记录合并到父记录中,子记录将被摧毁.\r\n */\r\n private MergeSubCommmand(lastRec: CommandHistoryRecord)\r\n {\r\n if (this._SignalCommandHistory)\r\n {\r\n for (let rc of this._SignalCommandHistory.historyRecord)\r\n {\r\n for (let [id, hrs] of rc.HistoryList)\r\n {\r\n if (id?.Object)//某些情况下可能为空\r\n for (let hr of hrs)\r\n lastRec.WriteObjectHistoryPath(id.Object, hr);\r\n }\r\n }\r\n this._SignalCommandHistory = undefined;\r\n }\r\n }\r\n\r\n Undo(): boolean\r\n {\r\n //如果命令执行中,那么进行局部撤销.\r\n if (CommandState.CommandIng && this.useSubCommand)\r\n {\r\n if (this._SignalCommandHistory)\r\n return this._SignalCommandHistory.Undo();\r\n return;\r\n }\r\n\r\n if (this.curIndex === this.lockIndex) return;//被锁定,无法撤销\r\n\r\n this.EndCmd();\r\n let historyRec = this.historyRecord[this.curIndex];\r\n if (!historyRec)\r\n return false;\r\n this.doing = true;\r\n for (let [id, recList] of historyRec.HistoryList)\r\n {\r\n for (let i = recList.length; i--;)\r\n {\r\n id?.Object?.ApplyPartialUndo(recList[i].undoData);\r\n }\r\n }\r\n this.UndoEvent(historyRec.CommandName, historyRec);\r\n this.curIndex--;\r\n this.doing = false;\r\n return true;\r\n }\r\n Redo()\r\n {\r\n //如果命令执行中,那么进行局部重做.\r\n if (CommandState.CommandIng && this.useSubCommand)\r\n {\r\n if (this._SignalCommandHistory)\r\n return this._SignalCommandHistory.Redo();\r\n return;\r\n }\r\n\r\n let historyRec = this.historyRecord[this.curIndex + 1];\r\n if (!historyRec)\r\n return false;\r\n this.doing = true;\r\n for (let [id, recList] of historyRec.HistoryList)\r\n {\r\n for (let rec of recList)\r\n {\r\n id.Object.ApplyPartialUndo(rec.redoData);\r\n }\r\n }\r\n this.RedoEvent(historyRec.CommandName, historyRec);\r\n this.curIndex++;\r\n this.doing = false;\r\n return true;\r\n }\r\n\r\n UndoEvent(cmdName: string, historyRec: CommandHistoryRecord)\r\n {\r\n }\r\n\r\n RedoEvent(cmdName: string, historyRec: CommandHistoryRecord)\r\n {\r\n }\r\n\r\n}\r\n","import { Box3, Color, Light as TLight, Vector3 } from 'three';\r\nimport { UpdateDraw } from '../../Common/Status';\r\nimport { ObjectSnapMode } from '../../Editor/ObjectSnapMode';\r\nimport { Box3Ext } from '../../Geometry/Box';\r\nimport { MoveMatrix } from '../../Geometry/GeUtils';\r\nimport { RenderType } from '../../GraphicsSystem/RenderType';\r\nimport { equaln } from '../../Nest/Common/Util';\r\nimport { AutoRecord } from '../AutoRecord';\r\nimport { Factory } from '../CADFactory';\r\nimport { CADFiler } from '../CADFiler';\r\nimport { CADObject } from '../CADObject';\r\nimport { Entity } from '../Entity/Entity';\r\n\r\n/**\r\n * 灯光实体基类\r\n */\r\n@Factory\r\nexport class Light extends Entity\r\n{\r\n OnlyRenderType = true;\r\n protected _Intensity: number = 2; //强度\r\n protected _LightColor: Color = new Color();//光源颜色\r\n @AutoRecord Temperature = 6500;//色温\r\n @AutoRecord IndirectLightingIntensity = 1; //0-200 间接光照强度\r\n //LightComponent extends LightComponentBase\r\n @AutoRecord SpecularScale = 1;//高光度范围 默认1 (物理)\r\n protected _ShowHelper = true;// Light.DefaultShowHelpr; 默认绘制的灯光总是有助手,避免让用户困惑\r\n protected _CaseShadow = true;//投射阴影\r\n protected _OpenLight = Light.DefaultOpenLight;//开灯\r\n static DefaultOpenLight = false;\r\n static DefaultCaseShadow = false;\r\n static DefaultShowHelpr = false;\r\n\r\n Clone()\r\n {\r\n return CADObject.prototype.Clone.call(this);\r\n }\r\n\r\n get CaseShadow() { return this._CaseShadow; }\r\n\r\n set CaseShadow(v: boolean)\r\n {\r\n if (v === this._CaseShadow) return;\r\n this.WriteAllObjectRecord();\r\n this._CaseShadow = v;\r\n this.Update();\r\n }\r\n\r\n get OpenLight() { return this._OpenLight; }\r\n\r\n set OpenLight(v: boolean)\r\n {\r\n if (v === this._OpenLight) return;\r\n this._OpenLight = v;\r\n this.Update();\r\n }\r\n\r\n //因为有set 所以必须11对应\r\n get Position()\r\n {\r\n return super.Position;\r\n }\r\n\r\n set Position(v: Vector3)\r\n {\r\n super.Position = v;\r\n this.Update(UpdateDraw.Geometry);\r\n }\r\n\r\n get Color()\r\n {\r\n return this._LightColor;\r\n }\r\n set Color(color: Color)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._LightColor = color;\r\n this.Update();\r\n }\r\n get ShowHelper()\r\n {\r\n return this._ShowHelper;\r\n }\r\n set ShowHelper(v: boolean)\r\n {\r\n if (v === this._ShowHelper) return;\r\n this.WriteAllObjectRecord();\r\n this._ShowHelper = v;\r\n this.Update();\r\n }\r\n\r\n get BoundingBoxInOCS()\r\n {\r\n return new Box3Ext(new Vector3(-0.05, -0.05, -0.05), new Vector3(0.05, 0.05, 0.05));\r\n }\r\n\r\n get BoundingBox()\r\n {\r\n return new Box3().setFromCenterAndSize(this.Position, new Vector3(0.1, 0.1, 0.1));\r\n }\r\n\r\n GetObjectSnapPoints(\r\n snapMode: ObjectSnapMode,\r\n pickPoint: Vector3,\r\n lastPoint: Vector3\r\n ): Vector3[]\r\n {\r\n switch (snapMode)\r\n {\r\n case ObjectSnapMode.End:\r\n return this.GetGripPoints();\r\n }\r\n return [];\r\n }\r\n GetGripPoints(): Array\r\n {\r\n return [this.Position];\r\n }\r\n\r\n MoveGripPoints(indexList: number[], vec: Vector3)\r\n {\r\n this.ApplyMatrix(MoveMatrix(vec));\r\n this.Update();\r\n }\r\n UpdateDrawObject(type: RenderType, en: TLight)\r\n {\r\n en.intensity = this.WebIntensity;\r\n en.color = this._LightColor;\r\n en.visible = this._OpenLight;\r\n }\r\n get Intensity()\r\n {\r\n return this._Intensity;\r\n }\r\n\r\n set Intensity(v: number)\r\n {\r\n if (equaln(v, this._Intensity, 0.01)) return;\r\n this.WriteAllObjectRecord();\r\n this._Intensity = v;\r\n this.Update();\r\n }\r\n\r\n get WebIntensity()\r\n {\r\n return this._Intensity;\r\n }\r\n protected _ReadFile(file: CADFiler)\r\n {\r\n super._ReadFile(file);\r\n let ver = file.Read();\r\n this._LightColor = new Color(file.Read());\r\n this._Intensity = file.Read();\r\n if (typeof this._Intensity === \"string\")\r\n this._Intensity = parseFloat(this._Intensity);\r\n this._ShowHelper = file.Read();\r\n\r\n if (ver > 1)\r\n {\r\n this._LightColor.r = file.Read();\r\n this._LightColor.g = file.Read();\r\n this._LightColor.b = file.Read();\r\n\r\n this.Temperature = file.Read();\r\n this.IndirectLightingIntensity = file.Read();\r\n this.SpecularScale = file.Read();\r\n this._CaseShadow = file.Read();\r\n }\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._LightColor.getStyle());\r\n file.Write(this._Intensity);\r\n file.Write(this._ShowHelper);\r\n\r\n //ver2\r\n {\r\n file.Write(this._LightColor.r);\r\n file.Write(this._LightColor.g);\r\n file.Write(this._LightColor.b);\r\n\r\n file.Write(this.Temperature);\r\n file.Write(this.IndirectLightingIntensity);\r\n file.Write(this.SpecularScale);\r\n file.Write(this._CaseShadow);\r\n }\r\n }\r\n}\r\n","import { AmbientLight as TAmbientLight, Object3D } from \"three\";\r\nimport { RenderType } from \"../../GraphicsSystem/RenderType\";\r\nimport { Factory } from \"../CADFactory\";\r\nimport { Light } from \"./Light\";\r\n\r\n@Factory\r\nexport class AmbientLight extends Light\r\n{\r\n protected _Intensity = 0.9;\r\n protected _OpenLight = true;//开灯\r\n protected _CaseShadow: boolean = false;\r\n protected InitDrawObject(renderType: RenderType = RenderType.Wireframe): Object3D\r\n {\r\n let light = new TAmbientLight(this.Color, this._Intensity);\r\n return light;\r\n }\r\n}\r\n","import { Color, DirectionalLight, DirectionalLightHelper, LineBasicMaterial, Matrix4, Mesh, SphereBufferGeometry } from \"three\";\r\n\r\nexport class SunLightHelper extends DirectionalLightHelper\r\n{\r\n light: DirectionalLight;\r\n\r\n children: [Mesh];\r\n size: number;\r\n /**\r\n * @default undefined\r\n */\r\n color: Color | string | number;\r\n matrix: Matrix4;\r\n\r\n constructor(light: DirectionalLight, size: number, color?: Color)\r\n {\r\n const geometry = new SphereBufferGeometry(1, 16, 16);\r\n const material = new LineBasicMaterial({ fog: false });\r\n material.color = light.color;\r\n super(light, size, color);\r\n\r\n this.children[0].geometry = geometry.scale(400, 400, 400);\r\n this.children[0].material = material;\r\n\r\n this.light = light;\r\n this.color = color;\r\n }\r\n\r\n /**\r\n * @default false\r\n */\r\n matrixAutoUpdate: boolean;\r\n}\r\n","import { DirectionalLight as TDirectionalLight, Group, MathUtils, Matrix3, Matrix4, Object3D, Vector2, Vector3 } from \"three\";\r\nimport { UpdateDraw } from \"../../Common/Status\";\r\nimport { equalv3 } 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 { Light } from \"./Light\";\r\nimport { SunLightHelper } from \"./SunLightHelper\";\r\n\r\n/**\r\n * 平行光源\r\n */\r\n@Factory\r\nexport class DirectionalLight extends Light\r\n{\r\n protected _Intensity: number = 50; //强度\r\n //光源源角度 0-50\r\n @AutoRecord LightSourceAngle = 0.5357;\r\n //源软角度角度\r\n @AutoRecord LightSourceSoftAngle = 0;\r\n\r\n OnlyRenderType = true;\r\n private _Target = new Vector3();\r\n protected _ShowHelper = false;\r\n protected _OpenLight = true;//开灯\r\n\r\n constructor()\r\n {\r\n super();\r\n this.SpecularScale = 0;//高光度范围 默认0 关闭太阳光反射\r\n }\r\n\r\n //避免被删除\r\n Erase(isErase: boolean = true)\r\n {\r\n this.ShowHelper = !isErase;\r\n }\r\n\r\n /**\r\n * @param theta 身体旋转 角度(deg)\r\n * @param phi 头部旋转 角度(deg)\r\n */\r\n SetRotate(thetaDeg: number, phiDeg: number)\r\n {\r\n let phi = (180 - phiDeg) * MathUtils.DEG2RAD;\r\n\r\n let v = new Vector3(Math.cos(phi), 0, Math.sin(phi));\r\n\r\n let r = new Matrix3().rotate(MathUtils.DEG2RAD * thetaDeg);\r\n\r\n v.applyMatrix3(r);\r\n\r\n this.WriteAllObjectRecord();\r\n this._Target.setFromMatrixPosition(this._Matrix).sub(v);\r\n }\r\n\r\n get Target() { return this._Target.clone(); }\r\n set Target(p: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n if (!equalv3(p, this.Position))\r\n {\r\n this._Target.copy(p);\r\n this.Update();\r\n }\r\n }\r\n get WebIntensity()\r\n {\r\n let x = this._Intensity / 150;\r\n x = Math.pow(x, 0.4);\r\n return x * 1.4; // 7/5=1.25\r\n }\r\n\r\n ApplyMatrix(m: Matrix4)\r\n {\r\n super.ApplyMatrix(m);\r\n this._Target.applyMatrix4(m);\r\n this.Update(UpdateDraw.Geometry);\r\n return this;\r\n }\r\n GetGripPoints(): Array\r\n {\r\n if (this.ShowHelper)\r\n return [this.Position, this._Target];\r\n else\r\n return [];\r\n }\r\n MoveGripPoints(indexList: number[], vec: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n if (indexList[0] === 0)\r\n this.Position = this.Position.add(vec);\r\n else\r\n this.Target = this.Target.add(vec);\r\n }\r\n protected InitDrawObject(renderType: RenderType = RenderType.Wireframe): Object3D\r\n {\r\n let lightGroup = new Group();\r\n let light = new TDirectionalLight(this._LightColor, this.WebIntensity);\r\n Object.defineProperty(light, \"castShadow\", {\r\n get: () => this.CaseShadow//HostApplicationServices.isShowLightShadow //太阳光无视这个配置!\r\n });\r\n light.shadow.camera.matrixAutoUpdate = true;\r\n light.shadow.camera.near = 1;\r\n light.shadow.camera.far = 100000;\r\n light.shadow.mapSize = new Vector2(2048, 2048);\r\n let helper = new SunLightHelper(light, 500);\r\n helper.lightPlane.matrixAutoUpdate = true;\r\n lightGroup.add(light, helper);\r\n\r\n lightGroup.matrixAutoUpdate = false;\r\n lightGroup.matrix.copy(this._Matrix);\r\n lightGroup.updateMatrixWorld(true);\r\n this.UpdateDrawObject(renderType, lightGroup);\r\n return lightGroup;\r\n }\r\n UpdateDrawObject(type: RenderType, en: Object3D)\r\n {\r\n let light = en.children[0] as TDirectionalLight;\r\n super.UpdateDrawObject(type, light);\r\n light.target.position.copy(this._Target);\r\n light.target.updateMatrix();\r\n light.target.updateMatrixWorld(true);\r\n\r\n en.updateMatrixWorld(true);\r\n\r\n let helper = en.children[1] as SunLightHelper;\r\n helper.visible = this._ShowHelper;\r\n if (this._ShowHelper)\r\n {\r\n helper.update();\r\n helper.matrix = light.matrix;\r\n helper.targetLine.updateMatrix();\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();\r\n this._Target.fromArray(file.Read());\r\n\r\n if (ver > 1)\r\n {\r\n this.LightSourceAngle = file.Read();\r\n this.LightSourceSoftAngle = file.Read();\r\n }\r\n }\r\n WriteFile(file: CADFiler)\r\n {\r\n super.WriteFile(file);\r\n file.Write(2);//ver\r\n file.Write(this._Target.toArray());\r\n\r\n //ver2\r\n file.Write(this.LightSourceAngle);\r\n file.Write(this.LightSourceSoftAngle);\r\n }\r\n}\r\n","import { Color, HemisphereLight as THemisphereLight, Light as TLight, Object3D } from \"three\";\r\nimport { RenderType } from \"../../GraphicsSystem/RenderType\";\r\nimport { AutoRecord } from \"../AutoRecord\";\r\nimport { Factory } from \"../CADFactory\";\r\nimport { CADFiler } from \"../CADFiler\";\r\nimport { Light } from \"./Light\";\r\n\r\n@Factory\r\nexport class HemisphereLight extends Light\r\n{\r\n private _GroundColor = new Color(); //UE有这个属性 但是默认是黑的\r\n protected _Intensity = 1;\r\n @AutoRecord AutoExposure = false;//自动曝光\r\n @AutoRecord ExposureCompensation = 1;//默认为1\r\n protected _OpenLight = true;//开灯\r\n\r\n get GroundColor() { return this._GroundColor; }\r\n\r\n set GroundColor(color: Color)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._GroundColor = color;\r\n this.Update();\r\n }\r\n\r\n get WebIntensity()\r\n {\r\n return Math.min(this._Intensity, 4) / 5;\r\n }\r\n\r\n protected InitDrawObject(renderType: RenderType = RenderType.Wireframe): Object3D\r\n {\r\n let light = new THemisphereLight(this.Color, this._LightColor, this.WebIntensity);\r\n return light;\r\n }\r\n\r\n UpdateDrawObject(type: RenderType, en: TLight)\r\n {\r\n super.UpdateDrawObject(type, en);\r\n let lg = en as THemisphereLight;\r\n lg.groundColor = this._GroundColor;\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._GroundColor.fromArray(file.Read());\r\n\r\n if (ver > 1)\r\n {\r\n this.AutoExposure = file.Read();\r\n this.ExposureCompensation = file.Read();\r\n }\r\n\r\n }\r\n\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n super.WriteFile(file);\r\n file.Write(2);//ver\r\n file.Write(this._GroundColor.toArray());\r\n\r\n //ver2\r\n file.Write(this.AutoExposure);\r\n file.Write(this.ExposureCompensation);\r\n }\r\n}\r\n","import { SymbolTable } from \"./SymbolTable\";\r\nimport { PhysicalMaterialRecord } from \"./PhysicalMaterialRecord\";\r\n\r\nexport class MaterialTable extends SymbolTable\r\n{\r\n\r\n get Materials()\r\n {\r\n return this.Symbols as Map;\r\n }\r\n\r\n Remove(record: PhysicalMaterialRecord)\r\n {\r\n return super.Remove(record);\r\n }\r\n\r\n GetAt(name: string): PhysicalMaterialRecord | undefined\r\n {\r\n return super.GetAt(name) as PhysicalMaterialRecord;\r\n }\r\n\r\n Has(name: string)\r\n {\r\n return super.Has(name);\r\n }\r\n\r\n AllocateName(name: string = \"材质\"): string\r\n {\r\n return super.AllocateName(name);\r\n }\r\n}\r\n","import { Status } from \"../../Common/Status\";\r\nimport { Factory } from \"../CADFactory\";\r\nimport { ObjectCollection } from \"../ObjectCollection\";\r\nimport { ProcessingGroupRecord } from \"./ProcessingGroupRecord\";\r\n\r\n@Factory\r\nexport class ProcessingGroupTable extends ObjectCollection\r\n{\r\n Append(object: ProcessingGroupRecord, isCheckObjectCleanly = true)\r\n {\r\n let id = super.Append(object, isCheckObjectCleanly);\r\n\r\n if (id)\r\n object.Owner = this.Id;\r\n\r\n return id;\r\n }\r\n\r\n Add(record: ProcessingGroupRecord, isCheckObjectCleanly = true): Status\r\n {\r\n let id = this.Append(record, isCheckObjectCleanly);\r\n if (id)\r\n return Status.True;\r\n else\r\n return Status.False;\r\n }\r\n\r\n Remove(record: ProcessingGroupRecord)\r\n {\r\n return super.Remove(record);\r\n }\r\n}\r\n","import { Factory } from \"../CADFactory\";\r\nimport { ObjectCollection } from \"../ObjectCollection\";\r\nimport { TemplateRecord } from \"./TemplateRecord\";\r\nimport { Status } from \"../../Common/Status\";\r\n\r\n@Factory\r\nexport class TemplateTable extends ObjectCollection\r\n{\r\n Append(object: TemplateRecord, isCheckObjectCleanly = true)\r\n {\r\n let id = super.Append(object, isCheckObjectCleanly);\r\n\r\n if (id)\r\n object.Owner = this.Id;\r\n\r\n return id;\r\n }\r\n\r\n Add(record: TemplateRecord, isCheckObjectCleanly = true): Status\r\n {\r\n let id = this.Append(record, isCheckObjectCleanly);\r\n if (id)\r\n return Status.True;\r\n else\r\n return Status.False;\r\n }\r\n}\r\n","import { MirroredRepeatWrapping, Texture, Wrapping } from 'three';\r\nimport { AutoRecord } from './AutoRecord';\r\nimport { Factory } from './CADFactory';\r\nimport { CADFiler } from './CADFiler';\r\nimport { SymbolTableRecord } from './SymbolTableRecord';\r\n\r\n/**\r\n * 数据化的贴图类.实现了序列化.\r\n */\r\n@Factory\r\nexport class TextureTableRecord extends SymbolTableRecord\r\n{\r\n private wrapS: Wrapping = MirroredRepeatWrapping;//横向(水平)平铺\r\n private wrapT: Wrapping = MirroredRepeatWrapping;//竖向(垂直)平铺\r\n @AutoRecord repeatX: number = 1;//这里已经变成了贴图的尺寸了\r\n @AutoRecord repeatY: number = 1;\r\n @AutoRecord rotation: number = 0;//旋转 弧度deg\r\n @AutoRecord imageUrl: string = \"\";\r\n\r\n @AutoRecord moveX = 0;//材质位移\r\n @AutoRecord moveY = 0;\r\n\r\n @AutoRecord imgUrl: string = \"\";\r\n\r\n set WrapS(wrap: Wrapping)\r\n {\r\n if (wrap !== this.wrapS)\r\n {\r\n this.WriteAllObjectRecord();\r\n this.wrapS = wrap;\r\n }\r\n }\r\n get WrapS() { return this.wrapS; };\r\n get WrapT() { return this.wrapT; };\r\n\r\n set WrapT(wrap: Wrapping)\r\n {\r\n if (wrap !== this.wrapT)\r\n {\r\n this.WriteAllObjectRecord();\r\n this.wrapT = wrap;\r\n }\r\n }\r\n\r\n\r\n private texture: Texture = new Texture();\r\n async Update()\r\n {\r\n return \"\";\r\n }\r\n\r\n private waits: Function[] = [];\r\n async WaitUpdate()\r\n {\r\n if (this.texture.image) return;\r\n let p = new Promise((res, rej) =>\r\n {\r\n this.waits.push(res);\r\n });\r\n return p;\r\n }\r\n GetThreeTexture()\r\n {\r\n return this.texture;\r\n }\r\n\r\n //#region -------------------------File-------------------------\r\n ReadFile(file: CADFiler)\r\n {\r\n super.ReadFile(file);\r\n let ver = file.Read();\r\n this.wrapS = file.Read();\r\n this.wrapT = file.Read();\r\n this.repeatX = file.Read();\r\n this.repeatY = file.Read();\r\n this.rotation = file.Read();\r\n this.imageUrl = file.Read();\r\n\r\n if (ver > 1)\r\n {\r\n this.moveX = file.Read();\r\n this.moveY = file.Read();\r\n }\r\n\r\n this.Update();\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n super.WriteFile(file);\r\n file.Write(2);\r\n\r\n file.Write(this.wrapS);\r\n file.Write(this.wrapT);\r\n file.Write(this.repeatX);\r\n file.Write(this.repeatY);\r\n file.Write(this.rotation);\r\n file.Write(this.imageUrl);\r\n\r\n file.Write(this.moveX);\r\n file.Write(this.moveY);\r\n }\r\n //#endregion\r\n}\r\n","import { MathUtils } from \"three\";\r\nimport { Factory } from \"./CADFactory\";\r\nimport { SymbolTable } from \"./SymbolTable\";\r\nimport { TextureTableRecord } from \"./Texture\";\r\n\r\n@Factory\r\nexport class TextureTable extends SymbolTable\r\n{\r\n AllocateName()\r\n {\r\n do\r\n {\r\n let name = MathUtils.generateUUID();\r\n if (!this.Has(name))\r\n return name;\r\n } while (true);\r\n }\r\n get Textures(): Map\r\n {\r\n return this.Symbols as Map;\r\n }\r\n}\r\n","import { DeepCloneFiler } from \"./DeepCloneFiler\";\r\nimport { ObjectId } from \"./ObjectId\";\r\n\r\nexport class WblockCloneFiler extends DeepCloneFiler\r\n{\r\n\r\n}\r\n\r\n/**\r\n * 用于插入图纸,对所有的软引用变成硬引用,以保证所有的关联对象都能被插入进来\r\n */\r\nexport class WblockCloneFiler2 extends DeepCloneFiler\r\n{\r\n WriteObjectId(id: ObjectId): this\r\n {\r\n if (id && id.Index >= 100 && !this.cloned.has(id.Index)) //当存在id时,表示对象正在被拷贝,或者已经拷贝完成\r\n this.hardObjectIds.add(id.Index);\r\n return super.WriteObjectId(id);\r\n }\r\n}\r\n","import { MirroredRepeatWrapping, Vector3 } from 'three';\r\nimport { HostApplicationServices } from '../ApplicationServices/HostApplicationServices';\r\nimport { DuplicateRecordCloning } from '../Common/Status';\r\nimport { BlockTableRecord } from './BlockTableRecord';\r\nimport { Factory } from './CADFactory';\r\nimport { CADFiler } from './CADFiler';\r\nimport { CADObject } from './CADObject';\r\nimport { CameraSnapshootRecord } from './CameraSnapshoot/CameraSnapshootRecord';\r\nimport { DeepCloneFiler } from './DeepCloneFiler';\r\nimport { Entity } from './Entity/Entity';\r\nimport { GroupTable } from './GroupTable';\r\nimport { HistoricManage } from './HistoricManage';\r\nimport { IdMaping } from './IdMaping';\r\nimport { AmbientLight } from './Lights/AmbientLight';\r\nimport { DirectionalLight } from './Lights/DirectionalLight';\r\nimport { HemisphereLight } from './Lights/HemisphereLight';\r\nimport { Light } from './Lights/Light';\r\nimport { MaterialTable } from './MaterialTable';\r\nimport { ObjectId, RelevancyType } from './ObjectId';\r\nimport { OwnerContainer } from './OwnerContainer';\r\nimport { PhysicalMaterialRecord } from './PhysicalMaterialRecord';\r\nimport { ProcessingGroupTable } from './ProcessingGroup/ProcessingGroupTable';\r\nimport { SymbolTable } from './SymbolTable';\r\nimport { SymbolTableRecord } from './SymbolTableRecord';\r\nimport { TemplateTable } from './Template/TemplateTable';\r\nimport { TextureTableRecord } from './Texture';\r\nimport { TextureTable } from './TextureTable';\r\nimport { WblockCloneFiler } from './WblockCloneFiler';\r\n\r\n@Factory\r\nexport class Database\r\n{\r\n //历史记录(撤销重做)\r\n hm: HistoricManage;\r\n\r\n //各种表(材质 贴图 模块 编组 加工组)\r\n MaterialTable: MaterialTable;\r\n TextureTable: TextureTable;\r\n TemplateTable: TemplateTable;\r\n GroupTable: GroupTable;\r\n ProcessingGroupTable: ProcessingGroupTable;\r\n\r\n //模型空间(里面有模型空间的实体列表)\r\n ModelSpace: BlockTableRecord;\r\n //布局空间\r\n LayoutSpace: BlockTableRecord;\r\n //模型空间的灯光\r\n Lights: BlockTableRecord;\r\n\r\n //相机快照记录\r\n CameraSnapshoots: CameraSnapshootRecord[] = [];\r\n\r\n //固定灯源(天光 太阳光 环境光)\r\n AmbientLight: AmbientLight;\r\n SunLight: DirectionalLight;\r\n HemisphereLight: HemisphereLight;\r\n\r\n //默认材质\r\n DefaultMaterial: PhysicalMaterialRecord;\r\n\r\n private idIndex = 1;\r\n private idMap = new Map();\r\n constructor(buildDefaultDrawing = false, private defaultDatabase = false, disableHistoric = false)\r\n {\r\n this.ModelSpace = new BlockTableRecord().SetOwnerDatabase(this);\r\n this.MaterialTable = new MaterialTable().SetOwnerDatabase(this);\r\n this.TextureTable = new TextureTable().SetOwnerDatabase(this);\r\n this.TemplateTable = new TemplateTable().SetOwnerDatabase(this);\r\n this.GroupTable = new GroupTable().SetOwnerDatabase(this);\r\n this.Lights = new BlockTableRecord().SetOwnerDatabase(this);\r\n this.ProcessingGroupTable = new ProcessingGroupTable().SetOwnerDatabase(this);\r\n this.hm = new HistoricManage().SetDefaultDb(this);\r\n this.hm.Enable = false;\r\n this.LayoutSpace = new BlockTableRecord().SetOwnerDatabase(this);\r\n\r\n if (buildDefaultDrawing)\r\n {\r\n this.idIndex = 70;\r\n this.DefaultMaterial = new PhysicalMaterialRecord();\r\n this.DefaultMaterial.Name = \"默认\";\r\n let texture = new TextureTableRecord();\r\n texture.WrapS = MirroredRepeatWrapping;\r\n texture.WrapT = MirroredRepeatWrapping;\r\n texture.repeatX = 1;\r\n texture.repeatY = 1;\r\n this.TextureTable.Add(texture);\r\n this.DefaultMaterial.map = texture.Id;\r\n this.DefaultMaterial.roughnessMap = texture.Id;\r\n this.DefaultMaterial.bumpMap = texture.Id;\r\n\r\n this.MaterialTable.Add(this.DefaultMaterial);\r\n\r\n texture.Update();\r\n this.SettingDefaultMaterial();\r\n\r\n //初始化灯光\r\n this.InitLight();\r\n }\r\n\r\n this.hm.Enable = !disableHistoric;\r\n\r\n //100以内的id是系统保留id,默认初始化内部对象.\r\n this.idIndex = 100;\r\n }\r\n\r\n private InitLight()\r\n {\r\n this.idIndex = 80;\r\n this.AmbientLight = new AmbientLight();\r\n this.SunLight = new DirectionalLight();\r\n this.SunLight.OCSNoClone.setPosition(4000, -4000, 4000);\r\n\r\n this.HemisphereLight = new HemisphereLight();\r\n this.SunLight.Visible = true;\r\n this.HemisphereLight.Visible = true;\r\n this.Lights.Add(this.AmbientLight);\r\n this.Lights.Add(this.SunLight);\r\n this.Lights.Add(this.HemisphereLight);\r\n }\r\n\r\n SettingDefaultMaterial()\r\n {\r\n if (!this.defaultDatabase)\r\n return;\r\n\r\n this.DefaultMaterial = this.GetObjectId(71)?.Object as PhysicalMaterialRecord ?? this.DefaultMaterial;\r\n this.DefaultMaterial.Update();\r\n HostApplicationServices.DefaultMeshMaterial = this.DefaultMaterial.Material;\r\n }\r\n\r\n Destroy()\r\n {\r\n this.idMap.clear();\r\n this.ModelSpace.Destroy();\r\n this.LayoutSpace.Destroy();\r\n this.MaterialTable.Destroy();\r\n this.TextureTable.Destroy();\r\n this.TemplateTable.Destroy();\r\n this.GroupTable.Destroy();\r\n this.Lights.Destroy();\r\n this.ProcessingGroupTable.Destroy();\r\n this.hm.Destroy();\r\n this.CameraSnapshoots.length = 0;\r\n this.hm.historyRecord.length = 0;\r\n\r\n this.idIndex = 1;\r\n this.ModelSpace.SetOwnerDatabase(this);\r\n this.MaterialTable.SetOwnerDatabase(this);\r\n this.TextureTable.SetOwnerDatabase(this);\r\n this.TemplateTable.SetOwnerDatabase(this);\r\n this.GroupTable.SetOwnerDatabase(this);\r\n this.Lights.SetOwnerDatabase(this);\r\n this.ProcessingGroupTable.SetOwnerDatabase(this);\r\n this.hm.SetDefaultDb(this);\r\n this.LayoutSpace.SetOwnerDatabase(this);\r\n this.idIndex = 100;\r\n }\r\n\r\n //#region Serialize\r\n\r\n FileWrite(file = new CADFiler): CADFiler\r\n {\r\n file.Write(8);//ver;\r\n file.Write(this.idIndex);\r\n this.ModelSpace.WriteFile(file);\r\n this.TextureTable.WriteFile(file);\r\n this.MaterialTable.WriteFile(file);\r\n this.hm.WriteFile(file);\r\n this.TemplateTable.WriteFile(file);\r\n this.GroupTable.WriteFile(file);\r\n this.Lights.WriteFile(file);\r\n this.ProcessingGroupTable.WriteFile(file);\r\n\r\n this.LayoutSpace.WriteFile(file);\r\n\r\n file.Write(this.CameraSnapshoots.length);\r\n for (let r of this.CameraSnapshoots)\r\n r.WriteFile(file);\r\n\r\n return file;\r\n }\r\n FileRead(file: CADFiler)\r\n {\r\n Entity.__ReadFileIng__ = true;\r\n this.hm.doing = true;\r\n\r\n this.Destroy();\r\n file.database = this;\r\n let ver = file.Read();\r\n this.idIndex = file.Read();\r\n this.ModelSpace.ReadFile(file);\r\n this.TextureTable.ReadFile(file);\r\n this.MaterialTable.ReadFile(file);\r\n this.hm.ReadFile(file);\r\n if (ver > 1)\r\n this.TemplateTable.ReadFile(file);\r\n if (ver > 2)\r\n this.GroupTable.ReadFile(file);\r\n if (ver > 3)\r\n {\r\n this.Lights.ReadFile(file);\r\n this.AmbientLight = this.Lights.Entitys[0] as AmbientLight ?? this.AmbientLight;\r\n this.SunLight = this.Lights.Entitys[1] as DirectionalLight ?? this.SunLight;\r\n this.HemisphereLight = this.Lights.Entitys[2] as HemisphereLight ?? this.HemisphereLight;\r\n }\r\n else\r\n {\r\n let index = this.idIndex;\r\n this.InitLight();\r\n this.idIndex = index;\r\n }\r\n\r\n if (ver > 4)\r\n this.ProcessingGroupTable.ReadFile(file);\r\n\r\n if (ver > 5)\r\n this.LayoutSpace.ReadFile(file);\r\n\r\n if (ver < 8)//旧版本数据错误 修复它\r\n {\r\n for (let e of this.LayoutSpace.Entitys)\r\n e.Owner = this.LayoutSpace.Id;\r\n }\r\n\r\n if (ver > 6)\r\n {\r\n let count = file.Read();\r\n this.CameraSnapshoots.length = 0;\r\n for (let i = 0; i < count; i++)\r\n {\r\n let r = new CameraSnapshootRecord;\r\n r.ReadFile(file);\r\n this.CameraSnapshoots.push(r);\r\n }\r\n }\r\n\r\n this.SettingDefaultMaterial();\r\n\r\n this.hm.doing = false;\r\n Entity.__ReadFileIng__ = false;\r\n return this;\r\n }\r\n\r\n //#endregion\r\n\r\n //#region Clone\r\n\r\n /**\r\n * 单个数据库内克隆对象(objects),并将他们附加到指定的容器对象(owner).\r\n * @param objects 被克隆的对象\r\n * @param owner 克隆对象的容器\r\n * @param idMap id映射\r\n * @param deferXlation 指示是否应该进行ID转换\r\n * @returns 新克隆的对象列表\r\n */\r\n DeepCloneObjects(\r\n objects: CADObject[],\r\n owner: OwnerContainer,\r\n idMap: IdMaping = new Map(),\r\n deferXlation = false\r\n ): CADObject[]\r\n {\r\n let f = new DeepCloneFiler();\r\n let newObjects: CADObject[] = [];\r\n for (let e of objects)\r\n {\r\n let newE = e instanceof Light ? this.DeepCloneObject(f, e, this.Lights, idMap) : this.DeepCloneObject(f, e, owner, idMap); //灯光拷贝到Lights\r\n if (newE)\r\n newObjects.push(newE);\r\n }\r\n\r\n //对于无法新拷贝的实体,指向原先的对象(需要是软拷贝才行)\r\n for (let [index, objectId] of f.idMaping)\r\n {\r\n if (!objectId.Object && objectId._RelevancyType === RelevancyType.Soft)\r\n {\r\n let oldId = this.GetObjectId(index);\r\n if (oldId)\r\n {\r\n objectId.Index = index;\r\n objectId.Object = oldId.Object;\r\n }\r\n }\r\n }\r\n\r\n this.ClearEmptyAssoc(f);\r\n return newObjects;\r\n }\r\n\r\n /**\r\n * 清理拷贝后的实体空引用\r\n */\r\n private ClearEmptyAssoc(f: DeepCloneFiler)\r\n {\r\n let tempF = new CADFiler();\r\n tempF.database = this;\r\n for (let [index, objectId] of f.idMaping)\r\n {\r\n if (objectId.Object && objectId.Index !== index)\r\n {\r\n tempF.Clear();\r\n objectId.Object.WriteFile(tempF);\r\n tempF.Reset();\r\n if (objectId.Object instanceof Entity)\r\n objectId.Object.AutoUpdate = false;\r\n objectId.Object.ReadFile(tempF);\r\n if (objectId.Object instanceof Entity)\r\n objectId.Object.AutoUpdate = true;\r\n }\r\n }\r\n }\r\n\r\n DeepCloneObject(\r\n filer: DeepCloneFiler,\r\n object: CADObject,\r\n owner: OwnerContainer,\r\n idMap: IdMaping = new Map(),\r\n ): CADObject | undefined\r\n {\r\n if (idMap.has(object.Id))\r\n return idMap.get(object.Id).Object;\r\n\r\n if (owner instanceof SymbolTable)//应该不能直接拷贝这类型的实体,因为会直接名称重复\r\n return;\r\n\r\n filer.Data.length = 0;\r\n filer.Reset();\r\n filer.WriteObject(object);\r\n let newObject = filer.ReadObject();\r\n if (!(newObject instanceof Light) && newObject instanceof Entity)//Light类的对象不能拷贝绘制 否则出错\r\n newObject.CloneDrawObject(object as Entity);\r\n this.AllocationObjectId(newObject);\r\n owner.Add(newObject, false);\r\n idMap.set(object.Id, newObject.Id);\r\n\r\n //拷贝硬绑定对象\r\n while (filer.hardObjectIds.size > 0)\r\n {\r\n let hardObjectIds = filer.hardObjectIds;\r\n filer.hardObjectIds = new Set();\r\n for (let idIndex of hardObjectIds)\r\n {\r\n let objectId = this.GetObjectId(idIndex, false);\r\n let object = objectId?.Object;\r\n if (object === undefined)\r\n continue;//对象已经被删除\r\n if (!object.Owner)\r\n console.error(\"无主?\");\r\n if (object.Owner.Object instanceof SymbolTable)\r\n //当我们拷贝样式(图层,材质,标注样式,文字样式(这种以Name-Value对应的记录)时,由于名称不能重复,所以拷贝会失败,这时我们把它转换为软引用,我们就可以避免拷贝,并且保持引用正常)\r\n filer.idMaping.get(idIndex)._RelevancyType = RelevancyType.Soft;\r\n else\r\n this.DeepCloneObject(filer, object, object.Owner.Object as unknown as OwnerContainer, idMap);//指向新对象\r\n }\r\n }\r\n return newObject;\r\n }\r\n\r\n /**\r\n * 将来自不同数据库的对象列表拷贝到本数据库中.\r\n * 当前支持使用HardId模式来硬关联某个对象,使该对象能够在WblockClone时一起被带过来.\r\n * 当前不支持硬关联对象的Owner不是默认的容器.\r\n * 如果需要这么做,请将该对象的Owner设置为Hard关联\r\n * @param objects 对象不能属于本数据库\r\n * @param owner 克隆对象的新容器\r\n * @param idMap id映射\r\n */\r\n WblockCloneObejcts(\r\n objects: CADObject[],\r\n owner: OwnerContainer,\r\n idMap: IdMaping,\r\n drc: DuplicateRecordCloning,\r\n filer = new WblockCloneFiler\r\n ): CADObject[]\r\n {\r\n Entity.__ReadFileIng__ = true;\r\n\r\n for (let obj of objects)\r\n if (obj instanceof Light)\r\n this.WblockCloneObject(obj, this.Lights, idMap, drc, filer);\r\n else\r\n this.WblockCloneObject(obj, owner, idMap, drc, filer);\r\n\r\n this.ClearEmptyAssoc(filer);\r\n\r\n Entity.__ReadFileIng__ = false;\r\n return objects.map(o => idMap.get(o.Id).Object);\r\n }\r\n\r\n /**\r\n * 克隆引用对象 WriteHardObjectId\r\n */\r\n private WblockCloneReferenceObject(\r\n object: CADObject,\r\n f: WblockCloneFiler,\r\n idMap: Map,\r\n drc: DuplicateRecordCloning)\r\n {\r\n let oldData = f.Data;\r\n f.Data = [];\r\n\r\n let oldDb = object.Db;\r\n let hardObjectIds = f.hardObjectIds;\r\n f.hardObjectIds = new Set();\r\n for (let idIndex of hardObjectIds)\r\n {\r\n let oldId = oldDb.GetObjectId(idIndex);\r\n if (!(oldId?.Object) || oldId.IsErase) continue;//对已经被删除的对象不进行拷贝\r\n //使用旧的OwnerId得到新的OwnerId,假设所有者都是数据库默认存在的.\r\n //TODO: 当OwnerId>100时,表示这个所有者不是数据库里面默认存在的,那么应该将Owner拷贝过来.\r\n let newOwnerId = this.GetObjectId(oldId.Object.Owner.Index); //owner.Db === this\r\n let newOwner = newOwnerId.Object as SymbolTable;\r\n this.WblockCloneObject(oldId.Object, newOwner, idMap, drc, f);\r\n }\r\n\r\n f.Data = oldData;\r\n }\r\n\r\n private WblockCloneObject(\r\n object: CADObject,\r\n owner: OwnerContainer,\r\n idMap: IdMaping,\r\n drc: DuplicateRecordCloning,\r\n filer: WblockCloneFiler\r\n )\r\n {\r\n //克隆的对象有可能被其他的对象依赖并且克隆完毕了.\r\n let cloneId = filer.idMaping.get(object.Id.Index);\r\n if (cloneId && cloneId.Object)\r\n return;\r\n\r\n filer.Data.length = 0;\r\n //表示该对象已经被拷贝了\r\n filer.cloned.add(object.Id.Index);\r\n if (owner instanceof SymbolTable)\r\n {\r\n let record = object as SymbolTableRecord;\r\n let name = record.Name;\r\n if (owner.Has(name))//名称重复\r\n {\r\n let status = drc;\r\n if (status === DuplicateRecordCloning.Rename)\r\n {\r\n //new name\r\n for (let i = 1; ; i++)\r\n {\r\n let nname = `${name}(${i})`;\r\n if (!owner.Has(nname))\r\n {\r\n name = nname;\r\n break;\r\n }\r\n }\r\n\r\n filer.WriteObject(record);\r\n this.WblockCloneReferenceObject(record, filer, idMap, drc);\r\n filer.Reset();\r\n let newRecord = filer.ReadObject() as SymbolTableRecord;\r\n newRecord.Owner = undefined;\r\n newRecord.Name = name;\r\n this.AllocationObjectId(newRecord);\r\n owner.Add(newRecord, false);\r\n idMap.set(object.Id, newRecord.Id);\r\n }\r\n else if (status === DuplicateRecordCloning.Replace)\r\n {\r\n let oldRecord = owner.GetAt(name);\r\n //将f的id映射设置为旧的id\r\n filer.idMaping.set(object.Id.Index, oldRecord.Id);\r\n\r\n record.WriteFile(filer);\r\n this.WblockCloneReferenceObject(record, filer, idMap, drc);\r\n filer.Reset();\r\n\r\n //此时重新读取的话,将会得到原先的id,实现id不变\r\n oldRecord.ReadFile(filer);\r\n oldRecord.Owner = owner.Id;\r\n idMap.set(object.Id, oldRecord.Id);\r\n }\r\n else if (status === DuplicateRecordCloning.Ignore)\r\n {\r\n let oldRecord = owner.GetAt(name);\r\n filer.idMaping.set(object.Id.Index, oldRecord.Id);\r\n idMap.set(object.Id, oldRecord.Id);\r\n }\r\n return;\r\n }\r\n }\r\n\r\n filer.WriteObject(object);\r\n this.WblockCloneReferenceObject(object, filer, idMap, drc);\r\n filer.Reset();\r\n let newObject = filer.ReadObject() as SymbolTableRecord;\r\n this.AllocationObjectId(newObject); //先给予Id,避免历史记录里面没有id\r\n if (owner === this.ModelSpace && newObject instanceof Entity)\r\n (newObject).CloneDrawObject(object as Entity);\r\n owner.Add(newObject, false);\r\n idMap.set(object.Id, newObject.Id);\r\n }\r\n\r\n /**\r\n * 为拷贝出来的对象分配id索引,并在数据库中注册\r\n */\r\n private AllocationObjectId(object: CADObject)\r\n {\r\n object.Id.Index = this.idIndex++;\r\n this.idMap.set(object.Id.Index, object.Id);\r\n }\r\n\r\n Insert()\r\n {\r\n\r\n }\r\n\r\n /**\r\n * 写块\r\n * @param outputDatabase 输出到指定的数据库\r\n * @param objects\r\n * @param basePoint\r\n * @param cloning\r\n */\r\n Wblock(\r\n outputDataBase: Database,\r\n objects: CADObject[],\r\n basePoint: Vector3,\r\n cloning: any\r\n )\r\n {\r\n\r\n }\r\n\r\n //#endregion\r\n\r\n //#region IdManager\r\n\r\n //创建一个id,自动递增它的索引号,并且会自动加入到db的id列表中.\r\n AllocateId(): ObjectId\r\n {\r\n return this.GetObjectId(this.idIndex++, true);\r\n }\r\n\r\n GetObjectId(index: number, create = false): ObjectId\r\n {\r\n //id 从1开始,0被保留作为空id\r\n if (index === 0) return undefined;\r\n\r\n let id = this.idMap.get(index);\r\n if (!create || id) return id;\r\n\r\n id = new ObjectId(index);\r\n this.idMap.set(index, id);\r\n\r\n return id;\r\n }\r\n\r\n DeleteId(idIndex: number)\r\n {\r\n this.idMap.delete(idIndex);\r\n }\r\n\r\n //#endregion\r\n}\r\n","import { Face3, Geometry, Object3D, Vector3, Line } from \"three\";\r\nimport { RenderType } from \"../GraphicsSystem/RenderType\";\r\nimport { CADFiler } from \"./CADFiler\";\r\nimport { Entity } from \"./Entity/Entity\";\r\nimport { Factory } from \"./CADFactory\";\r\n\r\n@Factory\r\nexport class FaceEntity extends Entity\r\n{\r\n constructor(private p1: Vector3 = new Vector3(), private p2: Vector3 = new Vector3(), private p3: Vector3 = new Vector3(), private normal: Vector3 = new Vector3())\r\n {\r\n super();\r\n }\r\n\r\n protected InitDrawObject(renderType: RenderType = RenderType.Wireframe): Object3D\r\n {\r\n let g = new Geometry();\r\n\r\n g.vertices.push(this.p1, this.p2, this.p3);\r\n g.faces.push(new Face3(0, 1, 2));\r\n\r\n return new Line(g);\r\n }\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\r\n this.p1.fromArray(file.Read());\r\n this.p2.fromArray(file.Read());\r\n this.p3.fromArray(file.Read());\r\n\r\n this.normal.fromArray(file.Read());\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\r\n file.Write(this.p1.toArray());\r\n file.Write(this.p2.toArray());\r\n file.Write(this.p3.toArray());\r\n\r\n file.Write(this.normal.toArray());\r\n\r\n }\r\n //#endregion\r\n}\r\n","import { arrayRemoveIf } from \"../Common/ArrayExt\";\r\nimport { AutoRecord, ISPROXYKEY } from \"./AutoRecord\";\r\nimport { Factory } from \"./CADFactory\";\r\nimport { CADFiler } from \"./CADFiler\";\r\nimport { Entity } from \"./Entity/Entity\";\r\nimport { ObjectId } from \"./ObjectId\";\r\nimport { SymbolTableRecord } from \"./SymbolTableRecord\";\r\n\r\n@Factory\r\nexport class GroupRecord extends SymbolTableRecord\r\n{\r\n @AutoRecord Entitys: ObjectId[];\r\n\r\n constructor()\r\n {\r\n super();\r\n\r\n this.Entitys = new Proxy([], {\r\n set: (target, key, value, receiver) =>\r\n {\r\n if (Reflect.get(target, key, receiver) !== value)\r\n {\r\n if (this.WriteAllObjectRecord())\r\n {\r\n if (value instanceof ObjectId && value.Object instanceof Entity)\r\n {\r\n if (!this.Id)\r\n console.warn(\"请先添加到Database后在进行操作!\");\r\n else\r\n value.Object.GroupId = this.Id;\r\n }\r\n }\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 return Reflect.get(target, key, receiver);\r\n }\r\n });\r\n }\r\n get Name()\r\n {\r\n return this.name;\r\n }\r\n set Name(name: string)\r\n {\r\n if (name !== this.name)\r\n {\r\n this.WriteAllObjectRecord();\r\n this.name = name;\r\n }\r\n }\r\n\r\n Purge()\r\n {\r\n arrayRemoveIf(this.Entitys, id => !id || id.IsErase);\r\n }\r\n\r\n //对象从文件中读取数据,初始化自身\r\n ReadFile(file: CADFiler)\r\n {\r\n let ver = file.Read();\r\n super.ReadFile(file);\r\n let count = file.Read() as number;\r\n\r\n this.Entitys.length = 0;\r\n for (let i = 0; i < count; i++)\r\n {\r\n let id = file.ReadObjectId();\r\n if (id) this.Entitys.push(id);\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 id of this.Entitys)\r\n file.WriteObjectId(id);\r\n }\r\n\r\n}\r\n","import { Vector3 } from \"three\";\r\nimport { safeEval } from \"../../Common/eval\";\r\nimport { Log } from \"../../Common/Log\";\r\nimport { Board } from \"../../DatabaseServices/Entity/Board\";\r\nimport { TemplateWineRackRecord } from \"../../DatabaseServices/Template/ProgramTempate/TemplateWineRackRecord\";\r\nimport { TemplateRecord } from \"../../DatabaseServices/Template/TemplateRecord\";\r\nimport { MoveMatrix } from \"../../Geometry/GeUtils\";\r\nimport { ISpaceParse } from \"../../Geometry/SpaceParse/ISpaceParse\";\r\nimport { BehindBoardOption, BehindHeightPositon, BoardType, BrRelativePos, IGrooveOption, LayerBoardOption, VerticalBoardOption } from \"../../UI/Store/BoardInterface\";\r\n\r\nexport function BuildLayerBoards(opt: LayerBoardOption, space: ISpaceParse, grooveOption?: IGrooveOption): Board[]\r\n{\r\n let spaceBox = space.SpaceBox;\r\n let spaceOCS = space.SpaceOCS;\r\n let size = spaceBox.getSize(new Vector3());\r\n const params = { L: size.x, W: size.y, H: size.z, BH: opt.thickness };\r\n\r\n let width: number;\r\n if (opt.isTotalLength)\r\n width = size.y;\r\n else\r\n {\r\n width = safeEval(opt.calcHeight, params);\r\n }\r\n let count = opt.count;\r\n let type = opt.boardRelative;\r\n let spaceSize = safeEval(opt.calcSpaceSize, params);\r\n let frontShrink = safeEval(opt.calcFrontShrink, params);\r\n width -= frontShrink;\r\n\r\n if (width <= 0)\r\n {\r\n Log(\"宽度无效,可能前缩过大,请修正\");\r\n return [];\r\n }\r\n\r\n let leftShrink = safeEval(opt.calcLeftShrink, params);\r\n let rightShrink = safeEval(opt.calcRightShrink, params);\r\n let thickness = opt.thickness;\r\n\r\n let len = size.x - leftShrink - rightShrink;\r\n if (len <= 0)\r\n {\r\n Log(\"长度无效,可能左缩右缩过大,请修正\");\r\n return [];\r\n }\r\n let board = Board.CreateBoard(len, width, thickness, BoardType.Layer);\r\n if (grooveOption)\r\n {\r\n board.KnifeRadius = safeEval(grooveOption.knifeRadius);\r\n board.GroovesAddDepth = safeEval(grooveOption.grooveAddDepth);\r\n board.GroovesAddWidth = safeEval(grooveOption.grooveAddWidth);\r\n board.GroovesAddLength = safeEval(grooveOption.grooveAddLength);\r\n }\r\n opt.height = len;\r\n opt.width = width;\r\n\r\n //等分单层空间大小\r\n let singleSize = (size.z - (thickness * count)) / (count + 1);\r\n\r\n\r\n let brs: Board[] = [];\r\n\r\n for (let i = 1; i <= count; i++)\r\n {\r\n let b = board.Clone() as Board;\r\n b.Name = opt.name;\r\n\r\n if (type === BrRelativePos.Top)\r\n b.ApplyMatrix(MoveMatrix(spaceBox.min.clone().add(\r\n new Vector3(size.x - rightShrink, frontShrink, size.z - (spaceSize + thickness) * i)\r\n )));\r\n else if (type === BrRelativePos.Bottom)\r\n b.ApplyMatrix(\r\n MoveMatrix(spaceBox.min.clone().add(\r\n new Vector3(size.x - rightShrink, frontShrink, spaceSize * i + (i - 1) * thickness)\r\n )));\r\n else\r\n {\r\n b.ApplyMatrix(\r\n MoveMatrix(spaceBox.min.clone().add(\r\n new Vector3(size.x - rightShrink, frontShrink, singleSize * i + (i - 1) * thickness))\r\n ));\r\n }\r\n b.ApplyMatrix(spaceOCS);\r\n brs.push(b);\r\n }\r\n return brs;\r\n}\r\n\r\nexport function BuildVerticalBoards(opt: VerticalBoardOption, space: ISpaceParse, grooveOption?: IGrooveOption): Board[]\r\n{\r\n const spaceBox = space.SpaceBox;\r\n const spaceOCS = space.SpaceOCS;\r\n let size = spaceBox.getSize(new Vector3());\r\n const params = { L: size.x, W: size.y, H: size.z, BH: opt.thickness };\r\n\r\n let frontShrink = safeEval(opt.calcFrontShrink, params);\r\n let bottomShink = safeEval(opt.calcBottomShrink, params);\r\n let width: number;\r\n if (opt.isTotalWidth)\r\n width = size.y - frontShrink;\r\n else\r\n {\r\n width = safeEval(opt.calcWidth, params);\r\n }\r\n\r\n if (width <= 0)\r\n {\r\n Log(\"宽度无效,可能前缩过大,请修正\");\r\n return [];\r\n }\r\n\r\n let length: number;\r\n if (opt.isTotalLength)\r\n length = size.z - bottomShink;\r\n else\r\n {\r\n length = safeEval(opt.calcHeight, params);\r\n }\r\n\r\n let count = opt.count;\r\n let type = opt.boardRelative;\r\n let spaceSize = safeEval(opt.calcSpaceSize, params);\r\n let thickness = opt.thickness;\r\n\r\n let board = Board.CreateBoard(length, width, thickness, BoardType.Vertical);\r\n if (grooveOption)\r\n {\r\n board.KnifeRadius = safeEval(grooveOption.knifeRadius);\r\n board.GroovesAddDepth = safeEval(grooveOption.grooveAddDepth);\r\n board.GroovesAddWidth = safeEval(grooveOption.grooveAddWidth);\r\n board.GroovesAddLength = safeEval(grooveOption.grooveAddLength);\r\n }\r\n opt.height = length;\r\n opt.width = width;\r\n\r\n //等分单层空间大小\r\n let singleSize = (size.x - (thickness * count)) / (count + 1);\r\n\r\n let brs: Board[] = [];\r\n for (let i = 1; i <= count; i++)\r\n {\r\n let b = board.Clone() as Board;\r\n b.Name = opt.name;\r\n\r\n if (type === BrRelativePos.Left)\r\n b.ApplyMatrix(MoveMatrix(spaceBox.min.clone().add(\r\n new Vector3(spaceSize * i + (i - 1) * thickness, frontShrink, bottomShink)\r\n )));\r\n else if (type === BrRelativePos.Right)\r\n b.ApplyMatrix(MoveMatrix(spaceBox.min.clone().add(\r\n new Vector3(size.x - (spaceSize + thickness) * i, frontShrink, bottomShink)\r\n )));\r\n else\r\n b.ApplyMatrix(MoveMatrix(spaceBox.min.clone().add(\r\n new Vector3(singleSize * i + (i - 1) * thickness, frontShrink, bottomShink)\r\n )));\r\n\r\n b.ApplyMatrix(spaceOCS);\r\n brs.push(b);\r\n }\r\n return brs;\r\n}\r\n\r\nexport function BuildBehindBoards(opt: BehindBoardOption, space: ISpaceParse, grooveOption?: IGrooveOption): Board[]\r\n{\r\n let newBox = space.SpaceBox.clone();\r\n let spaceOcs = space.SpaceOCS;\r\n //判断延伸\r\n let leftExt = opt.leftExt;\r\n let rightExt = opt.rightExt;\r\n let topExt = opt.topExt;\r\n let bottomExt = opt.bottomExt;\r\n newBox.max.add(new Vector3(leftExt + rightExt, 0, topExt + bottomExt));\r\n newBox.translate(new Vector3(-leftExt, 0, -bottomExt));\r\n\r\n //获取背板高度\r\n let size = newBox.getSize(new Vector3());\r\n const params = { L: size.x, W: size.y, H: size.z, BH: opt.thickness };\r\n let height: number;\r\n if (opt.boardPosition === BehindHeightPositon.AllHeight)\r\n height = size.z;\r\n else\r\n height = safeEval(opt.calcHeight, params);\r\n\r\n let moveDist = safeEval(opt.calcMoveDist, params);\r\n\r\n //判断背板位置,更新背板高度\r\n switch (opt.boardPosition)\r\n {\r\n case BehindHeightPositon.ForTop:\r\n newBox.min.add(new Vector3(0, 0, size.z - height));\r\n newBox.translate(new Vector3(0, 0, moveDist));\r\n break;\r\n case BehindHeightPositon.ForBottom:\r\n newBox.max.add(new Vector3(0, 0, height));\r\n newBox.translate(new Vector3(0, 0, -moveDist));\r\n break;\r\n }\r\n\r\n let count = opt.count;\r\n //相对位置\r\n let relPos = opt.boardRelative;\r\n //单层空间宽度\r\n let spaceSize = safeEval(opt.calcSpaceSize, params);\r\n let thickness = opt.thickness;\r\n\r\n let board = Board.CreateBoard(height, size.x, thickness, BoardType.Behind);\r\n if (grooveOption)\r\n {\r\n board.KnifeRadius = safeEval(grooveOption.knifeRadius);\r\n board.GroovesAddDepth = safeEval(grooveOption.grooveAddDepth);\r\n board.GroovesAddWidth = safeEval(grooveOption.grooveAddWidth);\r\n board.GroovesAddLength = safeEval(grooveOption.grooveAddLength);\r\n }\r\n\r\n opt.height = height;\r\n opt.width = size.x;\r\n\r\n //等分单层空间大小\r\n let singleSize = (size.y - (thickness * count)) / (count + 1);\r\n\r\n let brs: Board[] = [];\r\n //构建板件\r\n for (let i = 1; i <= count; i++)\r\n {\r\n let b = board.Clone();\r\n b.Name = opt.name;\r\n\r\n if (relPos === BrRelativePos.Front)\r\n b.ApplyMatrix(MoveMatrix(newBox.min.clone().add(new Vector3(0, spaceSize * i + thickness * i, 0))));\r\n else if (relPos === BrRelativePos.Back)\r\n b.ApplyMatrix(MoveMatrix(newBox.min.clone().add(\r\n new Vector3(0, size.y - spaceSize * i - (i - 1) * thickness, 0)\r\n )));\r\n else\r\n b.ApplyMatrix(MoveMatrix(newBox.min.clone().add(\r\n new Vector3(0, (singleSize + thickness) * i, 0)\r\n )));\r\n\r\n b.ApplyMatrix(spaceOcs);\r\n\r\n brs.push(b);\r\n }\r\n return brs;\r\n}\r\n\r\nexport function ExtendsBoardThickness(temp: TemplateRecord, thickness: number)\r\n{\r\n let bhPar = temp.GetParam(\"BH\");\r\n if (bhPar)\r\n {\r\n bhPar.expr = thickness;\r\n if (temp.Parent)\r\n {\r\n let rootBh = safeEval(temp.Root.GetParam(\"BH\")?.value as string);\r\n bhPar.expr = rootBh === thickness ? \"$BH\" : thickness;\r\n }\r\n }\r\n}\r\nexport function ExtendsbrThick2(temp: TemplateWineRackRecord)\r\n{\r\n let bh2Par = temp.GetParam(\"BH2\");\r\n if (bh2Par)\r\n {\r\n let bh2 = temp.Option.brThick2;\r\n bh2Par.value = bh2;\r\n if (temp.Option.isExtendsBH2)\r\n {\r\n if (temp.Parent)\r\n {\r\n let rootBh = safeEval(temp.Root.GetParam(\"BH\")?.value as string);\r\n bh2Par.expr = rootBh === bh2 ? \"$BH\" : bh2;\r\n }\r\n }\r\n else\r\n {\r\n bh2Par.expr = \"\";\r\n }\r\n }\r\n}\r\n","import { Vector2, Vector3 } from \"three\";\r\nimport { arrayLast } from \"../../Common/ArrayExt\";\r\nimport { EBoardKeyList } from \"../../Common/BoardKeyList\";\r\nimport { Log } from \"../../Common/Log\";\r\nimport { Singleton } from \"../../Common/Singleton\";\r\nimport { Arc } from \"../../DatabaseServices/Entity/Arc\";\r\nimport { Board } from \"../../DatabaseServices/Entity/Board\";\r\nimport { Polyline } from \"../../DatabaseServices/Entity/Polyline\";\r\nimport { AsVector2, equalv3, isParallelTo, XAxis, YAxis } from \"../../Geometry/GeUtils\";\r\nimport { ISpaceParse } from \"../../Geometry/SpaceParse/ISpaceParse\";\r\nimport { BoardType, DrillType, IHighSealedItem, LinesType } from \"../../UI/Store/BoardInterface\";\r\nimport { ELatticeArrayType, ILatticeOption } from \"../../UI/Store/LatticeInterface\";\r\n\r\nexport class DrawLatticeDrawerTool extends Singleton\r\n{\r\n private _config: ILatticeOption;\r\n private space: ISpaceParse;\r\n private leftBr: Board;\r\n private rightBr: Board;\r\n private frontBr: Board;\r\n private backBr: Board;\r\n private haveTopBr: boolean = false;\r\n get Config()\r\n {\r\n return this._config;\r\n }\r\n Draw(space: ISpaceParse, config: ILatticeOption): Board[]\r\n {\r\n this._config = config;\r\n this.space = space;\r\n\r\n this.ParseSpaceBrs();\r\n\r\n this.HandleSpace();\r\n\r\n let size = space.Size;\r\n\r\n if (config.arrayType === ELatticeArrayType.ByWidth)\r\n {\r\n config.widthCount = Math.floor((size.x + config.thickness) / (config.gripWidth + config.thickness));\r\n config.depthCount = Math.floor((size.y + config.thickness) / (config.gripDepth + config.thickness));\r\n }\r\n\r\n if (config.widthCount <= 0 || config.depthCount <= 0)\r\n {\r\n this.End();\r\n return [];\r\n }\r\n\r\n let gripWidth = (size.x - ((config.widthCount - 1) * config.thickness)) / config.widthCount;\r\n let gripDepth = (size.y - (config.depthCount - 1) * config.thickness) / config.depthCount;\r\n config.gripWidth = gripWidth;\r\n config.gripDepth = gripDepth;\r\n\r\n let position = space.SpaceBox.min.clone();\r\n\r\n let verBr = Board.CreateBoard(size.z, size.y, config.thickness, BoardType.Vertical);\r\n //分析切角圆弧的结果\r\n let res = this.ParseArcLenOrObliuqeAng(verBr);\r\n if (!res)\r\n {\r\n this.End();\r\n return [];\r\n };\r\n //左右侧板跟随\r\n this.ChangeLeftRightBr(verBr);\r\n\r\n this.ParseBrTooth(verBr);\r\n this.ParseHighSealing(verBr, config.leftSealed, config.rightSealed, config.upSealed, config.downSealed, false);\r\n this.WriteBoardProcessOption(verBr);\r\n let lattices: Board[] = [];\r\n for (let i = 1; i < config.widthCount; i++)\r\n {\r\n let br = verBr.Clone();\r\n br.Name = \"竖板\" + i;\r\n let pos = position.clone();\r\n pos.add(new Vector3(gripWidth * i + (i - 1) * config.thickness));\r\n br.Position = pos;\r\n br.ApplyMatrix(space.SpaceOCS);\r\n lattices.push(br);\r\n }\r\n\r\n let beBr = Board.CreateBoard(size.z, size.x, config.thickness, BoardType.Behind);\r\n this.ParseBrTooth(beBr);\r\n this.ParseHighSealing(beBr, config.leftSealed, config.rightSealed, config.upSealed, config.downSealed, true);\r\n this.WriteBoardProcessOption(beBr);\r\n for (let i = 1; i < config.depthCount; i++)\r\n {\r\n let br = beBr.Clone();\r\n br.Name = \"横板\" + i;\r\n let pos = position.clone();\r\n pos.add(new Vector3(0, (gripDepth + config.thickness) * i));\r\n br.Position = pos;\r\n br.ApplyMatrix(space.SpaceOCS);\r\n lattices.push(br);\r\n }\r\n\r\n this.End();\r\n return lattices;\r\n }\r\n private HandleSpace()\r\n {\r\n const config = this.Config;\r\n let box = this.space.SpaceBox;\r\n box.max.add(new Vector3(0, 0, -this.Config.downDist));\r\n //处理间隙\r\n box.min.add(new Vector3(config.space, config.space));\r\n box.max.add(new Vector3(-config.space, -config.space));\r\n\r\n if (this.frontBr && this.backBr)\r\n {\r\n let backPos = this.backBr.Position.applyMatrix4(this.frontBr.OCSInv);\r\n\r\n let addH = backPos.y + this.backBr.Height - this.frontBr.Height;\r\n if (addH > 0)\r\n {\r\n this.space.SpaceBox.max.add(new Vector3(0, 0, addH));\r\n if (config.isAuto)\r\n config.arcLen = addH;\r\n }\r\n else\r\n Log(\"挡板高度大于等于格子抽板高度,无法自动识别弧度!\");\r\n }\r\n\r\n if (this.haveTopBr)\r\n {\r\n Log(\"顶板不为空,绘制格子抽可能错误!\");\r\n }\r\n }\r\n private ChangeLeftRightBr(refBr: Board)\r\n {\r\n const config = this.Config;\r\n if (this.leftBr && this.rightBr)\r\n {\r\n if (config.isChange)\r\n {\r\n let lWidth = this.leftBr.Width;\r\n let lHeight = this.leftBr.Height;\r\n let lgrooves = this.leftBr.Grooves.slice();\r\n let rgrooves = this.rightBr.Grooves.slice();\r\n\r\n let rWidth = this.rightBr.Width;\r\n let rHeight = this.rightBr.Height;\r\n\r\n this.leftBr.ContourCurve = refBr.ContourCurve.Clone();\r\n this.rightBr.ContourCurve = refBr.ContourCurve.Clone();\r\n\r\n this.leftBr.Width = lWidth;\r\n this.leftBr.Height = lHeight;\r\n this.rightBr.Width = rWidth;\r\n this.rightBr.Height = rHeight;\r\n\r\n if (this.leftBr.Grooves.length !== lgrooves.length)\r\n this.leftBr.AppendGrooves(lgrooves);\r\n if (this.rightBr.Grooves.length !== rgrooves.length)\r\n this.rightBr.AppendGrooves(rgrooves);\r\n\r\n }\r\n else\r\n {\r\n // 左右侧板不跟随更改的时候,不要把它变成矩形\r\n // this.leftBr.InitBoard(this.leftBr.Height, this.leftBr.Width, this.leftBr.Thickness, this.leftBr.BoardType);\r\n // this.rightBr.InitBoard(this.rightBr.Height, this.rightBr.Width, this.rightBr.Thickness, this.rightBr.BoardType);\r\n }\r\n }\r\n }\r\n private ParseBrTooth(br: Board)\r\n {\r\n const config = this.Config;\r\n\r\n let grooveLenAdd = config.knifeRad;\r\n\r\n let initPts: Vector3[] = [];\r\n if (br.BoardType === BoardType.Behind)\r\n {\r\n let addWidth = (config.grooveAddWidth - 2 * config.upSealed) / 2;\r\n let p1 = new Vector3(br.Width - config.gripWidth + addWidth, br.Height);\r\n let p2 = new Vector3(br.Width - config.gripWidth + addWidth, br.Height / 2 - grooveLenAdd);\r\n let p3 = new Vector3(br.Width - config.gripWidth - br.Thickness - addWidth, br.Height / 2 - grooveLenAdd);\r\n let p4 = new Vector3(br.Width - config.gripWidth - br.Thickness - addWidth, br.Height);\r\n initPts.push(p1, p2, p3, p4);\r\n for (let i = 2; i < config.widthCount; i++)\r\n {\r\n initPts.push(\r\n ...[p1, p2, p3, p4].map(p => p.clone().add(new Vector3(-(config.gripWidth + br.Thickness) * (i - 1))))\r\n );\r\n }\r\n let cu = br.ContourCurve as Polyline;\r\n cu.AddVertexAt(cu.EndParam - 1, initPts.map(p => AsVector2(p)));\r\n br.ContourCurve = cu;\r\n }\r\n else\r\n {\r\n let addWidth = (config.grooveAddWidth - 2 * config.downSealed) / 2;\r\n let p1 = new Vector3(config.gripDepth - addWidth, 0);\r\n let p2 = new Vector3(config.gripDepth - addWidth, br.Height / 2 + grooveLenAdd);\r\n let p3 = new Vector3(config.gripDepth + br.Thickness + addWidth, br.Height / 2 + grooveLenAdd);\r\n let p4 = new Vector3(config.gripDepth + br.Thickness + addWidth, 0);\r\n initPts.push(p1, p2, p3, p4);\r\n for (let i = 2; i < config.depthCount; i++)\r\n {\r\n initPts.push(\r\n ...[p1, p2, p3, p4].map(p => p.clone().add(new Vector3((config.gripDepth + br.Thickness) * (i - 1))))\r\n );\r\n }\r\n let cu = br.ContourCurve as Polyline;\r\n cu.AddVertexAt(1, initPts.map(p => AsVector2(p)));\r\n br.ContourCurve = cu;\r\n }\r\n }\r\n private ParseSpaceBrs()\r\n {\r\n let vertBrs: Board[] = this.space.BoardMap.get(BoardType.Vertical);\r\n if (vertBrs && vertBrs.length > 1)\r\n {\r\n vertBrs.sort((br1, br2) =>\r\n {\r\n return br1.Position.applyMatrix4(this.space.SpaceOCSInv).x - br2.Position.applyMatrix4(this.space.SpaceOCSInv).x;\r\n });\r\n this.leftBr = vertBrs[0];\r\n this.rightBr = arrayLast(vertBrs);\r\n }\r\n\r\n let behindBrs = this.space.BoardMap.get(BoardType.Behind);\r\n\r\n if (behindBrs && behindBrs.length > 1)\r\n {\r\n behindBrs.sort((br1, br2) =>\r\n {\r\n return br1.Position.applyMatrix4(this.space.SpaceOCSInv).y - br2.Position.applyMatrix4(this.space.SpaceOCSInv).y;\r\n });\r\n\r\n this.backBr = arrayLast(behindBrs);\r\n this.frontBr = behindBrs[0];\r\n }\r\n\r\n let lyBrs = this.space.BoardMap.get(BoardType.Layer);\r\n this.haveTopBr = lyBrs && lyBrs.length > 1;\r\n }\r\n private ParseArcLenOrObliuqeAng(br: Board)\r\n {\r\n const config = this.Config;\r\n const size = this.space.Size;\r\n\r\n if (config.isOpenCut)\r\n {\r\n if (config.upCut > size.z || config.downCut > size.z)\r\n return true;\r\n if (config.upCut < 1 || config.downCut < 1)\r\n return true;\r\n let cu = br.ContourCurve as Polyline;\r\n cu.AddVertexAt(3, new Vector2(config.upCut, br.Height));\r\n cu.SetPointAt(4, new Vector2(0, br.Height - config.downCut));\r\n }\r\n else\r\n {\r\n if (config.arcLen > size.z || config.arcLen > size.y)\r\n {\r\n Log(\"圆弧角过大\");\r\n return false;\r\n }\r\n let cu = br.ContourCurve as Polyline;\r\n if (config.arcLen === 0)\r\n {\r\n Log(\"圆弧角为0\");\r\n return true;\r\n }\r\n cu.AddVertexAt(3, new Vector2(config.arcLen, br.Height));\r\n cu.SetBulgeAt(3, Math.tan(Math.PI / 8));\r\n cu.SetPointAt(4, new Vector2(0, br.Height - config.arcLen));\r\n }\r\n\r\n return true;\r\n }\r\n private WriteBoardProcessOption(br: Board)\r\n {\r\n const config = this.Config;\r\n br.KnifeRadius = config.knifeRad;\r\n br.BoardProcessOption.sealedUp = config.upSealed.toString();\r\n br.BoardProcessOption.sealedDown = config.downSealed.toString();\r\n br.BoardProcessOption.sealedLeft = config.leftSealed.toString();\r\n br.BoardProcessOption.sealedRight = config.rightSealed.toString();\r\n br.BoardProcessOption.drillType = DrillType.None;\r\n br.BoardProcessOption.highDrill.fill(DrillType.None);\r\n br.BoardProcessOption[EBoardKeyList.Lines] = LinesType.Reverse; //生成的板设置为反纹\r\n }\r\n protected ParseHighSealing(br: Board, leftSealed: number, rightSealed: number, topSealed: number, downSealed: number, isHor: boolean)\r\n {\r\n let cu = br.ContourCurve as Polyline;\r\n br.BoardProcessOption.sealedLeft = leftSealed.toString();\r\n br.BoardProcessOption.sealedRight = rightSealed.toString();\r\n br.BoardProcessOption.sealedUp = topSealed.toString();\r\n br.BoardProcessOption.sealedDown = downSealed.toString();\r\n\r\n let highSeals: IHighSealedItem[] = [];\r\n\r\n let sizes = [...new Set([downSealed, rightSealed, topSealed, leftSealed])];\r\n let downSeal = {\r\n size: downSealed, color: sizes.indexOf(downSealed) + 1\r\n };\r\n let rigthSeal = {\r\n size: rightSealed, color: sizes.indexOf(rightSealed) + 1\r\n };\r\n let topSeal = { size: topSealed, color: sizes.indexOf(topSealed) + 1 };\r\n let leftSeal = { size: leftSealed, color: sizes.indexOf(leftSealed) + 1 };\r\n\r\n if (isHor)\r\n {\r\n highSeals.push(downSeal, rigthSeal);\r\n\r\n for (let i = 1; i <= cu.EndParam - 3; i++)\r\n {\r\n highSeals.push(topSeal);\r\n }\r\n highSeals.push(leftSeal);\r\n }\r\n else\r\n {\r\n let count = (this._config.depthCount - 1) * 3 + this._config.depthCount;\r\n\r\n for (let i = 0; i < count; i++)\r\n {\r\n highSeals.push(downSeal);\r\n }\r\n for (let i = count; i < cu.EndParam; i++)\r\n {\r\n let c = cu.GetCurveAtIndex(i);\r\n if (c instanceof Arc)\r\n break;\r\n let derv = c.GetFistDeriv(0).normalize();\r\n if (equalv3(derv, YAxis))\r\n highSeals.push(rigthSeal);\r\n else if (isParallelTo(derv, XAxis))\r\n highSeals.push(topSeal);\r\n else if (equalv3(derv, YAxis.clone().negate()))\r\n highSeals.push(leftSeal);\r\n else\r\n highSeals.push(topSeal);\r\n }\r\n }\r\n br.BoardProcessOption.highSealed = highSeals;\r\n }\r\n private End()\r\n {\r\n this._config = null;\r\n this.leftBr = null;\r\n this.rightBr = null;\r\n this.backBr = null;\r\n this.frontBr = null;\r\n this.haveTopBr = false;\r\n }\r\n}\r\n","import { Matrix4, Vector3 } from \"three\";\r\nimport { arrayRemoveDuplicateBySort } from \"../../Common/ArrayExt\";\r\nimport { Board } from \"../../DatabaseServices/Entity/Board\";\r\nimport { BoardType } from \"../../UI/Store/BoardInterface\";\r\nimport { Box3Ext, SplitType } from \"../Box\";\r\nimport { equaln, isParallelTo, XAxis, YAxis, ZAxis } from \"../GeUtils\";\r\nimport { VisualSpaceBox } from './../../Editor/VisualSpaceBox';\r\n\r\nexport class ISpaceParse\r\n{\r\n /**\r\n * 解析空间成功\r\n */\r\n ParseOK = false;\r\n\r\n /**\r\n * 空间占地盒子\r\n */\r\n SpaceBox: Box3Ext;\r\n\r\n /**\r\n * 空间盒子所在的位置矩阵\r\n */\r\n SpaceOCS: Matrix4;\r\n SpaceOCSInv: Matrix4;\r\n\r\n /**\r\n * 板件映射表\r\n */\r\n BoardMap: Map = new Map();\r\n\r\n /**\r\n * 解析空间所用的板件列表\r\n */\r\n Boards: Board[];\r\n\r\n LeftBoard: Board;\r\n RightBoard: Board;\r\n\r\n /**\r\n * 动态中,禁止执行二次操作\r\n */\r\n IsDynamic: Boolean = false;\r\n /**选到的虚拟空间 */\r\n VisualSpaceBox: VisualSpaceBox;\r\n Rotation = { x: 0, y: 0, z: 0 };\r\n\r\n /**\r\n * # 构造后请手动调用Parse()方法.\r\n * @param boards 板件列表\r\n * @param [spaceOCS] 默认空间矩阵,如果不设置将使用第一块板作为空间矩阵\r\n */\r\n constructor(boards?: Board[], spaceOCS?: Matrix4)\r\n {\r\n this.Boards = boards;\r\n if (spaceOCS)\r\n this.SpaceOCS = spaceOCS;\r\n else if (boards && boards.length > 0)\r\n this.SpaceOCS = boards[0].SpaceOCS;\r\n else\r\n this.SpaceOCS = new Matrix4();\r\n\r\n this.SpaceOCSInv = new Matrix4().getInverse(this.SpaceOCS);\r\n\r\n this.GeneralBoardMap();\r\n }\r\n\r\n async Parse()\r\n {\r\n }\r\n\r\n get Size()\r\n {\r\n if (this.SpaceBox)\r\n return this.SpaceBox.getSize(new Vector3());\r\n return new Vector3();\r\n }\r\n\r\n get DrawCS(): Matrix4\r\n {\r\n if (!this.ParseOK) return new Matrix4();\r\n let scs = this.SpaceOCS.clone();\r\n let p = this.SpaceBox.min.clone().applyMatrix4(scs);\r\n scs.setPosition(p);\r\n return scs;\r\n }\r\n\r\n protected GetBoardInSpaceType(br: Board): BoardType\r\n {\r\n //使用板件向量判断类型,而不是板件类型\r\n let normal = br.Normal.transformDirection(this.SpaceOCSInv);\r\n let type: BoardType;\r\n if (isParallelTo(XAxis, normal, 1e-3))\r\n type = BoardType.Vertical;\r\n else if (isParallelTo(YAxis, normal, 1e-3))\r\n type = BoardType.Behind;\r\n else if (isParallelTo(ZAxis, normal, 1e-3))\r\n type = BoardType.Layer;\r\n\r\n return type;\r\n }\r\n\r\n /**\r\n * 构造板件类型Map\r\n */\r\n protected GeneralBoardMap()\r\n {\r\n if (this.Boards && this.Boards.length > 0)\r\n {\r\n this.BoardMap.clear();\r\n\r\n for (let br of this.Boards)\r\n {\r\n let type = this.GetBoardInSpaceType(br);\r\n if (type === undefined) continue;\r\n\r\n let brs = this.BoardMap.get(type);\r\n if (brs)\r\n brs.push(br);\r\n else\r\n this.BoardMap.set(type, [br]);\r\n }\r\n }\r\n }\r\n /**\r\n * 解析板件的盒子,并且(排序,归并)\r\n * @param boardCol\r\n * @param splitType\r\n */\r\n protected ParseBoardBox(boardCol: Board[], splitType: SplitType): Box3Ext[]\r\n {\r\n let boxCol = boardCol.map(b => b.GetBoundingBoxInMtx(this.SpaceOCSInv));\r\n\r\n //查找最左的板和最右的板\r\n if (splitType === SplitType.X)\r\n {\r\n let minX = Infinity;\r\n let leftIndex = 0;\r\n let maxX = -Infinity;\r\n let rightIndex = 0;\r\n\r\n for (let i = 0; i < boxCol.length; i++)\r\n {\r\n let box = boxCol[i];\r\n if (box.min.x < minX)\r\n {\r\n minX = box.min.x;\r\n leftIndex = i;\r\n }\r\n\r\n if (box.max.x > maxX)\r\n {\r\n maxX = box.max.x;\r\n rightIndex = i;\r\n }\r\n }\r\n\r\n this.LeftBoard = boardCol[leftIndex];\r\n this.RightBoard = boardCol[rightIndex];\r\n }\r\n\r\n //根据分割类型排序\r\n boxCol.sort((b1, b2) =>\r\n {\r\n return b1.min.getComponent(splitType) - b2.min.getComponent(splitType);\r\n });\r\n\r\n //归并盒子\r\n arrayRemoveDuplicateBySort(boxCol,\r\n (b1, b2) =>\r\n {\r\n if (\r\n //对齐\r\n equaln(\r\n b1.min.getComponent(splitType),\r\n b2.min.getComponent(splitType),\r\n 1e-3\r\n )\r\n &&\r\n //厚度相等\r\n equaln(\r\n b1.getSize(new Vector3()).getComponent(splitType),\r\n b2.getSize(new Vector3()).getComponent(splitType),\r\n 1e-3\r\n )\r\n )\r\n {\r\n b1.union(b2);\r\n return true;\r\n }\r\n return false;\r\n }\r\n );\r\n\r\n return boxCol;\r\n }\r\n}\r\n","import { safeEval } from \"../../../Common/eval\";\r\nimport { AutoRecord } from \"../../AutoRecord\";\r\nimport { Factory } from \"../../CADFactory\";\r\nimport { CADFiler } from \"../../CADFiler\";\r\nimport { TemplateParam } from \"../Param/TemplateParam\";\r\n\r\n/**\r\n * 模版动作\r\n */\r\n@Factory\r\nexport class TemplateAction\r\n{\r\n @AutoRecord Name: string = \"动作\";\r\n /** 表达式应该只能依赖自身 */\r\n @AutoRecord Expr: string;\r\n @AutoRecord Description: string;\r\n parent: TemplateParam;\r\n WriteAllObjectRecord()\r\n {\r\n if (this.parent)\r\n this.parent.WriteAllObjectRecord();\r\n }\r\n Update(paramDiff: number | string, newValue: number | string)\r\n {\r\n if (this.Expr)\r\n {\r\n let varDefines = {};\r\n varDefines[this.parent.name] = newValue;\r\n newValue = safeEval(this.Expr, varDefines) || newValue;\r\n\r\n varDefines[this.parent.name] = paramDiff;\r\n paramDiff = safeEval(this.Expr, varDefines) || paramDiff;\r\n }\r\n\r\n this._Update(paramDiff, newValue);\r\n }\r\n\r\n\r\n /**\r\n * @重载\r\n */\r\n protected _Update(paramDiff: number | string, newValue: number | string)\r\n {\r\n\r\n }\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 this.Name = file.Read();\r\n if (ver > 2)\r\n {\r\n this.Expr = file.Read();\r\n this.Description = file.Read();\r\n }\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(3);\r\n file.Write(this.Name);\r\n file.Write(this.Expr);\r\n file.Write(this.Description);\r\n }\r\n}\r\n","import { Intersection, Object3D, Vector3 } from 'three';\r\nimport { Entity } from '../DatabaseServices/Entity/Entity';\r\nimport { ObjectSnapMode } from './ObjectSnapMode';\r\nimport { SelectSet } from './SelectSet';\r\n\r\nexport enum PromptStatus\r\n{\r\n None = 0,\r\n Cancel = -1,\r\n OK = 1,\r\n Keyword = 2,\r\n Other = 4,\r\n String = 8,\r\n Error = -2\r\n}\r\n\r\n// export enum Errno 未来某一天我们可能需要这个东西\r\n// {\r\n// Space = 0,\r\n// Enter = 1,\r\n// Esc = 2,\r\n// Left = 3,\r\n// Right = 4,\r\n// }\r\n\r\nexport class PromptResult\r\n{\r\n Status: PromptStatus = PromptStatus.None;\r\n\r\n StringResult?: string;\r\n //是否为子级菜单\r\n isChild?: boolean = false;\r\n Parent?: string;\r\n //当用户选择失败的时候,提供当前选择失败的原因\r\n // Errno?: Errno;\r\n}\r\n\r\nexport class PromptPointResult extends PromptResult\r\n{\r\n SnaoMode: ObjectSnapMode;\r\n intersection: Intersection;\r\n private _point: Vector3;\r\n /**\r\n * 返回三维点\r\n *\r\n * @readonly\r\n * @memberof PromptPointResult\r\n */\r\n get Point()\r\n {\r\n return this._point.clone();\r\n }\r\n set Point(pt: Vector3)\r\n {\r\n this._point = pt.clone();\r\n }\r\n constructor()\r\n {\r\n super();\r\n this._point = new Vector3();\r\n }\r\n}\r\n\r\nexport class PromptDistendResult extends PromptResult\r\n{\r\n private _value: number;\r\n get Distance()\r\n {\r\n return this._value;\r\n }\r\n set Distance(v: number)\r\n {\r\n this._value = v;\r\n }\r\n}\r\n\r\nexport class PromptRectResult extends PromptResult\r\n{\r\n Point1UCS: Vector3;\r\n Point2UCS: Vector3;\r\n\r\n Point1WCS: Vector3;\r\n Point2WCS: Vector3;\r\n\r\n get Width()\r\n {\r\n return this.Point1UCS.x - this.Point2UCS.x;\r\n }\r\n\r\n get Height()\r\n {\r\n return this.Point1UCS.y - this.Point2UCS.y;\r\n }\r\n}\r\n\r\nexport class PromptEntityResult extends PromptResult\r\n{\r\n constructor(\r\n //选择到的图形\r\n public Entity?: Entity,\r\n //点取的点\r\n public Point?: Vector3,\r\n public Object?: Object3D,\r\n public IsCircle?: boolean,\r\n )\r\n {\r\n super();\r\n }\r\n}\r\n\r\nexport class PromptSsgetResult extends PromptResult\r\n{\r\n SelectSet?: SelectSet;\r\n}\r\n","import { Matrix4, Vector3 } from \"three\";\r\nimport { GetPointAtCurveDir } from \"../Common/CurveUtils\";\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 { Ellipse } from \"../DatabaseServices/Entity/Ellipse\";\r\nimport { Line } from \"../DatabaseServices/Entity/Line\";\r\nimport { Polyline } from \"../DatabaseServices/Entity/Polyline\";\r\nimport { Spline } from \"../DatabaseServices/Spline\";\r\nimport { PromptEntityResult, PromptPointResult } from \"../Editor/PromptResult\";\r\nimport { angle, AsVector2, equaln, equalv3, isIntersect2, isParallelTo, midPoint } from \"../Geometry/GeUtils\";\r\nimport { Orbit } from \"../Geometry/Orbit\";\r\nimport { IntersectOption } from \"../GraphicsSystem/IntersectWith\";\r\n\r\nfunction Encode(res: PromptEntityResult, enMap: (PromptEntityResult[])[])\r\n{\r\n if (res.Entity instanceof Line || res.Entity.constructor.name === \"RoomWallLine\")\r\n {\r\n enMap[0].push(res);\r\n return 1;\r\n }\r\n else if (res.Entity instanceof Arc || res.constructor.name === \"RoomWallArc\")\r\n {\r\n enMap[1].push(res);\r\n return 2;\r\n }\r\n else if (res.Entity instanceof Polyline)\r\n {\r\n enMap[2].push(res);\r\n return 4;\r\n }\r\n else if (res.Entity instanceof Spline)\r\n {\r\n enMap[3].push(res);\r\n return 8;\r\n }\r\n else if (res.Entity instanceof Ellipse)\r\n {\r\n enMap[4].push(res);\r\n return 16;\r\n }\r\n}\r\n\r\n//把圆转换成圆弧,避免圆参与计算.\r\nfunction CircleEnResToArc(enRes: PromptEntityResult)\r\n{\r\n if (enRes.Entity instanceof Circle)\r\n {\r\n let an = angle(enRes.Point.clone().applyMatrix4(enRes.Entity.OCSInv)) + Math.PI;\r\n let arc = new Arc(new Vector3(), enRes.Entity.Radius, an, an + 0.1);\r\n arc.ApplyMatrix(enRes.Entity.OCS);\r\n arc.Center = enRes.Entity.Center;\r\n enRes.Entity = arc;\r\n enRes.IsCircle = true;\r\n }\r\n}\r\n\r\nfunction GetFilletCurve(enRes: PromptEntityResult): [Curve, number]\r\n{\r\n if (enRes.Entity instanceof Polyline)\r\n {\r\n let pl = enRes.Entity;\r\n let param = pl.GetParamAtPoint(pl.GetClosestPointTo(enRes.Point, false));\r\n let paramF = Math.floor(param);\r\n return [pl.GetCurveAtParam(param), paramF];\r\n }\r\n else\r\n return [enRes.Entity as Curve, NaN];\r\n}\r\n\r\nenum ExtendType\r\n{\r\n Start = 1,\r\n End = 2,\r\n}\r\n\r\nexport interface FilletRes\r\n{\r\n cu1?: Curve;\r\n cu1Extend?: ExtendType;\r\n cu2?: Curve;\r\n cu2Extend?: ExtendType;\r\n arc?: Arc;\r\n}\r\n\r\ntype CurveExtend = { Curve: Curve, ExtType: ExtendType; };\r\n\r\nexport class FilletUtils\r\n{\r\n FilletRadius: number;\r\n Fillet(enRes1: PromptEntityResult, enRes2: PromptEntityResult): FilletRes\r\n {\r\n CircleEnResToArc(enRes1);\r\n CircleEnResToArc(enRes2);\r\n\r\n let { enType, enMap } = this.EnCode(enRes1, enRes2);\r\n if (enType === 4 && enRes1.Entity === enRes2.Entity)\r\n return this.FilletPolyLineSelf(enRes1, enRes2);\r\n else if (enType >= 4 && enType < 8)\r\n return this.FilletPolylineAndCurve(enRes1, enRes2);\r\n\r\n let interPts = this.GetIntersectAndSort(enRes1, enRes2, enType, enMap);\r\n if (interPts.length === 0\r\n || (interPts.length === 1 && (enType & 2)))//圆弧相切\r\n {\r\n if (enType === 1)\r\n return this.FilletParallelLine(enRes1, enRes2);\r\n else if (enType === 3)\r\n return this.FilletLineAndArc(enMap, enRes1);\r\n else if (enType === 2)\r\n return this.FilletArcAndArc(enRes1, enRes2);\r\n return;\r\n }\r\n\r\n return this.FilletLineOrArc(enRes1, enRes2, interPts);\r\n }\r\n\r\n private FilletLineOrArc(enRes1: PromptEntityResult, enRes2: PromptEntityResult, interPts: Vector3[]): FilletRes\r\n {\r\n let iPt = interPts[0];\r\n\r\n //裁剪延伸,使两条线组成一个尖角\r\n let splitedCu1 = this.SplitCurve(enRes1, iPt, interPts);\r\n let splitedCu2 = this.SplitCurve(enRes2, iPt, interPts);\r\n\r\n let fRadius = this.FilletRadius;\r\n\r\n\r\n let res: FilletRes = { cu1: splitedCu1.Curve, cu2: splitedCu2.Curve, arc: undefined };\r\n\r\n if (fRadius > 0)\r\n {\r\n //角平分线向量.\r\n let bisectorVec: Vector3 = new Vector3();\r\n let c1Derv = this.ComputerDerv(splitedCu1, bisectorVec);\r\n let c2Derv = this.ComputerDerv(splitedCu2, bisectorVec);\r\n\r\n //方向相反\r\n if (equalv3(bisectorVec, new Vector3()))\r\n return;\r\n\r\n //相切\r\n if (equalv3(c2Derv, c1Derv))\r\n {\r\n bisectorVec.set(0, 0, 0);\r\n c1Derv = this.ComputerDerv2(splitedCu1, bisectorVec);\r\n c2Derv = this.ComputerDerv2(splitedCu2, bisectorVec);\r\n }\r\n let cu1RoOcsInv = new Matrix4().extractRotation(splitedCu1.Curve.OCSInv);\r\n\r\n [c1Derv, c2Derv, bisectorVec].forEach(v => v.applyMatrix4(cu1RoOcsInv));\r\n\r\n let offCu1 = splitedCu1.Curve.GetOffsetCurves(\r\n fRadius * -Math.sign(c1Derv.cross(bisectorVec).z))[0];\r\n let offCu2 = splitedCu2.Curve.GetOffsetCurves(\r\n fRadius * -Math.sign(c2Derv.cross(bisectorVec).z))[0];\r\n\r\n if (!offCu1 || !offCu2)\r\n return;\r\n\r\n // JigUtils.Draw(new Line(iPt, iPt.clone().add(c1Derv.clone().multiplyScalar(10)))).ColorIndex = 1;\r\n // JigUtils.Draw(new Line(iPt, iPt.clone().add(c2Derv.clone().multiplyScalar(10)))).ColorIndex = 2;\r\n // JigUtils.Draw(new Line(iPt, iPt.clone().add(bisectorVec))).ColorIndex = 3;\r\n // offCu1.ColorIndex = 6;\r\n // offCu2.ColorIndex = 6;\r\n // JigUtils.Draw(offCu1.Clone());\r\n // JigUtils.Draw(offCu2.Clone());\r\n\r\n let center = offCu1.IntersectWith(offCu2, IntersectOption.ExtendNone)\r\n .sort((p1, p2) =>\r\n {\r\n return p1.distanceToSquared(iPt) - p2.distanceToSquared(iPt);\r\n })[0];\r\n\r\n if (!center)\r\n return;\r\n\r\n let arcP1 = splitedCu1.Curve.GetClosestPointTo(center, true);\r\n let arcP2 = splitedCu2.Curve.GetClosestPointTo(center, true);\r\n if (!splitedCu1.Curve.PtOnCurve(arcP1) || !splitedCu2.Curve.PtOnCurve(arcP2))\r\n return;\r\n\r\n //时针校验\r\n let v1 = arcP1.clone().sub(center).applyMatrix4(cu1RoOcsInv);\r\n let v2 = arcP2.clone().sub(center).applyMatrix4(cu1RoOcsInv);\r\n\r\n //绘制圆弧\r\n let arc = new Arc(new Vector3(), this.FilletRadius, angle(v1), angle(v2), v1.cross(v2).z < 0);\r\n arc.ApplyMatrix(splitedCu1.Curve.OCS);\r\n arc.Center = center;\r\n res.arc = arc;\r\n //延伸或者裁剪到圆弧点\r\n this.ExtendPt(splitedCu1, arcP1);\r\n this.ExtendPt(splitedCu2, arcP2);\r\n }\r\n\r\n res.cu1Extend = splitedCu1.ExtType;\r\n res.cu2Extend = splitedCu2.ExtType;\r\n\r\n return res;\r\n }\r\n FilletPolyLineSelf(enRes1: PromptEntityResult, enRes2: PromptEntityResult): FilletRes\r\n {\r\n let pl = enRes1.Entity as Polyline;\r\n\r\n let param1 = pl.GetParamAtPoint(pl.GetClosestPointTo(enRes1.Point, false));\r\n let param2 = pl.GetParamAtPoint(pl.GetClosestPointTo(enRes2.Point, false));\r\n\r\n if (param1 > param2)\r\n {\r\n [param1, param2] = [param2, param1];\r\n [enRes1, enRes2] = [enRes2, enRes1];\r\n }\r\n\r\n let parF1 = Math.floor(param1);\r\n let parF2 = Math.floor(param2);\r\n\r\n //共线\r\n if (parF1 === parF2)\r\n return;\r\n\r\n let c1 = pl.GetCurveAtParam(param1);\r\n let c2 = pl.GetCurveAtParam(param2);\r\n\r\n if (equalv3(c1.GetFistDeriv(1).normalize(), c2.GetFistDeriv(0).normalize()))\r\n return;\r\n\r\n let es1 = new PromptEntityResult();\r\n es1.Entity = c1;\r\n es1.Point = enRes1.Point;\r\n\r\n let es2 = new PromptEntityResult();\r\n es2.Entity = c2;\r\n es2.Point = enRes2.Point;\r\n let fres = this.Fillet(es1, es2);\r\n\r\n if (!fres)\r\n return;\r\n\r\n let pln = pl.Clone();\r\n\r\n if (fres.cu1 instanceof Arc)\r\n pln.SetBulgeAt(parF1, fres.cu1.Bul);\r\n\r\n if (fres.cu2 instanceof Arc)\r\n pln.SetBulgeAt(parF2, fres.cu2.Bul);\r\n\r\n let splitType1 = fres.cu1Extend;\r\n let splitType2 = fres.cu2Extend;\r\n\r\n if (splitType1 === splitType2)\r\n return;\r\n if (!fres.arc)\r\n {\r\n if (splitType1 === ExtendType.End)\r\n {\r\n let ep = AsVector2(fres.cu1.EndPoint.applyMatrix4(pln.OCSInv));\r\n pln.SetPointAt(parF1 + 1, ep);\r\n\r\n let sp = AsVector2(fres.cu2.StartPoint.applyMatrix4(pln.OCSInv));\r\n pln.SetPointAt(parF2, sp);\r\n //移除多余的点\r\n pln.LineData.splice(parF1 + 1, parF2 - parF1 - 1);\r\n pln.Update();\r\n return { cu1: pln };\r\n }\r\n else\r\n {\r\n let ep = AsVector2(fres.cu1.StartPoint.applyMatrix4(pln.OCSInv));\r\n pln.SetPointAt(parF1, ep);\r\n\r\n let sp = AsVector2(fres.cu2.EndPoint.applyMatrix4(pln.OCSInv));\r\n pln.SetPointAt(parF2 + 1, sp);\r\n\r\n pln.LineData.splice(parF2 + 2);\r\n pln.LineData.splice(0, parF1);\r\n pln.Update();\r\n return { cu1: pln };\r\n }\r\n }\r\n\r\n if (splitType1 === ExtendType.End)//没有经过起点\r\n {\r\n let sp = AsVector2(fres.cu1.EndPoint.applyMatrix4(pln.OCSInv));\r\n if (parF2 - parF1 === 1)\r\n {\r\n pln.AddVertexAt(parF1 + 1, sp);\r\n parF2++;\r\n }\r\n else\r\n pln.SetPointAt(parF1 + 1, sp);\r\n pln.SetBulgeAt(parF1 + 1, fres.arc.Bul);\r\n\r\n let ep = AsVector2(fres.cu2.StartPoint.applyMatrix4(pln.OCSInv));\r\n pln.SetPointAt(parF2, ep);\r\n\r\n //移除多余的点\r\n pln.LineData.splice(parF1 + 2, parF2 - parF1 - 2);\r\n pln.Update();\r\n return { cu1: pln };\r\n }\r\n else//经过起点\r\n {\r\n let sp = AsVector2(fres.arc.EndPoint.applyMatrix4(pln.OCSInv));\r\n\r\n let keepF1 = 0;\r\n if (parF2 + 1 <= pln.LineData.length)\r\n {\r\n if (parF1 === 0 || equaln(pln.GetBulgeAt(parF1 - 1), 0))\r\n pln.AddVertexAt(parF2 + 1, sp);\r\n else\r\n {\r\n pln.SetPointAt(parF1 - 1, sp);\r\n keepF1 = -1;//保留圆弧位\r\n }\r\n }\r\n else\r\n pln.SetPointAt(parF2 + 1, sp);\r\n\r\n if (keepF1 === 0)\r\n pln.SetBulgeAt(parF2 + 1, -fres.arc.Bul);\r\n else\r\n pln.SetBulgeAt(parF1 - 1, -fres.arc.Bul);\r\n\r\n let ep = AsVector2(fres.cu1.StartPoint.applyMatrix4(pln.OCSInv));\r\n pln.SetPointAt(parF1, ep);\r\n pln.CloseMark = true;\r\n\r\n pln.LineData.splice(parF2 + 2 + keepF1);\r\n pln.LineData.splice(0, parF1 + keepF1);\r\n pln.Update();\r\n return { cu1: pln };\r\n }\r\n }\r\n\r\n private FilletPolylineAndCurve(enRes1: PromptEntityResult, enRes2: PromptEntityResult): FilletRes\r\n {\r\n let arr1 = GetFilletCurve(enRes1);\r\n let arr2 = GetFilletCurve(enRes2);\r\n\r\n let [cu1, paramF1] = arr1;\r\n let [cu2, paramF2] = arr2;\r\n\r\n let es1 = new PromptEntityResult();\r\n es1.Entity = cu1;\r\n es1.Point = enRes1.Point;\r\n\r\n let es2 = new PromptEntityResult();\r\n es2.Entity = cu2;\r\n es2.Point = enRes2.Point;\r\n\r\n let fres = this.Fillet(es1, es2);\r\n if (fres)\r\n {\r\n let cus: Curve[] = [];\r\n\r\n let isFirst = false;\r\n\r\n if (fres.cu1)\r\n {\r\n if (enRes1.Entity instanceof Polyline)\r\n {\r\n isFirst = true;\r\n let pln = enRes1.Entity.Clone();\r\n pln.DigestionCloseMark();\r\n\r\n if (fres.cu1 instanceof Arc)\r\n pln.SetBulgeAt(paramF1, fres.cu1.Bul);\r\n\r\n if (fres.cu1Extend === ExtendType.End)\r\n {\r\n pln.LineData.splice(paramF1 + 2);\r\n\r\n let ep = AsVector2(fres.cu1.EndPoint.applyMatrix4(pln.OCSInv));\r\n pln.SetPointAt(paramF1 + 1, ep);\r\n }\r\n else\r\n {\r\n pln.LineData.splice(0, paramF1);\r\n let sp = AsVector2(fres.cu1.StartPoint.applyMatrix4(pln.OCSInv));\r\n pln.SetPointAt(0, sp);\r\n }\r\n\r\n cus.push(pln);\r\n }\r\n else if (!enRes1.IsCircle)\r\n cus.push(fres.cu1);\r\n }\r\n\r\n if (fres.arc)\r\n cus.push(fres.arc);\r\n\r\n if (fres.cu2)\r\n {\r\n if (enRes2.Entity instanceof Polyline)\r\n {\r\n let pln = enRes2.Entity.Clone();\r\n pln.DigestionCloseMark();\r\n\r\n if (fres.cu2 instanceof Arc)\r\n pln.SetBulgeAt(paramF2, fres.cu2.Bul);\r\n\r\n if (fres.cu2Extend === ExtendType.End)\r\n {\r\n pln.LineData.splice(paramF2 + 2);\r\n\r\n let ep = AsVector2(fres.cu2.EndPoint.applyMatrix4(pln.OCSInv));\r\n pln.SetPointAt(paramF2 + 1, ep);\r\n }\r\n else\r\n {\r\n pln.LineData.splice(0, paramF2);\r\n let sp = AsVector2(fres.cu2.StartPoint.applyMatrix4(pln.OCSInv));\r\n pln.SetPointAt(0, sp);\r\n }\r\n\r\n cus.push(pln);\r\n cus.reverse();\r\n }\r\n else if (!enRes2.IsCircle)\r\n cus.push(fres.cu2);\r\n }\r\n\r\n if (cus.length > 0)\r\n {\r\n let pl = cus[0] as Polyline;\r\n if (!(pl instanceof Polyline))\r\n return;\r\n\r\n for (let i = 1; i < cus.length; i++)\r\n pl.Join(cus[i]);\r\n\r\n if (isFirst)\r\n return { cu1: pl };\r\n else\r\n return { cu2: pl };\r\n }\r\n\r\n }\r\n\r\n return undefined;\r\n }\r\n\r\n FilletPolyLineAllAngular(enRes1: PromptEntityResult): FilletRes\r\n {\r\n let pl = enRes1.Entity as Polyline;\r\n\r\n let cus = pl.Explode();\r\n let count = cus.length;\r\n if (pl.IsClose)\r\n cus.push(cus[0]);\r\n\r\n let ncus = [];\r\n\r\n for (let i = 0; i < count; i++)\r\n {\r\n let c1 = cus[i];\r\n let c2 = cus[i + 1];\r\n\r\n ncus.push(c1);\r\n\r\n if (!c2)\r\n break;\r\n\r\n if (equalv3(c1.GetFistDeriv(1).normalize(), c2.GetFistDeriv(0).normalize()))\r\n continue;\r\n\r\n let es1 = new PromptEntityResult();\r\n es1.Entity = c1;\r\n es1.Point = c1.EndPoint;\r\n\r\n let es2 = new PromptEntityResult();\r\n es2.Entity = c2;\r\n es2.Point = c2.StartPoint;\r\n\r\n let fres = this.Fillet(es1, es2);\r\n if (fres)\r\n {\r\n if (fres.cu1)\r\n c1.CopyFrom(fres.cu1);\r\n if (fres.cu2)\r\n c2.CopyFrom(fres.cu2);\r\n\r\n if (fres.arc)\r\n ncus.push(fres.arc);\r\n }\r\n }\r\n\r\n let pln = pl.Clone();\r\n pln.LineData = [];\r\n pln.ApplyMatrix(pln.OCSInv);\r\n pln.CloseMark = false;\r\n for (let cu of ncus)\r\n pln.Join(cu);\r\n\r\n pln.CloseMark = pl.CloseMark;\r\n\r\n return {\r\n cu1: pln,\r\n cu2: undefined,\r\n arc: undefined\r\n };\r\n }\r\n\r\n FindNearestPt(pts: Vector3[], target: Vector3): Vector3\r\n {\r\n let res = pts[0];\r\n let dis = Infinity;\r\n for (let p of pts)\r\n {\r\n let d = p.distanceTo(target);\r\n if (d < dis)\r\n {\r\n res = p;\r\n dis = d;\r\n }\r\n }\r\n return res;\r\n }\r\n\r\n FilletBoard(brRes: PromptEntityResult, ptRes: PromptPointResult): Polyline | string\r\n {\r\n let br = brRes.Entity as Board;\r\n let brContour = br.ContourCurve.Clone() as Polyline;\r\n\r\n //------1.求交\r\n let brResPt = brRes.Point.clone().applyMatrix4(br.OCSInv).setZ(0);\r\n let ptResPt = ptRes.Point.clone().applyMatrix4(br.OCSInv).setZ(0);\r\n let l = new Line(brResPt, ptResPt);\r\n\r\n let ipts = l.IntersectWith(brContour, IntersectOption.ExtendThis);\r\n\r\n if (ipts.length > 2)//超过2个则有可能有多余交点\r\n //找最近点\r\n ipts = [this.FindNearestPt(ipts, brResPt), this.FindNearestPt(ipts, ptResPt)];\r\n\r\n if (ipts.length !== 2)\r\n return \"倒角失败!交点个数异常.\";\r\n\r\n //------2.倒角\r\n let es1 = new PromptEntityResult(brContour, ipts[0]);\r\n let es2 = new PromptEntityResult(brContour, ipts[1]);\r\n\r\n let res = this.FilletPolyLineSelf(es1, es2);\r\n if (res && res.cu1)\r\n return res.cu1 as Polyline;\r\n else\r\n return \"倒角失败\";\r\n }\r\n\r\n /**\r\n * 平行线倒角\r\n */\r\n private FilletParallelLine(enRes1: PromptEntityResult, enRes2: PromptEntityResult): FilletRes\r\n {\r\n let l1 = enRes1.Entity as Line;\r\n let l2 = enRes2.Entity as Line;\r\n\r\n let l1Derv = l1.GetFistDeriv(0);\r\n if (!isParallelTo(l1Derv, l2.GetFistDeriv(0)))\r\n return;\r\n\r\n let vec = l2.StartPoint.sub(l1.StartPoint);\r\n if (isParallelTo(vec, l1Derv))\r\n return;\r\n\r\n let par1 = l2.GetClosestAtPoint(l1.StartPoint, true).param;\r\n let par2 = l2.GetClosestAtPoint(l1.EndPoint, true).param;\r\n if (!isIntersect2(0, 1, par1, par2))\r\n return;\r\n\r\n let lineClone1 = l1.Clone();\r\n let lineClone2 = l2.Clone();\r\n\r\n let par = l1.GetClosestAtPoint(enRes1.Point, true).param;\r\n\r\n let parFix = Math.round(par);\r\n let ptFix = lineClone1.GetPointAtParam(parFix);\r\n let ptL2Fix = lineClone2.GetClosestAtPoint(ptFix, true).closestPt;\r\n\r\n let cu1Extend = parFix === 0 ? ExtendType.Start : ExtendType.End;\r\n let cu2Extend: ExtendType;\r\n if ((par1 > par2) === (parFix === 1))\r\n {\r\n lineClone2.StartPoint = ptL2Fix;\r\n cu2Extend = ExtendType.Start;\r\n }\r\n else\r\n {\r\n lineClone2.EndPoint = ptL2Fix;\r\n cu2Extend = ExtendType.End;\r\n }\r\n\r\n let radius = ptFix.distanceTo(ptL2Fix) / 2;\r\n if (radius < 1e-3)\r\n return;\r\n\r\n let arcCenter = midPoint(ptFix, ptL2Fix);\r\n\r\n let sv = ptFix.sub(arcCenter);\r\n let ev = ptL2Fix.sub(arcCenter);\r\n\r\n if (parFix === 0)\r\n l1Derv.negate();\r\n\r\n //平面矩阵\r\n let xVec = new Vector3();\r\n let yVec = new Vector3();\r\n let zVec = vec.cross(l1Derv).normalize();\r\n let l1Normal = l1.Normal;\r\n if (isParallelTo(zVec, l1Normal)) zVec = l1Normal;\r\n\r\n Orbit.ComputUpDirection(zVec, yVec, xVec);\r\n let mtx = new Matrix4().makeBasis(xVec, yVec, zVec);\r\n let mtxInv = new Matrix4().getInverse(mtx);\r\n //变换\r\n sv.applyMatrix4(mtxInv);\r\n ev.applyMatrix4(mtxInv);\r\n l1Derv.applyMatrix4(mtxInv);\r\n\r\n let sa = angle(sv);\r\n let ea = angle(ev);\r\n let clockwise = ev.cross(l1Derv).z > 0;\r\n let arc = new Arc(new Vector3(), radius, sa, ea, clockwise);\r\n arc.ApplyMatrix(mtx);\r\n arc.Center = arcCenter;\r\n\r\n return {\r\n cu1: lineClone1,\r\n cu1Extend,\r\n cu2: lineClone2,\r\n cu2Extend,\r\n arc,\r\n };\r\n }\r\n\r\n /**\r\n * 计算圆弧与圆弧没有交点的情况下倒角结果.\r\n * @param enRes1\r\n * @param enRes2\r\n * @returns arc and arc\r\n */\r\n private FilletArcAndArc(enRes1: PromptEntityResult, enRes2: PromptEntityResult): FilletRes\r\n {\r\n let a1 = enRes1.Entity as Arc;\r\n let a2 = enRes2.Entity as Arc;\r\n\r\n let arcO1 = a1.GetOffsetCurves(this.FilletRadius * (a1.IsClockWise ? -1 : 1))[0];\r\n let arcO2 = a2.GetOffsetCurves(this.FilletRadius * (a2.IsClockWise ? -1 : 1))[0];\r\n\r\n // arcO1.ColorIndex = 6;\r\n // arcO2.ColorIndex = 6;\r\n // JigUtils.Draw(arcO1);\r\n // JigUtils.Draw(arcO2);\r\n\r\n //求交\r\n let intPts = arcO1.IntersectWith(arcO2, IntersectOption.ExtendBoth);\r\n if (intPts.length === 0)\r\n return;//无交点无法倒角\r\n\r\n //两选择点的中点\r\n let clickMidp = midPoint(enRes1.Point, enRes2.Point);//用来选择合适的交点\r\n //选择合适的交点\r\n intPts.sort((p1, p2) =>\r\n {\r\n return p1.distanceToSquared(clickMidp) - p2.distanceToSquared(clickMidp);\r\n });\r\n\r\n //圆弧圆心\r\n let narcCenter = intPts[0];\r\n let narcP1 = a1.GetClosestPointTo(narcCenter, true);//两圆弧和相切弧的交点\r\n let narcP2 = a2.GetClosestPointTo(narcCenter, true);\r\n\r\n let tempCircle = new Circle(narcCenter, this.FilletRadius);\r\n tempCircle.OCSNoClone.copy(a1.OCSNoClone).setPosition(narcCenter);\r\n let closestPt = a1.GetClosestPointTo(a2.Center, true);//两曲线距离对方圆心最近的点\r\n let narcMP = tempCircle.GetClosestPointTo(closestPt, false);//相切圆距离closestPt最近的点\r\n\r\n //构造圆弧\r\n let narc = new Arc().ApplyMatrix(a1.OCS).FromThreePoint(narcP1, narcMP, narcP2);\r\n\r\n let a1Clone = a1.Clone();\r\n let a2Clone = a2.Clone();\r\n\r\n let a1Param = a1.GetParamAtPoint(narcP1);\r\n let a2Param = a2.GetParamAtPoint(narcP2);\r\n\r\n let a1Derv = a1.GetFistDeriv(a1Param).normalize();\r\n let a2Derv = a2.GetFistDeriv(a2Param).normalize();\r\n\r\n let narcDerv0 = narc.GetFistDeriv(0).normalize();\r\n let narcDerv1 = narc.GetFistDeriv(1).normalize();\r\n\r\n //裁剪圆弧\r\n if (equalv3(a1Derv, narcDerv0))\r\n a1Clone.EndPoint = narcP1;\r\n else\r\n a1Clone.StartPoint = narcP1;\r\n\r\n if (equalv3(a2Derv, narcDerv1))\r\n a2Clone.StartPoint = narcP2;\r\n else\r\n a2Clone.EndPoint = narcP2;\r\n\r\n return {\r\n cu1: a1Clone,\r\n cu2: a2Clone,\r\n arc: narc\r\n };\r\n }\r\n\r\n /**\r\n * 计算直线与圆弧没有交点(或相切)的情况下倒角结果\r\n * @param enRes1\r\n * @param enRes2\r\n * @returns line and cir\r\n */\r\n private FilletLineAndArc(enMap: (PromptEntityResult[])[], enRes1: PromptEntityResult): FilletRes | undefined\r\n {\r\n let lineRes = enMap[0][0];\r\n let arcRes = enMap[1][0];\r\n\r\n let line = lineRes.Entity as Line;\r\n let arc = arcRes.Entity as Arc;\r\n\r\n let dir = GetPointAtCurveDir(line, arc.Center);\r\n\r\n let lineO = line.GetOffsetCurves(this.FilletRadius * dir)[0];\r\n let arcO = arc.GetOffsetCurves(this.FilletRadius * (arc.IsClockWise ? -1 : 1))[0];// tip:面积逆时针为正, 顺时针为负.\r\n\r\n // lineO.ColorIndex = 6;\r\n // arcO.ColorIndex = 6;\r\n // JigUtils.Draw(lineO);\r\n // JigUtils.Draw(arcO);\r\n\r\n //求交\r\n let intPts = lineO.IntersectWith(arcO, IntersectOption.ExtendBoth);\r\n if (intPts.length === 0)\r\n return;//无交点无法倒角\r\n\r\n //两选择点的中点\r\n let clickMidp = midPoint(lineRes.Point, arcRes.Point);\r\n //选择适合的交点。\r\n intPts.sort((p1, p2) =>\r\n {\r\n return p1.distanceToSquared(clickMidp) - p2.distanceToSquared(clickMidp);\r\n });\r\n //圆弧圆心\r\n let arcCenter = intPts[0];\r\n\r\n let arcP1 = line.GetClosestPointTo(arcCenter, true);//直线与相切圆的交点\r\n let arcP2 = arc.GetClosestPointTo(arcCenter, true);//圆弧与相切圆的交点\r\n\r\n let tempCircle = new Circle(arcCenter, this.FilletRadius);\r\n tempCircle.OCSNoClone.copy(arc.OCSNoClone).setPosition(arcCenter);\r\n let { closestPt, param } = line.GetClosestAtPoint(arc.Center, true);\r\n let arcMP = tempCircle.GetClosestPointTo(closestPt, false);\r\n\r\n //构造圆弧\r\n let narc = new Arc().ApplyMatrix(arc.OCS).FromThreePoint(arcP1, arcMP, arcP2);\r\n\r\n //裁剪线\r\n let lineClone = line.Clone();\r\n let arcClone = arc.Clone();\r\n\r\n let lineExtend: ExtendType;\r\n let p1Param = line.GetParamAtPoint(arcP1);\r\n if (p1Param > param)\r\n {\r\n lineClone.StartPoint = arcP1;\r\n lineExtend = ExtendType.Start;\r\n }\r\n else\r\n {\r\n lineClone.EndPoint = arcP1;\r\n lineExtend = ExtendType.End;\r\n }\r\n\r\n //裁剪圆弧\r\n let arcParam = arc.GetParamAtPoint(arcP2);\r\n let arcDerv = arc.GetFistDeriv(arcParam).normalize();\r\n let narcDerv = narc.GetFistDeriv(1).normalize();\r\n\r\n let arcExtend: ExtendType;\r\n if (equalv3(arcDerv, narcDerv))\r\n {\r\n arcClone.StartPoint = arcP2;\r\n arcExtend = ExtendType.Start;\r\n }\r\n else\r\n {\r\n arcClone.EndPoint = arcP2;\r\n arcExtend = ExtendType.End;\r\n }\r\n\r\n //先选直线为真\r\n if (enRes1.Entity === line)\r\n return {\r\n cu1: lineClone,\r\n cu1Extend: lineExtend,\r\n cu2: arcClone,\r\n cu2Extend: arcExtend,\r\n arc: narc\r\n };\r\n else\r\n return {\r\n cu1: arcClone,\r\n cu1Extend: arcExtend,\r\n cu2: lineClone,\r\n cu2Extend: lineExtend,\r\n arc: narc.Reverse()//#I3BWIA 避免起点和终点方向相反导致的多段线连接错误\r\n };\r\n }\r\n\r\n //获得两曲线的交点,并且排序交点.\r\n private GetIntersectAndSort(enRes: PromptEntityResult, enRes2: PromptEntityResult, enType: number, enMap: PromptEntityResult[][])\r\n {\r\n let interPts = enRes.Entity.IntersectWith(enRes2.Entity, IntersectOption.ExtendBoth);\r\n if (interPts.length > 1)\r\n {\r\n let baseP: Vector3;\r\n if (enType & 1) //如果有直线,那么用直线\r\n baseP = enMap[0][0].Point;\r\n else if (enType === 2) //如果都是圆弧,那么取中点\r\n baseP = midPoint(enMap[1][0].Point, enMap[1][1].Point);\r\n interPts.sort((p1, p2) => p1.distanceToSquared(baseP) - p2.distanceToSquared(baseP));\r\n }\r\n return interPts;\r\n }\r\n\r\n /**\r\n * 对图元列表进行按位编码,类型映射如下:\r\n * # 1:line 2:arc 4:polyline\r\n * @param enRes\r\n * @param enRes2\r\n * @returns\r\n */\r\n private EnCode(enRes: PromptEntityResult, enRes2: PromptEntityResult)\r\n {\r\n let enMap: (PromptEntityResult[])[] = [[], [], [], [], []];\r\n let enType = 0;\r\n enType |= Encode(enRes, enMap);\r\n enType |= Encode(enRes2, enMap);\r\n return { enType, enMap };\r\n }\r\n\r\n //计算曲线在相交处的切线,取真实的切线\r\n private ComputerDerv(cuRes: CurveExtend, dervSum: Vector3)\r\n {\r\n let derv: Vector3;\r\n let cu = cuRes.Curve;\r\n if (cuRes.ExtType === ExtendType.Start)\r\n {\r\n derv = cu.GetFistDeriv(0).normalize();\r\n dervSum.add(derv);\r\n }\r\n else\r\n {\r\n derv = cu.GetFistDeriv(cu.EndParam).normalize();\r\n dervSum.add(derv.clone().negate());\r\n }\r\n return derv;\r\n }\r\n\r\n // 计算曲线在相交处的切线,取起点到终点的切线.(当曲线相切时调用此方法.)\r\n private ComputerDerv2(cuRes: CurveExtend, dervSum: Vector3)\r\n {\r\n let cu = cuRes.Curve;\r\n let derv = cu.EndPoint.sub(cu.StartPoint);\r\n if (cuRes.ExtType === ExtendType.Start)\r\n dervSum.add(derv);\r\n else\r\n dervSum.add(derv.clone().negate());\r\n return derv;\r\n }\r\n\r\n // 延伸或者裁剪到指定的圆弧的点.\r\n private ExtendPt(cu: CurveExtend, newP: Vector3)\r\n {\r\n if (cu.ExtType === ExtendType.Start)\r\n cu.Curve.StartPoint = newP;\r\n else\r\n cu.Curve.EndPoint = newP;\r\n }\r\n\r\n /**\r\n * 切割或者延伸曲线,尖角化\r\n *\r\n * @param cu 处理的曲线\r\n * @param interPt 原先的相交点\r\n * @param pickPoint 鼠标点击点\r\n * @returns 返回新的曲线\r\n */\r\n private SplitCurve(enRes: PromptEntityResult, interPt: Vector3, interPts: Vector3[]): CurveExtend\r\n {\r\n let cu = enRes.Entity as Curve;\r\n let pickPoint = enRes.Point;\r\n\r\n let cp = cu.GetClosestPointTo(pickPoint, false);\r\n let cus = cu.GetSplitCurvesByPts([interPt]);\r\n if (cus.length === 0)\r\n cus.push(cu.Clone() as Curve);\r\n else if (cus.length === 2)\r\n cus.sort((c1: Curve, c2: Curve) =>\r\n {\r\n return c1.GetClosestPointTo(cp, false).distanceTo(cp)\r\n < c2.GetClosestPointTo(cp, false).distanceTo(cp) ? -1 : 1;\r\n });\r\n\r\n let exType = undefined;\r\n\r\n let newCu = cus[0];\r\n if (newCu instanceof Line || newCu.constructor.name === \"RoomWallLine\")\r\n newCu.Extend(newCu.GetParamAtPoint(interPt));//延伸到需要的长度\r\n else if (newCu instanceof Arc || newCu.constructor.name === \"RoomWallArc\")\r\n {\r\n let arc = newCu as Arc;\r\n if (cus.length === 1)\r\n if (!cu.PtOnCurve(interPt))\r\n {\r\n if (cu.PtOnCurve(interPts[1]))\r\n {\r\n //交点参数\r\n let iparam = arc.GetParamAtPoint(interPts[1]);\r\n let pickParam = arc.GetParamAtAngle(arc.GetAngleAtPoint(pickPoint));\r\n\r\n if (pickParam > iparam)\r\n {\r\n arc.EndAngle = arc.GetAngleAtPoint(interPt);\r\n exType = ExtendType.End;\r\n }\r\n else\r\n {\r\n arc.StartAngle = arc.GetAngleAtPoint(interPt);\r\n exType = ExtendType.Start;\r\n }\r\n }\r\n else\r\n {\r\n //终点,起点\r\n interPts = interPts.sort((p1, p2) =>\r\n {\r\n return arc.ComputeAnlge(arc.GetAngleAtPoint(p1)) - arc.ComputeAnlge(arc.GetAngleAtPoint(p2));\r\n });\r\n if (interPt === interPts[0])\r\n {\r\n arc.EndAngle = arc.GetAngleAtPoint(interPt);\r\n exType = ExtendType.End;\r\n }\r\n else\r\n {\r\n arc.StartAngle = arc.GetAngleAtPoint(interPt);\r\n exType = ExtendType.Start;\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (exType === undefined)\r\n {\r\n //使用equalv3时由于精度误差导致的判断错误\r\n if (interPt.manhattanDistanceTo(newCu.StartPoint) < interPt.manhattanDistanceTo(newCu.EndPoint))\r\n exType = ExtendType.Start;\r\n else\r\n exType = ExtendType.End;\r\n }\r\n return { Curve: newCu, ExtType: exType };\r\n }\r\n\r\n}\r\n","import { FilletUtils } from \"../../../Add-on/FilletUtils\";\r\nimport { UpdateDraw } from \"../../../Common/Status\";\r\nimport { FixIndex } from \"../../../Common/Utils\";\r\nimport { PromptEntityResult } from \"../../../Editor/PromptResult\";\r\nimport { Factory } from \"../../CADFactory\";\r\nimport { CADFiler } from \"../../CADFiler\";\r\nimport { Board, I2DModeling } from \"../../Entity/Board\";\r\nimport { Circle } from \"../../Entity/Circle\";\r\nimport { ExtrudeContourCurve, ExtrudeSolid } from \"../../Entity/Extrude\";\r\nimport { Polyline } from \"../../Entity/Polyline\";\r\nimport { ObjectId } from \"../../ObjectId\";\r\nimport { TemplateAction } from \"./TemplateAction\";\r\n\r\nexport interface IGrooveFillet\r\n{\r\n Index: number;\r\n ArcParams: number[];\r\n}\r\n\r\ninterface IFilletcActionData\r\n{\r\n Entity: ObjectId;\r\n ArcParams: number[];\r\n Grooves?: IGrooveFillet[];\r\n Path2D?: IGrooveFillet[];\r\n}\r\n\r\n@Factory\r\nexport class TemplateFilletAction extends TemplateAction\r\n{\r\n\r\n FilletDatas: IFilletcActionData[] = [];\r\n\r\n constructor()\r\n {\r\n super();\r\n }\r\n\r\n protected _Update(paramDiff: number, newValue: number)\r\n {\r\n for (let d of this.FilletDatas)\r\n {\r\n if (d.Entity?.IsErase !== false)\r\n continue;\r\n\r\n let br = d.Entity.Object as Board;\r\n let update_bak = br.AutoUpdate;\r\n br.AutoUpdate = false;\r\n if (d.ArcParams.length > 0)\r\n this.Fillet(br, newValue, d);\r\n\r\n if (br.Grooves.length > 0 && d.Grooves?.length)\r\n {\r\n for (let data of d.Grooves)\r\n {\r\n const groove = br.Grooves[data.Index];\r\n if (groove)\r\n this.Fillet(groove, newValue, data);\r\n }\r\n }\r\n\r\n const path2d = br.Modeling2D;\r\n if (path2d.length > 0 && d.Path2D?.length)\r\n {\r\n for (let data of d.Path2D)\r\n {\r\n let vm = path2d[data.Index];\r\n if (vm)\r\n {\r\n this.Fillet(vm, newValue, data);\r\n }\r\n }\r\n br._2D3DPathObject = null;\r\n }\r\n\r\n br.AutoUpdate = update_bak;\r\n br.Update(UpdateDraw.Geometry);\r\n }\r\n }\r\n private Fillet(br: ExtrudeSolid | I2DModeling, newValue: number, d: { ArcParams: number[]; })\r\n {\r\n let cu = br instanceof ExtrudeSolid ? br.ContourCurve : br.path;\r\n if (cu instanceof Circle)\r\n return;\r\n\r\n let fillet = new FilletUtils();\r\n fillet.FilletRadius = Math.max(newValue, 0.1);\r\n\r\n let cuOld = cu as Polyline;\r\n for (let arcParam of d.ArcParams)\r\n {\r\n let param1 = FixIndex(arcParam - 1, cu.EndParam);\r\n let param2 = FixIndex(arcParam + 1, cu.EndParam);\r\n let p1 = cu.GetPointAtParam(param1);\r\n let p2 = cu.GetPointAtParam(param2);\r\n\r\n let res1 = new PromptEntityResult(cu, p1);\r\n let res2 = new PromptEntityResult(cu, p2);\r\n\r\n let fres = fillet.FilletPolyLineSelf(res1, res2);\r\n if (fres)\r\n cu = fres.cu1 as ExtrudeContourCurve;\r\n }\r\n\r\n if (br instanceof ExtrudeSolid)\r\n {\r\n if (cu !== cuOld)\r\n br.ContourCurve = cu;\r\n }\r\n else\r\n {\r\n if (cu !== cuOld)\r\n br.path = cu as Polyline;\r\n }\r\n }\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 super.ReadFile(file);\r\n this.FilletDatas.length = 0;\r\n if (ver === 1)\r\n {\r\n let id = file.ReadObjectId();\r\n let param1 = file.Read();\r\n let param2 = file.Read();\r\n let arcParam: number = param2 !== 0 ? param2 - 1 : param1 + 1;\r\n this.FilletDatas.push({ Entity: id, ArcParams: [arcParam] });\r\n }\r\n else\r\n {\r\n let count = file.Read();\r\n for (let i = 0; i < count; i++)\r\n {\r\n let id = file.ReadObjectId();\r\n let params: number[] = [];\r\n let parCount = file.Read();\r\n for (let i = 0; i < parCount; i++)\r\n params.push(file.Read());\r\n\r\n const groove = [];\r\n const path2d = [];\r\n if (ver >= 3)\r\n {\r\n const grooveCount = file.Read();\r\n for (let i = 0; i < grooveCount; i++)\r\n {\r\n let data: IGrooveFillet = {\r\n Index: undefined,\r\n ArcParams: [],\r\n };\r\n data.Index = file.Read();\r\n let parCount = file.Read();\r\n for (let j = 0; j < parCount; j++)\r\n data.ArcParams.push(file.Read());\r\n groove.push(data);\r\n }\r\n\r\n const path2DCount = file.Read();\r\n for (let i = 0; i < path2DCount; i++)\r\n {\r\n let data: IGrooveFillet = {\r\n Index: undefined,\r\n ArcParams: [],\r\n };\r\n data.Index = file.Read();\r\n let parCount = file.Read();\r\n for (let j = 0; j < parCount; j++)\r\n data.ArcParams.push(file.Read());\r\n path2d.push(data);\r\n }\r\n }\r\n\r\n if (id)\r\n this.FilletDatas.push({ Entity: id, ArcParams: params, Grooves: groove, Path2D: path2d });\r\n }\r\n }\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(3);\r\n super.WriteFile(file);\r\n file.Write(this.FilletDatas.length);\r\n for (let d of this.FilletDatas)\r\n {\r\n file.WriteObjectId(d.Entity);\r\n file.Write(d.ArcParams.length);\r\n for (let param of d.ArcParams)\r\n file.Write(param);\r\n\r\n file.Write(d.Grooves ? d.Grooves.length : 0);\r\n for (let data of (d.Grooves ?? []))\r\n {\r\n file.Write(data.Index);\r\n file.Write(data.ArcParams.length);\r\n for (let par of data.ArcParams)\r\n file.Write(par);\r\n }\r\n file.Write(d.Path2D ? d.Path2D.length : 0);\r\n for (let data of (d.Path2D ?? []))\r\n {\r\n file.Write(data.Index);\r\n file.Write(data.ArcParams.length);\r\n for (let par of data.ArcParams)\r\n file.Write(par);\r\n }\r\n }\r\n }\r\n}\r\n","import { EBoardKeyList } from '../../Common/BoardKeyList';\r\nimport { Board } from '../../DatabaseServices/Entity/Board';\r\nimport { PhysicalMaterialRecord } from '../../DatabaseServices/PhysicalMaterialRecord';\r\n\r\n\r\nexport function ApplyGoodInfo(en: Board, material: PhysicalMaterialRecord)\r\n{\r\n en.BoardProcessOption[EBoardKeyList.BrMat] = material.GoodsInfo.name;\r\n en.BoardProcessOption[EBoardKeyList.Color] = material.GoodsInfo.color;\r\n en.BoardProcessOption[EBoardKeyList.Mat] = material.GoodsInfo.material;\r\n}\r\n","import { ApplyGoodInfo } from \"../../../UI/Components/ApplyGoodInfo\";\r\nimport { Factory } from \"../../CADFactory\";\r\nimport { CADFiler } from \"../../CADFiler\";\r\nimport { Board } from \"../../Entity/Board\";\r\nimport { Entity } from \"../../Entity/Entity\";\r\nimport { HardwareCompositeEntity } from \"../../Hardware/HardwareCompositeEntity\";\r\nimport { ObjectId } from \"../../ObjectId\";\r\nimport { TemplateAction } from \"./TemplateAction\";\r\n\r\n@Factory\r\nexport class TemplateMaterialAction extends TemplateAction\r\n{\r\n\r\n constructor(\r\n public Entitys: ObjectId[] = [],\r\n public CompositeEntitys: [ObjectId, number[]][] = [],\r\n public ApplyGoodInfo = true,//应用板材信息\r\n )\r\n {\r\n super();\r\n }\r\n\r\n protected override _Update(paramDiff: number)\r\n {\r\n if (!this.parent.MaterialValue) return;\r\n\r\n for (let id of this.Entitys)\r\n {\r\n if (!(id?.Object) || id.IsErase) continue;\r\n\r\n let en = id.Object;\r\n if (this.ApplyGoodInfo && en instanceof Board)\r\n ApplyGoodInfo(en, this.parent.MaterialValue);\r\n\r\n en.Material = this.parent.MaterialValue.Id;\r\n }\r\n\r\n for (let [id, indexs] of this.CompositeEntitys)\r\n {\r\n if (!(id?.Object) || id.IsErase) continue;\r\n\r\n let en = id.Object as HardwareCompositeEntity;\r\n\r\n let allEntitys: Entity[] = [];\r\n const GetAllEntitys = (hard: HardwareCompositeEntity) =>\r\n {\r\n for (let e of hard.Entitys)\r\n {\r\n if (e instanceof HardwareCompositeEntity)\r\n GetAllEntitys(e);\r\n else\r\n allEntitys.push(e);\r\n }\r\n };\r\n\r\n GetAllEntitys(en);\r\n\r\n for (let index of indexs)\r\n {\r\n let subE = allEntitys[index];\r\n if (!subE) continue;\r\n\r\n if (this.ApplyGoodInfo && subE instanceof Board)\r\n ApplyGoodInfo(subE, this.parent.MaterialValue);\r\n\r\n subE.Material = this.parent.MaterialValue.Id;\r\n }\r\n }\r\n }\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 super.ReadFile(file);\r\n this.ApplyGoodInfo = file.Read() === 1;\r\n this.Entitys.length = 0;\r\n let count = file.Read();\r\n for (let i = 0; i < count; i++)\r\n {\r\n let id = file.ReadObjectId() as ObjectId;\r\n if (id) this.Entitys.push(id);\r\n }\r\n\r\n if (ver > 1)\r\n {\r\n count = file.Read();\r\n this.CompositeEntitys.length = 0;\r\n for (let i = 0; i < count; i++)\r\n {\r\n let id = file.ReadObjectId() as ObjectId;\r\n let indexs = file.Read();\r\n this.CompositeEntitys.push([id, indexs]);\r\n }\r\n }\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(2);\r\n super.WriteFile(file);\r\n file.Write(this.ApplyGoodInfo ? 1 : 0);\r\n file.Write(this.Entitys.length);\r\n for (let ent of this.Entitys)\r\n file.WriteObjectId(ent);\r\n\r\n file.Write(this.CompositeEntitys.length);\r\n for (let [id, indexs] of this.CompositeEntitys)\r\n {\r\n file.WriteObjectId(id);\r\n file.Write(indexs.concat());\r\n }\r\n }\r\n}\r\n","\r\n/**\r\n * 模版参数类型\r\n */\r\nexport enum TemplateParamType\r\n{\r\n String = 0,\r\n Float = 1,\r\n Int = 2,\r\n Enum = 3,\r\n Material = 4,\r\n}\r\n","import { eval2 } from \"../../../Common/eval\";\r\nimport { equaln } from \"../../../Geometry/GeUtils\";\r\nimport { AutoRecord, ISPROXYKEY } from \"../../AutoRecord\";\r\nimport { Factory } from \"../../CADFactory\";\r\nimport { CADFiler } from \"../../CADFiler\";\r\nimport { PhysicalMaterialRecord } from \"../../PhysicalMaterialRecord\";\r\nimport { TemplateAction } from \"../Action/TemplateAction\";\r\nimport { TemplateFilletAction } from \"../Action/TemplateFilletAction\";\r\nimport { TemplateMaterialAction } from \"../Action/TemplateMaterialAction\";\r\nimport { TemplateRecord } from \"../TemplateRecord\";\r\nimport { TemplateParamType } from \"./TemplateParamType\";\r\n\r\n/**\r\n * 模版参数\r\n */\r\n@Factory\r\nexport class TemplateParam\r\n{\r\n /**\r\n * 变量名称\r\n * 命名规范(同js) 并且 禁止前缀`_`,`$`.\r\n */\r\n @AutoRecord name: string;\r\n /** 表达式 使用js引起求值(暂时) */\r\n @AutoRecord expr: string | number = \"\";\r\n /**\r\n * 设置参数的值,通常在模版设计中可以这么干\r\n * 如果需要更新参数的动作,那么应该调用 UpdateParam\r\n */\r\n @AutoRecord value: string | number;\r\n @AutoRecord default: string | number;\r\n @AutoRecord description: string;\r\n @AutoRecord type: TemplateParamType = TemplateParamType.Float;\r\n @AutoRecord min: number;\r\n @AutoRecord max: number;\r\n //可选值\r\n @AutoRecord option: any[];\r\n @AutoRecord actions: TemplateAction[];\r\n @AutoRecord parent: TemplateRecord;\r\n @AutoRecord isLock = false;\r\n\r\n //当类型为Material时,从酷家乐导入后,将载入材质赋值在这里\r\n MaterialValue: PhysicalMaterialRecord;\r\n\r\n constructor()\r\n {\r\n //监听\r\n this.actions = 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 if (value instanceof TemplateAction)\r\n value.parent = this;\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 else\r\n return Reflect.get(target, key, receiver);\r\n }\r\n });\r\n }\r\n WriteAllObjectRecord()\r\n {\r\n if (this.parent)\r\n this.parent.WriteAllObjectRecord();\r\n }\r\n\r\n /**\r\n * private:仅供内部调用.\r\n * 更新参数值,并且触发动作.\r\n */\r\n UpdateParam(value: string | number)\r\n {\r\n switch (this.type)\r\n {\r\n case TemplateParamType.String:\r\n break;\r\n case TemplateParamType.Float:\r\n let oldV = this.value as number;\r\n let newV = value as number;\r\n if (!equaln(oldV, newV))\r\n {\r\n this.WriteAllObjectRecord();\r\n this.value = newV;\r\n\r\n let diff = newV - oldV;\r\n for (let a of this.actions)\r\n a.Update(diff, newV);\r\n }\r\n else\r\n {\r\n for (let a of this.actions)\r\n {\r\n if (a instanceof TemplateFilletAction)\r\n a.Update(0, newV);\r\n }\r\n }\r\n break;\r\n case TemplateParamType.Int:\r\n break;\r\n case TemplateParamType.Enum:\r\n break;\r\n case TemplateParamType.Material:\r\n {\r\n if (this.MaterialValue)\r\n {\r\n for (let a of this.actions)\r\n a.Update(0, 0);\r\n }\r\n this.MaterialValue = undefined;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * 计算表达式的值并更新\r\n * @param vardefines 变量定义列表\r\n * @param paramMap 所有的参数列表.(可能我们需要依赖更新它)\r\n */\r\n EvalUpdate(vardefines: Object, paramMap: Map, evaled: Set, update = true): number\r\n {\r\n if (this.type === TemplateParamType.Material)\r\n {\r\n if (update && this.MaterialValue)\r\n {\r\n for (let a of this.actions)\r\n {\r\n if (a instanceof TemplateMaterialAction)\r\n a.Update(0, this.value);\r\n }\r\n this.MaterialValue = undefined;\r\n }\r\n return 0;\r\n }\r\n\r\n if (this.expr === \"\")\r\n {\r\n if (update)\r\n {\r\n for (let a of this.actions)\r\n {\r\n if (a instanceof TemplateFilletAction)\r\n a.Update(0, this.value);\r\n }\r\n }\r\n return this.value as number;\r\n }\r\n if (evaled.has(this)) return this.value as number;\r\n\r\n if (update)\r\n evaled.add(this);\r\n\r\n let value = parseFloat(this.expr as string);\r\n if (isNaN(this.expr as number))\r\n {\r\n //依赖收集 提前更新\r\n let keywords = (this.expr).split(/[\\s(){}=+-/*/,%;]/).filter(s => s.length > 0);\r\n for (let key of keywords)\r\n {\r\n if (key !== this.name && paramMap.has(key))\r\n vardefines[key] = paramMap.get(key).EvalUpdate(vardefines, paramMap, evaled, update);\r\n }\r\n\r\n try\r\n {\r\n value = eval2(this.expr as string, vardefines);\r\n }\r\n catch (error)\r\n {\r\n console.log(\"更新失败:\", error);\r\n return this.value as number;\r\n }\r\n }\r\n else if (update)\r\n this.expr = \"\";\r\n\r\n vardefines[this.name] = value;\r\n\r\n if (update)\r\n this.UpdateParam(value);\r\n\r\n return value;\r\n }\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 this.name = file.Read();\r\n this.expr = file.Read();\r\n this.value = file.Read();\r\n this.default = file.Read();\r\n this.description = file.Read();\r\n this.type = file.Read();\r\n this.min = file.Read();\r\n this.max = file.Read();\r\n this.option = file.Read();\r\n let count = file.Read();\r\n this.actions.length = 0;\r\n for (let i = 0; i < count; i++)\r\n this.actions.push(file.ReadObject());\r\n\r\n if (ver > 1)\r\n this.isLock = file.Read();\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(2);\r\n file.Write(this.name);\r\n file.Write(this.expr);\r\n file.Write(this.value);\r\n file.Write(this.default);\r\n file.Write(this.description);\r\n file.Write(this.type);\r\n file.Write(this.min);\r\n file.Write(this.max);\r\n file.Write(this.option);\r\n file.Write(this.actions.length);\r\n for (let action of this.actions)\r\n file.WriteObject(action);\r\n\r\n file.Write(this.isLock);\r\n }\r\n}\r\n","import { Ray, Vector3 } from \"three\";\r\nimport { arrayLast } from \"../../Common/ArrayExt\";\r\nimport { ConverBoardTypeToSpaceType } from \"../../DatabaseServices/Entity/Board\";\r\nimport { PromptDistendResult, PromptStatus } from \"../../Editor/PromptResult\";\r\nimport { BoardType } from \"../../UI/Store/BoardInterface\";\r\nimport { Box3Ext, SplitType } from \"../Box\";\r\nimport { ISpaceParse } from \"./ISpaceParse\";\r\n\r\n/**\r\n * 夹层空间分析\r\n */\r\nexport class ClampSpaceParse extends ISpaceParse\r\n{\r\n async Parse()\r\n {\r\n if (this.Boards.length === 1)\r\n {\r\n await this.ParseSignalBoard();\r\n return;\r\n }\r\n\r\n //夹层空间\r\n let clampBoxs: Box3Ext[] = [];\r\n //单层空间(用于切割)\r\n let spliteBoxs = new Map();\r\n for (let [boardType, boards] of this.BoardMap)\r\n {\r\n let splitType: SplitType = ConverBoardTypeToSpaceType(boardType);\r\n let boardBoxCol = this.ParseBoardBox(boards, splitType);\r\n\r\n //#IWFYY\r\n if (boardType === BoardType.Behind && this.BoardMap.size > 1 && boardBoxCol.length > 1)\r\n {\r\n let clampBox = boardBoxCol[0].clampSpace(boardBoxCol[1], splitType);\r\n let size = clampBox.getSize(new Vector3());\r\n if (size.y > 2440)\r\n boardBoxCol = [arrayLast(boardBoxCol)];\r\n }\r\n\r\n if (boardBoxCol.length > 1)\r\n {\r\n let clampBox = boardBoxCol[0].clampSpace(arrayLast(boardBoxCol), splitType);\r\n if (clampBox.isSolid())\r\n clampBoxs.push(clampBox);\r\n }\r\n else if (boardBoxCol.length === 1)\r\n {\r\n spliteBoxs.set(splitType, boardBoxCol[0]);\r\n }\r\n }\r\n\r\n //归并盒子\r\n let allSpaceBox: Box3Ext;\r\n if (clampBoxs.length === 0)//如果不存在盒子,拿所有的盒子当空间\r\n {\r\n allSpaceBox = new Box3Ext();\r\n spliteBoxs.forEach((box) => { allSpaceBox.union(box); });\r\n }\r\n else//夹层空间合并\r\n {\r\n allSpaceBox = clampBoxs[0];\r\n for (let i = 1, len = clampBoxs.length; i < len; i++)\r\n allSpaceBox.intersect(clampBoxs[i]);\r\n }\r\n\r\n //切割并选择合适的空间\r\n await this.SpliteBoxsAndSelect(allSpaceBox, spliteBoxs);\r\n if (this.SpaceBox && this.SpaceBox.isSolid())\r\n {\r\n //空间延伸到背板\r\n let behindBox = spliteBoxs.get(SplitType.Y);\r\n if (behindBox && behindBox.min.y > this.SpaceBox.min.y)\r\n this.SpaceBox.max.setY(behindBox.min.y);\r\n\r\n this.ParseOK = true;\r\n }\r\n }\r\n\r\n /**\r\n * 单板延伸空间的时候的延伸距离\r\n */\r\n get SignalDist()\r\n {\r\n return this._signalDist;\r\n }\r\n protected _signalDist: number;\r\n\r\n async ParseSignalBoard()\r\n {\r\n let res = await this.GetSignalDist();\r\n if (res.Status === PromptStatus.OK && res.Distance > 0)\r\n {\r\n let dist = res.Distance;\r\n this._signalDist = dist;\r\n\r\n let br = this.Boards[0];\r\n let box = br.GetBoundingBoxInMtx(this.SpaceOCSInv);\r\n\r\n let type = this.GetBoardInSpaceType(br);\r\n if (type === undefined)//暂时不支持斜空间\r\n {\r\n //暂时不支持\r\n this.ParseOK = false;\r\n return;\r\n }\r\n\r\n let splitType: SplitType = ConverBoardTypeToSpaceType(type);\r\n\r\n let p1 = box.min.clone().setComponent(splitType, box.min.getComponent(splitType) - dist);\r\n let p2 = box.max.clone().setComponent(splitType, box.min.getComponent(splitType));\r\n\r\n let p3 = box.min.clone().setComponent(splitType, box.max.getComponent(splitType));\r\n let p4 = box.max.clone().setComponent(splitType, box.max.getComponent(splitType) + dist);\r\n\r\n let boxs = [new Box3Ext().setFromPoints([p1, p2]), new Box3Ext().setFromPoints([p3, p4])];\r\n\r\n this.SpaceBox = await this.WrapSelectBox(boxs, ConverBoardTypeToSpaceType(br.BoardType));\r\n\r\n if (this.SpaceBox)\r\n this.ParseOK = true;\r\n }\r\n else\r\n this.ParseOK = false;\r\n }\r\n\r\n //virtual (请重载) 指定用户选择单块板的延伸空间\r\n async GetSignalDist(): Promise\r\n {\r\n let res = new PromptDistendResult();\r\n res.Distance = 300;\r\n res.Status = PromptStatus.OK;\r\n return res;\r\n }\r\n\r\n SetRay(ray: Ray)\r\n {\r\n }\r\n\r\n SelectBoxRecord = new Map();\r\n async WrapSelectBox(splitBoxs: Box3Ext[], splitType: SplitType): Promise\r\n {\r\n let box = await this.SelectBox(splitBoxs, splitType);\r\n this.SelectBoxRecord.set(splitType, splitBoxs.indexOf(box));\r\n return box;\r\n }\r\n\r\n /**\r\n * virtual (请重载) 当盒子空间被切割时,选择合适的空间\r\n * @param splitBoxs 切割后的盒子(2个)\r\n * @param splitType 切割类型\r\n * @returns box 盒子\r\n */\r\n async SelectBox(splitBoxs: Box3Ext[], splitType: SplitType): Promise\r\n {\r\n return splitBoxs[0];\r\n }\r\n\r\n /**\r\n *用单块板包围盒切割空间\r\n */\r\n private async SpliteBoxsAndSelect(orgBox: Box3Ext, spliteBoxes: Map)\r\n {\r\n this.SpaceBox = undefined;\r\n if (spliteBoxes.size === 0)\r\n {\r\n this.SpaceBox = orgBox;\r\n return;\r\n }\r\n\r\n for (let [splitType, spBox] of spliteBoxes)\r\n {\r\n let remBoxs: Box3Ext[] = orgBox.substract(spBox, splitType);\r\n if (remBoxs.length === 0)\r\n return undefined;\r\n else if (remBoxs.length === 1)\r\n {\r\n //#IZE2N\r\n if (splitType === SplitType.Y && remBoxs[0].min.y === orgBox.min.y)\r\n continue;\r\n orgBox = remBoxs[0];\r\n }\r\n else\r\n orgBox = await this.WrapSelectBox(remBoxs, splitType);\r\n\r\n if (!orgBox)\r\n return;\r\n\r\n //Left Or Right Board\r\n if (splitType === SplitType.X)\r\n {\r\n if (spBox.min.x < orgBox.min.x)\r\n this.LeftBoard = this.BoardMap.get(BoardType.Vertical)[0];\r\n else\r\n this.RightBoard = this.BoardMap.get(BoardType.Vertical)[0];\r\n }\r\n }\r\n this.SpaceBox = orgBox;\r\n }\r\n}\r\n","import { ClampSpaceParse } from \"./ClampSpaceParse\";\r\nimport { PromptDistendResult, PromptStatus } from \"../../Editor/PromptResult\";\r\nimport { Box3Ext, SplitType } from \"../Box\";\r\n\r\nexport class ClampSpaceParseFix extends ClampSpaceParse\r\n{\r\n set SignalDist(v: number)\r\n {\r\n this._signalDist = v;\r\n }\r\n get SignalDist()\r\n {\r\n return this._signalDist;\r\n }\r\n\r\n //virtual (请重载) 指定用户选择单块板的延伸空间\r\n async GetSignalDist(): Promise\r\n {\r\n let res = new PromptDistendResult();\r\n res.Distance = this._signalDist;\r\n res.Status = PromptStatus.OK;\r\n return res;\r\n }\r\n\r\n async SelectBox(splitBoxs: Box3Ext[], splitType: SplitType): Promise\r\n {\r\n let index = this.SelectBoxRecord.get(splitType);\r\n return splitBoxs[index];\r\n }\r\n}\r\n","import { Matrix4, Vector3 } from \"three\";\r\nimport { Factory } from \"../../CADFactory\";\r\nimport { CADFiler } from \"../../CADFiler\";\r\nimport { ISerialize } from \"../../ISerialize\";\r\nimport { ObjectId } from \"../../ObjectId\";\r\nimport { TemplateRecord } from \"../TemplateRecord\";\r\n\r\nexport interface PositioningParam\r\n{\r\n objects?: ObjectId[];\r\n index?: number;\r\n count?: number;\r\n}\r\n\r\n\r\n/**\r\n * 模版定位信息(基类)\r\n */\r\n@Factory\r\nexport abstract class Positioning implements ISerialize\r\n{\r\n SpaceCS: Matrix4;//空间坐标系\r\n SpaceSize: Vector3;//有可能不存在\r\n\r\n /**\r\n * 定位 (更新 SpaceCS SpaceBox SpaceSize)\r\n */\r\n async Positioning(param?: PositioningParam)\r\n {\r\n }\r\n\r\n //#region file\r\n parent: TemplateRecord;\r\n WriteAllObjectRecord()\r\n {\r\n if (this.parent)\r\n this.parent.WriteAllObjectRecord();\r\n }\r\n\r\n ReadFile(file: CADFiler): void\r\n {\r\n\r\n }\r\n\r\n WriteFile(file: CADFiler): void\r\n {\r\n }\r\n //#endregion\r\n}\r\n","import { arrayClone } from \"../../../Common/ArrayExt\";\r\nimport { ClampSpaceParse } from \"../../../Geometry/SpaceParse/ClampSpaceParse\";\r\nimport { ClampSpaceParseFix } from \"../../../Geometry/SpaceParse/ClampSpaceParseFix\";\r\nimport { AutoRecord } from \"../../AutoRecord\";\r\nimport { Factory } from \"../../CADFactory\";\r\nimport { CADFiler } from \"../../CADFiler\";\r\nimport { Board } from \"../../Entity/Board\";\r\nimport { ObjectId } from \"../../ObjectId\";\r\nimport { Positioning, PositioningParam } from \"./Positioning\";\r\n\r\n@Factory\r\nexport class PositioningClampSpace extends Positioning\r\n{\r\n @AutoRecord Objects: ObjectId[] = [];\r\n\r\n //按照 SplitType进行排序 0X 1Y 2Z\r\n @AutoRecord SelectBoxIndex: number[] = [0, 0, 0];//左右下\r\n @AutoRecord SignalDist = 100;//默认为100 防止空\r\n\r\n FromSpaceParse(parse: ClampSpaceParse)\r\n {\r\n this.SignalDist = parse.SignalDist || 100;\r\n this.Objects = parse.Boards.map(br => br.Id);\r\n for (let [splitType, index] of parse.SelectBoxRecord)\r\n this.SelectBoxIndex[splitType] = index;\r\n }\r\n\r\n _SpaceParse: ClampSpaceParseFix;\r\n /**\r\n * 定位\r\n */\r\n async Positioning(param?: PositioningParam)\r\n {\r\n let brs = this.Objects.filter(id => !id.IsErase).map(id => id.Object as Board);\r\n this._SpaceParse = new ClampSpaceParseFix(brs);\r\n for (let i = 0; i < 3; i++)\r\n this._SpaceParse.SelectBoxRecord.set(i, this.SelectBoxIndex[i]);\r\n\r\n this._SpaceParse.SignalDist = this.SignalDist;\r\n\r\n await this._SpaceParse.Parse();\r\n if (this._SpaceParse.ParseOK)\r\n {\r\n this.SpaceCS = this._SpaceParse.DrawCS;\r\n this.SpaceSize = this._SpaceParse.Size;\r\n }\r\n else\r\n {\r\n this.SpaceCS = undefined;\r\n this.SpaceSize = undefined;\r\n // Log(\"模块定位错误!\");\r\n }\r\n }\r\n\r\n\r\n //#region File\r\n ReadFile(file: CADFiler): void\r\n {\r\n let ver = file.Read();\r\n let count = file.Read() as number;\r\n this.Objects.length = 0;\r\n for (let i = 0; i < count; i++)\r\n {\r\n let id = file.ReadObjectId();\r\n if (id) this.Objects.push(id);\r\n }\r\n\r\n this.SelectBoxIndex = file.Read();\r\n this.SignalDist = file.Read();\r\n }\r\n\r\n WriteFile(file: CADFiler): void\r\n {\r\n file.Write(1);\r\n file.Write(this.Objects.length);\r\n for (let id of this.Objects)\r\n file.WriteObjectId(id);\r\n\r\n file.Write(arrayClone(this.SelectBoxIndex));\r\n file.Write(this.SignalDist);\r\n }\r\n //#endregion\r\n\r\n}\r\n","import { Positioning } from \"./Positioning\";\r\nimport { Factory } from \"../../CADFactory\";\r\n\r\n/**\r\n * 临时定位\r\n * 在首次绘制时使用2点3点空间时通常不能使用定位,使用临时定位设置给模块后,模块在第一次使用后清空定位.\r\n */\r\n@Factory\r\nexport class PositioningTemporary extends Positioning\r\n{\r\n\r\n}\r\n","\r\n/**\r\n * 模版类型\r\n */\r\nexport enum TemplateType\r\n{\r\n //普通模板\r\n Usual = 0,\r\n //酒格 使用程序\r\n Grid = 1,\r\n //阵列模版\r\n Array = 2,\r\n //没有实体的\r\n Clear = 4,\r\n //展开的\r\n Expanded = 8,\r\n //隐藏的\r\n Hidden = 16,\r\n HiddenChildren = 32,\r\n //标记\r\n Sign = 64,\r\n\r\n //以下未启用\r\n Door = 128,//门板\r\n Drawer = 256,//抽屉\r\n Handle = 512,//拉手\r\n Hinge = 1024,//铰链\r\n}\r\n\r\n//以下未启用\r\nenum TemplateType2\r\n{\r\n Usual = 0,\r\n Door = 1,//门板\r\n Drawer = 2,//抽屉\r\n Handle = 3,//拉手\r\n Hinge = 4,//铰链\r\n WineRack = 5,//酒格\r\n Grid = 6,//格子抽?\r\n}\r\n\r\nexport enum TemplateSplitType\r\n{\r\n None = -1,\r\n X = 0,\r\n Y = 1,\r\n Z = 2,\r\n}\r\n","import { Box3, MathUtils, Matrix4, Vector3 } from \"three\";\r\nimport { arrayRemoveOnce } from \"../../Common/ArrayExt\";\r\nimport { Log } from \"../../Common/Log\";\r\nimport { Intent, Toaster } from \"../../Common/Toaster\";\r\nimport { Box3Ext } from \"../../Geometry/Box\";\r\nimport { ISpaceParse } from \"../../Geometry/SpaceParse/ISpaceParse\";\r\nimport { AutoRecord } from \"../AutoRecord\";\r\nimport { Factory } from \"../CADFactory\";\r\nimport { CADFiler } from \"../CADFiler\";\r\nimport { Board } from \"../Entity/Board\";\r\nimport { Entity } from \"../Entity/Entity\";\r\nimport { ObjectId } from \"../ObjectId\";\r\nimport { SymbolTableRecord } from \"../SymbolTableRecord\";\r\nimport { TemplateParam } from \"./Param/TemplateParam\";\r\nimport { TemplateParamType } from \"./Param/TemplateParamType\";\r\nimport { Positioning } from \"./Positioning/Positioning\";\r\nimport { PositioningClampSpace } from \"./Positioning/PositioningClampSpace\";\r\nimport { PositioningTemporary } from \"./Positioning/PositioningTemporary\";\r\nimport { TemplateSplitType, TemplateType } from \"./TemplateType\";\r\n\r\nconst TemplateDefaultParams = [\"L\", \"W\", \"H\", \"PX\", \"PY\", \"PZ\", \"RX\", \"RY\", \"RZ\", \"BH\"];\r\nexport const TempateDefaultParamCount = TemplateDefaultParams.length;\r\n\r\n/**\r\n * ### 模板记录\r\n * 模版与实体总是互相关联的,所以添加实体进入模版的时候,应该保证这个记录已经加入到数据库\r\n *\r\n * 保留参数名称列表: L W H RX RY RZ X Y Z\r\n * 保留参数前缀: _ $\r\n *\r\n * #### 批量修改参数值.\r\n * 程序应该只传入expr的值,(禁止直接编辑value).传入后,交由模版进行计算更新.\r\n * 模版内部消化,决定是否保留expr.(当纯数字将被直接计算成value而不保存expr).\r\n *\r\n * 由于`DIV`变量的计算机制,`LWH`变量将不能依赖同层变量,(这可能会导致一些错误)\r\n *\r\n * 当模块节点处于切割空间内时,如果想重新绑定空间,那么空间树的位置将发生变更(实际上不管是不是在切割空间内,空间位置都可能发生变更)\r\n *\r\n */\r\n@Factory\r\nexport class TemplateRecord extends SymbolTableRecord\r\n{\r\n @AutoRecord Type: TemplateType = TemplateType.Usual;\r\n @AutoRecord SplitType = TemplateSplitType.None;\r\n private _Parent: ObjectId;\r\n @AutoRecord Children: ObjectId[];\r\n @AutoRecord Params: TemplateParam[];\r\n @AutoRecord Objects: ObjectId[];\r\n private _Positioning: Positioning;\r\n\r\n //展开的 这是UI数据我们暂时不序列化它(默认不展开有比较好的显示效果)\r\n isExpanded = false;\r\n\r\n constructor()\r\n {\r\n super();\r\n //监听\r\n this.Params = this.CreateProxyArray(\r\n value =>\r\n {\r\n if (value instanceof TemplateParam)\r\n value.parent = this;\r\n }\r\n );\r\n\r\n this.Objects = this.CreateProxyArray(\r\n value =>\r\n {\r\n if (value instanceof ObjectId && value.Object instanceof Entity)\r\n {\r\n if (!this.Id)\r\n console.warn(\"请先将模版添加到Database后在进行操作!\");\r\n value.Object.Template = this.Id;\r\n }\r\n }\r\n );\r\n\r\n this.Children = this.CreateProxyArray(\r\n value =>\r\n {\r\n if (value instanceof ObjectId && value.Object instanceof TemplateRecord)\r\n {\r\n if (!this.Id)\r\n console.warn(\"请先将模版添加到Database后在进行操作!\");\r\n value.Object.Parent = this.Id;\r\n }\r\n }\r\n );\r\n }\r\n\r\n get Name()\r\n {\r\n return this.name;\r\n }\r\n set Name(name: string)\r\n {\r\n if (name !== this.name)\r\n {\r\n this.WriteAllObjectRecord();\r\n this.name = name;\r\n }\r\n }\r\n\r\n get Parent()\r\n {\r\n return this._Parent;\r\n }\r\n\r\n set Parent(id: ObjectId)\r\n {\r\n if (id !== this._Parent)\r\n {\r\n this.WriteAllObjectRecord();\r\n if (this?._Parent?.Object)\r\n arrayRemoveOnce(((this.Parent.Object)).Children, this.Id);\r\n this._Parent = id;\r\n }\r\n }\r\n\r\n get Root(): TemplateRecord\r\n {\r\n return (this.Parent?.Object)?.Root ?? this;\r\n }\r\n\r\n get IsRoot()\r\n {\r\n return this._Parent === undefined;\r\n }\r\n\r\n get Entitys()\r\n {\r\n return this.Objects.map(o => o.Object as Entity);\r\n }\r\n\r\n get AllEntitys(): Entity[]\r\n {\r\n let entitys: Entity[] = [];\r\n this.Traverse((t) =>\r\n {\r\n for (let o of t.Objects)\r\n {\r\n if (!o.IsErase)\r\n entitys.push(o.Object as Entity);\r\n }\r\n });\r\n return entitys;\r\n }\r\n\r\n GetProperty(p: TemplateType): boolean { return (this.Type & p) !== 0; }\r\n SetProperty(p: TemplateType, v: boolean)\r\n {\r\n if (this.GetProperty(p) === v) return;\r\n if (v)\r\n this.Type |= p;\r\n else\r\n this.Type &= ~p;\r\n }\r\n\r\n get IsClear() { return this.GetProperty(TemplateType.Clear); }\r\n set IsClear(isClear: boolean) { this.SetProperty(TemplateType.Clear, isClear); }\r\n get IsSign() { return this.GetProperty(TemplateType.Sign); }\r\n set IsSign(isSign: boolean) { this.SetProperty(TemplateType.Sign, isSign); }\r\n\r\n get IsHidden() { return this.GetProperty(TemplateType.Hidden); }\r\n set IsHidden(isHidden: boolean) { this.SetProperty(TemplateType.Hidden, isHidden); }\r\n\r\n get IsHiddenChildren() { return this.GetProperty(TemplateType.HiddenChildren); }\r\n set IsHiddenChildren(isHidden: boolean) { this.SetProperty(TemplateType.HiddenChildren, isHidden); }\r\n\r\n Purge()\r\n {\r\n this.Children = this.Children.filter(rc => rc && !rc.IsErase && rc.Object instanceof TemplateRecord);\r\n this.Objects = this.Objects.filter(id => id?.IsErase === false);\r\n }\r\n\r\n Traverse(callback: (arg0: this) => void)\r\n {\r\n callback(this);\r\n for (let c of this.Children)\r\n {\r\n if (c && c.Object)\r\n {\r\n if (c.Object instanceof TemplateRecord)\r\n {\r\n let template = c.Object as TemplateRecord;\r\n template.Traverse(callback);\r\n }\r\n else\r\n {\r\n Toaster({\r\n message: \"模块子实体有个错误,程序已经暂时先忽略了这个错误!\",\r\n timeout: 8000,\r\n intent: Intent.DANGER,\r\n });\r\n }\r\n }\r\n }\r\n }\r\n async TraverseAsync(callback: (arg0: this) => Promise)\r\n {\r\n await callback(this);\r\n for (let c of this.Children)\r\n {\r\n if (c && c.Object)\r\n {\r\n let template = c.Object as TemplateRecord;\r\n await template.TraverseAsync(callback);\r\n }\r\n }\r\n }\r\n\r\n private _NodeDepthCache: number;\r\n /** 节点深度,根节点=0 */\r\n get NodeDepth()\r\n {\r\n if (this._NodeDepthCache !== undefined)\r\n return this._NodeDepthCache;\r\n\r\n if (!this.Parent?.Object) return 0;\r\n\r\n let parentTemplate = this.Parent.Object as TemplateRecord;\r\n this._NodeDepthCache = parentTemplate.NodeDepth + 1;\r\n\r\n return this._NodeDepthCache;\r\n }\r\n\r\n /** 模版定位 */\r\n get Positioning(): Positioning\r\n {\r\n if (this._Positioning)\r\n return this._Positioning;\r\n\r\n let spaceCS = this.GetTemplateRealitySpaceCS();\r\n let positioning = new PositioningTemporary();\r\n positioning.SpaceCS = spaceCS;\r\n positioning.SpaceSize = new Vector3(this.LParam.value as number, this.WParam.value as number, this.HParam.value as number);\r\n return positioning;\r\n }\r\n\r\n /**\r\n * 当存在夹层空间定位时,辅助定位表达式将使用夹层空间作为相对空间.\r\n */\r\n set Positioning(p: Positioning)\r\n {\r\n this.WriteAllObjectRecord();\r\n if (p) p.parent = this;\r\n this._Positioning = p;\r\n }\r\n\r\n //#region param\r\n\r\n /** 初始化基础参数 */\r\n InitBaseParams()\r\n {\r\n for (let paramName of TemplateDefaultParams)\r\n {\r\n let value = 0;\r\n let param = new TemplateParam();\r\n param.name = paramName;\r\n param.type = TemplateParamType.Float;\r\n param.value = value;\r\n this.Params.push(param);\r\n }\r\n this.LParam.description = \"宽\";\r\n this.WParam.description = \"深\";\r\n this.HParam.description = \"高\";\r\n this.Params[9].description = \"板厚\";\r\n this.Params[9].value = 18;\r\n return this;\r\n }\r\n\r\n get LParam() { return this.Params[0]; }\r\n get WParam() { return this.Params[1]; }\r\n get HParam() { return this.Params[2]; }\r\n\r\n get PXParam() { return this.Params[3]; }\r\n get PYParam() { return this.Params[4]; }\r\n get PZParam() { return this.Params[5]; }\r\n\r\n get RXParam() { return this.Params[6]; }\r\n get RYParam() { return this.Params[7]; }\r\n get RZParam() { return this.Params[8]; }\r\n\r\n GetParam(paramName: string): TemplateParam | undefined\r\n {\r\n return this.Params.find(param => param.name === paramName);\r\n }\r\n\r\n SetParamExpr(paramName: string, expr: string | number)\r\n {\r\n let param = this.GetParam(paramName);\r\n if (param)\r\n param.expr = expr;\r\n }\r\n\r\n DeleteParam(paramName: string)\r\n {\r\n let index = this.Params.findIndex(p => p.name === paramName);\r\n if (index !== -1 && index >= TempateDefaultParamCount)//LWH P R 禁止删除\r\n this.Params.splice(index, 1);\r\n\r\n return this;\r\n }\r\n\r\n //#endregion param\r\n\r\n /**\r\n * 通常UI操作的时候,都需要更新整个树,所以隐藏这个API.\r\n * see `UpdateTemplateTree`\r\n *\r\n * 更新当前节点\r\n *\r\n * ### 定位 (大小,方位)\r\n *\r\n * - (放弃)如果当前节点是更新树的最高层(但当前节点不是根节点)\r\n * 那么当存在夹层空间定位的时候,可以不重复进行夹层空间定位,因为此时该空间不会发生变化.\r\n * 补充:如果夹层空间的板件都在上层,那么可以做这个优化,如果定位的板件没在模块中,那么不能进行这个优化.\r\n *\r\n * - [更新优先]在没有实现变量依赖收集(类似mobx)时,我们认为`positioning`的优先级最高.\r\n * 所以`positioning`会被优先更新. `LWH`,`XYZ`.\r\n *\r\n * - 在使用变量定位时,需要传入上层的坐标系,以便进行相对定位.\r\n * 使用空间分析时,已经不需要上层坐标系.\r\n *\r\n * - 辅助定位:帮助空间坐标系进行旋转\r\n * 辅助定位的参数变量将暴露出来.{RX RY RZ}\r\n * 辅助定位作为参数变量时,用户使用值时很难正确的计算值,应~加入交互选择.(辅助计算)\r\n *\r\n * ### 变量表达式计算\r\n *\r\n * - `LWH`将被`positioning`替代,但变量定义仍然正常存在.\r\n *\r\n * - 变量大部分时候都是被批量更新,(同时传入许多参数).\r\n *\r\n */\r\n protected async Update()\r\n {\r\n this._CacheParamVars = this.GetParameterDefinition(false);\r\n let ens = this.Objects.filter(id => !id.IsErase).map(id => id.Object as Entity);\r\n let evaled = new Set();\r\n\r\n this._CacheSpaceCS = this.GetTemplateSpaceCS(false);\r\n\r\n let paramMap = new Map();\r\n for (let param of this.Params)\r\n paramMap.set(param.name, param);\r\n\r\n if (this._Positioning)\r\n {\r\n await this._Positioning.Positioning();\r\n if (!this._Positioning.SpaceCS)\r\n {\r\n //退化成个体坐标系\r\n if (ens.length)\r\n {\r\n this._Positioning.SpaceCS = ens[0].SpaceOCS;\r\n this._Positioning.SpaceSize = new Vector3(this.LParam.value as number, this.WParam.value as number, this.HParam.value as number);\r\n }\r\n else\r\n {\r\n Log(`模块:(${this.name})定位错误!`);\r\n return;//出事故\r\n }\r\n }\r\n }\r\n\r\n for (let en of ens)\r\n {\r\n en.ApplyMatrix(en.SpaceOCSInv);\r\n if (en instanceof Board)\r\n en.IsLazyGrooveCheck = true;\r\n }\r\n\r\n //#region 1.定位(坐标系和大小)\r\n /**\r\n * LWH在存在定位空间和继承空间时的表达式行为不一致.\r\n * - 在存在定位空间的时候,LWH是修改定位空间旋转后的值.\r\n * - 不存在定位空间的时候,修改的是空间旋转前的值,因为此时已经没有空间尺寸可供旋转了,\r\n * 只能先提供空间尺寸,然后才进行旋转.\r\n */\r\n\r\n if (this._Positioning)\r\n {\r\n this._CacheSpaceCS = this._Positioning.SpaceCS;\r\n this._CacheSpaceSize = this._Positioning.SpaceSize;\r\n\r\n this.RotateSpaceCS(paramMap, evaled);\r\n\r\n if (this.LParam.expr)\r\n this._CacheSpaceSize.x = this.LParam.EvalUpdate(this._CacheParamVars, paramMap, evaled, false);\r\n if (this.WParam.expr)\r\n this._CacheSpaceSize.y = this.WParam.EvalUpdate(this._CacheParamVars, paramMap, evaled, false);\r\n if (this.HParam.expr)\r\n this._CacheSpaceSize.z = this.HParam.EvalUpdate(this._CacheParamVars, paramMap, evaled, false);\r\n\r\n if (this._Positioning instanceof PositioningTemporary)\r\n this._Positioning = undefined;\r\n }\r\n else\r\n {\r\n let l = this.LParam.EvalUpdate(this._CacheParamVars, paramMap, evaled, false);\r\n let w = this.WParam.EvalUpdate(this._CacheParamVars, paramMap, evaled, false);\r\n let h = this.HParam.EvalUpdate(this._CacheParamVars, paramMap, evaled, false);\r\n this._CacheSpaceSize = new Vector3(l, w, h);\r\n\r\n this.RotateSpaceCS(paramMap, evaled);\r\n\r\n if (!this.Parent)\r\n {\r\n this.PXParam.value = 0;\r\n this.PYParam.value = 0;\r\n this.PZParam.value = 0;\r\n\r\n this.PXParam.expr = \"\";\r\n this.PYParam.expr = \"\";\r\n this.PZParam.expr = \"\";\r\n\r\n this.RXParam.value = 0;\r\n this.RYParam.value = 0;\r\n this.RZParam.value = 0;\r\n\r\n this.RXParam.expr = \"\";\r\n this.RYParam.expr = \"\";\r\n this.RZParam.expr = \"\";\r\n }\r\n }\r\n\r\n //相对定位. use PX PY PZ\r\n this.UpdatePosition(paramMap, evaled);\r\n\r\n //更新LWH(通过定位空间)\r\n this.LParam.UpdateParam(this._CacheSpaceSize.x);\r\n this.WParam.UpdateParam(this._CacheSpaceSize.y);\r\n this.HParam.UpdateParam(this._CacheSpaceSize.z);\r\n\r\n evaled.add(this.LParam);\r\n evaled.add(this.WParam);\r\n evaled.add(this.HParam);\r\n\r\n //#endregion\r\n\r\n //更新其他参数变量 Eval local params\r\n for (const param of this.Params)\r\n {\r\n param.EvalUpdate(this._CacheParamVars, paramMap, evaled);\r\n }\r\n\r\n //删除材质变量(材质变量仅在KJL导入中使用,重新出现在右侧列表中是不明智的?) (但是用户可能编辑更新了它?)\r\n // arrayRemoveIf(this.Params, p => p.type === TemplateParamType.Material);\r\n\r\n //变换到新的模版空间\r\n for (let en of ens)\r\n {\r\n en.ApplyMatrix(this._CacheSpaceCS);\r\n if (en instanceof Board)\r\n en.LazyGrooveCheckAll();\r\n }\r\n\r\n //更新顶层变量值\r\n if (!this.Parent)\r\n {\r\n for (const param of this.Params)\r\n this._CacheParamVars[`$${param.name}`] = param.value;\r\n }\r\n else\r\n {\r\n for (let param of this._CatchRootParam)\r\n this._CacheParamVars[`$${param.name}`] = param.value;\r\n }\r\n\r\n //保持SpaceCS\r\n for (let ent of ens)\r\n {\r\n ent.SpaceOCS = this._CacheSpaceCS;\r\n }\r\n }\r\n\r\n /**\r\n * 使用PXPYPZ更新空间位置\r\n */\r\n private UpdatePosition(paramMap: Map, evaled: Set)\r\n {\r\n let x = this.PXParam.EvalUpdate(this._CacheParamVars, paramMap, evaled, false);\r\n let y = this.PYParam.EvalUpdate(this._CacheParamVars, paramMap, evaled, false);\r\n let z = this.PZParam.EvalUpdate(this._CacheParamVars, paramMap, evaled, false);\r\n\r\n if (x !== 0 || y !== 0 || z !== 0)\r\n {\r\n this.PXParam.value = x;\r\n this.PYParam.value = y;\r\n this.PZParam.value = z;\r\n let baseP = new Vector3(x, y, z);\r\n baseP.applyMatrix4(this._CacheSpaceCS);\r\n this._CacheSpaceCS.setPosition(baseP);\r\n }\r\n }\r\n\r\n /**\r\n * 旋转空间定位,如果旋转成功,那么SpaceSize和SpaceCS都可能被更新\r\n */\r\n private RotateSpaceCS(paramMap: Map, evaled: Set)\r\n {\r\n this.RXParam.EvalUpdate(this._CacheParamVars, paramMap, evaled);\r\n this.RYParam.EvalUpdate(this._CacheParamVars, paramMap, evaled);\r\n this.RZParam.EvalUpdate(this._CacheParamVars, paramMap, evaled);\r\n //use RX RY RZ\r\n let rx = MathUtils.degToRad(this.RXParam.value as number);\r\n let ry = MathUtils.degToRad(this.RYParam.value as number);\r\n let rz = MathUtils.degToRad(this.RZParam.value as number);\r\n if (rx !== 0 || ry !== 0 || rz !== 0)\r\n {\r\n let mrx = new Matrix4().makeRotationX(rx);\r\n let mry = new Matrix4().makeRotationY(ry);\r\n let mrz = new Matrix4().makeRotationZ(rz);\r\n let mro = mrz.multiply(mry.multiply(mrx));\r\n let roSpace = mro.multiplyMatrices(this._CacheSpaceCS, mro);\r\n let roSpaceInv = mrx.getInverse(roSpace); //变量复用\r\n let transfromToRoSpace = roSpaceInv.multiply(this._CacheSpaceCS);\r\n let box = new Box3(new Vector3(), this._CacheSpaceSize.clone());\r\n box.applyMatrix4(transfromToRoSpace);\r\n box.getSize(this._CacheSpaceSize);\r\n let baseP = box.min.clone().applyMatrix4(roSpace);\r\n roSpace.setPosition(baseP);\r\n //更新LWH(通过定位空间)\r\n this.LParam.UpdateParam(this._CacheSpaceSize.x);\r\n this.WParam.UpdateParam(this._CacheSpaceSize.y);\r\n this.HParam.UpdateParam(this._CacheSpaceSize.z);\r\n this._CacheSpaceCS = roSpace;\r\n }\r\n this._CacheParamVars[\"L\"] = this._CacheSpaceSize.x;\r\n this._CacheParamVars[\"W\"] = this._CacheSpaceSize.y;\r\n this._CacheParamVars[\"H\"] = this._CacheSpaceSize.z;\r\n }\r\n\r\n /** 以广度搜索优先更新节点树 */\r\n async UpdateTemplateTree()\r\n {\r\n if (this.Parent && !this.Parent.IsErase)\r\n {\r\n let parent = this.Parent.Object as TemplateRecord;\r\n if (parent.SplitType !== TemplateSplitType.None || this.NeedUpdateParent)\r\n return await parent.UpdateTemplateTree();\r\n }\r\n\r\n let stack: TemplateRecord[] = [this];\r\n await this.Update();\r\n while (stack.length > 0)\r\n {\r\n let template = stack.shift();\r\n\r\n //清理历史记录时,子对象会被清理,为了防止被清理掉,清除不需要的id\r\n template.Children = template.Children.filter(id => id && !id.IsErase);\r\n\r\n //计算DIV(给子空间使用)\r\n if (template.Children.length > 0 && template.SplitType !== TemplateSplitType.None)\r\n {\r\n let sum = 0;//除去div时,总共占用的空间\r\n for (let c of template.Children)\r\n {\r\n let ctemplate = c.Object as TemplateRecord;\r\n let vardefines = ctemplate.GetParameterDefinition(false);\r\n vardefines._DIV = 0;\r\n let param = ctemplate.Params[template.SplitType];\r\n sum += param.EvalUpdate(vardefines, new Map(), new Set(), false);\r\n }\r\n\r\n let sumDiv = 0;//div=1时占用的空间\r\n for (let c of template.Children)\r\n {\r\n let ctemplate = c.Object as TemplateRecord;\r\n let vardefines = ctemplate.GetParameterDefinition(false);\r\n vardefines._DIV = 1;\r\n let param = ctemplate.Params[template.SplitType];\r\n sumDiv += param.EvalUpdate(vardefines, new Map(), new Set(), false);\r\n }\r\n\r\n let divCount = sumDiv - sum;\r\n\r\n if (divCount > 0)\r\n {\r\n //div可用总空间\r\n let divSum = (template.Params[template.SplitType].value as number - sum);\r\n if (divSum > 0)\r\n template._CacheParamVars.DIV = divSum / divCount;\r\n else\r\n template._CacheParamVars.DIV = 0;\r\n }\r\n\r\n template._CacheParamVars.POS = 0;\r\n }\r\n\r\n for (let c of template.Children)\r\n {\r\n let ctemplate = c.Object as TemplateRecord;\r\n stack.push(ctemplate);\r\n await ctemplate.Update();\r\n\r\n if (template._CacheParamVars.POS !== undefined)//更新POS\r\n template._CacheParamVars.POS += ctemplate.Params[template.SplitType].value as number;\r\n }\r\n }\r\n }\r\n\r\n /** 缓存本节点的变量定义值,当子层需要本层的参数时,可以直接获取 */\r\n protected _CacheParamVars: any;\r\n protected _CacheSpaceCS: Matrix4;\r\n protected _CacheSpaceSize: Vector3;\r\n protected _CatchRootParam: Set;\r\n /**\r\n * 本节点可用的所有变量定义.(包括变量继承)\r\n * @param [useCache=true] 当更新当前节点的时候,我们不希望使用缓存,(因为父节点的参数可能已经被更新)\r\n * @returns\r\n */\r\n GetParameterDefinition(useCache = true): any\r\n {\r\n if (this._CacheParamVars && useCache)\r\n return this._CacheParamVars;\r\n\r\n let vars = this.GetParentParams();\r\n this._CatchRootParam = new Set();\r\n for (const param of this.Params)\r\n {\r\n vars[param.name] = param.value;\r\n\r\n let rootParamName = \"$\" + param.name;\r\n\r\n if (!this.Parent)\r\n vars[rootParamName] = param.value;//root\r\n else if (!(rootParamName in vars))\r\n {\r\n this._CatchRootParam.add(param);\r\n vars[rootParamName] = param.value;//顶层变量捕获 root\r\n }\r\n }\r\n\r\n this._CacheParamVars = vars;\r\n return vars;\r\n }\r\n\r\n /**\r\n * 变量继承\r\n * - 每继承一层,前缀增加一个`_`\r\n * - 顶层前缀`$`\r\n *\r\n * @returns 继承于父空间的变量定义列表\r\n */\r\n private GetParentParams(): any\r\n {\r\n if (!this.Parent?.Object) return {};\r\n\r\n let parent = this.Parent.Object as TemplateRecord;\r\n let params = parent.GetParameterDefinition();\r\n\r\n let newParams: any = {};\r\n for (let key in params)\r\n {\r\n if (key[0] !== \"$\")\r\n newParams[\"_\" + key] = params[key];\r\n else\r\n newParams[key] = params[key];\r\n }\r\n\r\n if (newParams._DIV === undefined && parent.SplitType !== TemplateSplitType.None)\r\n newParams._DIV = 1;\r\n if (newParams._POS === undefined)\r\n newParams._POS = 0;\r\n\r\n return newParams;\r\n }\r\n\r\n get SpaceParse(): ISpaceParse\r\n {\r\n let spaceParse: ISpaceParse;\r\n\r\n if (this._Positioning && this._Positioning instanceof PositioningClampSpace)\r\n spaceParse = this._Positioning._SpaceParse;\r\n else\r\n spaceParse = new ISpaceParse();\r\n\r\n spaceParse.SpaceOCS = this._CacheSpaceCS;\r\n spaceParse.ParseOK = true;\r\n spaceParse.SpaceBox = new Box3Ext(new Vector3(), this._CacheSpaceSize);\r\n return spaceParse;\r\n }\r\n\r\n /**\r\n * 获得当前的模版空间的相对坐标系\r\n * - 存在父节点的时候使用父节点的模版空间坐标系\r\n * - 不存在父节点的时候使用自身的模版空间坐标系\r\n *\r\n * - 空间坐标系将被定位更新\r\n *\r\n * @param [useCache=true] 当更新当前节点的时候,我们不希望使用缓存,(因为父节点的参数可能已经被更新)\r\n */\r\n private GetTemplateSpaceCS(useCache = true): Matrix4\r\n {\r\n if (useCache && this._CacheSpaceCS)\r\n return this._CacheSpaceCS.clone();\r\n\r\n if (this.Parent?.Object)\r\n {\r\n let template = this.Parent.Object as TemplateRecord;\r\n return template.GetTemplateSpaceCS();\r\n }\r\n\r\n for (let brId of this.Objects)\r\n {\r\n if (brId.Object && !brId.IsErase)\r\n {\r\n let br = brId.Object as Entity;\r\n return br.SpaceOCS;\r\n }\r\n }\r\n\r\n return new Matrix4();\r\n }\r\n\r\n /**\r\n * 获得当前模块的实际位置坐标系.\r\n * 使用 GetTemplateSpaceCS 可能会得到不准确的位置.(得到Parent或者已经缓存的位置)\r\n */\r\n GetTemplateRealitySpaceCS()\r\n {\r\n for (let brId of this.Objects)\r\n {\r\n if (brId.Object && !brId.IsErase)\r\n {\r\n let br = brId.Object as Entity;\r\n return br.SpaceOCS;\r\n }\r\n }\r\n return this.GetTemplateSpaceCS(true);//此时已经可能不准确\r\n }\r\n\r\n get NeedUpdateParent(): boolean\r\n {\r\n if (this._Positioning) return false; //存在自我定位时,不需要更新父层\r\n\r\n if (this.Parent)\r\n {\r\n let template = this.Parent.Object as TemplateRecord;\r\n return template._CacheSpaceCS === undefined; //父层已更新时,不需要更新父层\r\n }\r\n\r\n return false; //没有父层时,不需要更新父层\r\n }\r\n\r\n protected get PositioningSupportBoards(): Board[]\r\n {\r\n let brs: Board[] = [];\r\n if (this._Positioning && this._Positioning instanceof PositioningClampSpace)\r\n {\r\n for (let id of this._Positioning.Objects)\r\n if (!id.IsErase && id.Object instanceof Board)\r\n brs.push(id.Object);\r\n }\r\n if (brs.length === 0)\r\n {\r\n //可视化空间使用周围板件数据\r\n let parentTemplate = this.Parent?.Object as TemplateRecord;\r\n\r\n while (parentTemplate)\r\n {\r\n for (let e of parentTemplate.AllEntitys)\r\n if (e instanceof Board)\r\n {\r\n brs.push(e);\r\n break;\r\n }\r\n\r\n if (brs.length) break;\r\n\r\n parentTemplate = parentTemplate.Parent?.Object as TemplateRecord;\r\n }\r\n\r\n if (brs.length === 0)\r\n brs.push(new Board());\r\n }\r\n return brs;\r\n }\r\n\r\n protected _Version: number;\r\n //#region -------------------------File-------------------------\r\n //对象应该实现dataIn和DataOut的方法,为了对象的序列化和反序列化\r\n //对象从文件中读取数据,初始化自身\r\n ReadFile(file: CADFiler)\r\n {\r\n this._Version = file.Read();\r\n super.ReadFile(file);\r\n this.Type = file.Read();\r\n this._Parent = file.ReadHardObjectId();\r\n let count = file.Read() as number;\r\n this.Children.length = 0;\r\n for (let i = 0; i < count; i++)\r\n {\r\n let id = file.ReadHardObjectId();\r\n if (id) this.Children.push(id);\r\n }\r\n count = file.Read();\r\n this.Params.length = 0;\r\n for (let i = 0; i < count; i++)\r\n this.Params.push(file.ReadObject());\r\n count = file.Read();\r\n this.Objects.length = 0;\r\n for (let i = 0; i < count; i++)\r\n {\r\n let id = file.ReadObjectId();\r\n if (id) this.Objects.push(id);\r\n }\r\n\r\n this._Positioning = file.ReadObject();\r\n\r\n if (this._Version > 1)\r\n this.SplitType = file.Read() ?? this.SplitType;\r\n\r\n //清空缓存,因为我们回滚了模块(BUG:修改参数->撤销->替换模块(此时读取了缓存的数据)\r\n this._CacheParamVars = undefined;\r\n this._CacheSpaceCS = undefined;\r\n this._CacheSpaceSize = undefined;\r\n this._CatchRootParam = undefined;\r\n this._NodeDepthCache = undefined;\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(3);\r\n super.WriteFile(file);\r\n\r\n let type = this.Type;\r\n //我们在保存文件的时候,才会去序列化它,否则我们不会自动添加历史记录(被动式)\r\n if (this.isExpanded)\r\n type |= TemplateType.Expanded;\r\n else\r\n type &= ~TemplateType.Expanded;\r\n\r\n file.Write(type);\r\n file.WriteHardObjectId(this._Parent);\r\n file.Write(this.Children.length);\r\n for (let id of this.Children)\r\n file.WriteHardObjectId(id);\r\n file.Write(this.Params.length);\r\n for (let param of this.Params)\r\n file.WriteObject(param);\r\n file.Write(this.Objects.length);\r\n for (let id of this.Objects)\r\n file.WriteHardObjectId(id);\r\n\r\n file.WriteObject(this._Positioning);\r\n\r\n file.Write(this.SplitType);\r\n }\r\n //#endregion\r\n}\r\n","import { Vector3 } from \"three\";\r\nimport { ExtendsBoardThickness } from \"../../../Add-on/DrawBoard/BuildBoardTool\";\r\nimport { DrawLatticeDrawerTool } from \"../../../Add-on/LatticeDrawer/LatticeDrawerTool\";\r\nimport { EBoardKeyList } from \"../../../Common/BoardKeyList\";\r\nimport { DefaultLatticeConfig } from \"../../../Editor/DefaultConfig\";\r\nimport { Box3Ext } from \"../../../Geometry/Box\";\r\nimport { ISpaceParse } from \"../../../Geometry/SpaceParse/ISpaceParse\";\r\nimport { ILatticeOption } from \"../../../UI/Store/LatticeInterface\";\r\nimport { Factory } from \"../../CADFactory\";\r\nimport { CADFiler } from \"../../CADFiler\";\r\nimport { Board } from \"../../Entity/Board\";\r\nimport { TemplateRecord } from \"../TemplateRecord\";\r\n\r\n@Factory\r\nexport class TemplateLatticeRecord extends TemplateRecord\r\n{\r\n private option: ILatticeOption = { ...DefaultLatticeConfig };\r\n constructor()\r\n {\r\n super();\r\n this.name = \"格子抽(自动)\";\r\n }\r\n get Option()\r\n {\r\n return Object.assign({}, this.option);\r\n }\r\n set Option(option: ILatticeOption)\r\n {\r\n this.WriteAllObjectRecord();\r\n Object.assign(this.option, option);\r\n ExtendsBoardThickness(this, option.thickness);\r\n }\r\n\r\n // InitBaseParams()\r\n // {\r\n // super.InitBaseParams();\r\n // return this;\r\n // }\r\n\r\n protected async Update()\r\n {\r\n await super.Update();\r\n\r\n let thickness = this.GetParam(\"BH\")?.value as number;\r\n if (thickness)\r\n this.option.thickness = thickness;\r\n\r\n let tool = DrawLatticeDrawerTool.GetInstance() as DrawLatticeDrawerTool;\r\n\r\n let sbrs = this.PositioningSupportBoards;\r\n let space = new ISpaceParse(sbrs, this._CacheSpaceCS);\r\n space.ParseOK = true;\r\n space.SpaceBox = new Box3Ext(new Vector3(), this._CacheSpaceSize);\r\n\r\n let nbrs = tool.Draw(space, this.Option);\r\n\r\n if (sbrs.length > 0)\r\n {\r\n for (let br of nbrs)\r\n {\r\n br.BoardProcessOption[EBoardKeyList.CabinetName] = sbrs[0].BoardProcessOption[EBoardKeyList.CabinetName];\r\n br.BoardProcessOption[EBoardKeyList.RoomName] = sbrs[0].BoardProcessOption[EBoardKeyList.RoomName];\r\n }\r\n }\r\n\r\n\r\n for (let i = nbrs.length; i < this.Objects.length; i++)\r\n this.Objects[i].Object.Erase();\r\n\r\n for (let i = 0; i < nbrs.length; i++)\r\n {\r\n if (i < this.Objects.length)\r\n {\r\n let br = this.Objects[i].Object as Board;\r\n br.Erase(false);\r\n br.CopyFrom(nbrs[i]);\r\n br.SpaceOCS = this._CacheSpaceCS;\r\n }\r\n else\r\n {\r\n nbrs[i].SpaceOCS = this._CacheSpaceCS;\r\n this._db.ModelSpace.Append(nbrs[i]);\r\n this.Objects.push(nbrs[i].Id);\r\n }\r\n }\r\n }\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 super.ReadFile(file);\r\n\r\n this.option.arrayType = file.Read();\r\n this.option.gripWidth = file.Read();\r\n this.option.gripDepth = file.Read();\r\n this.option.widthCount = file.Read();\r\n this.option.depthCount = file.Read();\r\n this.option.knifeRad = file.Read();\r\n this.option.thickness = file.Read();\r\n this.option.arcLen = file.Read();\r\n this.option.downDist = file.Read();\r\n this.option.space = file.Read();\r\n this.option.grooveAddWidth = file.Read();\r\n this.option.upSealed = file.Read();\r\n this.option.downSealed = file.Read();\r\n this.option.leftSealed = file.Read();\r\n this.option.rightSealed = file.Read();\r\n this.option.isAuto = file.Read();\r\n this.option.isChange = file.Read();\r\n this.option.isOpenCut = file.Read();\r\n this.option.upCut = file.Read();\r\n this.option.downCut = file.Read();\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.option.arrayType);\r\n file.Write(this.option.gripWidth);\r\n file.Write(this.option.gripDepth);\r\n file.Write(this.option.widthCount);\r\n file.Write(this.option.depthCount);\r\n file.Write(this.option.knifeRad);\r\n file.Write(this.option.thickness);\r\n\r\n file.Write(this.option.arcLen);\r\n file.Write(this.option.downDist);\r\n file.Write(this.option.space);\r\n file.Write(this.option.grooveAddWidth);\r\n file.Write(this.option.upSealed);\r\n file.Write(this.option.downSealed);\r\n file.Write(this.option.leftSealed);\r\n file.Write(this.option.rightSealed);\r\n file.Write(this.option.isAuto);\r\n file.Write(this.option.isChange);\r\n\r\n file.Write(this.option.isOpenCut);\r\n file.Write(this.option.upCut);\r\n file.Write(this.option.downCut);\r\n }\r\n //#endregion\r\n}\r\n","import { Vector3 } from \"three\";\r\nimport { Board } from \"../../DatabaseServices/Entity/Board\";\r\nimport { MoveMatrix } from \"../../Geometry/GeUtils\";\r\nimport { ISpaceParse } from \"../../Geometry/SpaceParse/ISpaceParse\";\r\nimport { TBBoardOption, BoardType } from \"../../UI/Store/BoardInterface\";\r\n\r\nexport function BuildTopBottomBoards(topOpt: TBBoardOption, bottomOpt: TBBoardOption, space: ISpaceParse): Board[]\r\n{\r\n let brs: Board[] = [];\r\n if (topOpt.isDraw)\r\n {\r\n let basePt = GetTopBoardBasePt(topOpt, space);\r\n brs.push(GetTopOrDownBoard(space, topOpt, basePt, true));\r\n }\r\n if (bottomOpt.isDraw)\r\n {\r\n let basePt = GetBottomBoardBasePt(bottomOpt, space);\r\n brs.push(GetTopOrDownBoard(space, bottomOpt, basePt, false));\r\n\r\n let size = space.Size;\r\n let refSize = size.y;\r\n const thickness = bottomOpt.footThickness;\r\n\r\n if (bottomOpt.offset > 0 && !bottomOpt.isWrapSide)\r\n {\r\n //绘制前地脚\r\n if (bottomOpt.isDrawFooter)\r\n {\r\n brs.push(GetFootBoard(bottomOpt, space, false));\r\n refSize -= thickness + bottomOpt.footBehindShrink;\r\n }\r\n\r\n //绘制后地脚\r\n if (bottomOpt.isDrawBackFooter)\r\n {\r\n brs.push(GetFootBoard(bottomOpt, space, true));\r\n refSize -= thickness + bottomOpt.footerOffset;\r\n }\r\n //绘制加强条\r\n if (bottomOpt.isDrawStrengthenStrip)\r\n brs.push(...GetStrengthenStrips(bottomOpt, space, refSize - bottomOpt.frontDist - bottomOpt.behindDistance));\r\n }\r\n }\r\n return brs;\r\n}\r\nfunction GetTopOrDownBoard(spaceParse: ISpaceParse, opt: TBBoardOption, basePt: Vector3, isTop = true)\r\n{\r\n //前后距\r\n let frontDist = -opt.frontDist;\r\n let backDist = -opt.behindDistance;\r\n //左右延伸\r\n let leftExt = opt.leftExt;\r\n let rightExt = opt.rightExt;\r\n\r\n //大小\r\n let size = spaceParse.Size;\r\n let length = size.x;\r\n let width = size.y + frontDist + backDist;\r\n let thickness = opt.thickness;\r\n if (opt.isWrapSide)\r\n {\r\n let leftBoardThickness = spaceParse.LeftBoard ? spaceParse.LeftBoard.Thickness : opt.thickness;\r\n let rightBoardThickness = spaceParse.RightBoard ? spaceParse.RightBoard.Thickness : opt.thickness;\r\n length += leftBoardThickness + rightBoardThickness + leftExt + rightExt;\r\n }\r\n else\r\n {\r\n leftExt = 0;\r\n rightExt = 0;\r\n }\r\n\r\n let board = Board.CreateBoard(length, width, thickness, BoardType.Layer);\r\n board.Name = \"顶板\";\r\n\r\n if (!isTop)\r\n {\r\n board.Name = \"底板\";\r\n }\r\n //移动右缩和前距的距离\r\n basePt.add(new Vector3(rightExt, -frontDist));\r\n board.ApplyMatrix(MoveMatrix(basePt));\r\n board.ApplyMatrix(spaceParse.SpaceOCS);\r\n\r\n return board;\r\n}\r\nfunction GetTopBoardBasePt(opt: TBBoardOption, spc: ISpaceParse)\r\n{\r\n let box = spc.SpaceBox;\r\n let min = box.min;\r\n let max = box.max;\r\n let basePoint = new Vector3();\r\n if (opt.isWrapSide)\r\n {\r\n let rightBoardThickness = spc.RightBoard ? spc.RightBoard.Thickness : opt.thickness;\r\n basePoint.set(max.x + rightBoardThickness, min.y, max.z);\r\n }\r\n else\r\n {\r\n basePoint.set(max.x, min.y, max.z - (opt.thickness + parseFloat(opt.offset as unknown as string)));\r\n }\r\n return basePoint;\r\n}\r\nfunction GetBottomBoardBasePt(opt: TBBoardOption, spc: ISpaceParse)\r\n{\r\n let box = spc.SpaceBox;\r\n let min = box.min;\r\n let max = box.max;\r\n let basePoint = new Vector3();\r\n if (opt.isWrapSide)\r\n {\r\n let rightBoardThickness = spc.RightBoard ? spc.RightBoard.Thickness : opt.thickness;\r\n basePoint.set(max.x + rightBoardThickness, min.y, min.z - opt.thickness);\r\n }\r\n else\r\n {\r\n basePoint.set(max.x, min.y, min.z + opt.offset);\r\n }\r\n return basePoint;\r\n}\r\nfunction GetFootBoard(opt: TBBoardOption, spaceParse: ISpaceParse, isBack: boolean)\r\n{\r\n let offset = opt.offset;\r\n let thickness = opt.footThickness;\r\n let footBoard = Board.CreateBoard(offset, spaceParse.Size.x, opt.footThickness, BoardType.Behind);\r\n footBoard.Name = isBack ? \"后地脚\" : \"地脚线\";\r\n let moveDist = isBack ? spaceParse.Size.y - opt.footerOffset - opt.behindDistance : thickness + opt.footBehindShrink + opt.frontDist;\r\n footBoard.ApplyMatrix(MoveMatrix(spaceParse.SpaceBox.min.clone().add(new Vector3(0, moveDist))))\r\n .ApplyMatrix(spaceParse.SpaceOCS);\r\n\r\n return footBoard;\r\n}\r\n\r\nfunction GetStrengthenStrips(opt: TBBoardOption, spaceParse: ISpaceParse, width: number)\r\n{\r\n let brs: Board[] = [];\r\n const thickness = opt.footThickness;\r\n let count = opt.divCount;\r\n if (count === 0) return brs;\r\n let spaceSize = (spaceParse.Size.x - count * thickness) / (count + 1);\r\n let br = Board.CreateBoard(opt.offset, width, thickness, BoardType.Vertical);\r\n\r\n let yDist = opt.frontDist;\r\n if (opt.isDrawFooter)\r\n yDist += (opt.footBehindShrink + thickness);\r\n\r\n for (let i = 1; i <= count; i++)\r\n {\r\n let b = br.Clone();\r\n b.Name = \"加强条\" + i;\r\n b.ApplyMatrix(MoveMatrix(spaceParse.SpaceBox.min.clone().add(new Vector3(spaceSize * i + (i - 1) * thickness, yDist))))\r\n .ApplyMatrix(spaceParse.SpaceOCS);\r\n brs.push(b);\r\n }\r\n return brs;\r\n}\r\n","import { ExtendsBoardThickness } from \"../../../Add-on/DrawBoard/BuildBoardTool\";\r\nimport { BuildTopBottomBoards } from \"../../../Add-on/DrawBoard/BuildTopBottomBoardTool\";\r\nimport { EBoardKeyList } from \"../../../Common/BoardKeyList\";\r\nimport { DefaultBottomBoardOption, DefaultTopBoardOption } from \"../../../Editor/DefaultConfig\";\r\nimport { BoardProcessOption, FaceDirection, LinesType, TBBoardOption } from \"../../../UI/Store/BoardInterface\";\r\nimport { AutoRecord } from \"../../AutoRecord\";\r\nimport { Factory } from \"../../CADFactory\";\r\nimport { CADFiler } from \"../../CADFiler\";\r\nimport { Board } from \"../../Entity/Board\";\r\nimport { Entity } from \"../../Entity/Entity\";\r\nimport { TemplateRecord } from \"../TemplateRecord\";\r\n\r\n/**顶底板模板 */\r\n@Factory\r\nexport class TemplateTopBottomBoard extends TemplateRecord\r\n{\r\n private _topOption: TBBoardOption = { ...DefaultTopBoardOption };\r\n private _bottomOption: TBBoardOption = { ...DefaultBottomBoardOption };\r\n UseBoardProcessOption = false;\r\n BoardProcessOption: BoardProcessOption;\r\n @AutoRecord DrawCounts: [number, number, number] = [1, 1, 1];\r\n constructor()\r\n {\r\n super();\r\n this.name = \"顶底板\";\r\n }\r\n get TopOption()\r\n {\r\n return Object.assign({}, this._topOption);\r\n }\r\n set TopOption(option: TBBoardOption)\r\n {\r\n this.WriteAllObjectRecord();\r\n Object.assign(this._topOption, option);\r\n ExtendsBoardThickness(this, option.thickness);\r\n }\r\n get BottomOption()\r\n {\r\n return Object.assign({}, this._bottomOption);\r\n }\r\n set BottomOption(option: TBBoardOption)\r\n {\r\n this.WriteAllObjectRecord();\r\n Object.assign(this._bottomOption, option);\r\n }\r\n\r\n // InitBaseParams()\r\n // {\r\n // super.InitBaseParams();\r\n // return this;\r\n // }\r\n\r\n protected async Update()\r\n {\r\n await super.Update();\r\n\r\n let thickness = this.GetParam(\"BH\")?.value as number;\r\n if (thickness)\r\n {\r\n this._topOption.thickness = thickness;\r\n this._bottomOption.thickness = thickness;\r\n this._bottomOption.footThickness = thickness;\r\n }\r\n\r\n let spaceParse = this.SpaceParse;\r\n let nbrs = BuildTopBottomBoards(this._topOption, this._bottomOption, spaceParse);\r\n\r\n let sbrs = this.PositioningSupportBoards;\r\n\r\n if (this.BoardProcessOption)\r\n {\r\n let minSealed = GetMinSealed(this.BoardProcessOption);\r\n for (let br of nbrs)\r\n {\r\n br.BoardProcessOption = this.BoardProcessOption;\r\n this.SetBoardProcess(br, minSealed);\r\n }\r\n this.BoardProcessOption = undefined;\r\n }\r\n if (this.UseBoardProcessOption && sbrs.length > 0)\r\n {\r\n let cname = sbrs[0].BoardProcessOption[EBoardKeyList.CabinetName];\r\n let rname = sbrs[0].BoardProcessOption[EBoardKeyList.RoomName];\r\n for (let br of nbrs)\r\n {\r\n br.BoardProcessOption[EBoardKeyList.CabinetName] = cname;\r\n br.BoardProcessOption[EBoardKeyList.RoomName] = rname;\r\n }\r\n\r\n this.UseBoardProcessOption = false;\r\n }\r\n\r\n let oldBrss: [Board[], Board[], Board[]] = [[], [], []];\r\n let refBr: Board;\r\n let minSealed: string;\r\n\r\n for (let id of this.Objects)\r\n {\r\n let b = id.Object as Board;\r\n if (!refBr)\r\n refBr = b;\r\n oldBrss[b.BoardType].push(b);\r\n }\r\n\r\n if (refBr) minSealed = GetMinSealed(refBr.BoardProcessOption);\r\n\r\n let newBrss: [Board[], Board[], Board[]] = [[], [], []];\r\n\r\n for (let b of nbrs)\r\n {\r\n newBrss[b.BoardType].push(b);\r\n }\r\n for (let i = 0; i < oldBrss.length; i++)\r\n {\r\n let oldBrs = oldBrss[i];\r\n let newBrs = newBrss[i];\r\n\r\n let oldLen = oldBrs.length;\r\n for (let j = newBrs.length; j < oldLen; j++)\r\n oldBrs[j].Erase();\r\n\r\n for (let j = 0; j < newBrs.length; j++)\r\n {\r\n if (j < oldLen)\r\n {\r\n if (j >= this.DrawCounts[i])\r\n {\r\n oldBrs[j].Erase(false);\r\n }\r\n oldBrs[j].Name = newBrs[j].Name;\r\n oldBrs[j].Position = newBrs[j].Position;\r\n oldBrs[j].Width = newBrs[j].Width;\r\n oldBrs[j].Height = newBrs[j].Height;\r\n oldBrs[j].Thickness = newBrs[j].Thickness;\r\n }\r\n else\r\n {\r\n if (refBr)\r\n {\r\n newBrs[j].BoardProcessOption = refBr.BoardProcessOption;\r\n this.SetBoardProcess(newBrs[j], minSealed);\r\n }\r\n this._db.ModelSpace.Append(newBrs[j]);\r\n this.Objects.push(newBrs[j].Id);\r\n }\r\n }\r\n this.DrawCounts[i] = newBrs.length;\r\n }\r\n\r\n //保持SpaceCS\r\n for (let id of this.Objects)\r\n {\r\n if (id && !id.IsErase)\r\n (id.Object as Entity).SpaceOCS = this._CacheSpaceCS;\r\n }\r\n }\r\n private SetBoardProcess(br: Board, minSealed: string)\r\n {\r\n if (br.Name === \"底板\")\r\n {\r\n br.BoardProcessOption[EBoardKeyList.BigHole] = FaceDirection.Back;\r\n }\r\n else if (br.Name.includes(\"地脚\") || br.Name.includes(\"加强条\"))\r\n {\r\n // br.BoardProcessOption.composingFace = ComposingType.Reverse;\r\n br.BoardProcessOption.bigHoleDir = FaceDirection.Back;\r\n br.BoardProcessOption.lines = LinesType.Reverse;\r\n\r\n //用薄封边\r\n br.BoardProcessOption.sealedUp = minSealed;\r\n br.BoardProcessOption.sealedDown = minSealed;\r\n br.BoardProcessOption.sealedLeft = minSealed;\r\n br.BoardProcessOption.sealedRight = minSealed;\r\n }\r\n }\r\n ReadFile(file: CADFiler)\r\n {\r\n let ver = file.Read();\r\n super.ReadFile(file);\r\n this.DrawCounts[0] = file.Read();\r\n this.DrawCounts[1] = file.Read();\r\n this.DrawCounts[2] = file.Read();\r\n\r\n this._topOption.type = file.Read();\r\n this._topOption.name = file.Read();\r\n this._topOption.isDraw = file.Read();\r\n this._topOption.thickness = file.Read();\r\n this._topOption.frontDist = file.Read();\r\n this._topOption.behindDistance = file.Read();\r\n this._topOption.isWrapSide = file.Read();\r\n this._topOption.useLFData = file.Read();\r\n this._topOption.leftExt = file.Read();\r\n this._topOption.rightExt = file.Read();\r\n this._topOption.offset = file.Read();\r\n if (ver === 1 && typeof this._topOption.offset === \"string\")\r\n this._topOption.offset = parseFloat(this._topOption.offset) ?? 0;\r\n\r\n this._bottomOption.type = file.Read();\r\n this._bottomOption.name = file.Read();\r\n this._bottomOption.isDraw = file.Read();\r\n this._bottomOption.thickness = file.Read();\r\n this._bottomOption.frontDist = file.Read();\r\n this._bottomOption.behindDistance = file.Read();\r\n this._bottomOption.isWrapSide = file.Read();\r\n this._bottomOption.useLFData = file.Read();\r\n this._bottomOption.leftExt = file.Read();\r\n this._bottomOption.rightExt = file.Read();\r\n this._bottomOption.offset = file.Read();\r\n this._bottomOption.footThickness = file.Read();\r\n this._bottomOption.isDrawFooter = file.Read();\r\n this._bottomOption.footBehindShrink = file.Read();\r\n this._bottomOption.isDrawBackFooter = file.Read();\r\n this._bottomOption.isDrawStrengthenStrip = file.Read();\r\n this._bottomOption.footerOffset = file.Read();\r\n this._bottomOption.divCount = file.Read();\r\n\r\n }\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(2);\r\n super.WriteFile(file);\r\n file.Write(this.DrawCounts[0]);\r\n file.Write(this.DrawCounts[1]);\r\n file.Write(this.DrawCounts[2]);\r\n\r\n file.Write(this._topOption.type);\r\n file.Write(this._topOption.name);\r\n file.Write(this._topOption.isDraw);\r\n file.Write(this._topOption.thickness);\r\n file.Write(this._topOption.frontDist);\r\n file.Write(this._topOption.behindDistance);\r\n file.Write(this._topOption.isWrapSide);\r\n file.Write(this._topOption.useLFData);\r\n file.Write(this._topOption.leftExt);\r\n file.Write(this._topOption.rightExt);\r\n file.Write(this._topOption.offset);\r\n\r\n file.Write(this._bottomOption.type);\r\n file.Write(this._bottomOption.name);\r\n file.Write(this._bottomOption.isDraw);\r\n file.Write(this._bottomOption.thickness);\r\n file.Write(this._bottomOption.frontDist);\r\n file.Write(this._bottomOption.behindDistance);\r\n file.Write(this._bottomOption.isWrapSide);\r\n file.Write(this._bottomOption.useLFData);\r\n file.Write(this._bottomOption.leftExt);\r\n file.Write(this._bottomOption.rightExt);\r\n file.Write(this._bottomOption.offset);\r\n file.Write(this._bottomOption.footThickness);\r\n file.Write(this._bottomOption.isDrawFooter);\r\n file.Write(this._bottomOption.footBehindShrink);\r\n file.Write(this._bottomOption.isDrawBackFooter);\r\n file.Write(this._bottomOption.isDrawStrengthenStrip);\r\n file.Write(this._bottomOption.footerOffset);\r\n file.Write(this._bottomOption.divCount);\r\n }\r\n}\r\n\r\n//获得最薄的封边\r\nfunction GetMinSealed(opt: BoardProcessOption): string\r\n{\r\n return Math.max(0, Math.min(\r\n parseFloat(opt.sealedDown) || 0,\r\n parseFloat(opt.sealedLeft) || 0,\r\n parseFloat(opt.sealedRight) || 0,\r\n parseFloat(opt.sealedUp) || 0,\r\n )).toString();\r\n}\r\n","import { Vector3 } from \"three\";\r\nimport { EBoardKeyList } from \"../../Common/BoardKeyList\";\r\nimport { safeEval } from \"../../Common/eval\";\r\nimport { Singleton } from \"../../Common/Singleton\";\r\nimport { Board } from \"../../DatabaseServices/Entity/Board\";\r\nimport { ISpaceParse } from \"../../Geometry/SpaceParse/ISpaceParse\";\r\nimport { BoardType, DrillType, FaceDirection, IHighSealedItem } from \"../../UI/Store/BoardInterface\";\r\nimport { EFullDir, EFullType, EWRackArrayType, IWineRackOption } from \"../../UI/Store/WineRackInterface\";\r\n\r\nexport const SIN45 = Math.sin(Math.PI / 4);\r\n\r\nexport class DrawWineRackTool extends Singleton\r\n{\r\n private _config: IWineRackOption;\r\n protected space: ISpaceParse;\r\n public boardlist: Board[] = [];\r\n get Config()\r\n {\r\n return this._config;\r\n }\r\n Parse(space: ISpaceParse, config: IWineRackOption)\r\n {\r\n this._config = config;\r\n this.boardlist.length = 0;\r\n this.space = space;\r\n //处理格子深\r\n if (!config.isTotalDepth)\r\n {\r\n let depth = safeEval(config.calcDepth, { L: space.Size.x, W: space.Size.y, H: space.Size.z });;\r\n if (!isNaN(depth))\r\n {\r\n space.SpaceBox.max.setY(space.SpaceBox.min.y + depth);\r\n }\r\n }\r\n //处理前缩\r\n space.SpaceBox.min.add(new Vector3(0, config.frontCut));\r\n //左右缩\r\n space.SpaceBox.min.add(new Vector3(config.leftCut));\r\n space.SpaceBox.max.add(new Vector3(-config.rightCut));\r\n //上缩\r\n space.SpaceBox.max.add(new Vector3(0, 0, -config.topCut));\r\n }\r\n /** 拾取空间周围的板件柜名房名等信息*/\r\n protected GetBoardProcessOption(br: Board)\r\n {\r\n //获取空间周围的板件数据\r\n if (this.space.Boards.length > 0)\r\n {\r\n let refProcessData = this.space.Boards[0].BoardProcessOption;\r\n br.BoardProcessOption[EBoardKeyList.RoomName] = refProcessData[EBoardKeyList.RoomName];\r\n br.BoardProcessOption[EBoardKeyList.CabinetName] = refProcessData[EBoardKeyList.CabinetName];\r\n }\r\n }\r\n /**分析高级封边数据 */\r\n protected ParseHighSealing(br: Board, leftSealed: number, rightSealed: number, topSealed: number, downSealed: number, isLeft: boolean)\r\n {\r\n this.GetBoardProcessOption(br);\r\n let cu = br.ContourCurve;\r\n br.BoardProcessOption.sealedLeft = leftSealed.toString();\r\n br.BoardProcessOption.sealedRight = rightSealed.toString();\r\n br.BoardProcessOption.sealedUp = topSealed.toString();\r\n br.BoardProcessOption.sealedDown = downSealed.toString();\r\n\r\n let sizes = [...new Set([downSealed, rightSealed, topSealed, leftSealed])];\r\n let downSeal = {\r\n size: downSealed, color: sizes.indexOf(downSealed) + 1\r\n };\r\n let rigthSeal = {\r\n size: rightSealed, color: sizes.indexOf(rightSealed) + 1\r\n };\r\n let topSeal = { size: topSealed, color: sizes.indexOf(topSealed) + 1 };\r\n let leftSeal = { size: leftSealed, color: sizes.indexOf(leftSealed) + 1 };\r\n\r\n let highSeals: IHighSealedItem[] = [downSeal];\r\n if (isLeft)\r\n {\r\n highSeals.push(rigthSeal, topSeal);\r\n for (let i = 3; i <= cu.EndParam - 1; i++)\r\n {\r\n highSeals.push(leftSeal);\r\n }\r\n }\r\n else\r\n {\r\n for (let i = 1; i <= cu.EndParam - 3; i++)\r\n {\r\n highSeals.push(rigthSeal);\r\n }\r\n highSeals.push(topSeal, leftSeal);\r\n }\r\n br.BoardProcessOption.highSealed = highSeals;\r\n br.BoardProcessOption.drillType = DrillType.None;\r\n br.BoardProcessOption.highDrill.fill(DrillType.None);\r\n\r\n }\r\n /**补板 */\r\n protected AddLayerOrVerticalBoard(actWidth: number, actHeight: number)\r\n {\r\n const config = this.Config;\r\n const size = this.space.Size;\r\n let isDrawLy = false;\r\n //是否补层板\r\n if (config.isDrawLy && (config.arrayType === EWRackArrayType.Fixed || config.fullType === EFullType.ByWidth))\r\n {\r\n isDrawLy = true;\r\n\r\n let length = actWidth;\r\n let width = size.y + config.frontCut;\r\n let position = this.space.SpaceBox.min.clone();\r\n\r\n if (config.arrayType === EWRackArrayType.Fixed)\r\n {\r\n if (config.fullDir === EFullDir.Right)\r\n {\r\n length += config.rightCut;\r\n position.add(new Vector3(size.x + config.rightCut, -config.frontCut, actHeight + config.topCut));\r\n }\r\n else\r\n {\r\n length += config.leftCut;\r\n position.add(new Vector3(actWidth, -config.frontCut, actHeight + config.topCut));\r\n }\r\n }\r\n else\r\n {\r\n length += (config.leftCut + config.rightCut);\r\n position.add(new Vector3(actWidth + config.rightCut, -config.frontCut, actHeight + config.topCut));\r\n }\r\n //补板跟随\r\n if (config.followNarrow)\r\n {\r\n //处理前缩\r\n position.add(new Vector3(0, config.frontCut));\r\n width -= config.frontCut;\r\n }\r\n let br = Board.CreateBoard(length, width, config.brThick2);\r\n this.GetBoardProcessOption(br);\r\n br.BoardProcessOption.bigHoleDir = FaceDirection.Back;\r\n br.Position = position;\r\n br.ApplyMatrix(this.space.SpaceOCS);\r\n this.boardlist.push(br);\r\n }\r\n if (config.isDrawVer && (config.arrayType === EWRackArrayType.Fixed || config.fullType === EFullType.ByHeight))\r\n {\r\n let len = actHeight + config.topCut;\r\n if (isDrawLy)\r\n len += config.brThick2;\r\n\r\n let br = Board.CreateBoard(len, size.y + config.frontCut, config.brThick2, BoardType.Vertical);\r\n\r\n let position = this.space.SpaceBox.min.clone();\r\n\r\n if (config.fullDir === EFullDir.Right)\r\n position.x += size.x - actWidth - config.brThick2;\r\n else\r\n {\r\n br.BoardProcessOption.bigHoleDir = FaceDirection.Back;\r\n position.x += actWidth;\r\n }\r\n //补板跟随\r\n if (config.followNarrow)\r\n {\r\n br.WriteAllObjectRecord();\r\n position.y += config.frontCut;\r\n br.Width -= config.frontCut;\r\n }\r\n\r\n //这里要跟外面平\r\n position.y -= config.frontCut;\r\n\r\n this.GetBoardProcessOption(br);\r\n br.Position = position;\r\n br.ApplyMatrix(this.space.SpaceOCS);\r\n this.boardlist.push(br);\r\n }\r\n }\r\n}\r\n","import { Matrix4, Vector2, Vector3 } from \"three\";\r\nimport { arrayLast, arrayRemoveDuplicateBySort, arraySortByNumber } from \"../../Common/ArrayExt\";\r\nimport { MakeMirrorMtx } from \"../../Common/Matrix4Utils\";\r\nimport { Board } from \"../../DatabaseServices/Entity/Board\";\r\nimport { Line } from \"../../DatabaseServices/Entity/Line\";\r\nimport { Polyline } from \"../../DatabaseServices/Entity/Polyline\";\r\nimport { AsVector2, equaln, equalv3, isParallelTo, MoveMatrix, polar, XAxis, YAxis, ZAxis } from \"../../Geometry/GeUtils\";\r\nimport { ISpaceParse } from \"../../Geometry/SpaceParse/ISpaceParse\";\r\nimport { IntersectOption } from \"../../GraphicsSystem/IntersectWith\";\r\nimport { BoardType } from \"../../UI/Store/BoardInterface\";\r\nimport { EFullDir, EFullType, EWRackArrayType, IR2WROption, IWineRackOption } from \"../../UI/Store/WineRackInterface\";\r\nimport { DrawWineRackTool, SIN45 } from \"./DrawWinRackTool\";\r\n\r\nexport interface IWineRackData\r\n{\r\n basePt: Vector3;\r\n brLength: number;\r\n\r\n}\r\nexport interface IParsePlRes\r\n{\r\n isOk: boolean;\r\n isLeft?: boolean;\r\n pl?: Polyline;\r\n length?: number;\r\n matInv?: Matrix4;\r\n basePt?: Vector3;\r\n thickness?: number;\r\n isVer?: boolean;\r\n isRo?: boolean;\r\n}\r\n\r\nexport const R2WRTolerance = 1e-3;\r\n\r\n/**\r\n * 斜酒格\r\n */\r\nexport class DrawObliqueWineRackTool extends DrawWineRackTool\r\n{\r\n Parse(space: ISpaceParse, config: IWineRackOption)\r\n {\r\n super.Parse(space, config);\r\n const size = space.Size;\r\n const spaceHeight = size.z;\r\n const spaceWidth = size.x;\r\n const ptMid = new Vector3(0.5 * size.x, size.z / 2, 0);\r\n let mirrorMtx: Matrix4;\r\n if (config.fullType === EFullType.ByWidth)\r\n mirrorMtx = MakeMirrorMtx(YAxis, ptMid);\r\n else\r\n mirrorMtx = MakeMirrorMtx(XAxis, ptMid);\r\n\r\n ptMid.set(0.5 * size.x, size.z / 2, 0);\r\n polar(ptMid, Math.PI * 0.75, -config.boardThick);\r\n\r\n if (config.isFull && config.arrayType !== EWRackArrayType.Fixed)\r\n {\r\n switch (config.fullType)\r\n {\r\n case EFullType.ByHeight:\r\n this.CalGridWidth(spaceHeight);\r\n break;\r\n case EFullType.ByWidth:\r\n this.CalGridWidth(spaceWidth);\r\n break;\r\n case EFullType.Symmetry:\r\n this.CalGridWidth(spaceHeight);\r\n this.CalGridWidth(spaceWidth);\r\n default:\r\n break;\r\n }\r\n\r\n let rectPl = new Polyline().Rectangle(spaceWidth, spaceHeight);\r\n let gripWidth = config.boardThick + config.gripWidth;\r\n\r\n let retPls: Polyline[] = [];\r\n let pls1 = this.CalculationRectPolylineArr(ptMid, rectPl, gripWidth);\r\n polar(ptMid, Math.PI * 0.75, -gripWidth);\r\n let pls2 = this.CalculationRectPolylineArr(ptMid, rectPl, -gripWidth);\r\n retPls.push(...pls1, ...pls2);\r\n\r\n for (let pl of [...pls1, ...pls2])\r\n {\r\n let plClone = pl.Clone();\r\n plClone.ApplyMatrix(mirrorMtx);\r\n retPls.push(plClone);\r\n }\r\n this.DrawBoardFormPolyLine(retPls);\r\n }\r\n else\r\n {\r\n let lWRData: IWineRackData[] = [];\r\n let rWRData: IWineRackData[] = [];\r\n let res: { width: number, height: number; };\r\n switch (config.arrayType)\r\n {\r\n case EWRackArrayType.ByWidth:\r\n res = this.CalcWineRackDataByWidth(lWRData, rWRData);\r\n break;\r\n case EWRackArrayType.ByCount:\r\n res = this.CalcWineRackDataByCount(lWRData, rWRData);\r\n break;\r\n case EWRackArrayType.Fixed:\r\n res = this.CalcWineRackDataByFixed(lWRData, rWRData);\r\n }\r\n let pls: Polyline[] = [];\r\n for (let data of lWRData)\r\n {\r\n pls.push(this.CreatePolylineByWineData(data));\r\n }\r\n\r\n rWRData.sort((d1, d2) =>\r\n {\r\n if (equaln(d1.basePt.x, d2.basePt.x))\r\n {\r\n return d1.basePt.y - d2.basePt.y;\r\n }\r\n else\r\n return d2.basePt.x - d1.basePt.x;\r\n });\r\n\r\n for (let data of rWRData)\r\n {\r\n pls.push(this.CreatePolylineByWineData(data, false));\r\n }\r\n\r\n //补板\r\n this.AddLayerOrVerticalBoard(res.width, res.height);\r\n\r\n this.DrawBoardFormPolyLine(pls, res.width);\r\n }\r\n }\r\n\r\n private CalGridWidth(length: number)\r\n {\r\n const count = (length - this.Config.boardThick * 2 / SIN45) / ((this.Config.boardThick + this.Config.gripWidth) * Math.sqrt(2));\r\n this.Config.gripWidth = ((length - this.Config.boardThick / SIN45) / Math.floor(count)) / Math.sqrt(2) - this.Config.boardThick;\r\n }\r\n /**获取矩形多段线的4个对角点并判断是否有效 */\r\n private GetRect4Pts(xline: Line, rectPl: Polyline, p1: Vector3, p2: Vector3, p3: Vector3, p4: Vector3)\r\n {\r\n let res1 = this.GetRect2Pts(xline, rectPl, p1, p2);\r\n let vec = polar(new Vector3(), Math.PI * 0.75, this.Config.boardThick);\r\n xline.ApplyMatrix(MoveMatrix(vec));\r\n let res2 = this.GetRect2Pts(xline, rectPl, p3, p4);\r\n return res1 && res2 && p1.distanceTo(p2) > this.Config.gripWidth;\r\n }\r\n /**获取矩形一边的点 */\r\n private GetRect2Pts(xline: Line, rectPl: Polyline, p1: Vector3, p2: Vector3)\r\n {\r\n let intPts = xline.IntersectWith(rectPl, IntersectOption.ExtendBoth);\r\n if (intPts.length === 2)\r\n {\r\n p1.copy(intPts[0]);\r\n p2.copy(intPts[1]);\r\n if (p1.x > p2.x)\r\n {\r\n let tmpPt = p2.clone();\r\n p2.copy(p1);\r\n p1.copy(tmpPt);\r\n }\r\n return true;\r\n }\r\n return false;\r\n }\r\n /**按格子宽获取酒格数据 */\r\n private CalcWineRackDataByWidth(lWRDataList: IWineRackData[], rWRDataList: IWineRackData[])\r\n {\r\n let size = this.space.Size;\r\n let Config = this.Config;\r\n\r\n let widthCount = 0, heightCount = 0, gripWidth = 0;\r\n let width = size.x - 2 * Config.boardThick * SIN45;\r\n let height = size.z - 2 * Config.boardThick * SIN45;\r\n if (Config.fullType === EFullType.ByWidth)\r\n {\r\n widthCount = Math.floor(width / ((Config.gripWidth + Config.boardThick) * SIN45));\r\n gripWidth = width / widthCount;\r\n\r\n //处理锁定个数\r\n if (!Config.isLock)\r\n {\r\n heightCount = Math.floor(height / gripWidth);\r\n }\r\n else\r\n {\r\n heightCount = Math.floor(Config.heightCount * 2);\r\n }\r\n height = heightCount * gripWidth + 2 * Config.boardThick * SIN45;\r\n width = size.x;\r\n }\r\n else\r\n {\r\n heightCount = Math.floor(height / ((Config.gripWidth + Config.boardThick) * SIN45));\r\n gripWidth = height / heightCount;\r\n\r\n //处理锁定个数\r\n\r\n if (!Config.isLock)\r\n {\r\n widthCount = Math.floor(width / gripWidth);\r\n }\r\n else\r\n {\r\n widthCount = Math.floor(Config.widthCount * 2);\r\n }\r\n\r\n width = widthCount * gripWidth + 2 * Config.boardThick * SIN45;\r\n height = size.z;\r\n }\r\n this.GetWineRackData(width, height, gripWidth, Config.boardThick, widthCount, heightCount, lWRDataList, rWRDataList);\r\n return {\r\n width: width, height: height\r\n };\r\n }\r\n private CalcWineRackDataByCount(lWRDataList: IWineRackData[], rWRDataList: IWineRackData[])\r\n {\r\n const config = this.Config;\r\n const size = this.space.Size;\r\n let widthCount = Math.floor(config.widthCount * 2);\r\n let heightCount = Math.floor(config.heightCount * 2);\r\n let gripWidth = (size.x - 2 * config.boardThick * SIN45) / widthCount;\r\n let width = 0;\r\n let height = 0;\r\n\r\n if (config.fullType === EFullType.ByWidth)\r\n {\r\n gripWidth = (size.x - 2 * config.boardThick * SIN45) / widthCount;\r\n width = size.x;\r\n if (!config.isLock) //如果没锁定个数\r\n {\r\n heightCount = Math.floor((size.z - 2 * config.boardThick * SIN45) / gripWidth + 1e-3);\r\n }\r\n height = heightCount * gripWidth + 2 * config.boardThick * SIN45;\r\n }\r\n else\r\n {\r\n gripWidth = (size.z - 2 * config.boardThick * SIN45) / heightCount;\r\n if (!config.isLock)//如果没有锁定个数\r\n {\r\n widthCount = Math.floor((size.x - 2 * config.boardThick * SIN45) / gripWidth);\r\n }\r\n width = widthCount * gripWidth + 2 * config.boardThick * SIN45;\r\n height = size.z;\r\n }\r\n\r\n this.GetWineRackData(width, height, gripWidth, config.boardThick, widthCount, heightCount, lWRDataList, rWRDataList);\r\n return {\r\n width: width, height: height\r\n };\r\n }\r\n CalcWineRackDataByFixed(lWRDataList: IWineRackData[], rWRDataList: IWineRackData[])\r\n {\r\n const config = this.Config;\r\n let widthCount = Math.floor(config.widthCount * 2);\r\n let heightCount = Math.floor(config.heightCount * 2);\r\n let gripWidth = config.gripWidth * SIN45;\r\n let width = widthCount * gripWidth + 2 * config.boardThick * SIN45;\r\n let height = heightCount * gripWidth + 2 * config.boardThick * SIN45;\r\n\r\n this.GetWineRackData(width, height, gripWidth, config.boardThick, widthCount, heightCount, lWRDataList, rWRDataList);\r\n return {\r\n width: width, height: height\r\n };\r\n }\r\n /**构建酒格正面多段线组*/\r\n CalculationRectPolylineArr(ptMid: Vector3, rectPl: Polyline, gripWidth: number)\r\n {\r\n let pls: Polyline[] = [];\r\n let pt = ptMid.clone();\r\n while (true)\r\n {\r\n let pl = this.CalculationRectPolyline(pt, rectPl);\r\n if (!pl) break;\r\n\r\n polar(pt, Math.PI * 0.75, gripWidth);\r\n pls.push(pl);\r\n }\r\n return pls;\r\n }\r\n /**构建酒格正面多段线*/\r\n CalculationRectPolyline(pt: Vector3, rectPl: Polyline)\r\n {\r\n const xline = new Line(pt, pt.clone().add(new Vector3(1, 1)));\r\n const p1 = new Vector3();\r\n const p2 = new Vector3();\r\n const p3 = new Vector3();\r\n const p4 = new Vector3();\r\n if (!this.GetRect4Pts(xline, rectPl, p1, p2, p3, p4))\r\n {\r\n return null;\r\n }\r\n\r\n let minDis = this.Config.boardThick / Math.sqrt(2);\r\n //如果左边停靠\r\n if (p1.x < minDis)\r\n {\r\n p1.copy(polar(p3.clone(), Math.PI * -0.25, this.Config.boardThick));\r\n }\r\n else\r\n {\r\n p3.copy(polar(p1.clone(), Math.PI * 0.75, this.Config.boardThick));\r\n }\r\n //右边点 上面停靠\r\n let size = this.space.Size;\r\n if (p2.y > size.z - minDis)\r\n {\r\n p2.copy(polar(p4.clone(), -Math.PI * 0.25, this.Config.boardThick));\r\n }\r\n else\r\n {\r\n p4.copy(polar(p2.clone(), Math.PI * 0.75, this.Config.boardThick));\r\n }\r\n\r\n if (p1.distanceTo(p2) < (this.Config.gripWidth + this.Config.boardThick * 1.8) && p1.y > this.Config.boardThick * 2)\r\n return null;\r\n\r\n let lineData = [p1, p2, p4, p3].map(p =>\r\n {\r\n return {\r\n pt: AsVector2(p),\r\n bul: 0\r\n };\r\n });\r\n let pl = new Polyline(lineData);\r\n pl.CloseMark = true;\r\n return pl;\r\n }\r\n //获取酒格数据\r\n GetWineRackData(width: number,\r\n height: number,\r\n gripWidth: number,\r\n brThick: number,\r\n widthCount: number,\r\n heightCount: number,\r\n lWRDataList: IWineRackData[],\r\n rWRDataList: IWineRackData[])\r\n {\r\n let data: IWineRackData;\r\n for (let i = 0; i < Math.floor(widthCount / 2); i++)\r\n {\r\n let p1 = gripWidth + brThick * SIN45 + gripWidth * i * 2;\r\n data = {\r\n basePt: new Vector3(p1, 0, 0),\r\n brLength: 0\r\n };\r\n if (width - p1 > height - brThick * SIN45)\r\n {\r\n data.brLength = (height - brThick * SIN45) / SIN45;\r\n }\r\n else\r\n {\r\n data.brLength = (width - p1) / SIN45;\r\n }\r\n rWRDataList.push(data);\r\n }\r\n for (let i = 0; i < Math.floor(heightCount / 2); i++)\r\n {\r\n let p1 = gripWidth + brThick * SIN45 + i * gripWidth * 2;\r\n data = {\r\n basePt: new Vector3(brThick * SIN45, p1 - brThick * SIN45, 0),\r\n brLength: 0\r\n };\r\n if (height - p1 > width - brThick * SIN45)\r\n {\r\n data.brLength = (width - brThick * SIN45) / SIN45;\r\n }\r\n else\r\n {\r\n data.brLength = (height - p1) / SIN45;\r\n }\r\n rWRDataList.push(data);\r\n }\r\n for (let i = 0; i < Math.floor(widthCount / 2); i++)\r\n {\r\n let p1 = gripWidth + i * gripWidth * 2;\r\n data = {\r\n basePt: new Vector3(p1 + brThick * SIN45, 2 * brThick * SIN45, 0),\r\n brLength: 0\r\n };\r\n if (equaln(p1, height - brThick * SIN45 * 2))\r\n {\r\n data.brLength = (height - brThick * SIN45 * 2) / SIN45;\r\n }\r\n else if (p1 > height - brThick * SIN45 * 3)\r\n {\r\n data.brLength = (height - brThick * SIN45 * 3) / SIN45;\r\n }\r\n else\r\n {\r\n data.brLength = (p1 - brThick * SIN45) / SIN45;\r\n }\r\n lWRDataList.push(data);\r\n }\r\n\r\n if (widthCount % 2 === 0)\r\n {\r\n for (let i = 0; i < Math.floor(heightCount / 2); i++)\r\n {\r\n let p1 = gripWidth + 2 * brThick * SIN45 + i * gripWidth * 2;\r\n data = {\r\n basePt: new Vector3(width - brThick * SIN45, p1, 0),\r\n brLength: 0\r\n };\r\n if (equaln(height - p1, width - 2 * brThick * SIN45))\r\n {\r\n data.brLength = (height - p1) / SIN45;\r\n }\r\n else if (height - p1 - brThick * SIN45 > width - 2 * brThick * SIN45)\r\n {\r\n data.brLength = (width - brThick * SIN45 * 3) / SIN45;\r\n }\r\n else\r\n {\r\n data.brLength = (height - p1 - brThick * SIN45) / SIN45;\r\n }\r\n lWRDataList.push(data);\r\n }\r\n }\r\n else\r\n {\r\n for (let i = 0; i < Math.floor(heightCount / 2) + 1; i++)\r\n {\r\n let p1 = 0;\r\n if (i == 0)\r\n {\r\n p1 = brThick * SIN45;\r\n data = {\r\n basePt: new Vector3(width, p1, 0),\r\n brLength: 0\r\n };\r\n if (equaln(height, width, 1e-3))\r\n {\r\n data.brLength = (width - brThick * SIN45) / SIN45;\r\n }\r\n else if (height - p1 > width - 2 * brThick * SIN45)\r\n {\r\n data.brLength = (width - brThick * SIN45 * 2) / SIN45;\r\n }\r\n else\r\n {\r\n data.brLength = (height - p1 - brThick * SIN45) / SIN45;\r\n }\r\n }\r\n else\r\n {\r\n p1 = 2 * brThick * SIN45 + i * gripWidth * 2;\r\n data = {\r\n basePt: new Vector3(width - brThick * SIN45, p1, 0),\r\n brLength: 0\r\n };\r\n if (height - p1 > brThick)\r\n {\r\n if (equaln(height - p1, width - 2 * brThick * SIN45, 1e-3))\r\n {\r\n data.brLength = (height - p1) / SIN45;\r\n }\r\n else if (height - p1 > width - brThick * SIN45)\r\n {\r\n data.brLength = (width - brThick * SIN45 * 3) / SIN45;\r\n }\r\n else\r\n {\r\n data.brLength = (height - p1 - brThick * SIN45) / SIN45;\r\n }\r\n }\r\n else\r\n {\r\n continue;//这里需要跳出.\r\n }\r\n }\r\n lWRDataList.push(data);\r\n }\r\n }\r\n }\r\n /**根据酒格数据获取多段线 */\r\n private CreatePolylineByWineData(data: IWineRackData, isLeft = true)\r\n {\r\n let thick = this.Config.boardThick;\r\n let lineData = [\r\n {\r\n pt: new Vector2(),\r\n bul: 0\r\n },\r\n {\r\n pt: new Vector2(thick, 0),\r\n bul: 0\r\n },\r\n {\r\n pt: new Vector2(thick, data.brLength),\r\n bul: 0\r\n },\r\n {\r\n pt: new Vector2(0, data.brLength),\r\n bul: 0\r\n },\r\n ];\r\n let pl = new Polyline(lineData);\r\n pl.CloseMark = true;\r\n let mat = MoveMatrix(new Vector3(thick))\r\n .multiply(new Matrix4().makeRotationZ(0.25 * Math.PI * (isLeft ? 1 : -1)))\r\n .multiply(MoveMatrix(new Vector3(-thick)));\r\n pl.ApplyMatrix(mat)\r\n .ApplyMatrix(MoveMatrix(data.basePt.add(new Vector3(-thick))));\r\n return pl;\r\n }\r\n /**根据多段线组构建酒格 */\r\n protected DrawBoardFormPolyLine(pls: Polyline[], actualWidth?: number, config?: IR2WROption)\r\n {\r\n const leftData: IParsePlRes[] = [];\r\n const rightData: IParsePlRes[] = [];\r\n for (let pl of pls)\r\n {\r\n let data = this.ParsePolyLine(pl);\r\n if (!data.isOk)\r\n continue;\r\n if (data.isLeft)\r\n leftData.push(data);\r\n else\r\n rightData.push(data);\r\n }\r\n\r\n this.CreateBoard(leftData, rightData, actualWidth, config);\r\n this.CreateBoard(rightData, leftData, actualWidth, config);\r\n }\r\n private ParsePolyLine(pl: Polyline): IParsePlRes\r\n {\r\n if (pl.IsClose)\r\n {\r\n if (pl.EndParam !== 4)\r\n {\r\n return {\r\n isOk: false\r\n };\r\n }\r\n\r\n let pts = pl.GetStretchPoints();\r\n\r\n if (equalv3(pts[0], arrayLast(pts)))\r\n pts.pop();\r\n\r\n /*****统一初始形状\r\n * **** h\r\n * * *\r\n * 0 **** t\r\n */\r\n pts.sort((a, b) =>\r\n {\r\n if (equaln(a.y, b.y))\r\n return a.x - b.x;\r\n else\r\n return a.y - b.y;\r\n });\r\n let pts1 = pts.splice(0, 2);\r\n pts1.sort((a, b) => a.x - b.x);\r\n pts.sort((a, b) => a.distanceTo(pts1[1]) - b.distanceTo(pts1[1]));\r\n pts.unshift(...pts1);\r\n const area = pl.Area;\r\n\r\n let v1 = pts[1].clone().clone().sub(pts[0]);\r\n let v2 = arrayLast(pts).clone().sub(pts[0]);\r\n\r\n let [vecY, vecX] = v1.length() > v2.length() ? [v1, v2] : [v2, v1];\r\n\r\n let length = vecY.length();\r\n let thick = vecX.length();\r\n let mat = new Matrix4().makeBasis(vecX.normalize(), vecY.normalize(), ZAxis).setPosition(pts[0]);\r\n let matInv = new Matrix4().getInverse(mat);\r\n\r\n let bp = pts[0].clone().negate();\r\n\r\n if (equaln(length * thick, area, 5))\r\n {\r\n let an = vecY.angleTo(XAxis);\r\n\r\n if (equaln(an, Math.PI / 4, R2WRTolerance))\r\n {\r\n pts.sort((p1, p2) => p2.x - p1.x);\r\n return {\r\n isOk: true,\r\n isLeft: true,\r\n pl,\r\n length,\r\n matInv,\r\n basePt: new Vector3(pts[0].x, 0, pts[0].y),\r\n thickness: thick,\r\n isRo: true,\r\n };\r\n }\r\n else if (equaln(an, 3 * Math.PI / 4, R2WRTolerance))\r\n {\r\n pts.sort((p1, p2) => p1.y - p2.y);\r\n return {\r\n isOk: true,\r\n isLeft: false,\r\n pl,\r\n length,\r\n matInv,\r\n basePt: new Vector3(pts[0].x, 0, pts[0].y),\r\n thickness: thick,\r\n isRo: true,\r\n };\r\n }\r\n else if (isParallelTo(vecX, XAxis, R2WRTolerance))\r\n {\r\n return {\r\n isOk: true,\r\n isLeft: false,\r\n pl,\r\n length,\r\n matInv: new Matrix4().setPosition(bp),\r\n basePt: new Vector3(pts[0].x, 0, pts[0].y),\r\n thickness: thick,\r\n isVer: true,\r\n isRo: false,\r\n };\r\n }\r\n else if (isParallelTo(vecX, YAxis, R2WRTolerance))\r\n {\r\n return {\r\n isOk: true,\r\n isLeft: true,\r\n pl,\r\n length,\r\n matInv: new Matrix4().setPosition(bp),\r\n basePt: new Vector3(pts[1].x, 0, pts[1].y),\r\n thickness: thick,\r\n isRo: false,\r\n };\r\n }\r\n else\r\n {\r\n return {\r\n isOk: false\r\n };\r\n }\r\n }\r\n\r\n }\r\n return {\r\n isOk: false\r\n };\r\n }\r\n /**绘制酒格 */\r\n private CreateBoard(lData: IParsePlRes[], rData: IParsePlRes[], actualWidth?: number, cof?: IR2WROption)\r\n {\r\n if (!lData.length)\r\n return;\r\n\r\n let leftSeal: number, rightSeal: number, upSeal: number, downSeal: number, knifeRad: number;\r\n let config: IWineRackOption;\r\n if (cof)\r\n {\r\n leftSeal = cof.sealedLeft;\r\n rightSeal = cof.sealedRight;\r\n upSeal = cof.sealedUp;\r\n downSeal = cof.sealedDown;\r\n knifeRad = cof.knifeRadius;\r\n }\r\n else\r\n {\r\n config = this.Config;\r\n leftSeal = config.leftEdge;\r\n rightSeal = config.leftEdge;\r\n upSeal = config.leftEdge;\r\n downSeal = config.leftEdge;\r\n knifeRad = config.grooveLengthAdd;\r\n }\r\n\r\n for (let i = 0; i < lData.length; i++)\r\n {\r\n let d = lData[i];\r\n let dists: number[] = [];\r\n for (let d2 of rData)\r\n {\r\n let intPts = d.pl.IntersectWith(d2.pl, IntersectOption.ExtendNone);\r\n if (intPts.length === 4)\r\n {\r\n dists.push(...intPts.map(p =>\r\n {\r\n let p1 = p.applyMatrix4(d.matInv);\r\n\r\n if (!d.isRo && !d.isVer)\r\n return Math.abs(p1.x);\r\n return Math.abs(p1.y);\r\n }));\r\n }\r\n }\r\n arraySortByNumber(dists);\r\n arrayRemoveDuplicateBySort(dists, (n1, n2) => equaln(n1, n2, R2WRTolerance));\r\n\r\n let pl = this.GetPolyline(d, dists, cof);\r\n if (pl)\r\n {\r\n let br = Board.CreateBoard(1, 1, d.thickness ?? config.boardThick, d.isVer ? BoardType.Vertical : BoardType.Layer);\r\n if (d.isLeft)\r\n br.Name = \"右板\" + (lData.length - i);\r\n else\r\n br.Name = \"左板\" + (i + 1);\r\n br.ContourCurve = pl;\r\n this.ParseHighSealing(br, leftSeal, rightSeal, upSeal, downSeal, d.isLeft);\r\n br.KnifeRadius = knifeRad;\r\n if (d.isRo)\r\n br.RotateBoard(0, Math.PI / 4 * (d.isLeft ? -1 : 1), 0);\r\n br.ApplyMatrix(MoveMatrix(this.space.SpaceBox.min));\r\n br.ApplyMatrix(MoveMatrix(d.basePt));\r\n\r\n if (config && (config.fullType === EFullType.ByHeight || config.arrayType === EWRackArrayType.Fixed)\r\n && config.fullDir === EFullDir.Right)\r\n {\r\n br.ApplyMatrix(MoveMatrix(new Vector3(this.space.Size.x - (actualWidth ?? 0))));\r\n }\r\n br.ApplyMatrix(this.space.SpaceOCS);\r\n this.boardlist.push(br);\r\n }\r\n }\r\n }\r\n /**构建酒格形状,加入齿 */\r\n private GetPolyline(data: IParsePlRes, dists: number[], cof?: IR2WROption)\r\n {\r\n let len = data.length;\r\n let isLeft = data.isLeft;\r\n\r\n const size = this.space.Size;\r\n let pl = new Polyline();\r\n pl.Rectangle(size.y, len);\r\n\r\n let addWidth: number;\r\n let leftEdge: number;\r\n let rightEdge: number;\r\n let knifeRad: number;\r\n if (cof)\r\n {\r\n addWidth = cof.addLen;\r\n leftEdge = cof.sealedLeft;\r\n rightEdge = cof.sealedRight;\r\n knifeRad = cof.knifeRadius;\r\n }\r\n else\r\n {\r\n const config = this.Config;\r\n addWidth = config.grooveWidthAdd;\r\n leftEdge = config.leftEdge;\r\n rightEdge = config.rightEdge;\r\n knifeRad = config.grooveLengthAdd;\r\n }\r\n\r\n if (isLeft)\r\n {\r\n if (!data.isVer)\r\n {\r\n let newDist = dists.map(d => len - d);\r\n dists.length = 0;\r\n dists.push(...newDist);\r\n }\r\n addWidth = (addWidth - 2 * leftEdge) / 2;\r\n }\r\n else\r\n addWidth = (addWidth - 2 * rightEdge) / 2;\r\n\r\n if (dists.length % 2 === 0 && dists.length > 1)\r\n {\r\n let pts: Vector2[] = [];\r\n for (let i = 0; i < dists.length; i++)\r\n {\r\n if (i % 2 === 0)\r\n {\r\n if (isLeft)\r\n {\r\n pts.push(new Vector2(0, dists[i] + addWidth));\r\n pts.push(new Vector2(size.y / 2 + knifeRad, dists[i] + addWidth));\r\n }\r\n else\r\n {\r\n pts.push(new Vector2(size.y, dists[i] - addWidth));\r\n pts.push(new Vector2(size.y / 2 - knifeRad, dists[i] - addWidth));\r\n }\r\n }\r\n else\r\n {\r\n if (isLeft)\r\n {\r\n pts.push(new Vector2(size.y / 2 + knifeRad, dists[i] - addWidth));\r\n pts.push(new Vector2(0, dists[i] - addWidth));\r\n }\r\n else\r\n {\r\n pts.push(new Vector2(size.y / 2 - knifeRad, dists[i] + addWidth));\r\n pts.push(new Vector2(size.y, dists[i] + addWidth));\r\n }\r\n }\r\n }\r\n pl.AddVertexAt(isLeft ? pl.NumberOfVertices : 2, pts);\r\n }\r\n return pl;\r\n }\r\n}\r\n","import { Vector3 } from \"three\";\r\nimport { Board } from \"../../DatabaseServices/Entity/Board\";\r\nimport { Polyline } from \"../../DatabaseServices/Entity/Polyline\";\r\nimport { AsVector2, MoveMatrix } from \"../../Geometry/GeUtils\";\r\nimport { ISpaceParse } from \"../../Geometry/SpaceParse/ISpaceParse\";\r\nimport { BoardType } from \"../../UI/Store/BoardInterface\";\r\nimport { EWRackArrayType, IWineRackOption } from \"../../UI/Store/WineRackInterface\";\r\nimport { DrawWineRackTool } from \"./DrawWinRackTool\";\r\n\r\n/**\r\n * 正酒格\r\n */\r\nexport class DrawUprightWineRackTool extends DrawWineRackTool\r\n{\r\n Parse(space: ISpaceParse, config: IWineRackOption)\r\n {\r\n super.Parse(space, config);\r\n let size = space.Size;\r\n let gripWidth = config.gripWidth;\r\n let brThick = config.boardThick;\r\n let spaceHeight = size.z;\r\n let spaceWidth = size.x;\r\n let gripHeight = gripWidth;\r\n let actualHeight = spaceHeight;\r\n let actualWidth = spaceWidth;\r\n\r\n switch (config.arrayType)\r\n {\r\n case EWRackArrayType.ByWidth:\r\n // let tempWidthCount = 0;\r\n // let tempHeightCount = 0;\r\n // if (widCount > 0 || heightCount > 0)\r\n // {\r\n // tempWidthCount = Math.floor(spaceWidth / (gripWidth + brThick));\r\n // tempHeightCount = Math.floor(spaceHeight / (gripWidth + brThick));\r\n // gripWidth = (spaceWidth - (tempWidthCount - 1) * brThick) / tempWidthCount;\r\n // gripHeight = (spaceHeight - (tempHeightCount - 1) * brThick) / tempHeightCount;\r\n // if (widCount > 0)\r\n // {\r\n // heightCount = tempHeightCount;\r\n // actualWidth = gripWidth * widCount + brThick * (widCount - 1);\r\n // }\r\n // else if (heightCount > 0)\r\n // {\r\n // widCount = tempWidthCount;\r\n // actualWidth = gripWidth * widCount + brThick * (widCount - 1);\r\n // }\r\n // }\r\n config.widthCount = Math.floor(spaceWidth / (gripWidth + brThick));\r\n config.heightCount = Math.floor(spaceHeight / (gripWidth + brThick));\r\n config.gripWidth = (spaceWidth - (config.widthCount - 1) * brThick) / config.widthCount;\r\n gripHeight = (spaceHeight - (config.heightCount - 1) * brThick) / config.heightCount;\r\n break;\r\n case EWRackArrayType.ByCount:\r\n if (config.widthCount > 0)\r\n {\r\n config.widthCount = Math.floor(config.widthCount);\r\n }\r\n else\r\n {\r\n let gk = (spaceHeight - 2 * brThick) / config.heightCount;\r\n config.widthCount = Math.floor((spaceWidth - 2 * brThick) / gk + 1e-6);\r\n }\r\n if (config.heightCount > 0)\r\n {\r\n config.heightCount = Math.floor(config.heightCount);\r\n }\r\n else\r\n {\r\n let gk = (spaceWidth - 2 * config.heightCount) / config.heightCount;\r\n config.heightCount = Math.floor((spaceHeight - 2 * brThick) / gk + 1e-6);\r\n }\r\n config.gripWidth = (spaceWidth - (config.widthCount - 1) * brThick) / config.widthCount;\r\n gripHeight = (spaceHeight - (config.heightCount - 1) * brThick) / config.heightCount;\r\n break;\r\n case EWRackArrayType.Fixed:\r\n config.widthCount = Math.floor(config.widthCount);\r\n config.heightCount = Math.floor(config.heightCount);\r\n actualWidth = gripWidth * config.widthCount + brThick * (config.widthCount - 1);\r\n actualHeight = gripWidth * config.heightCount + brThick * (config.heightCount - 1);\r\n default:\r\n break;\r\n }\r\n\r\n if (config.widthCount <= 0 || config.heightCount <= 0)\r\n throw `绘制酒格失败,酒格个数异常! 宽个数:${config.widthCount} 高个数:${config.heightCount}`;\r\n\r\n config.widthCount--;\r\n config.heightCount--;\r\n this.BuildBoard(gripHeight, actualWidth, actualHeight, space);\r\n // this.AddLayerOrVerticalBoard(actualWidth, actualHeight);\r\n }\r\n BuildBoard(gripHeight: number, spaceWidth: number, spaceHeight: number, space: ISpaceParse)\r\n {\r\n const config = this.Config;\r\n let min = space.SpaceBox.min;\r\n let size = space.Size;\r\n let brThick = config.boardThick;\r\n\r\n let verBr = Board.CreateBoard(spaceHeight, size.y, brThick, BoardType.Vertical);\r\n this.ParseBrTooth(verBr, gripHeight);\r\n for (let i = 1; i <= config.widthCount; i++)\r\n {\r\n let br = verBr.Clone();\r\n br.Name = \"右板\" + i;\r\n br.ApplyMatrix(MoveMatrix(min.clone().add(new Vector3(config.gripWidth * i + (i - 1) * brThick)))).ApplyMatrix(space.SpaceOCS);\r\n this.boardlist.push(br);\r\n }\r\n\r\n let lyBr = Board.CreateBoard(spaceWidth, size.y, brThick);\r\n this.ParseBrTooth(lyBr);\r\n for (let i = 1; i <= config.heightCount; i++)\r\n {\r\n let br = lyBr.Clone();\r\n br.Name = \"左板\" + i;\r\n br.ApplyMatrix(MoveMatrix(\r\n min.clone().add(new Vector3(spaceWidth, 0, gripHeight * i + (i - 1) * brThick))))\r\n .ApplyMatrix(space.SpaceOCS);\r\n this.boardlist.push(br);\r\n }\r\n }\r\n ParseBrTooth(br: Board, gripHeight?: number)\r\n {\r\n const config = this.Config;\r\n let initPts: Vector3[] = [];\r\n\r\n let addWidth = config.grooveWidthAdd;\r\n let topEdge = config.topEdge;\r\n let bottomEdge = config.bottomEdge;\r\n let leftEdge = config.leftEdge;\r\n let rightEdge = config.rightEdge;\r\n let grooveLenAdd = config.grooveLengthAdd;\r\n\r\n br.BoardProcessOption.sealedUp = topEdge.toString();\r\n br.BoardProcessOption.sealedDown = bottomEdge.toString();\r\n br.BoardProcessOption.sealedLeft = leftEdge.toString();\r\n br.BoardProcessOption.sealedRight = rightEdge.toString();\r\n\r\n if (br.BoardType === BoardType.Layer)\r\n {\r\n addWidth = (addWidth - 2 * leftEdge) / 2;\r\n let p1 = new Vector3(0, config.gripWidth - addWidth);\r\n let p2 = new Vector3(br.Width / 2 + grooveLenAdd, config.gripWidth - addWidth);\r\n let p3 = new Vector3(br.Width / 2 + grooveLenAdd, config.gripWidth + br.Thickness + addWidth);\r\n let p4 = new Vector3(0, config.gripWidth + br.Thickness + addWidth);\r\n initPts.push(p1, p2, p3, p4);\r\n for (let i = 2; i <= config.widthCount; i++)\r\n {\r\n initPts.push(\r\n ...[p1, p2, p3, p4].map(p => p.clone().add(new Vector3(0, (config.gripWidth + br.Thickness) * (i - 1))))\r\n );\r\n }\r\n initPts.reverse();\r\n let cu = br.ContourCurve as Polyline;\r\n cu.AddVertexAt(cu.EndParam, initPts.map(p => AsVector2(p)));\r\n br.ContourCurve = cu;\r\n }\r\n else\r\n {\r\n addWidth = (addWidth - 2 * rightEdge) / 2;\r\n let p1 = new Vector3(br.Width, gripHeight - addWidth);\r\n let p2 = new Vector3(br.Width / 2 - grooveLenAdd, gripHeight - addWidth);\r\n let p3 = new Vector3(br.Width / 2 - grooveLenAdd, gripHeight + br.Thickness + addWidth);\r\n let p4 = new Vector3(br.Width, gripHeight + br.Thickness + addWidth);\r\n initPts.push(p1, p2, p3, p4);\r\n for (let i = 2; i <= config.heightCount; i++)\r\n {\r\n initPts.push(\r\n ...[p1, p2, p3, p4].map(p => p.clone().add(new Vector3(0, (gripHeight + br.Thickness) * (i - 1))))\r\n );\r\n }\r\n let cu = br.ContourCurve as Polyline;\r\n cu.AddVertexAt(2, initPts.map(p => AsVector2(p)));\r\n br.ContourCurve = cu;\r\n }\r\n this.ParseHighSealing(br, config.leftEdge, config.rightEdge, config.topEdge, config.bottomEdge, br.BoardType === BoardType.Layer);\r\n }\r\n}\r\n","import { Vector3 } from \"three\";\r\nimport { ExtendsBoardThickness } from \"../../../Add-on/DrawBoard/BuildBoardTool\";\r\nimport { DrawObliqueWineRackTool } from \"../../../Add-on/DrawWineRack/DrawObliqueWineRackTool\";\r\nimport { DrawUprightWineRackTool } from \"../../../Add-on/DrawWineRack/DrawUprightWineRackTool\";\r\nimport { DrawWineRackTool } from \"../../../Add-on/DrawWineRack/DrawWinRackTool\";\r\nimport { DefaultWineRackConfig } from \"../../../Editor/DefaultConfig\";\r\nimport { Box3Ext } from \"../../../Geometry/Box\";\r\nimport { ISpaceParse } from \"../../../Geometry/SpaceParse/ISpaceParse\";\r\nimport { EWineRackType, IWineRackOption } from \"../../../UI/Store/WineRackInterface\";\r\nimport { Factory } from \"../../CADFactory\";\r\nimport { CADFiler } from \"../../CADFiler\";\r\nimport { Board } from \"../../Entity/Board\";\r\nimport { TemplateRecord } from \"../TemplateRecord\";\r\n\r\n@Factory\r\nexport class TemplateWineRackRecord extends TemplateRecord\r\n{\r\n private option: IWineRackOption = { ...DefaultWineRackConfig };\r\n constructor()\r\n {\r\n super();\r\n this.name = \"酒格(自动)\";\r\n }\r\n get Option()\r\n {\r\n return Object.assign({}, this.option);\r\n }\r\n set Option(option: IWineRackOption)\r\n {\r\n this.WriteAllObjectRecord();\r\n Object.assign(this.option, option);\r\n ExtendsBoardThickness(this, option.boardThick);\r\n }\r\n protected async Update()\r\n {\r\n await super.Update();\r\n\r\n let bh = this.GetParam(\"BH\")?.value as number;\r\n if (bh)\r\n this.option.boardThick = bh;\r\n\r\n let bh2 = this.GetParam(\"BH2\")?.value as number;\r\n if (bh2)\r\n this.option.brThick2 = bh2;\r\n\r\n let wineRack: DrawWineRackTool;\r\n if (this.option.type === EWineRackType.Oblique)\r\n wineRack = DrawObliqueWineRackTool.GetInstance() as DrawObliqueWineRackTool;\r\n else\r\n wineRack = DrawUprightWineRackTool.GetInstance() as DrawUprightWineRackTool;\r\n\r\n let sbrs = this.PositioningSupportBoards;\r\n let space = new ISpaceParse(sbrs, this._CacheSpaceCS);\r\n space.ParseOK = true;\r\n space.SpaceBox = new Box3Ext(new Vector3(), this._CacheSpaceSize);\r\n\r\n wineRack.Parse(space, this.Option);\r\n\r\n let nbrs = wineRack.boardlist;\r\n\r\n for (let i = nbrs.length; i < this.Objects.length; i++)\r\n this.Objects[i].Object.Erase();\r\n\r\n for (let i = 0; i < nbrs.length; i++)\r\n {\r\n if (i < this.Objects.length)\r\n {\r\n let br = this.Objects[i].Object as Board;\r\n br.Erase(false);\r\n br.CopyFrom(nbrs[i]);\r\n br.SpaceOCS = this._CacheSpaceCS;\r\n }\r\n else\r\n {\r\n this._db.ModelSpace.Append(nbrs[i]);\r\n this.Objects.push(nbrs[i].Id);\r\n nbrs[i].SpaceOCS = this._CacheSpaceCS;\r\n }\r\n }\r\n }\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 super.ReadFile(file);\r\n\r\n this.option.type = file.Read();\r\n this.option.arrayType = file.Read();\r\n this.option.fullType = file.Read();\r\n this.option.isFull = file.Read();\r\n this.option.fullDir = file.Read();\r\n this.option.isLock = file.Read();\r\n this.option.heightCount = file.Read();\r\n this.option.widthCount = file.Read();\r\n\r\n this.option.isTotalDepth = file.Read();\r\n this.option.depth = file.Read();\r\n this.option.calcDepth = file.Read();\r\n this.option.gripWidth = file.Read();\r\n this.option.boardThick = file.Read();\r\n this.option.grooveWidthAdd = file.Read();\r\n\r\n this.option.leftEdge = file.Read();\r\n this.option.rightEdge = file.Read();\r\n this.option.topEdge = file.Read();\r\n this.option.bottomEdge = file.Read();\r\n\r\n this.option.frontCut = file.Read();\r\n this.option.leftCut = file.Read();\r\n this.option.rightCut = file.Read();\r\n this.option.topCut = file.Read();\r\n\r\n this.option.grooveLengthAdd = file.Read();\r\n this.option.isDrawLy = file.Read();\r\n this.option.isDrawVer = file.Read();\r\n this.option.brThick2 = file.Read();\r\n\r\n if (ver > 1)\r\n this.option.followNarrow = file.Read();\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(2);\r\n super.WriteFile(file);\r\n file.Write(this.option.type);\r\n file.Write(this.option.arrayType);\r\n file.Write(this.option.fullType);\r\n file.Write(this.option.isFull);\r\n file.Write(this.option.fullDir);\r\n file.Write(this.option.isLock);\r\n file.Write(this.option.heightCount);\r\n file.Write(this.option.widthCount);\r\n\r\n file.Write(this.option.isTotalDepth);\r\n file.Write(this.option.depth);\r\n file.Write(this.option.calcDepth);\r\n file.Write(this.option.gripWidth);\r\n file.Write(this.option.boardThick);\r\n file.Write(this.option.grooveWidthAdd);\r\n file.Write(this.option.leftEdge);\r\n file.Write(this.option.rightEdge);\r\n file.Write(this.option.topEdge);\r\n file.Write(this.option.bottomEdge);\r\n\r\n file.Write(this.option.frontCut);\r\n file.Write(this.option.leftCut);\r\n file.Write(this.option.rightCut);\r\n file.Write(this.option.topCut);\r\n\r\n file.Write(this.option.grooveLengthAdd);\r\n file.Write(this.option.isDrawLy);\r\n file.Write(this.option.isDrawVer);\r\n file.Write(this.option.brThick2);\r\n file.Write(this.option.followNarrow);\r\n }\r\n //#endregion\r\n}\r\n","import { Board } from \"../../DatabaseServices/Entity/Board\";\r\nimport { Entity } from \"../../DatabaseServices/Entity/Entity\";\r\nimport { HardwareCompositeEntity } from \"../../DatabaseServices/Hardware/HardwareCompositeEntity\";\r\nimport { ProcessingGroupRecord } from \"../../DatabaseServices/ProcessingGroup/ProcessingGroupRecord\";\r\nimport { TemplateLatticeRecord } from \"../../DatabaseServices/Template/ProgramTempate/TemplateLatticeRecord\";\r\nimport { TemplateTopBottomBoard } from \"../../DatabaseServices/Template/ProgramTempate/TemplateTopBottomBoard\";\r\nimport { TemplateWineRackRecord } from \"../../DatabaseServices/Template/ProgramTempate/TemplateWineRackRecord\";\r\nimport { TemplateRecord } from \"../../DatabaseServices/Template/TemplateRecord\";\r\nimport { BoardOpenDir, BoardType } from \"../../UI/Store/BoardInterface\";\r\n\r\nexport function IsDoor(en: Entity)\r\n{\r\n if (en.Template)\r\n {\r\n let temp = en.Template.Object as TemplateRecord;\r\n if (((temp?.Parent?.Object as TemplateRecord)?.Name === \"门板空间\"))\r\n return true;\r\n }\r\n // else //有时候 模块会被破坏,所以模块检测不是唯一标准\r\n if (en instanceof Board)\r\n {\r\n return en.OpenDir !== BoardOpenDir.None;\r\n }\r\n else if (en instanceof HardwareCompositeEntity)\r\n {\r\n return en.HardwareOption.model.includes(\"开门\");\r\n }\r\n return false;\r\n}\r\n\r\nexport function IsDrawer(en: Entity)\r\n{\r\n if (en.Template)\r\n {\r\n let temp = en.Template.Object as TemplateRecord;\r\n if (((temp?.Parent?.Object as TemplateRecord)?.Name === \"抽屉空间\"))\r\n return true;\r\n }\r\n\r\n return en.ProcessingGroupList.some(id => id && ((id.Object as ProcessingGroupRecord)?.Name === \"抽屉\"));;\r\n}\r\n\r\nexport function IsWinerack(en: Entity)\r\n{\r\n if (en.Template && en.Template.Object instanceof TemplateWineRackRecord)\r\n return true;\r\n\r\n return en.ProcessingGroupList.some(id => id && ((id.Object as ProcessingGroupRecord)?.Name === \"酒格\"));\r\n}\r\nexport function IsLattice(en: Entity)\r\n{\r\n if (en.Template && en.Template.Object instanceof TemplateLatticeRecord)\r\n return true;\r\n\r\n return en.ProcessingGroupList.some(id => id && ((id.Object as ProcessingGroupRecord)?.Name === \"格子抽\"));\r\n}\r\n\r\nexport function IsHandle(en: Entity)\r\n{\r\n if (en instanceof HardwareCompositeEntity)\r\n {\r\n if (en.Template)\r\n {\r\n let temp = en.Template.Object as TemplateRecord;\r\n if ((temp?.Parent?.Object as TemplateRecord)?.Name === \"拉手空间\")\r\n return true;\r\n }\r\n // else //有时候 模块会被破坏,所以模块检测不是唯一标准\r\n {\r\n return en.HardwareOption.name.includes(\"拉手\");\r\n }\r\n }\r\n}\r\nexport function IsHinge(en: Entity)\r\n{\r\n if (en instanceof HardwareCompositeEntity)\r\n {\r\n if (en.Template)\r\n {\r\n let temp = en.Template.Object as TemplateRecord;\r\n if ((temp?.Parent?.Object as TemplateRecord)?.Name === \"铰链空间\")\r\n return true;\r\n }\r\n // else //有时候 模块会被破坏,所以模块检测不是唯一标准\r\n {\r\n return en.HardwareOption.name.includes(\"铰链\");\r\n }\r\n }\r\n}\r\n\r\nexport function isDingDiBan(b: Board)\r\n{\r\n if (b.BoardType === BoardType.Layer)\r\n {\r\n if (b.Template && b.Template.Object instanceof TemplateTopBottomBoard)\r\n return true;\r\n return b.Name.includes(\"顶板\") || b.Name.includes(\"底板\");\r\n }\r\n return false;\r\n}\r\n","import { Geometry, MathUtils, Matrix4, Mesh, Object3D, ShapeGeometry, Vector3 } from 'three';\r\nimport { ColorMaterial } from '../../Common/ColorPalette';\r\nimport { setRotationOnAxis } from '../../Common/Matrix4Utils';\r\nimport { UpdateDraw } from '../../Common/Status';\r\nimport { Box3Ext } from '../../Geometry/Box';\r\nimport { GetBox, MoveMatrix } from '../../Geometry/GeUtils';\r\nimport { RenderType } from '../../GraphicsSystem/RenderType';\r\nimport { equaln } from '../../Nest/Common/Util';\r\nimport { Factory } from '../CADFactory';\r\nimport { CADFiler } from '../CADFiler';\r\nimport { Entity } from '../Entity/Entity';\r\n\r\nexport enum TextAligen\r\n{\r\n LeftTop = 3, Top = 1, RightTop = 5,\r\n LeftMid = 2, Mid = 0, RightMid = 4,\r\n LeftDown = 10, Down = 8, RightDown = 12,\r\n}\r\n\r\nconst ShapeCache = new Map();\r\nexport function DisposeTextShapeCache()\r\n{\r\n for (let [key, geo] of ShapeCache)\r\n geo.dispose();\r\n ShapeCache.clear();\r\n};\r\n\r\n/**\r\n * 单行文字实体\r\n */\r\n@Factory\r\nexport class Text extends Entity\r\n{\r\n protected OnlyRenderType = true;\r\n\r\n private _Align: TextAligen = TextAligen.LeftDown;\r\n constructor(pos?: Vector3,\r\n private _TextString: string = \"\",\r\n public _FontName: string = \"songti\",\r\n private _Height: number = 60,\r\n private _TextRotation: number = 0,\r\n )\r\n {\r\n super();\r\n pos && this._Matrix.setPosition(pos);\r\n this._TextRotation && setRotationOnAxis(this._Matrix, this.Normal, MathUtils.degToRad(this._TextRotation));\r\n }\r\n get TextRotation()\r\n {\r\n return this._TextRotation;\r\n }\r\n set TextRotation(v: number)\r\n {\r\n if (this._TextRotation === v) return;\r\n\r\n this.WriteAllObjectRecord();\r\n this._TextRotation = v;\r\n this.UpdateTranslate();\r\n }\r\n get TextString()\r\n {\r\n return this._TextString;\r\n }\r\n set TextString(str: string)\r\n {\r\n if (str !== this._TextString)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._TextString = str;\r\n this.Update();\r\n }\r\n }\r\n\r\n set TextAligen(al: TextAligen)\r\n {\r\n if (al === this._Align) return;\r\n this.WriteAllObjectRecord();\r\n this._Align = al;\r\n this.UpdateTranslate();\r\n }\r\n get TextAligen()\r\n {\r\n return this._Align;\r\n }\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 (equaln(v, this._Height)) return;\r\n\r\n this.WriteAllObjectRecord();\r\n this._Height = v;\r\n this.Update(UpdateDraw.Geometry);\r\n }\r\n //创建字体对象\r\n async AsyncUpdateDrawObject(obj: Object3D, renderType: RenderType)\r\n {\r\n \r\n }\r\n /**大概宽度 */\r\n get Width()\r\n {\r\n let count = 0;\r\n for (let i = 0; i < this._TextString.length; i++)\r\n {\r\n let code = this._TextString.charCodeAt(i);\r\n if (code > 255)\r\n count++;\r\n else\r\n count += 0.5;\r\n }\r\n return count * this._Height * 1.35;\r\n }\r\n\r\n get HasBoundingBox() { return this._CacheDrawObject.has(RenderType.Wireframe); }\r\n\r\n get BoundingBox()\r\n {\r\n let obj = this._CacheDrawObject.get(RenderType.Wireframe);\r\n if (obj && obj.children.length === 1)\r\n return GetBox(obj);\r\n\r\n return this.BoundingBoxInOCS.applyMatrix4((this.OCSNoClone));\r\n }\r\n\r\n get BoundingBoxInOCS(): Box3Ext\r\n {\r\n let w = Math.max(Math.abs(this.Width / 2), 1);\r\n let h = Math.max(Math.abs(this.Height / 2), 1);\r\n let box = new Box3Ext(\r\n new Vector3(-w, -h, 0),\r\n new Vector3(w, h, 0)\r\n );\r\n\r\n let offset = new Vector3;\r\n if (this.TextAligen & TextAligen.LeftMid)\r\n offset.x = w;\r\n if (this.TextAligen & TextAligen.RightMid)\r\n offset.x = -w;\r\n if (this.TextAligen & TextAligen.Top)\r\n offset.y = -h;\r\n if (this.TextAligen & TextAligen.Down)\r\n offset.y = h;\r\n\r\n box.translate(offset);\r\n return box;\r\n }\r\n\r\n UpdateTranslate()\r\n {\r\n for (let [type, obj] of this._CacheDrawObject)\r\n {\r\n this.UpdateObjectTranslate(obj);\r\n }\r\n }\r\n\r\n private UpdateObjectTranslate(obj: Object3D)\r\n {\r\n if (obj.children.length === 1)\r\n {\r\n let mesh = obj.children[0] as Mesh;\r\n\r\n let box = mesh.geometry.boundingBox;\r\n\r\n let p = new Vector3();\r\n if (this._Align & TextAligen.LeftMid)\r\n p.x = box.min.x;\r\n else if (this._Align & TextAligen.RightMid)\r\n p.x = box.max.x;\r\n\r\n else\r\n p.x = (box.min.x + box.max.x) / 2;\r\n\r\n if (this._Align & TextAligen.Top)\r\n p.y = box.max.y;\r\n else if (this._Align & TextAligen.Down)\r\n p.y = box.min.y;\r\n\r\n else\r\n p.y = (box.min.y + box.max.y) / 2;\r\n\r\n mesh.matrix = new Matrix4().makeRotationZ(this.TextRotation).multiply(\r\n new Matrix4().setPosition(p.negate())\r\n );\r\n\r\n obj.updateMatrixWorld(true);\r\n }\r\n }\r\n\r\n ApplyMatrix(m: Matrix4): this\r\n {\r\n super.ApplyMatrix(m);\r\n return this;\r\n }\r\n\r\n protected ApplyScaleMatrix(m: Matrix4): this\r\n {\r\n this.WriteAllObjectRecord();\r\n let p1 = this.Position;\r\n let p2 = new Vector3(0, this._Height).applyMatrix4(this.OCS);\r\n [p1, p2].forEach(p => p.applyMatrix4(m));\r\n this.Position = p1;\r\n this.Height = p1.distanceTo(p2);\r\n return this;\r\n }\r\n\r\n InitDrawObject(renderType: RenderType = RenderType.Wireframe): Object3D\r\n {\r\n let g = new Object3D();\r\n\r\n if (renderType !== RenderType.Wireframe)\r\n {\r\n let obj = this.CacheDrawObject.get(RenderType.Wireframe);\r\n if (obj && obj.children.length === 1 && (obj.children[0] as Mesh).geometry)\r\n {\r\n let color = (renderType > 100 || renderType === RenderType.Print) ? 0 : this.ColorIndex;\r\n let mesh = new Mesh((obj.children[0] as Mesh).geometry, ColorMaterial.GetBasicMaterial(color));\r\n g.add((mesh));\r\n g.updateMatrixWorld(true);\r\n this.UpdateObjectTranslate(g);\r\n return g;\r\n }\r\n }\r\n\r\n this.AsyncUpdateDrawObject(g, renderType);\r\n return g;\r\n }\r\n UpdateDrawObject(type: RenderType, obj: Object3D)\r\n {\r\n this.AsyncUpdateDrawObject(obj, type);\r\n }\r\n UpdateDrawObjectMaterial(renderType: RenderType, en: Object3D)\r\n {\r\n if (en && en.children.length === 1)\r\n {\r\n let mesh = en.children[0] as Mesh;\r\n //因为我们是OnlyRnderType 所以Print会变成WireframePrint,所以要用下面的写法\r\n let color = (renderType > 100 || renderType === RenderType.Print) ? 0 : this.ColorIndex;\r\n mesh.material = ColorMaterial.GetBasicMaterialDoubleSide(color);\r\n }\r\n }\r\n GetGripPoints(): Array\r\n {\r\n return [this.Position, new Vector3(0, this.Height).applyMatrix4(this.OCS)];\r\n }\r\n MoveGripPoints(indexList: number[], vec: Vector3)\r\n {\r\n\r\n if (indexList[0] === 0)\r\n this.Position = this.Position.add(vec);\r\n else\r\n {\r\n let v = vec.clone().applyMatrix4(this.OCSInv.setPosition(new Vector3));\r\n this.Height = this.Height + v.y;\r\n }\r\n }\r\n\r\n GetStretchPoints(): Array\r\n {\r\n return [this.Position];\r\n }\r\n MoveStretchPoints(indexList: Array, vec: Vector3)\r\n {\r\n this.ApplyMatrix(MoveMatrix(vec));\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._TextString = file.Read();\r\n this._Height = file.Read();\r\n this.TextRotation = file.Read();\r\n this._FontName = file.Read();\r\n this._Align = 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._TextString);\r\n file.Write(this._Height);\r\n file.Write(this.TextRotation);\r\n file.Write(this._FontName);\r\n file.Write(this._Align);\r\n }\r\n //#endregion-----------------------------File End-----------------------------\r\n}\r\n","import { BufferGeometry, Float32BufferAttribute, LineSegments, Material, Matrix3, Matrix4, Mesh, Object3D, Vector3 } from \"three\";\r\nimport { ColorMaterial } from \"../Common/ColorPalette\";\r\nimport { FixedNotZero } from \"../Common/Utils\";\r\nimport { AutoRecord } from \"../DatabaseServices/AutoRecord\";\r\nimport { Factory } from \"../DatabaseServices/CADFactory\";\r\nimport { CADFiler } from \"../DatabaseServices/CADFiler\";\r\nimport { Entity } from \"../DatabaseServices/Entity/Entity\";\r\nimport { TemplateRecord } from \"../DatabaseServices/Template/TemplateRecord\";\r\nimport { Text, TextAligen } from \"../DatabaseServices/Text/Text\";\r\nimport { Box3Ext } from \"../Geometry/Box\";\r\nimport { XAxis, XAxisN, YAxis, YAxisN, ZAxis, ZeroVec } from \"../Geometry/GeUtils\";\r\nimport { GenerateBoxEdgeGeometry } from \"../Geometry/SimpleExtrudeEdgeGeometry\";\r\nimport { RenderType } from \"../GraphicsSystem/RenderType\";\r\nimport { ObjectSnapMode } from \"./ObjectSnapMode\";\r\n\r\nconst EmptyArray = [];\r\n\r\n@Factory\r\nexport class VisualSpaceBox extends Entity\r\n{\r\n OnlyRenderType = true;\r\n\r\n private _LText = new Text;\r\n private _WText = new Text;\r\n private _HText = new Text;\r\n\r\n @AutoRecord private _IsRoot = false;\r\n\r\n @AutoRecord private _DisplayLength = true;\r\n @AutoRecord private _DisplayWidth = true;\r\n @AutoRecord private _DisplayHeight = true;\r\n\r\n\r\n constructor(\r\n protected _Length: number = 1,\r\n protected _Width: number = 1,\r\n protected _Height: number = 1,\r\n )\r\n {\r\n super();\r\n this._LText.IsEmbedEntity = true;\r\n this._WText.IsEmbedEntity = true;\r\n this._HText.IsEmbedEntity = true;\r\n\r\n this._LText.TextAligen = TextAligen.Down;\r\n this._WText.TextAligen = TextAligen.Top;\r\n this._HText.TextAligen = TextAligen.Top;\r\n (this._LText)._Matrix.makeBasis(XAxis, ZAxis, YAxis);\r\n (this._WText)._Matrix.makeBasis(YAxis, XAxisN, ZAxis);\r\n (this._HText)._Matrix.makeBasis(ZAxis, XAxisN, YAxisN);\r\n }\r\n\r\n get Length() { return this._Length; }\r\n get Width() { return this._Width; }\r\n get Height() { return this._Height; }\r\n\r\n\r\n set IsRoot(b: boolean)\r\n {\r\n if (this._IsRoot !== b)\r\n {\r\n this._IsRoot = b;\r\n for (let [, obj] of this._CacheDrawObject)\r\n {\r\n let [box, edge, lobj, wobj, hobj] = obj.children;\r\n if (this._IsRoot)\r\n box.visible = false;\r\n else\r\n box.visible = true;\r\n\r\n if (this._IsRoot)\r\n {\r\n this._LText.TextAligen = TextAligen.Top;\r\n this._WText.TextAligen = TextAligen.Down;\r\n this._HText.TextAligen = TextAligen.Down;\r\n }\r\n else\r\n {\r\n this._LText.TextAligen = TextAligen.Down;\r\n this._WText.TextAligen = TextAligen.Top;\r\n this._HText.TextAligen = TextAligen.Top;\r\n }\r\n }\r\n }\r\n }\r\n\r\n set DisplayWidth(b: boolean)\r\n {\r\n for (let [, obj] of this._CacheDrawObject)\r\n {\r\n let [box, edge, lobj, wobj, hobj] = obj.children;\r\n wobj.visible = b;\r\n }\r\n this._DisplayWidth = b;\r\n }\r\n set DisplayLength(b: boolean)\r\n {\r\n for (let [, obj] of this._CacheDrawObject)\r\n {\r\n let [box, edge, lobj, wobj, hobj] = obj.children;\r\n lobj.visible = b;\r\n }\r\n this._DisplayLength = b;\r\n }\r\n set DisplayHeight(b: boolean)\r\n {\r\n for (let [, obj] of this._CacheDrawObject)\r\n {\r\n let [box, edge, lobj, wobj, hobj] = obj.children;\r\n hobj.visible = b;\r\n }\r\n this._DisplayHeight = b;\r\n }\r\n\r\n SetSize(l: number, w: number, h: number)\r\n {\r\n if (l !== this._Length || w !== this._Width || h !== this._Height)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._Length = l;\r\n this._Width = w;\r\n this._Height = h;\r\n this.Update();\r\n }\r\n }\r\n get BoundingBoxInOCS()\r\n {\r\n return new Box3Ext(new Vector3, new Vector3(this._Length, this._Width, this._Height));\r\n }\r\n\r\n get BoundingBox()\r\n {\r\n return this.BoundingBoxInOCS.applyMatrix4(this.OCSNoClone);\r\n }\r\n\r\n //#region 捕捉\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 switch (snapMode)\r\n {\r\n case ObjectSnapMode.End:\r\n {\r\n let pts: Vector3[] = [\r\n new Vector3(),\r\n new Vector3(this._Length),\r\n new Vector3(this._Length, this._Width),\r\n new Vector3(0, this._Width),\r\n\r\n new Vector3(0, 0, this._Height),\r\n new Vector3(this._Length, 0, this._Height),\r\n new Vector3(this._Length, this._Width, this._Height),\r\n new Vector3(0, this._Width, this._Height),\r\n ];\r\n\r\n for (let p of pts)\r\n p.applyMatrix4(this._Matrix);\r\n return pts;\r\n }\r\n }\r\n return EmptyArray;\r\n }\r\n //#endregion\r\n\r\n //#region Draw\r\n InitDrawObject(renderType: RenderType = RenderType.Wireframe)\r\n {\r\n let obj = new Object3D();\r\n\r\n //box\r\n obj.add(new Mesh(backGeo, ColorMaterial.GetBasicMaterialTransparent2(this.ColorIndex, 0.5)));\r\n //edge\r\n obj.add(new LineSegments(edgeGeo, ColorMaterial.GetLineMaterial(this.ColorIndex)));\r\n\r\n obj.add(this._LText.DrawObject);\r\n obj.add(this._WText.DrawObject);\r\n obj.add(this._HText.DrawObject);\r\n\r\n this.UpdateDrawObject(renderType, obj);\r\n return obj;\r\n }\r\n\r\n UpdateDrawObject(type: RenderType, obj: Object3D)\r\n {\r\n let [box, edge, lobj, wobj, hobj] = obj.children;\r\n box.scale.set(this._Length, this._Width, this._Height);\r\n box.updateMatrix();\r\n\r\n edge.scale.set(this._Length, this._Width, this._Height);\r\n edge.updateMatrix();\r\n\r\n box.visible = !this._IsRoot;\r\n\r\n if (this._IsRoot)\r\n {\r\n this._LText.TextAligen = TextAligen.Top;\r\n this._WText.TextAligen = TextAligen.Down;\r\n this._HText.TextAligen = TextAligen.Down;\r\n }\r\n else\r\n {\r\n this._LText.TextAligen = TextAligen.Down;\r\n this._WText.TextAligen = TextAligen.Top;\r\n this._HText.TextAligen = TextAligen.Top;\r\n }\r\n\r\n this._LText.TextString = FixedNotZero(this._Length, 2);\r\n this._WText.TextString = FixedNotZero(this._Width, 2);\r\n this._HText.TextString = FixedNotZero(this._Height, 2);\r\n\r\n //实体被错误的Dispose,导致需要这样的更新\r\n this._LText.Update();\r\n this._WText.Update();\r\n this._HText.Update();\r\n\r\n lobj.visible = this._DisplayLength;\r\n wobj.visible = this._DisplayWidth;\r\n hobj.visible = this._DisplayHeight;\r\n\r\n lobj.position.set(this._Length / 2, 0, 0);\r\n lobj.updateMatrix();\r\n\r\n wobj.position.set(0, this._Width / 2, 0);\r\n wobj.updateMatrix();\r\n\r\n hobj.position.set(0, 0, this._Height / 2);\r\n hobj.updateMatrix();\r\n }\r\n\r\n UpdateDrawObjectMaterial(type: RenderType, obj: Object3D, material?: Material)\r\n {\r\n let [mesh, line] = obj.children as [Mesh, LineSegments];\r\n\r\n mesh.material = ColorMaterial.GetBasicMaterialTransparent2(this.ColorIndex, 0.2);\r\n line.material = ColorMaterial.GetLineMaterial(this.ColorIndex);\r\n }\r\n\r\n //#endregion\r\n\r\n //#region -------------------------File-------------------------\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._Length = file.Read();\r\n this._Width = file.Read();\r\n this._Height = file.Read();\r\n\r\n this._IsRoot = file.Read();\r\n this._DisplayLength = file.Read();\r\n this._DisplayWidth = file.Read();\r\n this._DisplayHeight = file.Read();\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._Length);\r\n file.Write(this._Width);\r\n file.Write(this._Height);\r\n\r\n file.Write(this._IsRoot);\r\n file.Write(this._DisplayLength);\r\n file.Write(this._DisplayWidth);\r\n file.Write(this._DisplayHeight);\r\n }\r\n\r\n // //局部撤销\r\n // ApplyPartialUndo(undoData: CADObject)\r\n // {\r\n // super.ApplyPartialUndo(undoData);\r\n // }\r\n //#endregion\r\n\r\n\r\n //#region\r\n GetGripPoints(): Array\r\n {\r\n // return EmptyArray;//因为更新模块树是异步的,没办法在拽拖夹点时顺带更新,所以移除这个特性.\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 x.multiplyScalar(this._Length);\r\n y.multiplyScalar(this._Width);\r\n z.multiplyScalar(this._Height);\r\n\r\n let p = this.Position;\r\n return [p, x.add(p), y.add(p), z.add(p)];\r\n }\r\n\r\n MoveGripPoints(indexList: number[], vec: Vector3)\r\n {\r\n let template = this.Template?.Object as TemplateRecord;\r\n if (template && template !== template.Root)\r\n return;\r\n\r\n for (let i of indexList)\r\n {\r\n if (i === 0)\r\n {\r\n this.WriteAllObjectRecord();\r\n this.Position = this.Position.add(vec);\r\n return;\r\n }\r\n else\r\n {\r\n continue;\r\n let ocs = this._Matrix.clone().setPosition(ZeroVec);\r\n let ocsinv = new Matrix4().getInverse(ocs);\r\n vec.applyMatrix4(ocsinv);\r\n if (i === 1)\r\n {\r\n this._Length += vec.x;\r\n template.LParam.expr = this._Length;\r\n }\r\n else if (i === 2)\r\n {\r\n this._Width += vec.y;\r\n template.WParam.expr = this._Width;\r\n }\r\n else\r\n {\r\n this._Height += vec.z;\r\n template.HParam.expr = this._Height;\r\n }\r\n\r\n template.UpdateTemplateTree(); //TODO:可以弹出个对话框让用户更新. 或者使用反应器?\r\n\r\n this.Update();\r\n }\r\n return;\r\n }\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 //#endregion\r\n\r\n}\r\n\r\nclass BackFaceBoxBufferGeometry extends BufferGeometry\r\n{\r\n constructor(length: number = 1, width: number = 1, height: number = 1)\r\n {\r\n super();\r\n\r\n let pts: number[] = [\r\n 0, width, 0,\r\n length, width, 0,\r\n length, width, height,\r\n 0, width, height,\r\n ];\r\n let uvs: number[] = [\r\n 0, 0,\r\n 1, 0,\r\n 1, 1,\r\n\r\n 0, 0,\r\n 1, 1,\r\n 0, 1,\r\n ];\r\n\r\n let indices: number[] = [0, 1, 2, 0, 2, 3];\r\n\r\n this.setIndex(indices);\r\n this.setAttribute('position', new Float32BufferAttribute(pts, 3));\r\n // this.setAttribute('normal', new Float32BufferAttribute(normals, 3));\r\n this.setAttribute('uv', new Float32BufferAttribute(uvs, 2));\r\n\r\n }\r\n}\r\n\r\nconst backGeo = new BackFaceBoxBufferGeometry();\r\nconst edgeGeo = GenerateBoxEdgeGeometry(1, 1, 1);\r\n","import { Box3, MathUtils, OrthographicCamera, PerspectiveCamera, Vector3 } from 'three';\r\nimport { HostApplicationServices } from '../ApplicationServices/HostApplicationServices';\r\nimport { CADFiler } from '../DatabaseServices/CADFiler';\r\nimport { Orbit } from '../Geometry/Orbit';\r\n\r\nconst ViewScopeSize = 4e6;\r\n//相机活动范围\r\nconst ViewScopeMin = new Vector3(-ViewScopeSize, -ViewScopeSize * 0.7, -ViewScopeSize);\r\nconst ViewScopeMax = ViewScopeMin.clone().negate();\r\n\r\nconst ViewBoxMin = new Vector3(1, 1, 1);\r\nconst viewBoxMax = new Vector3(1e7, 1e7, 1e7);\r\n\r\nexport enum CameraType\r\n{\r\n OrthographicCamera = 1,\r\n PerspectiveCamera = 2,\r\n}\r\n\r\ntype Camera = OrthographicCamera | PerspectiveCamera;\r\n\r\n/**\r\n *\r\n * 相机的控制.\r\n * ->切换相机\r\n * ->设置视口大小\r\n * ->旋转和移动相机.\r\n */\r\nexport class CameraUpdate\r\n{\r\n private _CurCamera: Camera;\r\n private _CameraArray: Map = new Map();\r\n\r\n //视口的画布大小\r\n private _Width: number;\r\n private _Height: number;\r\n //视口显示的高度\r\n private _ViewHeight: number = 1000;\r\n\r\n //观察的位置\r\n private _Target: Vector3 = new Vector3();\r\n //观察向量\r\n private _Direction: Vector3 = new Vector3(0, 0, -1);\r\n //观察的轨道.\r\n private _Orbit: Orbit = new Orbit();\r\n\r\n DisableRotate = false;\r\n\r\n constructor()\r\n {\r\n this._CameraArray.set(OrthographicCamera, new OrthographicCamera(-2, 2, 2, -2,\r\n -ViewScopeSize, ViewScopeSize));\r\n\r\n this._CameraArray.set(PerspectiveCamera, new PerspectiveCamera(60, 1, 0.01, ViewScopeSize));\r\n\r\n this._CurCamera = this._CameraArray.get(OrthographicCamera);\r\n\r\n this._Orbit.SetFromDirection(this._Direction);\r\n\r\n this.UpdateUp();\r\n\r\n this.Update();\r\n }\r\n\r\n get Orbit() { return this._Orbit; }\r\n\r\n get Aspect(): number\r\n {\r\n return this._Width / this._Height;\r\n }\r\n\r\n get Target() { return this._Target; }\r\n\r\n get Camera(): Camera\r\n {\r\n return this._CurCamera;\r\n }\r\n get ViewHeight()\r\n {\r\n return this._ViewHeight;\r\n }\r\n set ViewHeight(height)\r\n {\r\n this._ViewHeight = MathUtils.clamp(height, HostApplicationServices.viewSize.minViewHeight, HostApplicationServices.viewSize.maxViewHeight);\r\n this.ZoomEvent();\r\n }\r\n\r\n get Direction()\r\n {\r\n return this._Direction.clone();\r\n }\r\n\r\n SetSize(width: number, height: number)\r\n {\r\n this._Width = width;\r\n this._Height = height;\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 Fov()\r\n {\r\n return (this._CameraArray.get(PerspectiveCamera) as PerspectiveCamera).fov;\r\n }\r\n\r\n set Fov(fov: number)\r\n {\r\n let camera = this._CameraArray.get(PerspectiveCamera) as PerspectiveCamera;\r\n camera.fov = fov;\r\n this.UpdateCameraMatrix();\r\n }\r\n\r\n /**\r\n * 平移相机.\r\n * @param {Vector3} mouseMove\r\n */\r\n Pan(mouseMove: Vector3)\r\n {\r\n mouseMove.y *= -1;\r\n mouseMove.multiplyScalar(-this._ViewHeight / (this._Height * window.devicePixelRatio));\r\n mouseMove.applyQuaternion(this.Camera.quaternion);\r\n this._Target.add(mouseMove);\r\n this._Target.clamp(ViewScopeMin, ViewScopeMax);\r\n this.Update();\r\n }\r\n Rotate(mouseMove: Vector3, target: Vector3)\r\n {\r\n let scale = this.CameraType === CameraType.PerspectiveCamera ? 0.002 : 0.003;\r\n this._Orbit.RoX -= mouseMove.y * scale;\r\n this._Orbit.theta -= mouseMove.x * scale;\r\n if (this.CameraType === CameraType.PerspectiveCamera && !target)//转头\r\n {\r\n if (this.DisableRotate) return;\r\n\r\n this._Orbit.UpdateDirection(this._Direction);\r\n this.UpdateUp();\r\n\r\n let camera = this.Camera as PerspectiveCamera;\r\n camera.aspect = this.Aspect;\r\n let distens = (this._ViewHeight / 2) / (Math.tan(MathUtils.degToRad(camera.fov) / 2));\r\n\r\n this._Target.copy(this._Direction).multiplyScalar(distens).add(this.Camera.position);//重新计算观察点位置\r\n\r\n this.UpdateCameraMatrix();\r\n return;\r\n }\r\n\r\n //缓存观察点\r\n let oldTargetFormCameraSpace = target.clone().applyMatrix4(this.Camera.matrixWorldInverse);\r\n\r\n this._Orbit.UpdateDirection(this._Direction);\r\n this.UpdateUp();\r\n this.Update();\r\n\r\n //-----还原观察点\r\n //得到新的观察点相对于相机的位置\r\n let newTargetFormCameraSpace = target.clone().applyMatrix4(this.Camera.matrixWorldInverse);\r\n //减去原先的位置. 得到观测点在相机内移动的向量\r\n newTargetFormCameraSpace.sub(oldTargetFormCameraSpace);\r\n //乘以相机的矩阵. 得到向量在世界坐标系的位置\r\n newTargetFormCameraSpace.applyMatrix4(this.Camera.matrix);\r\n //因为使用的是点变换,所以减去基点,得到向量\r\n newTargetFormCameraSpace.sub(this.Camera.position);\r\n //加上移动的向量. 使得观察点时钟在相机的某个位置\r\n this._Target.add(newTargetFormCameraSpace);\r\n\r\n this.Update();\r\n }\r\n\r\n UpdateCameraMatrix()\r\n {\r\n this.Camera.matrixAutoUpdate = true;\r\n // this.Camera.updateMatrix(); //如果不使用autoUpdate,那么应该还原这句\r\n this.Camera.lookAt(this._Target);\r\n this.Camera.updateProjectionMatrix();\r\n // this.Camera.updateMatrix(); //如果不使用autoUpdate,那么应该还原这句\r\n this.Camera.updateMatrixWorld(false);\r\n this.Camera.matrixAutoUpdate = false;\r\n }\r\n\r\n Zoom(scale: number, scaleCenter?: Vector3)\r\n {\r\n if (this.Camera instanceof OrthographicCamera)\r\n {\r\n this.ViewHeight *= scale;\r\n if (scaleCenter && this._ViewHeight < HostApplicationServices.viewSize.maxViewHeight)\r\n {\r\n this._Target.sub(scaleCenter);\r\n this._Target.multiplyScalar(scale);\r\n this._Target.add(scaleCenter);\r\n }\r\n }\r\n else if (this.Camera instanceof PerspectiveCamera)\r\n {\r\n let add = scale > 1 ? 1 : -1;\r\n add *= this.Camera.position.distanceTo(this._Target) / 10;\r\n this._Target.add(this._Direction.clone().multiplyScalar(-add));\r\n }\r\n this.Update();\r\n }\r\n ZoomExtentsBox3(box3: Box3)\r\n {\r\n if (!box3 || box3.isEmpty()) return;\r\n this.Camera.updateMatrixWorld(false);\r\n\r\n box3.getCenter(this._Target);\r\n\r\n //变换到相机坐标系\r\n box3.applyMatrix4(this.Camera.matrixWorldInverse);\r\n\r\n let size = box3.getSize(new Vector3());\r\n size.clamp(ViewBoxMin, viewBoxMax);\r\n\r\n // this._Target.z = box3.max.z; //使用这个代码 在变换矩阵可以使得观察点在前面,但是会导致观察距离过长\r\n\r\n //宽高比\r\n let aspectRatio = size.x / size.y;\r\n\r\n let viewAspectRatio = this.Aspect;\r\n if (aspectRatio > viewAspectRatio)\r\n this.ViewHeight = size.x / viewAspectRatio;\r\n else\r\n this.ViewHeight = size.y;\r\n this.Update();\r\n }\r\n\r\n /**\r\n * 设置相机的观察向量.\r\n * @param {Vector3} dir 方向向量,这个向量传入后会被更改为单位向量\r\n */\r\n LookAt(dir: Vector3)\r\n {\r\n this.LookAtEvent(dir);\r\n this._Orbit.SetFromDirection(dir);\r\n this._Direction.copy(dir);\r\n this.UpdateUp();\r\n this.Update();\r\n }\r\n LookAtEvent(dir: Vector3) { }\r\n\r\n UpdateUp()\r\n {\r\n Orbit.ComputUpDirection(this._Direction, this.Camera.up);\r\n }\r\n /**\r\n * 根据视口大小,设置相机视口范围.\r\n */\r\n Update()\r\n {\r\n this.Camera.position.copy(this._Target);\r\n\r\n if (this.Camera instanceof OrthographicCamera)\r\n {\r\n this.Camera.left = this.Aspect * this._ViewHeight / -2;\r\n this.Camera.right = this.Aspect * this._ViewHeight / 2;\r\n this.Camera.bottom = this._ViewHeight / -2;\r\n this.Camera.top = this._ViewHeight / 2;\r\n\r\n this.Camera.position.sub(this._Direction);\r\n }\r\n else if (this.Camera instanceof PerspectiveCamera)\r\n {\r\n this.Camera.aspect = this.Aspect;\r\n let distens = (this._ViewHeight / 2) / (Math.tan(MathUtils.degToRad(this.Camera.fov) / 2));\r\n\r\n this.Camera.position.sub(this._Direction.clone().multiplyScalar(distens));\r\n }\r\n else return;\r\n\r\n this.UpdateCameraMatrix();\r\n }\r\n\r\n ZoomEvent()\r\n {\r\n }\r\n\r\n set CameraType(type: CameraType)\r\n {\r\n if (type !== this.CameraType)\r\n this.SwitchCamera();\r\n }\r\n get CameraType()\r\n {\r\n if (this.Camera instanceof OrthographicCamera)\r\n return CameraType.OrthographicCamera;\r\n else\r\n return CameraType.PerspectiveCamera;\r\n }\r\n\r\n SwitchCamera()\r\n {\r\n if (this.Camera instanceof OrthographicCamera)\r\n this._CurCamera = this._CameraArray.get(PerspectiveCamera);\r\n else\r\n this._CurCamera = this._CameraArray.get(OrthographicCamera);\r\n this.UpdateUp();\r\n this.Update();\r\n }\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 this._ViewHeight = file.Read();\r\n this._Target.fromArray(file.Read());\r\n this._Direction.fromArray(file.Read());\r\n\r\n this._Orbit.SetFromDirection(this._Direction);\r\n this.UpdateUp();\r\n this.Update();\r\n\r\n if (ver > 1)\r\n this.CameraType = file.Read();\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(2);\r\n file.Write(this._ViewHeight);\r\n file.Write(this._Target.toArray());\r\n file.Write(this._Direction.toArray());\r\n file.Write(this.CameraType);\r\n }\r\n}\r\n","import { Box3, BufferGeometry, Color, Float32BufferAttribute, Frustum, Group, Line, Matrix3, Matrix4, Mesh, MeshBasicMaterial, Object3D, Scene, Vector3, WebGLRenderTarget } from \"three\";\r\nimport { IsHinge } from \"../Add-on/HideSelect/HideSelectUtils\";\r\nimport { DisposeThreeObj, Object3DRemoveAll } from \"../Common/Dispose\";\r\nimport { UpdateDraw } from \"../Common/Status\";\r\nimport { GetEntity } from \"../Common/Utils\";\r\nimport { ObjectSnapMode } from \"../Editor/ObjectSnapMode\";\r\nimport { VisualSpaceBox } from \"../Editor/VisualSpaceBox\";\r\nimport { GetBox } from \"../Geometry/GeUtils\";\r\nimport { CameraUpdate } from \"../GraphicsSystem/CameraUpdate\";\r\nimport { RenderType } from \"../GraphicsSystem/RenderType\";\r\nimport { FixIndex } from \"../Nest/Common/Util\";\r\nimport { Hole } from \"./3DSolid/Hole\";\r\nimport { Factory } from \"./CADFactory\";\r\nimport { CADFiler } from \"./CADFiler\";\r\nimport { Board } from \"./Entity/Board\";\r\nimport { Entity } from \"./Entity/Entity\";\r\nimport { ObjectId } from \"./ObjectId\";\r\nimport { Text } from \"./Text/Text\";\r\n\r\nconst MaxSize = 2048;\r\nconst MIN_UPDATE_SIZE = 50;\r\nconst ProjScreenMatrix = new Matrix4();\r\n\r\n@Factory\r\nexport class ViewportEntity extends Entity\r\n{\r\n scene: Scene = new Scene();\r\n readonly camera: CameraUpdate = new CameraUpdate();\r\n private _renderType: RenderType = RenderType.Print;\r\n private _HideObjectIds = new Set();\r\n private _ShowObjectIds = new Set();\r\n private _RenderTarget: WebGLRenderTarget = new WebGLRenderTarget(0, 0);\r\n private _EntitysBoundingBox: Box3;\r\n ViewData = {\r\n left: 0,\r\n bottom: 0,\r\n };\r\n _Color = 0;\r\n ViewportMaterial: MeshBasicMaterial;\r\n private _Frustum: Frustum = new Frustum();\r\n constructor(\r\n private _width: number = 1,\r\n private _height: number = 1,\r\n )\r\n {\r\n super();\r\n this.scene.background = new Color(0xffffff);\r\n this.ViewportMaterial = new MeshBasicMaterial({ map: this._RenderTarget.texture, transparent: true, opacity: 1 });\r\n }\r\n get Left()\r\n {\r\n return this.Position.x;\r\n }\r\n get Bottom()\r\n {\r\n return this.Position.y;\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 (v === this._height || v < 0)\r\n return;\r\n this.WriteAllObjectRecord();\r\n this._width = v;\r\n this.Update(UpdateDraw.Geometry);\r\n }\r\n get ViewWidth()\r\n {\r\n return this.camera.Width ?? 1;\r\n }\r\n get ViewHeight()\r\n {\r\n return this.camera.Height ?? 1;\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 (v === this._height || v < 0)\r\n return;\r\n this.WriteAllObjectRecord();\r\n this._height = v;\r\n this.Update(UpdateDraw.Geometry);\r\n }\r\n IsHide(id: ObjectId)\r\n {\r\n return this._HideObjectIds.has(id);\r\n }\r\n IsShow(id: ObjectId)\r\n {\r\n return this._ShowObjectIds.has(id);\r\n }\r\n get HideObjects()\r\n {\r\n return [...this._HideObjectIds];\r\n }\r\n get ShowObjects()\r\n {\r\n return [...this._ShowObjectIds];\r\n }\r\n\r\n AppendShowObjects(ids: ObjectId[] | ObjectId)\r\n {\r\n this.WriteAllObjectRecord();\r\n if (!Array.isArray(ids))\r\n ids = [ids];\r\n for (let id of ids)\r\n {\r\n if (id?.Object)\r\n this._ShowObjectIds.add(id);\r\n }\r\n }\r\n RemoveShowObjects(ids: ObjectId[] | ObjectId)\r\n {\r\n this.WriteAllObjectRecord();\r\n if (!Array.isArray(ids))\r\n ids = [ids];\r\n ids.forEach(id => this._ShowObjectIds.delete(id));\r\n }\r\n AppendHideObjects(ids: ObjectId[] | ObjectId)\r\n {\r\n this.WriteAllObjectRecord();\r\n if (!Array.isArray(ids))\r\n ids = [ids];\r\n ids.forEach(id => this._HideObjectIds.add(id));\r\n }\r\n\r\n RemoveHideObjects(ids: ObjectId[] | ObjectId)\r\n {\r\n this.WriteAllObjectRecord();\r\n if (!Array.isArray(ids))\r\n ids = [ids];\r\n ids.forEach(id => this._HideObjectIds.delete(id));\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.GetGripPoints();\r\n case ObjectSnapMode.Mid:\r\n case ObjectSnapMode.Nea:\r\n case ObjectSnapMode.Ext:\r\n case ObjectSnapMode.Per:\r\n default:\r\n break;\r\n }\r\n return [];\r\n }\r\n SetUVs(geo: BufferGeometry)\r\n {\r\n let uvArray: number[] = [\r\n 0, 0, 1, 0, 1, 1, 1, 1, 0, 1, 0, 0\r\n ];\r\n geo.setAttribute(\"uv\", new Float32BufferAttribute(uvArray, 2));\r\n }\r\n protected OnlyRenderType = true;\r\n get Entitys()\r\n {\r\n let ens: Entity[] = [];\r\n for (let id of this._ShowObjectIds)\r\n if (id?.Object) ens.push(id.Object as Entity);\r\n\r\n for (let id of this._HideObjectIds)\r\n if (id?.Object) ens.push(id.Object as Entity);\r\n\r\n return ens;\r\n }\r\n get Points()\r\n {\r\n let z = -1;\r\n return [\r\n new Vector3(0, 0, z),\r\n new Vector3(this._width, 0, z),\r\n new Vector3(this._width, this._height, z),\r\n new Vector3(0, this._height, z),\r\n ];\r\n }\r\n\r\n NeedUpdateTexture = true;\r\n \r\n\r\n UpdateByPts(p1: Vector3, p2: Vector3)\r\n {\r\n let left = Math.min(p1.x, p2.x);\r\n let bottom = Math.min(p1.y, p2.y);\r\n this._width = Math.abs(p1.x - p2.x);\r\n this._height = Math.abs(p1.y - p2.y);\r\n this.Position = new Vector3(left, bottom);\r\n }\r\n GetGripPoints()\r\n {\r\n return this.Points.map(p => p.applyMatrix4(this.OCS).setZ(0));\r\n }\r\n MoveGripPoints(indexList: number[], moveVec: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n\r\n let pts = this.GetGripPoints();\r\n\r\n for (let index of indexList)\r\n {\r\n pts[index].add(moveVec);\r\n this.UpdateByPts(pts[index], pts[FixIndex(index + 2, 4)]);\r\n }\r\n this.Update();\r\n }\r\n ZoomAll()\r\n {\r\n let box = new Box3;\r\n for (let obj of this.scene.children)\r\n {\r\n let ent = GetEntity(obj);\r\n if (ent) box.union(ent.BoundingBox);\r\n else box.union(GetBox(obj));\r\n }\r\n\r\n if (box.isEmpty())\r\n box.set(new Vector3(), new Vector3(1000 * (this.Width / this.Height), 1000, 1000));\r\n this.camera.ZoomExtentsBox3(box);\r\n this.camera.Zoom(1.2);\r\n }\r\n\r\n ZoomtoEntitys(ens: Entity[])\r\n {\r\n let box = new Box3();\r\n ens.reduce((b, e) => b.union(e.BoundingBox), box);\r\n if (box.isEmpty())\r\n return;\r\n this.camera.ZoomExtentsBox3(box);\r\n this.camera.Zoom(1.2);\r\n }\r\n\r\n get RenderType()\r\n {\r\n return this._renderType;\r\n }\r\n set RenderType(v: RenderType)\r\n {\r\n if (v === this._renderType) return;\r\n this.WriteAllObjectRecord();\r\n this._renderType = v;\r\n for (let o of this.scene.children)\r\n {\r\n if (o instanceof Group)\r\n {\r\n DisposeThreeObj(o);\r\n Object3DRemoveAll(o);\r\n\r\n let e = o.userData.Entity as Entity;\r\n let obj = e.GetDrawObjectFromRenderType(e.IsOnlyRender ? this._renderType + 100 : this._renderType);\r\n if (obj)\r\n o.children.push(obj);\r\n }\r\n }\r\n }\r\n get BoundingBox()\r\n {\r\n return new Box3().setFromPoints(this.GetGripPoints());\r\n }\r\n CanRennder(en: Entity)\r\n {\r\n if (en?.Id\r\n && !en.IsErase && (en instanceof Entity) && !(en instanceof Hole)\r\n && !(en instanceof ViewportEntity)\r\n && !(en instanceof VisualSpaceBox))\r\n {\r\n //首个版本布局由隐藏列表控制\r\n if (this.IsFirstVersion)\r\n {\r\n if (this._HideObjectIds.has(en.Id))\r\n return false;\r\n }\r\n else\r\n {\r\n if (!this._ShowObjectIds.has(en.Id) || this._HideObjectIds.has(en.Id))\r\n return false;\r\n }\r\n // if (en instanceof HardwareCompositeEntity && en.HardwareOption.name.includes(\"铰链\"))\r\n if (IsHinge(en))\r\n return false;\r\n return true;\r\n }\r\n return false;\r\n }\r\n AppendEntity(en: Entity)\r\n {\r\n if (!this.CanRennder(en)) return;\r\n\r\n let cloneObject = new Group();\r\n let renderType = en.IsOnlyRender ? this._renderType + 100 : this._renderType;\r\n let o = en.GetDrawObjectFromRenderType(renderType);\r\n if (!o)\r\n {\r\n console.warn(`该实体${renderType}类型不存在`);\r\n return;\r\n }\r\n cloneObject.children.push(o);\r\n cloneObject.name = en.Id.Index.toString();\r\n cloneObject.userData = { Entity: en };\r\n cloneObject.updateMatrixWorld();\r\n this.scene.add(cloneObject);\r\n this.NeedUpdateTexture = true;\r\n }\r\n GoodBye()\r\n {\r\n super.GoodBye();\r\n DisposeThreeObj(this.scene);\r\n Object3DRemoveAll(this.scene);\r\n this.ViewportMaterial?.dispose();\r\n this.ViewportMaterial = undefined;\r\n this._RenderTarget.dispose();\r\n }\r\n UpdateScene()\r\n {\r\n let hideIndexs = new Set(this.HideObjects.map(i => i.Index.toString()));\r\n let showIndexs = new Set(this.ShowObjects.map(i => i.Index.toString()));\r\n for (let o of this.scene.children)\r\n {\r\n if (!showIndexs.has(o.name) || hideIndexs.has(o.name))\r\n {\r\n if (o.type !== \"AmbientLight\")\r\n o.visible = false;\r\n }\r\n else\r\n {\r\n o.visible = true;\r\n showIndexs.delete(o.name);\r\n }\r\n }\r\n this._ShowObjectIds.forEach(i => showIndexs.has(i.Index.toString()) && this.AppendEntity(i.Object as Entity));\r\n this.NeedUpdateTexture = true;\r\n }\r\n CloneDrawObject(from: this)\r\n {\r\n super.CloneDrawObject(from);\r\n for (let [type, obj] of this._CacheDrawObject)\r\n {\r\n (obj.children[1] as Mesh).material = this.ViewportMaterial;\r\n }\r\n }\r\n IsInFrustum(obj: Object3D)\r\n {\r\n let camera = this.camera.Camera;\r\n ProjScreenMatrix.multiplyMatrices(camera.projectionMatrix, camera.matrixWorldInverse);\r\n this._Frustum.setFromProjectionMatrix(ProjScreenMatrix);\r\n let isInt = false;\r\n obj.traverse((o: Mesh | Line) =>\r\n {\r\n if (!isInt && o.geometry)\r\n isInt = this._Frustum.intersectsObject(o);\r\n });\r\n return isInt;\r\n }\r\n IsContainText(text: Entity)\r\n {\r\n if (!(text instanceof Text)) return false;\r\n if (!this._EntitysBoundingBox)\r\n {\r\n this._EntitysBoundingBox = new Box3();\r\n for (let en of this.Entitys)\r\n {\r\n if (!en.IsErase && en instanceof Board)\r\n this._EntitysBoundingBox.union(en.BoundingBox);\r\n }\r\n }\r\n if (this._EntitysBoundingBox.containsBox(text.BoundingBox))\r\n return true;\r\n else\r\n return false;\r\n }\r\n IsFirstVersion = false;\r\n protected _ReadFile(file: CADFiler)\r\n {\r\n super._ReadFile(file);\r\n let ver = file.Read();\r\n\r\n this.IsFirstVersion = ver === 1;\r\n\r\n this.camera.ReadFile(file);\r\n this._width = file.Read();\r\n this._height = file.Read();\r\n this._renderType = file.Read();\r\n let count = file.Read();\r\n this._HideObjectIds.clear();\r\n for (let i = 0; i < count; i++)\r\n {\r\n let id = file.ReadSoftObjectId();\r\n if (id)\r\n this._HideObjectIds.add(id);\r\n }\r\n\r\n if (ver > 1)\r\n {\r\n let count = file.Read();\r\n this._ShowObjectIds.clear();\r\n for (let i = 0; i < count; i++)\r\n {\r\n let id = file.ReadSoftObjectId();\r\n if (id)\r\n this._ShowObjectIds.add(id);\r\n }\r\n }\r\n if (!this._isErase)\r\n this.UpdateScene();\r\n }\r\n WriteFile(file: CADFiler)\r\n {\r\n super.WriteFile(file);\r\n file.Write(2);\r\n this.camera.WriteFile(file);\r\n file.Write(this._width);\r\n file.Write(this._height);\r\n file.Write(this._renderType);\r\n file.Write(this._HideObjectIds.size);\r\n this._HideObjectIds.forEach(id => file.WriteSoftObjectId(id));\r\n\r\n file.Write(this._ShowObjectIds.size);\r\n this._ShowObjectIds.forEach(id => file.WriteSoftObjectId(id));\r\n }\r\n}\r\n","import { ExtrudeGeometry, Geometry, Mesh, MeshNormalMaterial, Object3D, Vector3 } from \"three\";\r\nimport { RenderType } from \"../../GraphicsSystem/RenderType\";\r\nimport { Factory } from '../CADFactory';\r\nimport { CADFiler } from '../CADFiler';\r\nimport { Contour } from '../Contour';\r\nimport { Circle } from '../Entity/Circle';\r\nimport { Entity } from '../Entity/Entity';\r\n\r\n@Factory\r\nexport class Cylineder extends Entity\r\n{\r\n private m_Radius: number;\r\n private m_Height: number;\r\n private m_Center: Vector3 = new Vector3();\r\n constructor(rad?: number, height?: number)\r\n {\r\n super();\r\n this.m_Radius = rad || 1;\r\n this.m_Height = height || 1;\r\n }\r\n get Radius()\r\n {\r\n return this.m_Radius;\r\n }\r\n set Radius(v: number)\r\n {\r\n this.WriteAllObjectRecord();\r\n this.m_Radius = v;\r\n this.Update();\r\n }\r\n get Height()\r\n {\r\n return this.m_Height;\r\n }\r\n set Height(v: number)\r\n {\r\n this.WriteAllObjectRecord();\r\n this.m_Height = v;\r\n this.Update();\r\n }\r\n get Center()\r\n {\r\n return new Vector3().setFromMatrixPosition(this.OCS);\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 CreateGeometry()\r\n {\r\n let cir = Contour.CreateContour([new Circle(this.m_Center, this.m_Radius)]).Shape;\r\n let extrudeSettings = {\r\n bevelEnabled: false,\r\n depth: this.m_Height\r\n };\r\n return new ExtrudeGeometry(cir, extrudeSettings);\r\n }\r\n InitDrawObject(renderType: RenderType): Object3D\r\n {\r\n return new Mesh(this.CreateGeometry(), new MeshNormalMaterial());\r\n }\r\n UpdateDrawObject(type: RenderType, en: Object3D)\r\n {\r\n let obj = en as Mesh;\r\n obj.geometry = this.CreateGeometry();\r\n (obj.geometry as Geometry).verticesNeedUpdate = true;\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.m_Radius = file.Read();\r\n this.m_Height = file.Read();\r\n this.m_Center.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.m_Radius);\r\n file.Write(this.m_Height);\r\n file.Write(this.m_Center.toArray());\r\n }\r\n}\r\n","import { Box3, Face3, Geometry, Matrix4, Mesh, MeshNormalMaterial, Object3D, ShapeUtils, Vector2, Vector3 } from \"three\";\r\nimport { ColorMaterial } from \"../../Common/ColorPalette\";\r\nimport { Object3DRemoveAll } from \"../../Common/Dispose\";\r\nimport { clamp, FixIndex } from \"../../Common/Utils\";\r\nimport { ObjectSnapMode } from \"../../Editor/ObjectSnapMode\";\r\nimport { angle, AsVector2, equaln, equalv3, isParallelTo, YAxis, ZeroVec } from \"../../Geometry/GeUtils\";\r\nimport { Matrix2 } from \"../../Geometry/Matrix2\";\r\nimport { Orbit } from \"../../Geometry/Orbit\";\r\nimport { RenderType } from \"../../GraphicsSystem/RenderType\";\r\nimport { Factory } from \"../CADFactory\";\r\nimport { CADFiler } from \"../CADFiler\";\r\nimport { CADObject } from \"../CADObject\";\r\nimport { Arc } from \"../Entity/Arc\";\r\nimport { Entity } from \"../Entity/Entity\";\r\nimport { Polyline } from \"../Entity/Polyline\";\r\n\r\nlet r = new Matrix2;\r\nlet v = new Vector3;\r\n\r\nexport function AxisCS(n: Vector3): Matrix4\r\n{\r\n let x = new Vector3;\r\n let y = new Vector3;\r\n Orbit.ComputUpDirection(n, y, x);\r\n return new Matrix4().makeBasis(x.normalize(), y.normalize(), n);\r\n}\r\n\r\nlet _Arc = new Arc(new Vector3, 1, 0, Math.PI / 2, false);\r\n@Factory\r\nexport class RevolveSolid extends Entity\r\n{\r\n private _Contour: Polyline;\r\n constructor(\r\n axisDirection?: Vector3,\r\n axisPos?: Vector3,\r\n contour?: Polyline,\r\n private _StartAngle = 0,\r\n private _EndAngle = Math.PI / 2,\r\n )\r\n {\r\n super();\r\n if (axisDirection)\r\n {\r\n axisDirection.normalize();\r\n let x = new Vector3;\r\n let y = new Vector3;\r\n Orbit.ComputUpDirection(axisDirection, y, x);\r\n this._Matrix.makeBasis(x.normalize(), y.normalize(), axisDirection);\r\n }\r\n else\r\n axisDirection = new Vector3(0, 0, 1);\r\n\r\n if (axisPos)\r\n this._Matrix.setPosition(axisPos);\r\n else\r\n axisPos = new Vector3;\r\n\r\n if (contour)\r\n {\r\n if (contour.Id) this._Contour = contour.Clone();\r\n else this._Contour = contour;\r\n\r\n this._Contour.IsEmbedEntity = true;\r\n\r\n if (this._Contour.IsClockWise) this._Contour.Reverse();\r\n\r\n let ocs = this.OCS.setPosition(0, 0, 0);\r\n let ocsInv = this.OCSInv;\r\n let endParam = this._Contour.EndParam;\r\n\r\n let p = this._Contour.StartPoint.applyMatrix4(ocsInv);\r\n axisPos.add(axisDirection.clone().multiplyScalar(p.z));\r\n\r\n //对齐X轴\r\n for (let i = 0; i < endParam; i += 0.5)\r\n {\r\n let p = this._Contour.GetPointAtParam(i);\r\n p.applyMatrix4(ocsInv).setZ(0);\r\n\r\n if (!equalv3(p, ZeroVec))\r\n {\r\n p.applyMatrix4(ocs);\r\n p.normalize();//X轴\r\n let y = axisDirection.clone().cross(p).normalize();\r\n this._Matrix.makeBasis(p, y, axisDirection).setPosition(axisPos);\r\n break;\r\n }\r\n }\r\n this._Contour.ApplyMatrix(this.OCSInv);\r\n }\r\n }\r\n\r\n get Contour() { return this._Contour; }\r\n\r\n GetGripPoints()\r\n {\r\n let box = this._Contour.BoundingBox;\r\n let size = box.getSize(new Vector3);\r\n let p1 = new Vector3(size.x);\r\n let p2 = p1.clone();\r\n r.setRotate(this._StartAngle);\r\n r.applyVector(p1);\r\n r.setRotate(this._EndAngle);\r\n r.applyVector(p2);\r\n p1.applyMatrix4(this._Matrix);\r\n p2.applyMatrix4(this._Matrix);\r\n return [p1, p2];\r\n }\r\n\r\n GetObjectSnapPoints(snapMode: ObjectSnapMode, pickPoint: Vector3, lastPoint: Vector3)\r\n {\r\n switch (snapMode)\r\n {\r\n case ObjectSnapMode.Nea:\r\n break;\r\n case ObjectSnapMode.Cen:\r\n break;\r\n case ObjectSnapMode.Per:\r\n break;\r\n case ObjectSnapMode.Tan:\r\n break;\r\n case ObjectSnapMode.End:\r\n return this.GetGripPoints();\r\n default:\r\n break;\r\n }\r\n return [];\r\n }\r\n\r\n MoveGripPoints(indexs: number[], vec: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n for (let i of indexs)\r\n {\r\n let p = this.GetGripPoints()[i];\r\n let np = p.add(vec).applyMatrix4(this.OCSInv);\r\n let a = angle(np);\r\n if (i === 0)\r\n this._StartAngle = a;\r\n else\r\n this._EndAngle = a;\r\n\r\n this.Update();\r\n return;\r\n }\r\n }\r\n\r\n private _MeshGeometry: Geometry;\r\n\r\n get BoundingBox()\r\n {\r\n let geom = this.MeshGeometry;\r\n\r\n if (!geom)\r\n {\r\n console.error(\"RevolveSolid无法建模\");\r\n return new Box3;\r\n }\r\n\r\n if (!geom.boundingBox)\r\n geom.computeBoundingBox();\r\n\r\n return geom.boundingBox.clone().applyMatrix4(this._Matrix);\r\n }\r\n\r\n private _CacheContourPoints: Vector2[];//轮廓2D点\r\n private _CacheContourPoints3D: Vector3[];//轮廓3D点\r\n\r\n private _CacheContourPoints3DQ: Vector3[];//放样点(展开)\r\n private _CacheContourPoints3DQ2: Vector3[][] = [];//放样点集合缓存(只是避免了重复构造)\r\n\r\n private _CacheContourFaces: [number, number, number][];//Face缓存\r\n private _CacheIsRev: boolean;//方向缓存\r\n\r\n get MeshGeometry()\r\n {\r\n if (this._MeshGeometry) return this._MeshGeometry;\r\n\r\n _Arc.StartAngle = this._StartAngle;\r\n _Arc.EndAngle = this._EndAngle;\r\n\r\n if (this._CacheIsRev === undefined)\r\n {\r\n let n = this._Contour.Normal;\r\n this._CacheIsRev = n.y > 0;\r\n }\r\n\r\n if (this._CacheContourPoints === undefined)\r\n {\r\n this._CacheContourPoints3D = [];\r\n let ocsInv = this._Contour.OCSInv;\r\n for (let i = 0; i < this._Contour.EndParam; i++)\r\n {\r\n let c = this._Contour.GetCurveAtIndex(i);\r\n this._CacheContourPoints3D.push(c.StartPoint);\r\n if (c instanceof Arc)\r\n {\r\n let minCount = Math.max(2, Math.ceil((c.AllAngle) / Math.PI) * 3);\r\n let count = clamp(c.Length / 20, minCount, 30);\r\n for (let j = 0; j < count; j++)\r\n this._CacheContourPoints3D.push(c.GetPointAtParam((j + 1) / (count + 1)));\r\n }\r\n this._CacheContourPoints3D.push(c.EndPoint);\r\n }\r\n this._CacheContourPoints = this._CacheContourPoints3D.map(p => AsVector2(p.clone().applyMatrix4(ocsInv)));\r\n\r\n this._CacheContourFaces = ShapeUtils.triangulateShape(this._CacheContourPoints, []) as [number, number, number][];\r\n\r\n this._CacheContourPoints3DQ = [];\r\n if (isParallelTo(this._Contour.Normal, YAxis))\r\n this._CacheContourPoints3DQ.push(...this._CacheContourPoints3D);\r\n else\r\n for (let i = 0; i < this._CacheContourPoints3D.length; i++)\r\n {\r\n let p1 = this._CacheContourPoints3D[i];\r\n let p2 = this._CacheContourPoints3D[FixIndex(i + 1, this._CacheContourPoints3D)];\r\n let length = p1.distanceTo(p2);\r\n v.subVectors(p2, p1);\r\n let count = clamp(Math.floor(length / 50), 2, 16);//合理的控制采样精度是性能的关键\r\n v.divideScalar(count);\r\n\r\n this._CacheContourPoints3DQ.push(p1);\r\n if (equaln(p1.x, 0) && equaln(p1.y, 0)\r\n && equaln(p2.x, 0) && equaln(p2.y, 0))\r\n continue;\r\n for (let j = 1; j < count; j++)\r\n {\r\n this._CacheContourPoints3DQ.push(v.clone().multiplyScalar(j).add(p1));\r\n }\r\n }\r\n\r\n if (!this._CacheIsRev)\r\n this._CacheContourPoints3DQ.reverse();\r\n }\r\n\r\n //性能:此处用BufferGeometry可以提高性能\r\n let geo = new Geometry;\r\n\r\n\r\n if (this._StartAngle !== this._EndAngle)\r\n {\r\n //起点盖子\r\n r.setRotate(this._StartAngle);\r\n let contoursStart = this._CacheContourPoints3D.map(p =>\r\n {\r\n p = p.clone();\r\n r.applyVector(p);\r\n return p;\r\n });\r\n geo.vertices.push(...contoursStart);\r\n for (let face of this._CacheContourFaces)\r\n {\r\n if (this._CacheIsRev)\r\n geo.faces.push(new Face3(face[2], face[1], face[0]));\r\n else\r\n geo.faces.push(new Face3(face[0], face[1], face[2]));\r\n }\r\n\r\n //终点盖子\r\n r.setRotate(this._EndAngle);\r\n let contoursEnd = this._CacheContourPoints3D.map(p =>\r\n {\r\n p = p.clone();\r\n r.applyVector(p);\r\n return p;\r\n });\r\n let count = geo.vertices.length;\r\n geo.vertices.push(...contoursEnd);\r\n for (let face of this._CacheContourFaces)\r\n {\r\n if (!this._CacheIsRev)\r\n geo.faces.push(new Face3(count + face[2], count + face[1], count + face[0]));\r\n else\r\n geo.faces.push(new Face3(count + face[0], count + face[1], count + face[2]));\r\n }\r\n }\r\n\r\n let allAngle = this._StartAngle === this._EndAngle ? Math.PI * 2 : _Arc.AllAngle;\r\n\r\n RevolveLine(geo, this._CacheContourPoints3DQ, this._CacheContourPoints3DQ2, this._StartAngle, allAngle);\r\n geo.computeVertexNormals();\r\n geo.computeFaceNormals();\r\n this._MeshGeometry = geo;\r\n return geo;\r\n }\r\n\r\n //#region Draw\r\n InitDrawObject(renderType: RenderType = RenderType.Wireframe)\r\n {\r\n let obj = new Object3D();\r\n this.UpdateDrawObject(renderType, obj);\r\n return obj;\r\n }\r\n\r\n UpdateDrawGeometry()\r\n {\r\n this._MeshGeometry = undefined;\r\n }\r\n\r\n private static MeshNromal = new MeshNormalMaterial({ wireframe: true });\r\n\r\n UpdateDrawObject(type: RenderType, obj: Object3D)\r\n {\r\n Object3DRemoveAll(obj);\r\n\r\n if (type === RenderType.Wireframe)\r\n {\r\n let g = this.MeshGeometry;\r\n g.computeFaceNormals();\r\n g.computeVertexNormals();\r\n obj.add(new Mesh(g, RevolveSolid.MeshNromal));\r\n }\r\n else// if (type === RenderType.Conceptual || type===RenderType.Physical || type === RenderType.Jig)\r\n {\r\n let g = this.MeshGeometry;\r\n g.computeFaceNormals();\r\n g.computeVertexNormals();\r\n obj.add(new Mesh(g, ColorMaterial.GetConceptualMaterial(this.ColorIndex)));\r\n }\r\n return obj;\r\n }\r\n\r\n /**\r\n * 更新实体Jig状态时的材质\r\n */\r\n UpdateJigMaterial(color = 8)\r\n {\r\n for (let [type, obj] of this._CacheDrawObject)\r\n {\r\n if (obj.children.length)\r\n {\r\n let mesh = obj.children[0] as Mesh;\r\n mesh.material = ColorMaterial.GetBasicMaterialTransparent(8, 0.1);\r\n }\r\n }\r\n }\r\n RestoreJigMaterial()\r\n {\r\n for (let [type, obj] of this._CacheDrawObject)\r\n {\r\n if (obj.children.length)\r\n {\r\n let mesh = obj.children[0] as Mesh;\r\n if (type === RenderType.Wireframe)\r\n mesh.material = RevolveSolid.MeshNromal;\r\n else\r\n mesh.material = ColorMaterial.GetConceptualMaterial(this.ColorIndex);\r\n }\r\n }\r\n }\r\n\r\n //#endregion\r\n\r\n //#region -------------------------File-------------------------\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._Contour = file.ReadObject();\r\n if (ver > 1)\r\n {\r\n this._StartAngle = file.Read();\r\n this._EndAngle = file.Read();\r\n }\r\n return this;\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(2);\r\n super.WriteFile(file);\r\n file.WriteObject(this._Contour);\r\n file.Write(this._StartAngle);\r\n file.Write(this._EndAngle);\r\n return this;\r\n }\r\n //局部撤销\r\n ApplyPartialUndo(undoData: CADObject)\r\n {\r\n super.ApplyPartialUndo(undoData);\r\n }\r\n //#endregion\r\n}\r\n\r\nfunction RevolveLine(geo: Geometry, contourPoints: Vector3[], cachePoints: Vector3[][], startAngle: number, allAngle: number)\r\n{\r\n //计算圆的半径\r\n let rotateCircleRadius = 0;\r\n for (let p of contourPoints)\r\n {\r\n let r = p.x * p.x + p.y * p.y;\r\n if (r > rotateCircleRadius)\r\n rotateCircleRadius = r;\r\n }\r\n rotateCircleRadius = Math.sqrt(rotateCircleRadius);\r\n\r\n let minCount = Math.max(2, Math.ceil((allAngle) / Math.PI) * 4);\r\n let angleCount = clamp(Math.floor(rotateCircleRadius / 3.2), minCount, 30);\r\n\r\n // let angleCount = Math.max(Math.floor(allAngle / 0.2), 3);//合理的控制采样精度是性能的关键\r\n let anDiv = allAngle / angleCount;\r\n\r\n let startVerticesCount = geo.vertices.length;\r\n let contourVerticesCount = contourPoints.length;\r\n\r\n let count2 = (equaln(allAngle, Math.PI * 2) ? angleCount : angleCount + 1);\r\n //TODO:如果有必要的话,此处可以缓存0-360度的轮廓点,用空间换时间\r\n for (let i = 0; i < count2; i++)\r\n {\r\n r.setRotate(startAngle + anDiv * i);\r\n let curPoints: Vector3[];\r\n if (i < cachePoints.length)//使用已经生成的点,避免重复的生成新的Vector3造成的过多GC\r\n {\r\n curPoints = cachePoints[i];\r\n for (let j = 0; j < curPoints.length; j++)\r\n {\r\n let p = curPoints[j];\r\n p.copy(contourPoints[j]);\r\n r.applyVector(p);\r\n }\r\n }\r\n else\r\n {\r\n curPoints = contourPoints.map(p =>\r\n {\r\n p = p.clone();\r\n r.applyVector(p);\r\n return p;\r\n });\r\n cachePoints.push(curPoints);\r\n }\r\n geo.vertices.push(...curPoints);\r\n }\r\n\r\n for (let i = 0; i < angleCount; i++)\r\n {\r\n let nextI = FixIndex(i + 1, count2);\r\n\r\n let s1 = startVerticesCount + i * contourVerticesCount;\r\n let s2 = startVerticesCount + nextI * contourVerticesCount;\r\n\r\n for (let j = 0; j < contourVerticesCount; j++)\r\n {\r\n let jn = FixIndex(j + 1, contourVerticesCount);\r\n if (!IsAxis(contourPoints[j], contourPoints[jn]))\r\n {\r\n geo.faces.push(new Face3(j + s1, jn + s1, s2 + j));\r\n geo.faces.push(new Face3(j + s2, jn + s1, s2 + jn));\r\n }\r\n }\r\n }\r\n}\r\n\r\nfunction IsAxis(p1: Vector3, p2: Vector3)\r\n{\r\n return equaln(p1.x, 0) && equaln(p1.y, 0) && equaln(p2.x, 0) && equaln(p2.y, 0);\r\n}\r\n","import { HostApplicationServices } from \"../../ApplicationServices/HostApplicationServices\";\r\nimport { Factory } from \"../CADFactory\";\r\nimport { Entity } from \"../Entity/Entity\";\r\nimport { Text } from \"../Text/Text\";\r\n\r\n@Factory\r\nexport abstract class Dimension extends Entity\r\n{\r\n OnlyRenderType = true;\r\n protected _TextString: string;\r\n protected _TextSize: number = HostApplicationServices.dimTextHeight;\r\n protected _Text = new Text(undefined, undefined, \"yahei\");\r\n protected _FractionDigits: number = HostApplicationServices.fractionDigitsType;\r\n set TextString(txt: string)\r\n {\r\n let str = this.GetString();\r\n let tstr = this._TextString ? this._TextString.replace(\"<>\", str) : str;\r\n if (txt !== tstr)\r\n {\r\n this.WriteAllObjectRecord();\r\n if (txt.trim() === \"\")\r\n this._TextString = null;\r\n else\r\n this._TextString = txt.replace(str, \"<>\");\r\n this.Update();\r\n }\r\n }\r\n\r\n get TextString()\r\n {\r\n return this._TextString ? this._TextString.replace(\"<>\", this.GetString()) : this.GetString();\r\n }\r\n\r\n set TextSize(size: number)\r\n {\r\n if (this._Text.Height !== size)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._TextSize = size;\r\n this.Update();\r\n }\r\n }\r\n\r\n get TextSize()\r\n {\r\n return this._TextSize;\r\n }\r\n\r\n set FractionDigits(length: number)\r\n {\r\n if (this._FractionDigits !== length)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._FractionDigits = length;\r\n this.Update();\r\n }\r\n }\r\n\r\n get FractionDigits()\r\n {\r\n return this._FractionDigits;\r\n }\r\n\r\n protected abstract GetString(): string;\r\n}\r\n","import { LineBasicMaterial } from \"three\";\r\nimport { ColorMaterial } from \"../../Common/ColorPalette\";\r\nimport { RenderType } from \"../../GraphicsSystem/RenderType\";\r\nimport { Entity } from \"../Entity/Entity\";\r\n\r\nexport function GetDimLineMaterial(dim: Entity, renderType: RenderType): LineBasicMaterial\r\n{\r\n if (renderType === RenderType.Wireframe)\r\n return ColorMaterial.GetLineMaterial(dim.ColorIndex);\r\n else if (renderType > 100)\r\n return ColorMaterial.GetLineMaterial(0);\r\n else\r\n return ColorMaterial.GetLineMaterial(6);\r\n}\r\n","import { BufferGeometry, Line as TLine, Material, MathUtils, Matrix3, Matrix4, Mesh, Object3D, Vector3 } from \"three\";\r\nimport { Line2 } from \"three/examples/jsm/lines/Line2\";\r\nimport { HostApplicationServices } from \"../../ApplicationServices/HostApplicationServices\";\r\nimport { AddEntityDrawObject } from \"../../Common/AddEntityDrawObject\";\r\nimport { arrayRemoveDuplicateBySort, arraySortByNumber } from \"../../Common/ArrayExt\";\r\nimport { ColorMaterial } from \"../../Common/ColorPalette\";\r\nimport { reviseMirrorMatrix } from \"../../Common/Matrix4Utils\";\r\nimport { FixedNotZero, FixIndex } from \"../../Common/Utils\";\r\nimport { ObjectSnapMode } from \"../../Editor/ObjectSnapMode\";\r\nimport { BufferGeometryUtils } from \"../../Geometry/BufferGeometryUtils\";\r\nimport { angle, equaln, equalv3 } from \"../../Geometry/GeUtils\";\r\nimport { IntersectOption } from \"../../GraphicsSystem/IntersectWith\";\r\nimport { RenderType } from \"../../GraphicsSystem/RenderType\";\r\nimport { Factory } from \"../CADFactory\";\r\nimport { CADFiler } from \"../CADFiler\";\r\nimport { Arc } from \"../Entity/Arc\";\r\nimport { Line } from \"../Entity/Line\";\r\nimport { TextAligen } from \"../Text/Text\";\r\nimport { Dimension } from \"./Dimension\";\r\nimport { GetDimLineMaterial } from \"./GetDimLineMaterial\";\r\n\r\n/**\r\n * 两条直线的角度标注\r\n */\r\n@Factory\r\nexport class LineAngularDimension extends Dimension\r\n{\r\n private _Arc = new Arc();\r\n constructor(\r\n protected _L1StartPoint = new Vector3(), //第一条直线的起点\r\n protected _L1EndPoint = new Vector3(), //第一条直线的终点\r\n protected _L2StartPoint = new Vector3(), //第二条直线的起点\r\n protected _L2EndPoint = new Vector3(),\r\n protected _DimPoint = new Vector3(), //标注位置\r\n )\r\n {\r\n super();\r\n // this._Arc.ColorIndex = 3;\r\n this._Text.TextAligen = TextAligen.Down;\r\n this._Text.Height = HostApplicationServices.dimTextHeight;\r\n }\r\n\r\n protected GetString()\r\n {\r\n return FixedNotZero(MathUtils.radToDeg(this._Arc.AllAngle), this._FractionDigits) + \"°\";\r\n }\r\n\r\n UpdateDimData(l1sp: Vector3, l1ep: Vector3, l2sp: Vector3, l2ep: Vector3, dimp: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n let inv = this.OCSInv;\r\n for (let [p, pn] of [\r\n [this._L1StartPoint, l1sp],\r\n [this._L1EndPoint, l1ep],\r\n [this._L2StartPoint, l2sp],\r\n [this._L2EndPoint, l2ep],\r\n [this._DimPoint, dimp],\r\n ])\r\n {\r\n if (pn)\r\n p.copy(pn).applyMatrix4(inv);\r\n }\r\n this.Update();\r\n }\r\n\r\n get Text()\r\n {\r\n return this._Text;\r\n }\r\n get L1StartPoint()\r\n {\r\n return this._L1StartPoint.clone().applyMatrix4(this._Matrix);\r\n }\r\n get L2StartPoint()\r\n {\r\n return this._L2StartPoint.clone().applyMatrix4(this._Matrix);\r\n }\r\n get L1EndPoint()\r\n {\r\n return this._L1EndPoint.clone().applyMatrix4(this._Matrix);\r\n }\r\n get L2EndPoint()\r\n {\r\n return this._L2EndPoint.clone().applyMatrix4(this._Matrix);\r\n }\r\n get DimPoint()\r\n {\r\n return this._DimPoint.clone().applyMatrix4(this._Matrix);\r\n }\r\n get Arc()\r\n {\r\n return this._Arc.Clone().ApplyMatrix(this._Matrix);\r\n }\r\n //#region 动态拽拖\r\n GetGripPoints(): Array\r\n {\r\n return [\r\n this._L1StartPoint,\r\n this._L1EndPoint,\r\n this._L2StartPoint,\r\n this._L2EndPoint,\r\n this._DimPoint,\r\n ].map(p =>\r\n {\r\n return p.clone().applyMatrix4(this._Matrix);\r\n });\r\n }\r\n MoveGripPoints(indexList: number[], vec: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n let arr = [\r\n this._L1StartPoint,\r\n this._L1EndPoint,\r\n this._L2StartPoint,\r\n this._L2EndPoint,\r\n this._DimPoint,\r\n ];\r\n vec = vec.clone().applyMatrix4(this.OCSInv.setPosition(0, 0, 0));\r\n\r\n for (let i of indexList)\r\n arr[i].add(vec);\r\n this.Update();\r\n }\r\n GetStretchPoints(): Array\r\n {\r\n return this.GetGripPoints();\r\n }\r\n MoveStretchPoints(indexList: Array, vec: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n this.MoveGripPoints(indexList, vec);\r\n }\r\n //#endregion\r\n\r\n //#region 绘制\r\n\r\n Clone(): this\r\n {\r\n let ent = super.Clone();\r\n ent._Text.CopyFrom(this._Text);\r\n ent._Arc.CopyFrom(this._Arc);\r\n for (let [type, obj] of ent._CacheDrawObject)\r\n {\r\n for (let o of obj.children)\r\n if (o instanceof TLine)\r\n o.geometry = o.geometry.clone();\r\n }\r\n return ent;\r\n }\r\n\r\n Explode()\r\n {\r\n //为了避免Text对象没有被更新.\r\n this.GetDrawObjectFromRenderType();\r\n return [\r\n this._Arc.Clone().ApplyMatrix(this._Matrix),\r\n this._Text.Clone().ApplyMatrix(this._Matrix)\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 let arc = this._Arc.Clone().ApplyMatrix(this._Matrix);\r\n switch (snapMode)\r\n {\r\n case ObjectSnapMode.End:\r\n return this.GetStretchPoints().concat([arc.StartPoint, arc.EndPoint]);\r\n default:\r\n return arc.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform);\r\n }\r\n }\r\n InitDrawObject(renderType: RenderType = RenderType.Wireframe): Object3D\r\n {\r\n this._Text.ColorIndex = this.ColorIndex;\r\n\r\n let colorMaterial = GetDimLineMaterial(this, renderType);\r\n\r\n let arrow1 = new Mesh(BufferGeometryUtils.ArrowGeometry(), colorMaterial);\r\n let arrow2 = new Mesh(BufferGeometryUtils.ArrowGeometry(), colorMaterial);\r\n let arrowSize = 10;\r\n\r\n let l: TLine | Line2, l2: TLine | Line2;\r\n\r\n if (renderType === RenderType.WireframePrint)\r\n {\r\n l = new Line2(undefined, ColorMaterial.PrintLineMatrial);\r\n l2 = new Line2(undefined, ColorMaterial.PrintLineMatrial);\r\n arrowSize *= HostApplicationServices.lineWidth * 0.5;\r\n }\r\n else\r\n {\r\n l = new TLine(BufferGeometryUtils.CreateFromPts([new Vector3(), new Vector3()]), colorMaterial);\r\n l2 = new TLine(BufferGeometryUtils.CreateFromPts([new Vector3(), new Vector3()]), colorMaterial);\r\n }\r\n\r\n arrow1.scale.set(arrowSize, arrowSize, arrowSize);\r\n arrow2.scale.set(arrowSize, arrowSize, arrowSize);\r\n\r\n let obj = new Object3D();\r\n obj.add(arrow1, arrow2, l, l2);\r\n this.UpdateDrawObject(renderType, obj);\r\n return obj;\r\n }\r\n Update2Line(l1: Line, l2: Line, intPt: Vector3, li1: TLine, li2: TLine)\r\n {\r\n let intPar1 = l1.GetParamAtPoint(intPt);\r\n if (intPar1 >= 1)\r\n l1.Reverse();\r\n\r\n let intPar2 = l2.GetParamAtPoint(intPt);\r\n if (intPar2 >= 1)\r\n l2.Reverse();\r\n\r\n const updateLine = (l: Line, li: TLine | Line2, refPt: Vector3, refPt2?: Vector3) =>\r\n {\r\n let par = l.GetParamAtPoint(refPt);\r\n let refPar = l.GetParamAtPoint(intPt);\r\n if (par > 1)\r\n {\r\n li.visible = true;\r\n if (li instanceof TLine)\r\n {\r\n let geo = li.geometry as BufferGeometry;\r\n geo.copy(BufferGeometryUtils.CreateFromPts([l.EndPoint, refPt]));\r\n }\r\n else\r\n {\r\n let geo = li.geometry;\r\n geo.setPositions([...l.EndPoint.toArray(), ...refPt.toArray()]);\r\n }\r\n }\r\n else if (par < 0)\r\n {\r\n li.visible = true;\r\n if (li instanceof TLine)\r\n {\r\n let geo = li.geometry as BufferGeometry;\r\n\r\n geo.copy(\r\n BufferGeometryUtils.CreateFromPts([par < refPar ? intPt : l.StartPoint, refPt])\r\n );\r\n }\r\n else\r\n {\r\n let geo = li.geometry;\r\n let p = par < refPar ? intPt : l.StartPoint;\r\n geo.setPositions([...p.toArray(), ...refPt.toArray()]);\r\n }\r\n\r\n }\r\n else if (isNaN(par) && refPt2)\r\n {\r\n updateLine(l, li, refPt2);\r\n }\r\n else\r\n {\r\n li.visible = false;\r\n }\r\n };\r\n\r\n updateLine(l1, li1, this._Arc.StartPoint, this._Arc.EndPoint);\r\n updateLine(l2, li2, this._Arc.EndPoint, this._Arc.StartPoint);\r\n }\r\n\r\n UpdateDrawObject(renderType: RenderType, obj: Object3D)\r\n {\r\n let [arrow1, arrow2, li1, li2] = obj.children;\r\n obj.remove(...obj.children.slice(4));\r\n\r\n let l1 = new Line(this._L1StartPoint, this._L1EndPoint);\r\n let l2 = new Line(this._L2StartPoint, this._L2EndPoint);\r\n\r\n let insP = l1.IntersectWith(l2, IntersectOption.ExtendBoth)[0];\r\n if (insP)\r\n {\r\n this._Arc.AutoUpdate = false;//如果没有在这边关闭这个,那么Arc的盒子将错误\r\n this._Arc.Center = insP;\r\n this._Arc.Radius = insP.distanceTo(this._DimPoint);\r\n\r\n let ans = [this._L1StartPoint, this._L1EndPoint, this._L2StartPoint, this._L2EndPoint]\r\n .map(p =>\r\n {\r\n if (equalv3(p, insP))\r\n return NaN;\r\n return angle(p.clone().sub(insP));\r\n }).filter(a => !isNaN(a));\r\n ans = ans.concat(ans.map(a => (a + Math.PI) % (Math.PI * 2)));\r\n arraySortByNumber(ans);\r\n arrayRemoveDuplicateBySort(ans, (a1, a2) => equaln(a1, a2));\r\n\r\n let dimAn = angle(this._DimPoint.clone().sub(insP));\r\n\r\n for (let i = 0; i < ans.length; i++)\r\n {\r\n let ni = FixIndex(i + 1, ans.length);\r\n\r\n this._Arc.StartAngle = ans[ni];\r\n this._Arc.EndAngle = ans[i];\r\n this._Arc.ColorIndex = this._Color;\r\n\r\n if (this._Arc.ParamOnCurve(this._Arc.GetParamAtAngle(dimAn)))\r\n {\r\n this._Arc.AutoUpdate = true;\r\n this._Arc.DeferUpdate();\r\n\r\n AddEntityDrawObject(obj, this._Arc, renderType);\r\n arrow1.position.copy(this._Arc.StartPoint);\r\n arrow1.rotation.z = this._Arc.GetFistDerivAngle(0) + Math.PI / 2;\r\n arrow1.updateMatrix();\r\n\r\n arrow2.position.copy(this._Arc.EndPoint);\r\n arrow2.rotation.z = this._Arc.GetFistDerivAngle(1) - Math.PI / 2;\r\n arrow2.updateMatrix();\r\n\r\n this._Text.AutoUpdate = false;//更新标记\r\n\r\n this._Text.Height = this._TextSize;\r\n this._Text.TextString = this.TextString;\r\n this._Text.Position = this._Arc.GetPointAtParam(0.5);\r\n this._Text.TextRotation = this._Arc.GetAngleAtParam(0.5) % (Math.PI) - Math.PI / 2;\r\n\r\n this._Text.AutoUpdate = true;//更新标记\r\n this._Text.DeferUpdate();\r\n AddEntityDrawObject(obj, this._Text, renderType);\r\n break;\r\n }\r\n }\r\n\r\n this.Update2Line(l1, l2, insP, li1 as TLine, li2 as TLine);\r\n }\r\n }\r\n\r\n UpdateDrawObjectMaterial(type: RenderType, obj: Object3D, material?: Material)\r\n {\r\n let colorMaterial = GetDimLineMaterial(this, type);\r\n let count = Math.min(4, obj.children.length);\r\n for (let i = 0; i < count; i++)\r\n {\r\n let l = obj.children[i] as TLine;\r\n l.material = colorMaterial;\r\n }\r\n this._Arc.ColorIndex = this._Color;\r\n this._Text.ColorIndex = this._Color;\r\n }\r\n\r\n protected ApplyMirrorMatrix(m: Matrix4)\r\n {\r\n this.WriteAllObjectRecord();\r\n let p1 = this.L1StartPoint;\r\n let p2 = this.L1EndPoint;\r\n let p3 = this.L2StartPoint;\r\n let p4 = this.L2EndPoint;\r\n let p5 = this.DimPoint;\r\n\r\n reviseMirrorMatrix(this._Matrix, 1);\r\n\r\n this.UpdateDimData(p2, p1, p4, p3, p5);\r\n\r\n return this;\r\n }\r\n //#endregion\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._L1StartPoint.fromArray(file.Read());\r\n this._L1EndPoint.fromArray(file.Read());\r\n this._L2StartPoint.fromArray(file.Read());\r\n this._L2EndPoint.fromArray(file.Read());\r\n this._DimPoint.fromArray(file.Read());\r\n if (ver > 1) this._TextString = file.Read();\r\n if (ver > 2) this._TextSize = file.Read();\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n super.WriteFile(file);\r\n file.Write(3);\r\n file.Write(this._L1StartPoint.toArray());\r\n file.Write(this._L1EndPoint.toArray());\r\n file.Write(this._L2StartPoint.toArray());\r\n file.Write(this._L2EndPoint.toArray());\r\n file.Write(this._DimPoint.toArray());\r\n file.Write(this._TextString);\r\n file.Write(this._TextSize);\r\n }\r\n //#endregion\r\n\r\n}\r\n","import { BufferGeometry, Line as TLine, Material, Matrix3, Matrix4, Mesh, 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 { HostApplicationServices } from \"../../ApplicationServices/HostApplicationServices\";\r\nimport { AddEntityDrawObject } from \"../../Common/AddEntityDrawObject\";\r\nimport { ColorMaterial } from \"../../Common/ColorPalette\";\r\nimport { safeEval } from \"../../Common/eval\";\r\nimport { reviseMirrorMatrix } from \"../../Common/Matrix4Utils\";\r\nimport { UpdateDraw } from \"../../Common/Status\";\r\nimport { FixedNotZero } from \"../../Common/Utils\";\r\nimport { ObjectSnapMode } from \"../../Editor/ObjectSnapMode\";\r\nimport { BufferGeometryUtils } from \"../../Geometry/BufferGeometryUtils\";\r\nimport { angle, angleAndX, AsVector2, equaln, equalv3, isParallelTo, midPoint, ZAxis } from \"../../Geometry/GeUtils\";\r\nimport { RenderType } from \"../../GraphicsSystem/RenderType\";\r\nimport { Factory } from \"../CADFactory\";\r\nimport { CADFiler } from \"../CADFiler\";\r\nimport { Line } from \"../Entity/Line\";\r\nimport { Polyline } from \"../Entity/Polyline\";\r\nimport { ObjectId } from \"../ObjectId\";\r\nimport { TextAligen } from \"../Text/Text\";\r\nimport { Dimension } from \"./Dimension\";\r\nimport { GetDimLineMaterial } from \"./GetDimLineMaterial\";\r\n\r\nlet snapPolyline = new Polyline([{ pt: new Vector2, bul: 0 }, { pt: new Vector2, bul: 0 }, { pt: new Vector2, bul: 0 }, { pt: new Vector2, bul: 0 }]);\r\ninterface LeadOutLinePts\r\n{\r\n dragPt: Vector3;\r\n endPt: Vector3;\r\n}\r\ninterface DefaultValue\r\n{\r\n offset: Vector2;\r\n isFlipped: boolean;\r\n}\r\n/**\r\n * 对齐标注\r\n * 存在子类重载(线性标注 LinearDimension)\r\n * @class AlignedDimension\r\n */\r\n@Factory\r\nexport class AlignedDimension extends Dimension\r\n{\r\n //引线\r\n private _LeadOutLine = new Polyline();\r\n private _LeadOutOffsetY = 72;\r\n private _LeadOutOffsetX = 30;\r\n private _DefaultVal: DefaultValue = { offset: new Vector2(30, 72), isFlipped: false };\r\n //引线的拖拽点和终点\r\n private _LeadOutPts: LeadOutLinePts = { dragPt: midPoint(this._ArmP1, this._ArmP2), endPt: new Vector3() };\r\n //引线是否反向(往左伸/往右伸)\r\n private _LeadOutIsFlipped: boolean = false;\r\n //是否由拖拽更新_LeadOutPts.dragPt. 关系到引线的update\r\n private isDragLeadOutPt: boolean = false;\r\n constructor(\r\n //针脚\r\n protected _FootP1: Vector3 = new Vector3(),\r\n protected _FootP2: Vector3 = new Vector3(),\r\n //肩膀\r\n protected _ArmP1: Vector3 = new Vector3(),\r\n protected _ArmP2: Vector3 = new Vector3(),\r\n protected _TextRotation: number = undefined,\r\n //是否显示引线\r\n protected _LeadOutVisible: boolean = true,\r\n )\r\n {\r\n super();\r\n this._Text.TextAligen = TextAligen.Down;\r\n this._Text.Height = HostApplicationServices.dimTextHeight;\r\n }\r\n\r\n set Material(materialId: ObjectId) { }\r\n\r\n set FootP1(v: Vector3)\r\n {\r\n this._FootP1.copy(v).applyMatrix4(this.OCSInv);\r\n this.Update();\r\n }\r\n get FootP1()\r\n {\r\n return this._FootP1.clone().applyMatrix4(this._Matrix);\r\n }\r\n set FootP2(v: Vector3)\r\n {\r\n this._FootP2.copy(v).applyMatrix4(this.OCSInv);\r\n this.Update();\r\n }\r\n get FootP2()\r\n {\r\n return this._FootP2.clone().applyMatrix4(this._Matrix);\r\n }\r\n set ArmP1(v: Vector3)\r\n {\r\n this._ArmP1.copy(v).applyMatrix4(this.OCSInv);\r\n this.Update();\r\n }\r\n get ArmP1()\r\n {\r\n return this._ArmP1.clone().applyMatrix4(this._Matrix);\r\n }\r\n set ArmP2(v: Vector3)\r\n {\r\n this._ArmP2.copy(v).applyMatrix4(this.OCSInv);\r\n this.Update();\r\n }\r\n get ArmP2()\r\n {\r\n return this._ArmP2.clone().applyMatrix4(this._Matrix);\r\n }\r\n\r\n get TextPosition()\r\n {\r\n return midPoint(this._ArmP1, this._ArmP2).applyMatrix4(this._Matrix);\r\n }\r\n set TextPosition(p: Vector3)\r\n {\r\n p = p.clone().applyMatrix4(this.OCSInv);\r\n let l = new Line(this._ArmP1.clone(), this._ArmP2.clone());\r\n p.setZ(this._ArmP1.z);\r\n let cp = l.GetClosestPointTo(p, true);\r\n let v = p.clone().sub(cp);\r\n\r\n this._ArmP1.add(v);\r\n this._ArmP2.add(v);\r\n\r\n this.Update();\r\n }\r\n\r\n //创建以arm1,arm2为x轴 position在foot1的坐标系 用于定位引线\r\n get DalUcs()\r\n {\r\n let dalUcs = new Matrix4();\r\n if (!equaln(this._ArmP1.distanceTo(this._ArmP2), 0))\r\n {\r\n let vx = this._ArmP2.clone().sub(this._ArmP1);\r\n if (equaln(this._ArmP1.x, this._ArmP2.x))\r\n {\r\n if (this._ArmP1.y < this._ArmP2.y)\r\n vx.negate();\r\n }\r\n else if (this._ArmP1.x < this._ArmP2.x)\r\n vx.negate();\r\n\r\n if (isParallelTo(vx, ZAxis))\r\n return new Matrix4().setPosition(this._FootP1);\r\n\r\n let vy = vx.clone().cross(ZAxis);\r\n dalUcs = new Matrix4().makeBasis(vx.normalize(), vy.normalize(), ZAxis);\r\n dalUcs.setPosition(this._FootP1);\r\n }\r\n return dalUcs;\r\n }\r\n\r\n RaiseFooters(num: number)\r\n {\r\n let dalucs = this.DalUcs;\r\n let dalUcsInv = new Matrix4().getInverse(dalucs);\r\n\r\n let p = new Vector3(0, num, 0);\r\n let f1 = this._FootP1.clone().applyMatrix4(dalucs);\r\n let f2 = this._FootP2.clone().applyMatrix4(dalucs);\r\n let a1 = this._ArmP1.clone().applyMatrix4(dalucs);\r\n if (a1.y < f1.y)\r\n p.negate();\r\n this._FootP1 = f1.add(p).applyMatrix4(dalUcsInv);\r\n this._FootP2 = f2.add(p).applyMatrix4(dalUcsInv);\r\n\r\n this.Update();\r\n }\r\n\r\n set TextRotation(angle: number)\r\n {\r\n this._TextRotation = angle;\r\n this.Update();\r\n }\r\n\r\n set TextAligen(al: TextAligen)\r\n {\r\n if (al !== this._Text.TextAligen)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._Text.TextAligen = al;\r\n }\r\n }\r\n\r\n get Text()\r\n {\r\n if (!this._Text.TextString)\r\n this.UpdateText();\r\n\r\n return this._Text;\r\n }\r\n\r\n protected GetString(): string\r\n {\r\n return FixedNotZero(this._ArmP1.distanceTo(this._ArmP2), this._FractionDigits);\r\n }\r\n\r\n get BoundingBox()\r\n {\r\n this.SetDataToTempPolyline();\r\n if (this._Text.HasBoundingBox)\r\n return snapPolyline.BoundingBox.union(this.Text.BoundingBox);\r\n else\r\n return snapPolyline.BoundingBox;\r\n }\r\n\r\n set LeadOutVisible(visible: boolean)\r\n {\r\n if (this._LeadOutVisible === visible) return;\r\n this.WriteAllObjectRecord();\r\n this._LeadOutVisible = visible;\r\n this.Update();\r\n }\r\n\r\n //引线朝右视为未翻转\r\n set LeadOutFlipped(isFlipped: boolean)\r\n {\r\n if (this._LeadOutIsFlipped === isFlipped) return;\r\n this.WriteAllObjectRecord();\r\n this._LeadOutIsFlipped = isFlipped;\r\n this.Update();\r\n }\r\n\r\n get LeadOutFlipped()\r\n {\r\n return this._LeadOutIsFlipped;\r\n }\r\n\r\n toggleLeadOutVisible()\r\n {\r\n this.WriteAllObjectRecord();\r\n this.LeadOutVisible = !this._LeadOutVisible;\r\n }\r\n\r\n toggleLeadOutFlipped()\r\n {\r\n this.WriteAllObjectRecord();\r\n this.LeadOutFlipped = !this._LeadOutIsFlipped;\r\n }\r\n\r\n set LeadOutOffsetY(size: number)\r\n {\r\n if (this._LeadOutOffsetY === size) return;\r\n this.WriteAllObjectRecord();\r\n this._LeadOutOffsetY = size;\r\n this.Update();\r\n }\r\n\r\n get LeadOutOffsetY()\r\n {\r\n return this._LeadOutOffsetY;\r\n }\r\n\r\n set LeadOutOffsetX(size: number)\r\n {\r\n if (this._LeadOutOffsetX === size) return;\r\n this.WriteAllObjectRecord();\r\n this._LeadOutOffsetX = size;\r\n this.Update();\r\n }\r\n\r\n get LeadOutOffsetX()\r\n {\r\n return this._LeadOutOffsetX;\r\n }\r\n\r\n set DefaultValue(val: DefaultValue)\r\n {\r\n this._DefaultVal = val;\r\n this._LeadOutOffsetX = val.offset.x;\r\n this._LeadOutOffsetY = val.offset.y;\r\n this.LeadOutFlipped = val.isFlipped;\r\n }\r\n\r\n get DefaultValue()\r\n {\r\n return this._DefaultVal;\r\n }\r\n\r\n Explode()\r\n {\r\n this.UpdateText(this._Text.Position);\r\n let res =\r\n [\r\n new Line(this._FootP1.clone(), this._ArmP1.clone()),\r\n new Line(this._ArmP2.clone(), this._ArmP1.clone()),\r\n new Line(this._ArmP2.clone(), this._FootP2.clone()),\r\n this._Text.Clone()\r\n ];\r\n if (!equalv3(this._LeadOutPts.dragPt, midPoint(this._ArmP1, this._ArmP2)))\r\n res.push(\r\n new Line(midPoint(this._ArmP1, this._ArmP2), this._LeadOutPts.dragPt.clone()),\r\n new Line(this._LeadOutPts.dragPt.clone(), this._LeadOutPts.endPt.clone())\r\n );\r\n return res.map(en => en.ApplyMatrix(this._Matrix));\r\n }\r\n protected ApplyMirrorMatrix(m: Matrix4)\r\n {\r\n this.WriteAllObjectRecord();\r\n let footP1 = this.FootP1;\r\n let footP2 = this.FootP2;\r\n let armP1 = this.ArmP1;\r\n let armP2 = this.ArmP2;\r\n\r\n reviseMirrorMatrix(this._Matrix, 0);\r\n\r\n this.FootP1 = footP1;\r\n this.FootP2 = footP2;\r\n this.ArmP1 = armP1;\r\n this.ArmP2 = armP2;\r\n\r\n this.Update(UpdateDraw.Geometry);\r\n return this;\r\n }\r\n Clone(): this\r\n {\r\n let ent = super.Clone();\r\n ent._Text.CopyFrom(this._Text);\r\n for (let [type, obj] of ent._CacheDrawObject)\r\n {\r\n for (let o of obj.children)\r\n if (o instanceof TLine)\r\n o.geometry = o.geometry.clone();\r\n }\r\n return ent;\r\n }\r\n\r\n InitDrawObject(renderType: RenderType = RenderType.Wireframe): Object3D\r\n {\r\n let obj = new Object3D();\r\n let colorMaterial = GetDimLineMaterial(this, renderType);\r\n let line: TLine | Line2;\r\n if (renderType === RenderType.WireframePrint)\r\n {\r\n const geo = new LineGeometry();\r\n line = new Line2(geo, ColorMaterial.PrintLineMatrial);\r\n }\r\n else\r\n line = new TLine(\r\n BufferGeometryUtils.CreateFromPts([this._FootP1, this._FootP2, this._ArmP1, this._ArmP2]),\r\n colorMaterial\r\n );\r\n\r\n let arrow1 = new Mesh(BufferGeometryUtils.ArrowGeometry(), colorMaterial);\r\n let arrow2 = new Mesh(BufferGeometryUtils.ArrowGeometry(), colorMaterial);\r\n\r\n obj.add(line, arrow1, arrow2);\r\n\r\n this.UpdateDrawObject(renderType, obj);\r\n\r\n return obj;\r\n }\r\n\r\n UpdateDrawObject(renderType: RenderType, obj: Object3D)\r\n {\r\n obj.remove(...obj.children.slice(3));\r\n let [line, arrow1, arrow2] = obj.children;\r\n let arrowSize = 10;\r\n if (renderType === RenderType.WireframePrint)\r\n {\r\n arrowSize *= HostApplicationServices.lineWidth * 0.5;\r\n const geometry = (line).geometry;\r\n let nums: number[] = [];\r\n for (let p of [this._FootP1, this._ArmP1, this._ArmP2, this._FootP2])\r\n nums.push(p.x, p.y, p.z);\r\n geometry.setPositions(nums);\r\n }\r\n else\r\n BufferGeometryUtils.UpdatePts((line).geometry as BufferGeometry, [this._FootP1, this._ArmP1, this._ArmP2, this._FootP2], true);\r\n\r\n arrow1.scale.set(arrowSize, arrowSize, arrowSize);\r\n arrow2.scale.set(arrowSize, arrowSize, arrowSize);\r\n\r\n let armV = this._ArmP1.clone().sub(this._ArmP2);\r\n let armAn = angle(armV);\r\n\r\n arrow1.position.copy(this._ArmP1);\r\n arrow2.position.copy(this._ArmP2);\r\n if (this._ArmP1.distanceTo(this._ArmP2) < 36)\r\n {\r\n arrow1.rotation.z = armAn + Math.PI / 2;\r\n arrow2.rotation.z = armAn - Math.PI / 2;\r\n }\r\n else\r\n {\r\n arrow1.rotation.z = armAn - Math.PI / 2;\r\n arrow2.rotation.z = armAn + Math.PI / 2;\r\n }\r\n arrow1.updateMatrix();\r\n arrow2.updateMatrix();\r\n\r\n //更新引线this._LeadOutLine 并返回新的字体位置\r\n let textPos = this.UpdateLeadOutLine(renderType);\r\n if (this._LeadOutLine.EndParam > 0 && this._LeadOutLine.Visible)\r\n AddEntityDrawObject(obj, this._LeadOutLine, renderType);\r\n\r\n this.UpdateText(textPos);\r\n AddEntityDrawObject(obj, this._Text, renderType);\r\n this.isDragLeadOutPt = false;\r\n }\r\n\r\n /**\r\n * 更新引线并返回textPosition\r\n * @returns textPosition(Vector3)\r\n * @memberof AlignedDimension\r\n */\r\n UpdateLeadOutLine(renderType: RenderType): Vector3\r\n {\r\n let textPosition: Vector3 = midPoint(this._ArmP1, this._ArmP2);\r\n\r\n let distance = this._ArmP1.distanceTo(this._ArmP2);\r\n let distanceStr = FixedNotZero(distance, 2);\r\n let strWidth = distanceStr.length * (~~(Math.abs(this.TextSize) / 2));//文字总宽度\r\n let needLeadOut = (safeEval(distanceStr) < strWidth + 1e-6) && !(equaln(distance, 0));//文字宽度是否比托盘更宽 是 则需要引线\r\n\r\n if (this._LeadOutVisible && needLeadOut) //引线可见且需要引线\r\n {\r\n let dalUcs = this.DalUcs;\r\n let dalUcsInv = new Matrix4().getInverse(dalUcs);\r\n\r\n let textWidthVec = new Vector3(strWidth);\r\n let isLeft = (v) => { return v.x < midPoint(this._ArmP1, this._ArmP2).applyMatrix4(dalUcs).x; };\r\n //确定引线的点的位置\r\n if (this.isDragLeadOutPt)//是否拖拽了dragPt(拖拽dragPt需要更新endPt)\r\n {\r\n let dragPtInDalUcs = this._LeadOutPts.dragPt.clone().applyMatrix4(dalUcs);\r\n let isleft = isLeft(dragPtInDalUcs.clone());\r\n if (isleft)//已经拖过中线 更新endPt 改变IsFlipped\r\n this._LeadOutPts.endPt = dragPtInDalUcs.clone().sub(textWidthVec);\r\n else\r\n this._LeadOutPts.endPt = dragPtInDalUcs.clone().add(textWidthVec);\r\n this._LeadOutIsFlipped = !isleft;\r\n }\r\n else //没有拖拽\r\n {\r\n this._LeadOutPts.dragPt = textPosition.clone().applyMatrix4(dalUcs).add(new Vector3(this._LeadOutIsFlipped ? this._LeadOutOffsetX : -this._LeadOutOffsetX, this._LeadOutOffsetY));\r\n if (isLeft(this._LeadOutPts.dragPt))\r\n this._LeadOutPts.endPt = this._LeadOutPts.dragPt.clone().sub(textWidthVec);\r\n else\r\n this._LeadOutPts.endPt = this._LeadOutPts.dragPt.clone().add(textWidthVec);\r\n this._LeadOutPts.dragPt.applyMatrix4(dalUcsInv);\r\n }\r\n\r\n this._LeadOutPts.endPt.applyMatrix4(dalUcsInv);\r\n\r\n this._LeadOutLine.AutoUpdate = false;\r\n this._LeadOutLine.LineData = [textPosition, this._LeadOutPts.dragPt, this._LeadOutPts.endPt].map(p => { return { pt: AsVector2(p), bul: 0 }; });\r\n this._LeadOutLine.Position = new Vector3(0, 0, textPosition.z);\r\n this._LeadOutLine.ColorIndex = this.ColorIndex;\r\n this._LeadOutLine.Visible = true;\r\n this._LeadOutLine.AutoUpdate = true;\r\n this._LeadOutLine.DeferUpdate();\r\n\r\n textPosition = midPoint(this._LeadOutPts.dragPt, this._LeadOutPts.endPt);\r\n }\r\n else //引线不可见或不需要引线\r\n {\r\n //使引线不可见 并将dragPt隐藏于托盘中点\r\n this._LeadOutPts.dragPt = midPoint(this._ArmP1, this._ArmP2);\r\n this._LeadOutLine.Visible = false;\r\n }\r\n return textPosition;\r\n }\r\n\r\n UpdateText(pos?: Vector3)\r\n {\r\n this._Text.AutoUpdate = false;\r\n\r\n let textRo = this._TextRotation ?? angleAndX(this._ArmP1.clone().sub(this._ArmP2));\r\n this._Text.TextString = this.TextString;\r\n this._Text.Position = pos ?? midPoint(this._ArmP1, this._ArmP2);\r\n this._Text.TextRotation = textRo;\r\n this._Text.ColorIndex = this._Color;\r\n this._Text.Height = this._TextSize;\r\n\r\n this._Text.DeferUpdate();\r\n this._Text.AutoUpdate = true;\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 this.SetDataToTempPolyline();\r\n return snapPolyline.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform);\r\n }\r\n\r\n private SetDataToTempPolyline()\r\n {\r\n snapPolyline.OCS = this._Matrix;\r\n snapPolyline.LineData[0].pt.set(this._FootP1.x, this._FootP1.y);\r\n snapPolyline.LineData[1].pt.set(this._ArmP1.x, this._ArmP1.y);\r\n snapPolyline.LineData[2].pt.set(this._ArmP2.x, this._ArmP2.y);\r\n snapPolyline.LineData[3].pt.set(this._FootP2.x, this._FootP2.y);\r\n\r\n if (!equaln(this._FootP1.z, 0))\r\n snapPolyline.OCSNoClone.setPosition(snapPolyline.Position.add(snapPolyline.Normal.multiplyScalar(this._FootP1.z)));\r\n // snapPolyline.LineData[4].pt.set(this._LeadOutPts.dragPt.x, this._LeadOutPts.dragPt.y); //引线拖拽点\r\n // snapPolyline.LineData[5].pt.set(this._LeadOutPts.endPt.x, this._LeadOutPts.endPt.y);\r\n }\r\n\r\n UpdateDrawObjectMaterial(renderType: RenderType, obj: Object3D, material?: Material)\r\n {\r\n if (renderType === RenderType.WireframePrint)\r\n return;\r\n this.WriteAllObjectRecord();\r\n let colorMat = GetDimLineMaterial(this, renderType);\r\n this._LeadOutLine.ColorIndex = this._Color;\r\n let [line, arrow1, arrow2] = obj.children;\r\n (line).material = colorMat;\r\n (arrow1).material = colorMat;\r\n (arrow2).material = colorMat;\r\n this._Text.ColorIndex = this._Color;\r\n }\r\n\r\n GetGripPoints(): Array\r\n {\r\n return [this._FootP1, this._FootP2, this._ArmP1, this._ArmP2, midPoint(this._ArmP1, this._ArmP2), this._LeadOutPts.dragPt].map(p =>\r\n {\r\n return p.clone().applyMatrix4(this._Matrix);\r\n });\r\n }\r\n MoveGripPoints(indexList: number[], vec: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n let inv = this.OCSInv;\r\n let inv0 = inv.clone().setPosition(0, 0, 0);\r\n let vec0 = vec.clone().applyMatrix4(inv0);\r\n for (let i of indexList)\r\n {\r\n if (i === 5)\r\n {\r\n let dalucs = this.DalUcs;\r\n //开始拖拽引线dragPt\r\n this.isDragLeadOutPt = true;\r\n this._LeadOutPts.dragPt.add(vec0);\r\n let calcV = this._LeadOutPts.dragPt.clone().applyMatrix4(dalucs).sub(midPoint(this._ArmP1, this._ArmP2).applyMatrix4(dalucs));\r\n this._LeadOutOffsetY = calcV.y;\r\n this._LeadOutOffsetX = Math.abs(calcV.x);\r\n }\r\n else if (i >= 2)\r\n {\r\n let p = this.TextPosition.add(vec).applyMatrix4(inv);\r\n let l = new Line(this._ArmP1, this._ArmP2);\r\n let cp = l.GetClosestPointTo(p, true);\r\n let v = p.clone().sub(cp);\r\n\r\n this._ArmP1.add(v);\r\n this._ArmP2.add(v);\r\n this._LeadOutPts.dragPt.add(v);\r\n }\r\n else\r\n {\r\n if (i === 0)\r\n this._FootP1.add(vec0);\r\n else\r\n this._FootP2.add(vec0);\r\n\r\n this.ChangeFootPt();\r\n }\r\n }\r\n this.Update();\r\n }\r\n GetStretchPoints(): Array\r\n {\r\n return this.GetGripPoints();\r\n }\r\n MoveStretchPoints(indexList: Array, vec: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n let lst: number[] = [];\r\n let bChangeText = false;\r\n for (let i of indexList)\r\n {\r\n if (i <= 1)\r\n lst.push(i);\r\n else\r\n bChangeText = true;\r\n }\r\n if (lst.length > 0)\r\n this.MoveGripPoints(lst, vec);\r\n if (bChangeText)\r\n this.MoveGripPoints([2], vec);\r\n }\r\n protected ChangeFootPt()\r\n {\r\n let l = new Line(this._FootP1, this._FootP2);\r\n let cp = l.GetClosestPointTo(this._ArmP1, true);\r\n\r\n let v = this._ArmP1.clone().sub(cp);\r\n\r\n this._ArmP1.copy(this._FootP1.clone().add(v));\r\n this._ArmP2.copy(this._FootP2.clone().add(v));\r\n }\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._ArmP1.fromArray(file.Read());\r\n this._ArmP2.fromArray(file.Read());\r\n this._FootP1.fromArray(file.Read());\r\n this._FootP2.fromArray(file.Read());\r\n this._TextRotation = file.Read();\r\n if (ver > 2) this._TextString = file.Read();\r\n if (ver > 3)\r\n {\r\n this._LeadOutVisible = file.Read();\r\n this._LeadOutIsFlipped = file.Read();\r\n this._LeadOutPts.dragPt.fromArray(file.Read());\r\n this._LeadOutOffsetY = file.Read();\r\n this._LeadOutOffsetX = file.Read();\r\n }\r\n if (ver > 4) this._TextSize = file.Read();\r\n if (ver > 5) this._FractionDigits = file.Read() ?? HostApplicationServices.fractionDigitsType ?? 2;\r\n\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n super.WriteFile(file);\r\n file.Write(6);\r\n file.Write(this._ArmP1.toArray());\r\n file.Write(this._ArmP2.toArray());\r\n file.Write(this._FootP1.toArray());\r\n file.Write(this._FootP2.toArray());\r\n file.Write(this._TextRotation);\r\n file.Write(this._TextString);\r\n\r\n file.Write(this._LeadOutVisible);\r\n file.Write(this._LeadOutIsFlipped);\r\n file.Write(this._LeadOutPts.dragPt.toArray());\r\n file.Write(this._LeadOutOffsetY);\r\n file.Write(this._LeadOutOffsetX);\r\n\r\n file.Write(this._TextSize);\r\n file.Write(this._FractionDigits);\r\n }\r\n //#endregion\r\n}\r\n","import { BufferGeometry, Line, Material, Matrix4, Mesh, Object3D, Vector3 } from \"three\";\r\nimport { AddEntityDrawObject } from \"../../Common/AddEntityDrawObject\";\r\nimport { FixedNotZero } from \"../../Common/Utils\";\r\nimport { BufferGeometryUtils } from \"../../Geometry/BufferGeometryUtils\";\r\nimport { AsVector3 } from \"../../Geometry/GeUtils\";\r\nimport { RenderType } from \"../../GraphicsSystem/RenderType\";\r\nimport { equaln } from \"../../Nest/Common/Util\";\r\nimport { Factory } from \"../CADFactory\";\r\nimport { CADFiler } from \"../CADFiler\";\r\nimport { Arc } from \"../Entity/Arc\";\r\nimport { Text, TextAligen } from \"../Text/Text\";\r\nimport { Dimension } from \"./Dimension\";\r\nimport { GetDimLineMaterial } from \"./GetDimLineMaterial\";\r\n\r\n@Factory\r\nexport class ArcDimension extends Dimension\r\n{\r\n private _Arc = new Arc;\r\n protected _Text = new Text();\r\n\r\n constructor(\r\n private _Center: Vector3 = new Vector3,\r\n private _StartAngle: number = 0,\r\n private _EndAngle: number = 1,\r\n private _Clockwise = false,\r\n private _Radius: number = 1,\r\n private _TextRadiusAdd: number = 1,\r\n protected _TextString: string = \"⌒<>\",\r\n )\r\n {\r\n super();\r\n }\r\n\r\n get Text()\r\n {\r\n if (!this._Text.TextString)\r\n {\r\n this.PraseArc();\r\n this.ParseText();\r\n }\r\n return this._Text;\r\n }\r\n\r\n set TextRadiusAdd(ra: number)\r\n {\r\n if (equaln(ra, this._TextRadiusAdd)) return;\r\n\r\n this.WriteAllObjectRecord();\r\n this._TextRadiusAdd = ra;\r\n this.Update();\r\n }\r\n\r\n get TextRadiusAdd() { return this._TextRadiusAdd; }\r\n\r\n protected GetString(): string\r\n {\r\n return FixedNotZero(this._Arc.Length, this._FractionDigits);\r\n }\r\n\r\n //#region 拉伸相关\r\n GetGripPoints(): Vector3[]\r\n {\r\n this.PraseArc();\r\n let pts = this._Arc.GetGripPoints();\r\n for (let p of pts)\r\n p.applyMatrix4(this.OCSNoClone);\r\n return pts;\r\n }\r\n MoveGripPoints(indexList: number[], vec: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n vec = vec.clone().applyMatrix4(this.OCSInv.setPosition(0, 0, 0));\r\n\r\n this.PraseArc();\r\n this._Arc.MoveGripPoints(indexList, vec);\r\n\r\n this.UpdateArcFromThisArc();\r\n this.Update();\r\n }\r\n\r\n GetStretchPoints(): Vector3[]\r\n {\r\n this.PraseArc();\r\n let pts = this._Arc.GetStretchPoints();\r\n for (let p of pts)\r\n p.applyMatrix4(this.OCSNoClone);\r\n return pts;\r\n }\r\n\r\n MoveStretchPoints(indexList: number[], vec: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n vec = vec.clone().applyMatrix4(this.OCSInv.setPosition(0, 0, 0));\r\n\r\n this.PraseArc();\r\n this._Arc.MoveStretchPoints(indexList, vec);\r\n\r\n this.UpdateArcFromThisArc();\r\n this.Update();\r\n }\r\n\r\n private UpdateArcFromThisArc()\r\n {\r\n this._Center.copy(this._Arc.Center);\r\n this._StartAngle = this._Arc.StartAngle;\r\n this._EndAngle = this._Arc.EndAngle;\r\n this._Radius = this._Arc.Radius;\r\n this._Clockwise = this._Arc.IsClockWise;\r\n }\r\n //#endregion\r\n\r\n //#region Draw\r\n InitDrawObject(renderType: RenderType = RenderType.Wireframe)\r\n {\r\n let colorMaterial = GetDimLineMaterial(this, renderType);\r\n\r\n let obj = new Object3D();\r\n let line = new Line(new BufferGeometry, colorMaterial);\r\n obj.add(line);\r\n\r\n let arrow1 = new Mesh(BufferGeometryUtils.ArrowGeometry(), colorMaterial);\r\n let arrow2 = new Mesh(BufferGeometryUtils.ArrowGeometry(), colorMaterial);\r\n let arrowSize = 10;\r\n arrow1.scale.set(arrowSize, arrowSize, arrowSize);\r\n arrow2.scale.set(arrowSize, arrowSize, arrowSize);\r\n obj.add(arrow1, arrow2);\r\n\r\n this.UpdateDrawObject(renderType, obj);\r\n return obj;\r\n }\r\n\r\n UpdateDrawObject(renderType: RenderType, obj: Object3D)\r\n {\r\n obj.remove(...obj.children.slice(3));\r\n\r\n let [line, arrow1, arrow2] = obj.children as [Line, Mesh, Mesh];\r\n let colorMaterial = GetDimLineMaterial(this, renderType);\r\n line.material = colorMaterial;\r\n arrow1.material = colorMaterial;\r\n arrow2.material = colorMaterial;\r\n\r\n this.PraseArc();//半径设置到实际尺寸的位置,获得正确的标注尺寸\r\n let startFootPoint = this._Arc.StartPoint;//一定要在这个位置求脚点\r\n let endFootPoint = this._Arc.EndPoint;\r\n\r\n this._Text.AutoUpdate = false;\r\n\r\n this._Text.ColorIndex = this.ColorIndex;\r\n this.ParseText();\r\n\r\n this._Arc.DeferUpdate();\r\n this._Text.DeferUpdate();\r\n\r\n let linePoints: Vector3[] = [startFootPoint];\r\n for (let p of this._Arc.Shape.getPoints(8))\r\n linePoints.push(AsVector3(p).add(this._Center));\r\n linePoints.push(endFootPoint);\r\n\r\n let geo = line.geometry as BufferGeometry;\r\n if (!BufferGeometryUtils.UpdatePts(geo, linePoints))\r\n {\r\n line.geometry.dispose();\r\n line.geometry = BufferGeometryUtils.CreateFromPts(linePoints);\r\n }\r\n\r\n AddEntityDrawObject(obj, this._Text, renderType);\r\n\r\n //更新箭头的位置和旋转角度\r\n arrow1.position.copy(this._Arc.StartPoint);\r\n arrow1.rotation.z = this._Arc.GetFistDerivAngle(0) + Math.PI / 2;\r\n arrow1.updateMatrix();\r\n\r\n arrow2.position.copy(this._Arc.EndPoint);\r\n arrow2.rotation.z = this._Arc.GetFistDerivAngle(1) - Math.PI / 2;\r\n arrow2.updateMatrix();\r\n }\r\n\r\n private ParseText()\r\n {\r\n this._Text.TextString = this.TextString;\r\n\r\n this._Arc.Radius = this._Radius + this._TextRadiusAdd; //半径设置到文字的位置,获得文字的位置\r\n let textP = this._Arc.GetPointAtParam(0.5);\r\n let ang = this._Arc.GetAngleAtParam(0.5);\r\n let textOCS = new Matrix4().makeRotationZ(ang + Math.PI * 3 / 2).setPosition(textP);\r\n this._Text.TextAligen = TextAligen.Down;\r\n this._Text.OCS = textOCS;\r\n this._Text.Height = this._TextSize;\r\n }\r\n\r\n UpdateDrawObjectMaterial(type: RenderType, obj: Object3D, material?: Material)\r\n {\r\n let colorMaterial = GetDimLineMaterial(this, type);\r\n let count = Math.min(3, obj.children.length);\r\n for (let i = 0; i < count; i++)\r\n {\r\n let l = obj.children[i] as Line;\r\n l.material = colorMaterial;\r\n }\r\n\r\n this._Text.ColorIndex = this.ColorIndex;\r\n this.Text.DeferUpdate();\r\n }\r\n\r\n private PraseArc()\r\n {\r\n this._Arc.AutoUpdate = false;\r\n\r\n this._Arc.Center = this._Center;\r\n this._Arc.StartAngle = this._StartAngle;\r\n this._Arc.EndAngle = this._EndAngle;\r\n this._Arc.IsClockWise = this._Clockwise;\r\n this._Arc.Radius = this._Radius;\r\n }\r\n\r\n //#endregion\r\n\r\n //#region -------------------------File-------------------------\r\n //对象从文件中读取数据,初始化自身\r\n protected _ReadFile(file: CADFiler)\r\n {\r\n let ver = file.Read();\r\n super._ReadFile(file);\r\n this._Center.fromArray(file.Read());\r\n this._Radius = file.Read();\r\n this._TextRadiusAdd = file.Read();\r\n this._Clockwise = file.Read();\r\n this._StartAngle = file.Read();\r\n this._EndAngle = file.Read();\r\n this._TextString = file.Read();\r\n this._TextSize = file.Read();\r\n if (ver > 1) this._FractionDigits = file.Read();\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(2);\r\n super.WriteFile(file);\r\n file.Write(this._Center.toArray());\r\n file.Write(this._Radius);\r\n file.Write(this._TextRadiusAdd);\r\n file.Write(this._Clockwise);\r\n file.Write(this._StartAngle);\r\n file.Write(this._EndAngle);\r\n file.Write(this._TextString);\r\n file.Write(this._TextSize);\r\n file.Write(this._FractionDigits);\r\n }\r\n //#endregion\r\n}\r\n","import { BufferGeometry, Line as TLine, Material, Matrix3, Matrix4, Mesh, Object3D, Vector3 } from \"three\";\r\nimport { Line2 } from \"three/examples/jsm/lines/Line2\";\r\nimport { HostApplicationServices } from \"../../ApplicationServices/HostApplicationServices\";\r\nimport { AddEntityDrawObject } from \"../../Common/AddEntityDrawObject\";\r\nimport { ColorMaterial } from \"../../Common/ColorPalette\";\r\nimport { DisposeThreeObj } from \"../../Common/Dispose\";\r\nimport { reviseMirrorMatrix } from \"../../Common/Matrix4Utils\";\r\nimport { FixedNotZero } from \"../../Common/Utils\";\r\nimport { ObjectSnapMode } from \"../../Editor/ObjectSnapMode\";\r\nimport { BufferGeometryUtils } from \"../../Geometry/BufferGeometryUtils\";\r\nimport { angle, angleAndX, MoveMatrix } from \"../../Geometry/GeUtils\";\r\nimport { RenderType } from \"../../GraphicsSystem/RenderType\";\r\nimport { Factory } from \"../CADFactory\";\r\nimport { CADFiler } from \"../CADFiler\";\r\nimport { Circle } from \"../Entity/Circle\";\r\nimport { Line } from \"../Entity/Line\";\r\nimport { ObjectId } from \"../ObjectId\";\r\nimport { Dimension } from \"./Dimension\";\r\nimport { GetDimLineMaterial } from \"./GetDimLineMaterial\";\r\n\r\n@Factory\r\nexport class RadiusDimension extends Dimension\r\n{\r\n\r\n OnlyRenderType = true;\r\n protected _TextString: string = \"R<>\";\r\n\r\n constructor(\r\n protected _Center = new Vector3(),\r\n protected _DiameterOrRadiusPoint = new Vector3(),\r\n protected _TextPoint = new Vector3(),\r\n )\r\n {\r\n super();\r\n this._Text.Height = HostApplicationServices.dimTextHeight;\r\n }\r\n\r\n get Text()\r\n {\r\n if (!this._Text.TextString)\r\n this.UpdateText();\r\n\r\n return this._Text;\r\n }\r\n\r\n protected GetString(): string\r\n {\r\n return FixedNotZero(this._Center.distanceTo(this._DiameterOrRadiusPoint), this._FractionDigits);\r\n }\r\n\r\n set Material(materialId: ObjectId) { }\r\n\r\n get Center()\r\n {\r\n return this._Center.clone().applyMatrix4(this._Matrix);\r\n }\r\n set Center(v: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._Center.copy(v).applyMatrix4(this.OCSInv);\r\n this.Update();\r\n }\r\n get DiameterOrRadiusPoint()\r\n {\r\n return this._DiameterOrRadiusPoint.clone().applyMatrix4(this._Matrix);\r\n }\r\n set DiameterOrRadiusPoint(v: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._DiameterOrRadiusPoint.copy(v).applyMatrix4(this.OCSInv);\r\n this.Update();\r\n }\r\n get TextPoint()\r\n {\r\n return this._TextPoint.clone().applyMatrix4(this._Matrix);\r\n }\r\n set TextPoint(v: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._TextPoint.copy(v).applyMatrix4(this.OCSInv);\r\n this.Update();\r\n }\r\n Explode()\r\n {\r\n this.UpdateText();\r\n return [\r\n new Line(this._Center, this._DiameterOrRadiusPoint),\r\n new Line(this._DiameterOrRadiusPoint, this._TextPoint),\r\n this._Text.Clone()\r\n ].map(en => en.ApplyMatrix(this._Matrix));\r\n }\r\n\r\n Clone(): this\r\n {\r\n let ent = super.Clone();\r\n ent._Text.CopyFrom(this._Text);\r\n for (let [type, obj] of ent._CacheDrawObject)\r\n {\r\n for (let o of obj.children)\r\n if (o instanceof TLine)\r\n o.geometry = o.geometry.clone();\r\n }\r\n return ent;\r\n }\r\n\r\n InitDrawObject(renderType: RenderType = RenderType.Wireframe): Object3D\r\n {\r\n this._Text.ColorIndex = this.ColorIndex;\r\n let obj = new Object3D();\r\n\r\n let colorMaterial = GetDimLineMaterial(this, renderType);\r\n\r\n let line: TLine | Line2;\r\n\r\n if (renderType === RenderType.WireframePrint)\r\n line = new Line2(undefined, ColorMaterial.PrintLineMatrial);\r\n else\r\n line = new TLine(\r\n BufferGeometryUtils.CreateFromPts([this._Center, this._DiameterOrRadiusPoint, this._TextPoint]),\r\n colorMaterial\r\n );\r\n\r\n let arrow = new Mesh(BufferGeometryUtils.ArrowGeometry(), colorMaterial);\r\n\r\n obj.add(line, arrow);\r\n\r\n AddEntityDrawObject(obj, this._Text, renderType);\r\n this.UpdateDrawObject(renderType, obj);\r\n\r\n return obj;\r\n }\r\n\r\n UpdateDrawObject(renderType: RenderType, obj: Object3D)\r\n {\r\n let [line, arrow, textObj] = obj.children;\r\n\r\n let arrowSize = 10;\r\n\r\n if (renderType === RenderType.WireframePrint)\r\n {\r\n arrowSize *= HostApplicationServices.lineWidth * 0.5;\r\n let geo = (line as Line2).geometry;\r\n geo.setPositions([...this._Center.toArray(), ...this._DiameterOrRadiusPoint.toArray(), ...this._TextPoint.toArray()]);\r\n }\r\n else\r\n BufferGeometryUtils.UpdatePts((line).geometry as BufferGeometry, [this._Center, this._DiameterOrRadiusPoint, this._TextPoint], true);\r\n\r\n arrow.scale.set(arrowSize, arrowSize, arrowSize);\r\n\r\n let armV = this._TextPoint.clone().sub(this._DiameterOrRadiusPoint);\r\n let armAn = angle(armV);\r\n\r\n arrow.position.copy(this._DiameterOrRadiusPoint);\r\n arrow.rotation.z = armAn + Math.PI / 2;\r\n arrow.updateMatrix();\r\n\r\n obj.remove(textObj);\r\n DisposeThreeObj(textObj);\r\n\r\n this.UpdateText();\r\n\r\n AddEntityDrawObject(obj, this._Text, renderType);\r\n }\r\n\r\n UpdateDrawObjectMaterial(renderType: RenderType, obj: Object3D, material?: Material)\r\n {\r\n if (renderType === RenderType.WireframePrint)\r\n return;\r\n let [line, arrow, textObj] = obj.children as [TLine, Mesh, Object3D];\r\n let lineMaterial = GetDimLineMaterial(this, renderType);\r\n\r\n line.material = lineMaterial;\r\n arrow.material = line.material;\r\n this._Text.ColorIndex = this.ColorIndex;\r\n\r\n //如果实体是拷贝的,那么可能修改材质失败\r\n if (textObj.children[0])\r\n {\r\n let mesh = textObj.children[0] as Mesh;\r\n mesh.material = ColorMaterial.GetBasicMaterialDoubleSide(this.ColorIndex);//TODO:在布局时应该如何渲染?\r\n }\r\n }\r\n\r\n UpdateText()\r\n {\r\n this._Text.AutoUpdate = false;\r\n\r\n let armV = this._TextPoint.clone().sub(this._DiameterOrRadiusPoint);\r\n this._Text.TextString = this.TextString;\r\n this._Text.Position = this._TextPoint;\r\n this._Text.TextRotation = angleAndX(armV);\r\n this._Text.Height = this._TextSize;\r\n\r\n this._Text.DeferUpdate();\r\n this._Text.AutoUpdate = true;\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 l = new Line(this.Center, this.TextPoint);\r\n switch (snapMode)\r\n {\r\n case ObjectSnapMode.End:\r\n return this.GetStretchPoints();\r\n default:\r\n return l.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform);\r\n }\r\n }\r\n GetGripPoints(): Array\r\n {\r\n return [this.Center, this.DiameterOrRadiusPoint, this.TextPoint];\r\n }\r\n MoveGripPoints(indexList: number[], vec: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n let inv = this.OCSInv;\r\n let vec0 = vec.clone().applyMatrix4(inv.clone().setPosition(0, 0, 0));\r\n let rad = this._Center.distanceTo(this._DiameterOrRadiusPoint);\r\n\r\n for (let i of indexList)\r\n {\r\n if (i === 1)\r\n {\r\n let center = this.DiameterOrRadiusPoint.add(vec).applyMatrix4(inv);\r\n let cir = new Circle(this._Center, rad);\r\n let cp = cir.GetClosestPointTo(center, true);\r\n this._DiameterOrRadiusPoint.copy(cp);\r\n let dist = this._Center.distanceTo(this._TextPoint);\r\n let dir = this._DiameterOrRadiusPoint.clone().sub(this._Center).normalize().multiplyScalar(dist);\r\n this._TextPoint.copy(this._Center.clone().add(dir));\r\n }\r\n else\r\n {\r\n if (i === 0)\r\n this._Center.add(vec0);\r\n else\r\n this._TextPoint.add(vec0);\r\n let dir = this._TextPoint.clone().sub(this._Center).normalize().multiplyScalar(rad);\r\n this._DiameterOrRadiusPoint.copy(this._Center.clone().add(dir));\r\n }\r\n }\r\n this.Update();\r\n }\r\n GetStretchPoints(): Array\r\n {\r\n return this.GetGripPoints();\r\n }\r\n MoveStretchPoints(indexList: Array, vec: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n if (indexList.length >= 2)\r\n this.ApplyMatrix(MoveMatrix(vec));\r\n else\r\n this.MoveGripPoints(indexList, vec);\r\n }\r\n protected ApplyMirrorMatrix(m: Matrix4)\r\n {\r\n this.WriteAllObjectRecord();\r\n let p1 = this.Center;\r\n let p2 = this.DiameterOrRadiusPoint;\r\n let p3 = this.TextPoint;\r\n\r\n reviseMirrorMatrix(this._Matrix);\r\n\r\n this.Center = p1;\r\n this.DiameterOrRadiusPoint = p2;\r\n this.TextPoint = p3;\r\n\r\n return this;\r\n }\r\n protected _ReadFile(file: CADFiler)\r\n {\r\n super._ReadFile(file);\r\n let ver = file.Read();\r\n this._Center.fromArray(file.Read());\r\n this._DiameterOrRadiusPoint.fromArray(file.Read());\r\n this._TextPoint.fromArray(file.Read());\r\n if (ver > 1) this._TextString = file.Read();\r\n if (ver > 2) this._TextSize = file.Read();\r\n if (ver > 3) this._FractionDigits = file.Read();\r\n }\r\n WriteFile(file: CADFiler)\r\n {\r\n super.WriteFile(file);\r\n file.Write(4);\r\n file.Write(this._Center.toArray());\r\n file.Write(this._DiameterOrRadiusPoint.toArray());\r\n file.Write(this._TextPoint.toArray());\r\n file.Write(this._TextString);\r\n file.Write(this._TextSize);\r\n file.Write(this._FractionDigits);\r\n }\r\n}\r\n","import { BufferGeometry, Line as TLine, Material, Mesh, Object3D, Vector3 } from \"three\";\r\nimport { Line2 } from \"three/examples/jsm/lines/Line2\";\r\nimport { HostApplicationServices } from \"../../ApplicationServices/HostApplicationServices\";\r\nimport { AddEntityDrawObject } from \"../../Common/AddEntityDrawObject\";\r\nimport { ColorMaterial } from \"../../Common/ColorPalette\";\r\nimport { DisposeThreeObj } from \"../../Common/Dispose\";\r\nimport { BufferGeometryUtils } from \"../../Geometry/BufferGeometryUtils\";\r\nimport { angle, midPoint } from \"../../Geometry/GeUtils\";\r\nimport { RenderType } from \"../../GraphicsSystem/RenderType\";\r\nimport { Factory } from \"../CADFactory\";\r\nimport { Circle } from \"../Entity/Circle\";\r\nimport { GetDimLineMaterial } from \"./GetDimLineMaterial\";\r\nimport { RadiusDimension } from \"./RadiusDimension\";\r\n\r\n\r\nconst LINE_EXTEND_VAL = 40; //尺寸线延长值\r\n\r\n@Factory\r\nexport class DiameterDimension extends RadiusDimension\r\n{\r\n protected _TextString: string = \"D<>\";\r\n InitDrawObject(renderType: RenderType = RenderType.Wireframe): Object3D\r\n {\r\n this._Text.ColorIndex = this.ColorIndex;\r\n let obj = new Object3D();\r\n\r\n let colorMaterial = GetDimLineMaterial(this, renderType);\r\n\r\n let vec = this._DiameterOrRadiusPoint.clone().sub(this._Center).normalize().multiplyScalar(-LINE_EXTEND_VAL);\r\n\r\n let line: TLine | Line2;\r\n\r\n if (renderType === RenderType.WireframePrint)\r\n line = new Line2(undefined, ColorMaterial.PrintLineMatrial);\r\n else\r\n line = new TLine(\r\n BufferGeometryUtils.CreateFromPts([this._Center.clone().add(vec), this._DiameterOrRadiusPoint, this._TextPoint]),\r\n colorMaterial\r\n );\r\n\r\n let arrow = new Mesh(BufferGeometryUtils.ArrowGeometry(), colorMaterial);\r\n let arrow2 = new Mesh(BufferGeometryUtils.ArrowGeometry(), colorMaterial);\r\n\r\n obj.add(line, arrow, arrow2);\r\n AddEntityDrawObject(obj, this._Text, renderType);\r\n\r\n this.UpdateDrawObject(renderType, obj);\r\n\r\n return obj;\r\n }\r\n UpdateDrawObject(renderType: RenderType, obj: Object3D)\r\n {\r\n let [line, arrow, arrow2, textObj] = obj.children;\r\n\r\n let vec = this._DiameterOrRadiusPoint.clone().sub(this._Center).normalize().multiplyScalar(-LINE_EXTEND_VAL);\r\n\r\n let arrowSize = 10;\r\n\r\n let sp = this._Center.clone().add(vec);\r\n\r\n if (renderType === RenderType.WireframePrint)\r\n {\r\n arrowSize *= HostApplicationServices.lineWidth * 0.5;\r\n let geo = (line as Line2).geometry;\r\n geo.setPositions([...sp.toArray(), ...this._DiameterOrRadiusPoint.toArray(), ...this._TextPoint.toArray()]);\r\n }\r\n else\r\n BufferGeometryUtils.UpdatePts((line).geometry as BufferGeometry, [sp, this._DiameterOrRadiusPoint, this._TextPoint], true);\r\n\r\n arrow.scale.set(arrowSize, arrowSize, arrowSize);\r\n arrow2.scale.set(arrowSize, arrowSize, arrowSize);\r\n\r\n let armV = this._TextPoint.clone().sub(this._DiameterOrRadiusPoint);\r\n let armAn = angle(armV);\r\n\r\n arrow.position.copy(this._DiameterOrRadiusPoint);\r\n arrow.rotation.z = armAn + Math.PI / 2;\r\n arrow.updateMatrix();\r\n\r\n arrow2.position.copy(this._Center);\r\n arrow2.rotation.z = armAn - Math.PI / 2;\r\n arrow2.updateMatrix();\r\n\r\n this.UpdateText();\r\n\r\n obj.remove(textObj);\r\n DisposeThreeObj(textObj);\r\n AddEntityDrawObject(obj, this._Text, renderType);\r\n }\r\n\r\n UpdateDrawObjectMaterial(renderType: RenderType, obj: Object3D, material?: Material)\r\n {\r\n if (renderType === RenderType.WireframePrint)\r\n return;\r\n\r\n let [line, arrow, arrow2, textObj] = obj.children as [TLine, Mesh, Mesh, Object3D];\r\n let lineMaterial = GetDimLineMaterial(this, renderType);\r\n\r\n line.material = lineMaterial;\r\n arrow.material = line.material;\r\n arrow2.material = lineMaterial;\r\n\r\n this._Text.ColorIndex = this.ColorIndex;\r\n\r\n //如果实体是拷贝的,那么可能修改材质失败\r\n if (textObj.children[0])\r\n {\r\n let mesh = textObj.children[0] as Mesh;\r\n mesh.material = ColorMaterial.GetBasicMaterialDoubleSide(this.ColorIndex);//TODO:在布局时应该如何渲染?\r\n }\r\n }\r\n\r\n MoveGripPoints(indexList: number[], vec: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n let v = vec.clone().applyMatrix4(this.OCSInv.setPosition(new Vector3()));\r\n let dia = this._Center.distanceTo(this._DiameterOrRadiusPoint);\r\n let cirCenter = midPoint(this._Center, this._DiameterOrRadiusPoint);\r\n for (let i of indexList)\r\n {\r\n if (i === 0)\r\n {\r\n this._Center.add(v);\r\n let dist = this._TextPoint.distanceTo(this._DiameterOrRadiusPoint);\r\n let v1 = cirCenter.clone().sub(this._Center);\r\n this._DiameterOrRadiusPoint.copy(cirCenter.clone().add(v1));\r\n this._TextPoint.copy(this._DiameterOrRadiusPoint.clone().add(v1.normalize().multiplyScalar(dist)));\r\n }\r\n else if (i === 1)\r\n {\r\n let dist = this._TextPoint.distanceTo(this._DiameterOrRadiusPoint);\r\n let center = this.DiameterOrRadiusPoint.add(vec).applyMatrix4(this.OCSInv);\r\n let cir = new Circle(cirCenter, dia / 2);\r\n this._DiameterOrRadiusPoint.copy(cir.GetClosestPointTo(center, true));\r\n let v1 = this._DiameterOrRadiusPoint.clone().sub(cirCenter).normalize().multiplyScalar(-dia);\r\n this._Center.copy(this._DiameterOrRadiusPoint.clone().add(v1));\r\n this._TextPoint.copy(this._DiameterOrRadiusPoint.clone().add(v1.normalize().multiplyScalar(-dist)));\r\n }\r\n else\r\n {\r\n this._TextPoint.add(v);\r\n let v1 = this._TextPoint.clone().sub(cirCenter).normalize().multiplyScalar(dia / 2);\r\n this._DiameterOrRadiusPoint.copy(cirCenter.clone().add(v1));\r\n this._Center.copy(cirCenter.add(v1.negate()));\r\n }\r\n }\r\n this.Update();\r\n }\r\n}\r\n","import { Vector3 } from \"three\";\r\nimport { isBetweenNums } from \"../../Common/Utils\";\r\nimport { equaln } from \"../../Geometry/GeUtils\";\r\nimport { Factory } from \"../CADFactory\";\r\nimport { Line } from \"../Entity/Line\";\r\nimport { AlignedDimension } from \"./AlignedDimension\";\r\n\r\nenum DimDir\r\n{\r\n /**\r\n * 水平\r\n */\r\n H = 0,\r\n /**\r\n * 垂直\r\n */\r\n V = 1\r\n}\r\n\r\n@Factory\r\nexport class LinearDimension extends AlignedDimension\r\n{\r\n private _DimDir = DimDir.H;\r\n\r\n get TextPosition()\r\n {\r\n return super.TextPosition;\r\n }\r\n set TextPosition(p: Vector3)\r\n {\r\n p = p.clone().applyMatrix4(this.OCSInv);\r\n let bit = 0;//x 1 y 2\r\n if (isBetweenNums(this._FootP1.x, this._FootP2.x, p.x))\r\n bit |= 1;\r\n if (isBetweenNums(this._FootP1.y, this._FootP2.y, p.y))\r\n bit |= 2;\r\n\r\n if (bit === 1)\r\n this._DimDir = DimDir.H;\r\n else if (bit === 2)\r\n this._DimDir = DimDir.V;\r\n\r\n if (this._DimDir === DimDir.H)\r\n {\r\n this._ArmP1.copy(this._FootP1).setY(p.y);\r\n this._ArmP2.copy(this._FootP2).setY(p.y);\r\n }\r\n else\r\n {\r\n this._ArmP1.copy(this._FootP1).setX(p.x);\r\n this._ArmP2.copy(this._FootP2).setX(p.x);\r\n }\r\n this.Update();\r\n }\r\n ChangeFootPt()\r\n {\r\n let l = new Line(this._ArmP1, this._ArmP2);\r\n if (!equaln(this._FootP1.x, this._ArmP1.x) && !equaln(this._FootP1.y, this._ArmP1.y))\r\n {\r\n let cp1 = l.GetClosestPointTo(this._FootP1, true);\r\n this._ArmP1.copy(cp1);\r\n }\r\n if (!equaln(this._FootP2.x, this._ArmP2.x) && !equaln(this._FootP2.y, this._ArmP2.y))\r\n {\r\n let cp2 = l.GetClosestPointTo(this._FootP2, true);\r\n this._ArmP2.copy(cp2);\r\n }\r\n }\r\n}\r\n","import { BoxBufferGeometry, Mesh, MeshBasicMaterial, Object3D, Vector3 } from \"three\";\r\nimport { ColorMaterial } from \"../../Common/ColorPalette\";\r\nimport { Box3Ext } from \"../../Geometry/Box\";\r\nimport { equaln } from \"../../Geometry/GeUtils\";\r\nimport { RenderType } from \"../../GraphicsSystem/RenderType\";\r\nimport { Factory } from \"../CADFactory\";\r\nimport { Entity } from \"./Entity\";\r\n\r\n\r\nlet boxGeo: BoxBufferGeometry;\r\nexport function GetBoxGeoBufferGeometry()\r\n{\r\n if (!boxGeo)\r\n boxGeo = new BoxBufferGeometry(1, 1, 1);\r\n return boxGeo;\r\n}\r\n\r\n@Factory\r\nexport class BoxSolid extends Entity\r\n{\r\n OnlyRenderType = true;\r\n private _opacity = 0.5;\r\n constructor(private _length = 1, private _width = 1, private _height = 1)\r\n {\r\n super();\r\n }\r\n\r\n get Length() { return this._length; }\r\n get Width() { return this._width; }\r\n get Height() { return this._height; }\r\n\r\n set Length(v: number)\r\n {\r\n if (!equaln(v, this._length, 1e-5))\r\n {\r\n this.WriteAllObjectRecord();\r\n this._length = v;\r\n this.Update();\r\n }\r\n }\r\n set Width(v: number)\r\n {\r\n if (!equaln(v, this._width, 1e-5))\r\n {\r\n this.WriteAllObjectRecord();\r\n this._width = v;\r\n this.Update();\r\n }\r\n }\r\n\r\n set Height(v: number)\r\n {\r\n if (!equaln(v, this._height, 1e-5))\r\n {\r\n this.WriteAllObjectRecord();\r\n this._height = v;\r\n this.Update();\r\n }\r\n }\r\n\r\n set Opacity(o: number)\r\n {\r\n if (o !== this._opacity)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._opacity = o;\r\n this.Update();\r\n }\r\n }\r\n InitDrawObject(renderType: RenderType = RenderType.Wireframe)\r\n {\r\n let box = new Object3D();\r\n let geo = GetBoxGeoBufferGeometry();\r\n let mat = ColorMaterial.GetBasicMaterialTransparent(7, this._opacity);\r\n box.add(new Mesh(geo, mat));\r\n this.UpdateDrawObject(renderType, box);\r\n return box;\r\n }\r\n UpdateDrawObject(type: RenderType, obj: Object3D)\r\n {\r\n obj.children[0].scale.set(this._length, this._width, this._height);\r\n ((obj.children[0] as Mesh).material as MeshBasicMaterial).opacity = this._opacity;\r\n obj.children[0].position.copy(new Vector3(this._length / 2, this._width / 2, this._height / 2));\r\n obj.children[0].updateMatrix();\r\n }\r\n\r\n get BoundingBoxInOCS()\r\n {\r\n return new Box3Ext(new Vector3, new Vector3(this._length, this._width, this._height));\r\n }\r\n\r\n get BoundingBox()\r\n {\r\n return this.BoundingBoxInOCS.applyMatrix4(this.OCSNoClone);\r\n }\r\n}\r\n","import { Box3, Vector3 } from \"three\";\r\nimport { Line } from \"../../DatabaseServices/Entity/Line\";\r\nimport { equalv3 } from \"../../Geometry/GeUtils\";\r\n\r\n\r\nexport function BoxLine(box: Box3): Line[]\r\n{\r\n if (box.isEmpty())\r\n return [];\r\n let pts = [\r\n new Vector3(box.min.x, box.min.y, box.min.z),\r\n new Vector3(box.min.x, box.min.y, box.max.z),\r\n new Vector3(box.min.x, box.max.y, box.min.z),\r\n new Vector3(box.min.x, box.max.y, box.max.z),\r\n\r\n new Vector3(box.max.x, box.min.y, box.min.z),\r\n new Vector3(box.max.x, box.min.y, box.max.z),\r\n new Vector3(box.max.x, box.max.y, box.min.z),\r\n new Vector3(box.max.x, box.max.y, box.max.z),\r\n ];\r\n\r\n let lines: Line[] = [];\r\n for (let line of [\r\n [0, 1], [2, 3], [0, 2], [1, 3],\r\n [4, 5], [6, 7], [4, 6], [5, 7],\r\n\r\n [0, 4], [2, 6],\r\n\r\n [1, 5], [3, 7],\r\n ])\r\n {\r\n let p1 = pts[line[0]];\r\n let p2 = pts[line[1]];\r\n if (!equalv3(p1, p2))\r\n lines.push(new Line(p1, p2));\r\n }\r\n return lines;\r\n}\r\n","import { Box3, Matrix3, Matrix4, Vector3 } from \"three\";\r\nimport { BoxLine } from \"../../Add-on/testEntity/BoxLine\";\r\nimport { UpdateDraw } from \"../../Common/Status\";\r\nimport { ObjectSnapMode } from \"../../Editor/ObjectSnapMode\";\r\nimport { Box3Ext } from \"../../Geometry/Box\";\r\nimport { equalv3 } from \"../../Geometry/GeUtils\";\r\nimport { Factory } from \"../CADFactory\";\r\nimport { CADFiler } from \"../CADFiler\";\r\nimport { ObjectId } from \"../ObjectId\";\r\nimport { Entity } from \"./Entity\";\r\n\r\nconst TempBox = new Box3;\r\n\r\n/**\r\n * 外部引用的实体,比如glTF\r\n */\r\n@Factory\r\nexport class EntityRef extends Entity\r\n{\r\n OnlyRenderType = true;\r\n\r\n private _Size = new Vector3;//原始尺寸\r\n private _ScaleSize = new Vector3;//缩放后的尺寸\r\n private _Center = new Vector3;//盒子中心\r\n\r\n private _OverWriteMaterial = new Map();//section index -> materialId\r\n\r\n // `/Data/ASSETS/DXAA_0001`\r\n constructor(private _url?: string)\r\n {\r\n super();\r\n }\r\n\r\n get Url() { return this._url; }\r\n\r\n get CurSize() { return this.ScaleSize.x ? this.ScaleSize.clone() : this._Size.clone(); }\r\n\r\n get ScaleSize() { return this._ScaleSize; }\r\n set ScaleSize(size: Vector3)\r\n {\r\n if (!equalv3(size, this._ScaleSize))\r\n {\r\n this.WriteAllObjectRecord();\r\n this._ScaleSize.copy(size);\r\n this.Update();\r\n }\r\n }\r\n\r\n get Scale()\r\n {\r\n if (this._ScaleSize.x && this._Size.x)\r\n return this._ScaleSize.clone().divide(this._Size);\r\n return new Vector3(1, 1, 1);\r\n }\r\n\r\n get BoundingBoxInOCS()\r\n {\r\n let size = this.ScaleSize.x ? this.ScaleSize : this._Size;\r\n return new Box3Ext(\r\n size.clone().multiplyScalar(-0.5).add(this._Center),\r\n size.clone().multiplyScalar(0.5).add(this._Center));\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;//因为这个实体不需要修改内部的geom 所以我们可以复用她\r\n\r\n newObj.matrix = this._Matrix;\r\n newObj.userData = { Entity: this };\r\n // newObj.userData.IsClone = true; //因为这个实体不需要修改内部的geom 所以我们可以复用她\r\n this._CacheDrawObject.set(type, newObj);\r\n }\r\n this.NeedUpdateFlag = UpdateDraw.None;\r\n }\r\n\r\n ApplyScaleMatrix(m: Matrix4)\r\n {\r\n this.WriteAllObjectRecord();\r\n let p = this.Position;\r\n p.applyMatrix4(m);\r\n\r\n m.extractBasis(Entity._xa, Entity._ya, Entity._za);\r\n\r\n let scaleX = Entity._xa.length();\r\n let scaleY = Entity._ya.length();\r\n let scaleZ = Entity._za.length();\r\n\r\n if (!this._ScaleSize.x) this._ScaleSize.copy(this._Size);\r\n\r\n this._ScaleSize.x *= scaleX;\r\n this._ScaleSize.y *= scaleY;\r\n this._ScaleSize.z *= scaleZ;\r\n\r\n Entity._xa.normalize();\r\n Entity._ya.normalize();\r\n Entity._za.normalize();\r\n m = new Matrix4().makeBasis(Entity._xa, Entity._ya, Entity._za);\r\n this.ApplyMatrix(m);\r\n\r\n this.Position = p;\r\n this.Update();\r\n return this;\r\n }\r\n\r\n // //与网络相关,如果模型没请求下来 这个盒子数据也是错误的()\r\n // // if (this._Size.x)//我们使用缓存的数据直接求盒子? 这样是不行的 因为旋转后的盒子似乎不对!\r\n // // {\r\n // // let size2 = (this._ScaleSize.x ? this._ScaleSize : this._Size).clone().multiplyScalar(0.5);\r\n // // return new Box3(this._Center.clone().sub(size2), size2.add(this._Center));\r\n // // }\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 let box = this.BoundingBox;\r\n let [x1, y1, z1] = [box.min.x, box.min.y, box.min.z];\r\n let [x2, y2, z2] = [box.max.x, box.max.y, box.max.z];\r\n switch (snapMode)\r\n {\r\n case ObjectSnapMode.End:\r\n return this.GetGripPoints();\r\n case ObjectSnapMode.Mid:\r\n let mid = [\r\n new Vector3(x1, y1, (z1 + z2) / 2),\r\n new Vector3(x1, y2, (z1 + z2) / 2),\r\n new Vector3(x2, y2, (z1 + z2) / 2),\r\n new Vector3(x2, y1, (z1 + z2) / 2),\r\n ];\r\n let midline = [\r\n new Vector3(x1, (y1 + y2) / 2, z1),\r\n new Vector3(x2, (y1 + y2) / 2, z1),\r\n new Vector3((x1 + x2) / 2, y2, z1),\r\n new Vector3((x1 + x2) / 2, y1, z1),\r\n ];\r\n let v = new Vector3(0, 0, z2);\r\n let mids: Vector3[] = [];\r\n mids.push(...mid, ...midline, ...midline.map(p => p.clone().add(v)));\r\n return mids;\r\n case ObjectSnapMode.Nea:\r\n let lines = BoxLine(this.BoundingBox);\r\n let neas: Vector3[] = [];\r\n for (let l of lines)\r\n neas.push(...l.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform));\r\n return neas;\r\n default:\r\n break;\r\n }\r\n return [];\r\n }\r\n\r\n GetGripPoints(): Array\r\n {\r\n return [];//这些点必须按照boxInOcs矩阵显示 并且这个点太多了 太烦了 暂时关闭\r\n let box = this.BoundingBox;\r\n let [x1, y1, z1] = [box.min.x, box.min.y, box.min.z];\r\n let [x2, y2, z2] = [box.max.x, box.max.y, box.max.z];\r\n let ends = [\r\n new Vector3(x1, y1, z1),\r\n new Vector3(x1, y1, z2),\r\n new Vector3(x1, y2, z1),\r\n new Vector3(x1, y2, z2),\r\n\r\n new Vector3(x2, y1, z1),\r\n new Vector3(x2, y1, z2),\r\n new Vector3(x2, y2, z1),\r\n new Vector3(x2, y2, z2),\r\n\r\n new Vector3((x1 + x2) / 2, (y1 + y2) / 2, z1),\r\n new Vector3((x1 + x2) / 2, (y1 + y2) / 2, z2),\r\n new Vector3((x1 + x2) / 2, y1, (z1 + z2) / 2),\r\n new Vector3((x1 + x2) / 2, y2, (z1 + z2) / 2),\r\n new Vector3(x1, (y1 + y2) / 2, (z1 + z2) / 2),\r\n new Vector3(x2, (y1 + y2) / 2, (z1 + z2) / 2),\r\n ];\r\n return ends;\r\n }\r\n MoveGripPoints(indexList: Array, vec: Vector3)\r\n {\r\n if (indexList.length)\r\n {\r\n this.WriteAllObjectRecord();\r\n this.Position = this.Position.add(vec);\r\n }\r\n }\r\n //#endregion\r\n\r\n //#region -------------------------File-------------------------\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._url = file.Read();\r\n\r\n if (ver > 1)\r\n {\r\n this._Size.x = file.Read();\r\n this._Size.y = file.Read();\r\n this._Size.z = file.Read();\r\n\r\n this._Center.x = file.Read();\r\n this._Center.y = file.Read();\r\n this._Center.z = file.Read();\r\n\r\n this._ScaleSize.x = file.Read();\r\n this._ScaleSize.y = file.Read();\r\n this._ScaleSize.z = file.Read();\r\n }\r\n\r\n this._OverWriteMaterial.clear();\r\n if (ver > 2)\r\n {\r\n let size = file.Read();\r\n for (let i = 0; i < size; i++)\r\n {\r\n let index = file.Read();\r\n let id = file.ReadHardObjectId();\r\n this._OverWriteMaterial.set(index, id);\r\n }\r\n }\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(3);\r\n super.WriteFile(file);\r\n file.Write(this._url);\r\n\r\n //2\r\n file.Write(this._Size.x);\r\n file.Write(this._Size.y);\r\n file.Write(this._Size.z);\r\n\r\n file.Write(this._Center.x);\r\n file.Write(this._Center.y);\r\n file.Write(this._Center.z);\r\n\r\n file.Write(this._ScaleSize.x);\r\n file.Write(this._ScaleSize.y);\r\n file.Write(this._ScaleSize.z);\r\n\r\n //ver3\r\n file.Write(this._OverWriteMaterial.size);\r\n for (let [index, id] of this._OverWriteMaterial)\r\n {\r\n file.Write(index);\r\n file.WriteHardObjectId(id);\r\n }\r\n }\r\n //#endregion\r\n}\r\n","import { Vector3 } from \"three\";\r\nimport { ObjectSnapMode } from \"../../Editor/ObjectSnapMode\";\r\nimport { MoveMatrix } from \"../../Geometry/GeUtils\";\r\nimport { Factory } from \"../CADFactory\";\r\nimport { Entity } from \"./Entity\";\r\n\r\n\r\n\r\n@Factory\r\nexport class Point extends Entity\r\n{\r\n constructor(position: Vector3 = new Vector3())\r\n {\r\n super();\r\n this._Matrix.setPosition(position);\r\n }\r\n\r\n \r\n\r\n GetObjectSnapPoints(\r\n snapMode: ObjectSnapMode,\r\n pickPoint: Vector3,\r\n lastPoint: Vector3\r\n ): Vector3[]\r\n {\r\n if (snapMode === ObjectSnapMode.End)\r\n return [this.Position];\r\n return [];\r\n }\r\n\r\n GetGripPoints(): Array\r\n {\r\n return [this.Position];\r\n }\r\n MoveGripPoints(indexList: number[], vec: Vector3)\r\n {\r\n if (indexList.length === 1)\r\n {\r\n this.WriteAllObjectRecord();\r\n this.ApplyMatrix(MoveMatrix(vec));\r\n }\r\n }\r\n\r\n GetStretchPoints(): Array\r\n {\r\n return this.GetGripPoints();\r\n }\r\n\r\n /**\r\n * 拉伸夹点,用于Stretch命令\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.MoveGripPoints(indexList, vec);\r\n }\r\n}\r\n","\r\nimport { BufferGeometry, Color, CylinderBufferGeometry, Float32BufferAttribute, LineBasicMaterial, LineSegments, MathUtils, Matrix4, Mesh, MeshBasicMaterial, Object3D, PointLight, SphereBufferGeometry, Vector3 } from 'three';\r\n\r\nexport class PointLightHelper extends Object3D\r\n{\r\n light: PointLight;\r\n color: Color | string | number;\r\n material: LineBasicMaterial;\r\n cone: LineSegments[];\r\n mesh: Mesh[];\r\n constructor(distance: number, color?: Color | string | number)\r\n {\r\n\r\n const geometry = new BufferGeometry();\r\n const positions = [];\r\n for (let i = 0, j = 1, l = 32; i < l; i++, j++)\r\n {\r\n\r\n const p1 = (i / l) * Math.PI * 2;\r\n const p2 = (j / l) * Math.PI * 2;\r\n\r\n positions.push(\r\n Math.cos(p1) * distance, Math.sin(p1) * distance, 0,\r\n Math.cos(p2) * distance, Math.sin(p2) * distance, 0\r\n );\r\n\r\n }\r\n geometry.setAttribute('position', new Float32BufferAttribute(positions, 3));\r\n\r\n super();\r\n this.color = color;\r\n this.matrixAutoUpdate = false;\r\n this.material = new LineBasicMaterial({ fog: false });;\r\n\r\n this.cone = [];\r\n this.mesh = [];\r\n\r\n this.cone[0] = new LineSegments(geometry, this.material[0]);\r\n this.cone[1] = this.cone[0].clone();\r\n\r\n let moveMatInv = new Matrix4().getInverse(this.matrix);\r\n let roMat = new Matrix4().makeRotationAxis(new Vector3(0, 1, 0), MathUtils.degToRad(60));\r\n let mtx = this.matrix.clone().multiply(roMat).multiply(moveMatInv);\r\n\r\n this.cone[1].applyMatrix4(mtx);\r\n this.cone[2] = this.cone[1].clone();\r\n this.cone[2].applyMatrix4(mtx);\r\n\r\n let cylinderRoMat = new Matrix4().makeRotationAxis(new Vector3(1, 0, 0), MathUtils.degToRad(90));\r\n let cylinderMtx = this.matrix.clone().multiply(cylinderRoMat).multiply(moveMatInv);\r\n\r\n let cylinderGeometry = new CylinderBufferGeometry(40, 40, 80, 32); //灯泡圆柱\r\n this.mesh[0] = new Mesh(cylinderGeometry, new MeshBasicMaterial({ color: 0xFFEAAD }));\r\n this.mesh[0].applyMatrix4(cylinderMtx);\r\n this.mesh[0].position.add(new Vector3(0, 0, 50));\r\n this.mesh[0].updateMatrix();\r\n\r\n let sphereBufferGeometry = new SphereBufferGeometry(75, 32, 32); //灯泡球体\r\n this.mesh[1] = new Mesh(sphereBufferGeometry, this.material);\r\n this.mesh[1].position.sub(new Vector3(0, 0, 30));\r\n this.mesh[1].updateMatrix();\r\n\r\n this.add(this.cone[0], this.cone[1], this.cone[2], this.mesh[0], this.mesh[1]);\r\n }\r\n\r\n dispose()\r\n {\r\n this.material.dispose();\r\n\r\n this.cone[0].geometry.dispose();\r\n //@ts-ignore\r\n this.cone[0].material.dispose();\r\n\r\n this.cone[1].geometry.dispose();\r\n //@ts-ignore\r\n this.cone[1].material.dispose();\r\n\r\n this.cone[2].geometry.dispose();\r\n //@ts-ignore\r\n this.cone[2].material.dispose();\r\n\r\n this.mesh[0].geometry.dispose();\r\n //@ts-ignore\r\n this.mesh[0].material.dispose();\r\n\r\n this.mesh[1].geometry.dispose();\r\n //@ts-ignore\r\n this.mesh[1].material.dispose();\r\n }\r\n\r\n update()\r\n {\r\n //@ts-ignore\r\n this.mesh[1].material.color.set(this.color).multiplyScalar(0.9);\r\n }\r\n}\r\n","import { Group, LineBasicMaterial, Mesh, MeshBasicMaterial, Object3D, PointLight as TPointLight, SphereGeometry } from 'three';\r\nimport { HostApplicationServices } from '../../ApplicationServices/HostApplicationServices';\r\nimport { RenderType } from '../../GraphicsSystem/RenderType';\r\nimport { AutoRecord } from '../AutoRecord';\r\nimport { Factory } from '../CADFactory';\r\nimport { CADFiler } from '../CADFiler';\r\nimport { Light } from './Light';\r\nimport { PointLightHelper } from './PointLightHelper';\r\n\r\n/**\r\n * 点光源\r\n */\r\n@Factory\r\nexport class PointLight extends Light\r\n{\r\n /**\r\n * 光照长度,如果为0那么为无穷大\r\n */\r\n private _Distance: number = 20000;//20米\r\n protected _Intensity: number = 100; //强度\r\n\r\n // 光线沿着光线的距离变暗的量\r\n // 在物理上正确的模式下,衰减 = 2会导致物理上真实的光线衰减。\r\n // 缺省值是1。\r\n private _Decay: number = 0.45;\r\n\r\n //PointLightComponent\r\n @AutoRecord SourceRadius = 10;//源半径 范围0-300\r\n @AutoRecord SoftSourceRadius = 0;//软源半径 范围0-300\r\n @AutoRecord SourceLength = 0;//源长度 默认0 范围0-1000\r\n\r\n //LocalLightComponent\r\n //Radius:number 没设置这个\r\n @AutoRecord AttenuationRadius = 300; //衰减半径 10-1000\r\n\r\n constructor()\r\n {\r\n super();\r\n }\r\n\r\n get Decay(): number\r\n {\r\n return this._Decay;\r\n }\r\n set Decay(decay: number)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._Decay = decay;\r\n this.Update();\r\n }\r\n\r\n get Distance()\r\n {\r\n return this._Distance;\r\n }\r\n set Distance(dist: number)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._Distance = dist;\r\n this.Update();\r\n }\r\n\r\n get WebIntensity()\r\n {\r\n let x = this._Intensity / 2000;\r\n x = Math.pow(x, 0.7);\r\n return (x * 2000) / (4 * Math.PI);//流明转cd 文档是4pi\r\n }\r\n\r\n protected InitDrawObject(renderType: RenderType = RenderType.Wireframe): Object3D\r\n {\r\n let lightGroup = new Group();\r\n let ptLight = new TPointLight(this._LightColor, this.WebIntensity, this._Distance, this._Decay);\r\n\r\n Object.defineProperty(ptLight, \"castShadow\", { get: () => HostApplicationServices.isShowLightShadow && this.CaseShadow });\r\n\r\n ptLight.shadow.camera.matrixAutoUpdate = true;\r\n ptLight.shadow.camera.far = 10000;\r\n //绘制灯光助手\r\n let lightGeo = new SphereGeometry(50);\r\n let geoMat = new MeshBasicMaterial({ color: this._LightColor });\r\n ptLight.add(new Mesh(lightGeo, geoMat));\r\n\r\n let helper = new PointLightHelper(ptLight.distance / 4, this.Color);\r\n\r\n lightGroup.add(ptLight, helper);\r\n lightGroup.matrixAutoUpdate = false;\r\n lightGroup.matrix.copy(this._Matrix);\r\n lightGroup.updateMatrixWorld(true);\r\n this.UpdateDrawObject(renderType, lightGroup);\r\n return lightGroup;\r\n }\r\n UpdateDrawObject(type: RenderType, en: Object3D)\r\n {\r\n let ptLight = en.children[0] as TPointLight;\r\n super.UpdateDrawObject(type, ptLight);\r\n\r\n ptLight.distance = this._Distance;\r\n ptLight.decay = this._Decay;\r\n\r\n let con = ptLight.children[0] as Mesh;\r\n con.material = new LineBasicMaterial({ color: this.Color });\r\n\r\n let helper = en.children[1] as PointLightHelper;\r\n helper.visible = this._ShowHelper;\r\n if (this._ShowHelper)\r\n helper.color = this.Color;\r\n helper.update();\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();\r\n // this._Distance = file.Read();\r\n // this._Decay = file.Read();\r\n //屏蔽原先的2个属性\r\n file.Read();\r\n file.Read();\r\n\r\n if (ver > 1)\r\n {\r\n this.SourceRadius = file.Read();\r\n this.SoftSourceRadius = file.Read();\r\n this.SourceLength = file.Read();\r\n this.AttenuationRadius = 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._Distance);\r\n file.Write(this._Decay);\r\n\r\n //ver 2\r\n file.Write(this.SourceRadius);\r\n file.Write(this.SoftSourceRadius);\r\n file.Write(this.SourceLength);\r\n file.Write(this.AttenuationRadius);\r\n }\r\n}\r\n","import { BackSide, BufferGeometry, Color, Float32BufferAttribute, Line, LineBasicMaterial, Mesh, MeshBasicMaterial, RectAreaLight as TRectAreaLight } from \"three\";\r\n\r\n/**\r\n * This helper must be added as a child of the light (移植threejs最新的版本)\r\n */\r\nexport class RectAreaLightHelper extends Line\r\n{\r\n light: TRectAreaLight;\r\n color: Color;\r\n material: LineBasicMaterial;\r\n children: [Mesh];\r\n BarnDoorLength: number;\r\n BarnDoorAngle: number;\r\n\r\n private _posAtt: Float32BufferAttribute;\r\n private _indexAtt: Float32BufferAttribute;\r\n\r\n constructor(light: TRectAreaLight, color: Color)\r\n {\r\n const positions = [1, 1, 0, -1, 1, 0, -1, -1, 0, 1, -1, 0, 1, 1, 0,\r\n 0.618, 0.618, 0,\r\n // 0.618, 0.618, -100,\r\n // 0.618, 0.618, 0,\r\n\r\n -0.618, 0.618, 0,\r\n -1, 1, 0,\r\n -0.618, 0.618, 0,\r\n // -0.618, 0.618, -100,\r\n // -0.618, 0.618, 0,\r\n\r\n -0.618, -0.618, 0,\r\n -1, -1, 0,\r\n -0.618, -0.618, 0,\r\n // -0.618, -0.618, -100,\r\n // -0.618, -0.618, 0,\r\n\r\n 0.618, -0.618, 0,\r\n 1, -1, 0,\r\n 0.618, -0.618, 0,\r\n // 0.618, -0.618, -100,\r\n // 0.618, -0.618, 0,\r\n\r\n 0.618, 0.618, 0\r\n ];\r\n\r\n const geometry = new BufferGeometry();\r\n let posatt = new Float32BufferAttribute(positions, 3);\r\n geometry.setAttribute('position', posatt);\r\n geometry.computeBoundingSphere();\r\n\r\n const material = new LineBasicMaterial({ fog: false });\r\n\r\n super(geometry, material);\r\n\r\n this._posAtt = posatt;\r\n\r\n this.light = light;\r\n this.color = color; // optional hardwired color for the helper\r\n this.type = 'RectAreaLightHelper';\r\n\r\n //\r\n const positions2 = [1, 1, 0, -1, 1, 0, -1, -1, 0, 1, 1, 0, -1, -1, 0, 1, -1, 0];\r\n\r\n const geometry2 = new BufferGeometry();\r\n this._indexAtt = new Float32BufferAttribute(positions2, 3);\r\n geometry2.setAttribute('position', this._indexAtt);\r\n geometry2.computeBoundingSphere();\r\n\r\n this.add(new Mesh(geometry2, new MeshBasicMaterial({ side: BackSide, fog: false, transparent: true, opacity: 0.8 })));\r\n }\r\n\r\n updateMatrixWorld()\r\n {\r\n this.scale.set(0.5 * this.light.width, 0.5 * this.light.height, 1);\r\n\r\n if (this.color !== undefined)\r\n {\r\n this.material.color.set(this.color);\r\n //@ts-ignore\r\n this.children[0].material.color.set(this.color);\r\n }\r\n else\r\n {\r\n this.material.color.copy(this.light.color).multiplyScalar(this.light.intensity);\r\n\r\n // prevent hue shift\r\n const c = this.material.color;\r\n const max = Math.max(c.r, c.g, c.b);\r\n if (max > 1)\r\n c.multiplyScalar(1 / max);\r\n //@ts-ignore\r\n this.children[0].material.color.copy(this.material.color);\r\n }\r\n\r\n // ignore world scale on light\r\n this.matrixWorld.extractRotation(this.light.matrixWorld).scale(this.scale).copyPosition(this.light.matrixWorld);\r\n\r\n this.children[0].matrixWorld.copy(this.matrixWorld);\r\n }\r\n\r\n updataRange()\r\n {\r\n let [n, w, h] = [1, 1, 1];\r\n let t = Math.sin(this.BarnDoorAngle * Math.PI / 180) * this.BarnDoorLength;\r\n let cosAngle = Math.cos(this.BarnDoorAngle * Math.PI / 180);\r\n if (Math.floor(cosAngle * 1e5))\r\n {\r\n w = ((this.light.width + this.BarnDoorLength * 2) / this.light.width - 1) * cosAngle + 1;\r\n h = ((this.light.height + this.BarnDoorLength * 2) / this.light.height - 1) * cosAngle + 1;\r\n }\r\n\r\n let positions = [w, h, -t, -w, h, -t, -w, -h, -t, w, -h, -t, w, h, -t,\r\n n, n, 0,\r\n\r\n -n, n, 0,\r\n -w, h, -t,\r\n -n, n, 0,\r\n\r\n -n, -n, 0,\r\n -w, -h, -t,\r\n -n, -n, 0,\r\n\r\n n, -n, 0,\r\n w, -h, -t,\r\n n, -n, 0,\r\n\r\n n, n, 0\r\n ];\r\n\r\n let positions2 = [w, h, -t, -w, h, -t, -w, -h, -t, w, h, -t, -w, -h, -t, w, -h, -t];\r\n\r\n this._posAtt.copyArray(positions);\r\n this._posAtt.needsUpdate = true;\r\n\r\n this._indexAtt.copyArray(positions2);\r\n this._indexAtt.needsUpdate = true;\r\n }\r\n\r\n dispose()\r\n {\r\n this.geometry.dispose();\r\n this.material.dispose();\r\n this.children[0].geometry.dispose();\r\n //@ts-ignore\r\n this.children[0].material.dispose();\r\n }\r\n}\r\n","import { Box3, Group, Object3D, RectAreaLight as TRectAreaLight, Vector3 } from \"three\";\r\nimport { UpdateDraw } from \"../../Common/Status\";\r\nimport { Box3Ext } from \"../../Geometry/Box\";\r\nimport { equalv3, YAxis, ZeroVec } from \"../../Geometry/GeUtils\";\r\nimport { RenderType } from \"../../GraphicsSystem/RenderType\";\r\nimport { equaln } from \"../../Nest/Common/Util\";\r\nimport { AutoRecord } from \"../AutoRecord\";\r\nimport { Factory } from \"../CADFactory\";\r\nimport { CADFiler } from \"../CADFiler\";\r\nimport { ObjectId } from \"../ObjectId\";\r\nimport { Light } from \"./Light\";\r\nimport { RectAreaLightHelper } from \"./RectAreaLightHelper\";\r\n\r\nconst TARGET_DISTANCE = -100;\r\n\r\n@Factory\r\nexport class RectAreaLight extends Light\r\n{\r\n protected _Intensity = 100;\r\n\r\n private _Width: number = 1;//UE SourceWidth\r\n private _Height: number = 1;//UE SourceHeight\r\n\r\n //LocalLightComponent\r\n //Radius:number 没设置这个\r\n @AutoRecord AttenuationRadius = 300; //衰减半径 10-1000\r\n\r\n //RectLightComponent extends LocalLightComponent\r\n private _BarnDoorAngle: number = 0; //0-90 挡光板角度\r\n private _BarnDoorLength: number = 0; //0-100 挡光板长度\r\n @AutoRecord SourceTexture: ObjectId;//Texture 源纹理 默认无 可以追加一张贴图\r\n\r\n get Target()\r\n {\r\n return this.Position.add(this.Normal.multiplyScalar(TARGET_DISTANCE));\r\n }\r\n\r\n set Target(p: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._Matrix.lookAt(this.Position, p, YAxis);\r\n this.Update(UpdateDraw.Geometry);\r\n }\r\n\r\n get Height() { return this._Height; }\r\n\r\n set Height(v: number)\r\n {\r\n if (equaln(v, this._Height, 1e-2)) return;\r\n this.WriteAllObjectRecord();\r\n this._Height = v;\r\n this.Update();\r\n }\r\n\r\n get Width() { return this._Width; }\r\n\r\n set Width(v: number)\r\n {\r\n if (equaln(v, this._Width, 1e-2)) return;\r\n this.WriteAllObjectRecord();\r\n this._Width = v;\r\n this.Update();\r\n }\r\n\r\n get BarnDoorAngle() { return this._BarnDoorAngle; }\r\n\r\n set BarnDoorAngle(v: number)\r\n {\r\n if (equaln(this._BarnDoorAngle, v, 1e-2)) return;\r\n this.WriteAllObjectRecord();\r\n this._BarnDoorAngle = v;\r\n this.Update();\r\n }\r\n\r\n get BarnDoorLength() { return this._BarnDoorLength; }\r\n\r\n set BarnDoorLength(v: number)\r\n {\r\n if (equaln(this._BarnDoorLength, v, 1e-2)) return;\r\n this.WriteAllObjectRecord();\r\n this._BarnDoorLength = v;\r\n this.Update();\r\n }\r\n\r\n get WebIntensity()\r\n {\r\n let x = this._Intensity / 2000;\r\n x = Math.pow(x, 0.5);\r\n return (x * 50) / (Math.PI);//流明转cd 文档是4pi\r\n }\r\n\r\n get BoundingBoxInOCS()\r\n {\r\n return new Box3Ext(new Vector3(-this._Width * 0.5, -this._Height * 0.5, 0), new Vector3(this._Width * 0.5, this._Height * 0.5, 0.01));\r\n }\r\n\r\n get BoundingBox()\r\n {\r\n return new Box3().setFromCenterAndSize(new Vector3(), new Vector3(this._Width, this._Height)).applyMatrix4(this._Matrix);\r\n }\r\n\r\n GetGripPoints(): Array\r\n {\r\n let heightHalf = this._Height * 0.5;\r\n let widthHalf = this.Width * 0.5;\r\n let pos = this.Position;\r\n\r\n let pts: Vector3[] = [\r\n new Vector3(-widthHalf, -heightHalf, 0).applyMatrix4(this.OCSNoClone),//左下\r\n new Vector3(widthHalf, -heightHalf, 0).applyMatrix4(this.OCSNoClone),//右下\r\n new Vector3(widthHalf, heightHalf, 0).applyMatrix4(this.OCSNoClone),//右上\r\n new Vector3(-widthHalf, heightHalf, 0).applyMatrix4(this.OCSNoClone),//左上\r\n pos,\r\n pos.clone().add(this.Normal.multiplyScalar(TARGET_DISTANCE))\r\n ];\r\n return pts;\r\n }\r\n\r\n MoveGripPoints(indexList: number[], vec: Vector3)\r\n {\r\n let vecInv = vec.clone().applyMatrix4(this.OCSInv.setPosition(0, 0, 0));\r\n if (equalv3(vecInv, ZeroVec, 1e-4)) return;\r\n\r\n this.WriteAllObjectRecord();\r\n\r\n let heightHalf = this._Height * 0.5;\r\n let widthHalf = this.Width * 0.5;\r\n let pts: Vector3[] = [\r\n new Vector3(-widthHalf, -heightHalf, 0),\r\n new Vector3(widthHalf, -heightHalf, 0),\r\n new Vector3(widthHalf, heightHalf, 0),\r\n new Vector3(-widthHalf, heightHalf, 0),\r\n ];\r\n\r\n let i = indexList[0];\r\n if (i < 4)\r\n {\r\n pts[i].add(vecInv);\r\n\r\n let newBox = new Box3;\r\n if (i === 0 || i === 2)\r\n newBox.setFromPoints([pts[0], pts[2]]);\r\n else\r\n newBox.setFromPoints([pts[1], pts[3]]);\r\n\r\n //变量复用\r\n let size = newBox.getSize(new Vector3);\r\n this._Width = size.x;\r\n this._Height = size.y;\r\n\r\n //新的中心\r\n let center = newBox.getCenter(size);\r\n center.setZ(0);\r\n\r\n center.applyMatrix4(this.OCSNoClone);\r\n\r\n this._Matrix.setPosition(center);\r\n this.Update();\r\n }\r\n else if (i === 4)\r\n {\r\n this.Position = this.Position.add(vec);\r\n this.Update(UpdateDraw.Matrix);\r\n }\r\n else if (i === 5)\r\n {\r\n let target = this.Position.add(this.Normal.multiplyScalar(TARGET_DISTANCE)).add(vec);\r\n this.Target = target;\r\n }\r\n }\r\n\r\n GetStretchPoints()\r\n {\r\n let heightHalf = this._Height * 0.5;\r\n let widthHalf = this.Width * 0.5;\r\n let pos = this.Position;\r\n\r\n let pts: Vector3[] = [\r\n new Vector3(-widthHalf, -heightHalf, 0).applyMatrix4(this.OCSNoClone),//左下\r\n new Vector3(widthHalf, -heightHalf, 0).applyMatrix4(this.OCSNoClone),//右下\r\n new Vector3(widthHalf, heightHalf, 0).applyMatrix4(this.OCSNoClone),//右上\r\n new Vector3(-widthHalf, heightHalf, 0).applyMatrix4(this.OCSNoClone),//左上\r\n pos.clone().add(this.Normal.multiplyScalar(TARGET_DISTANCE))\r\n ];\r\n return pts;\r\n }\r\n\r\n MoveStretchPoints(ids: number[], vec: Vector3)\r\n {\r\n if (ids.length === 4)\r\n {\r\n this.Move(vec);\r\n return;\r\n }\r\n\r\n const MoveOneGrip = () =>\r\n {\r\n let i = ids[0];\r\n if (i < 4)\r\n this.MoveGripPoints(ids, vec);\r\n else\r\n this.MoveGripPoints([5], vec);\r\n };\r\n\r\n if (ids.length === 1)\r\n {\r\n MoveOneGrip();\r\n return;\r\n }\r\n\r\n //ids.length === 2,3\r\n ids = ids.filter(i => i !== 4);//移除中心\r\n if (ids.length === 1)\r\n {\r\n MoveOneGrip();\r\n return;\r\n }\r\n\r\n //ids.length === 2\r\n ids.sort((a1, a2) => a1 - a2);\r\n let inv = this.OCSInv.setPosition(0, 0, 0);\r\n vec = vec.clone().applyMatrix4(inv);\r\n let ocs = inv.copy(this._Matrix).setPosition(0, 0, 0);\r\n\r\n if (ids[0] === 0)\r\n {\r\n if (ids[1] === 1)//下\r\n {\r\n vec.x = 0;\r\n vec.z = 0;\r\n vec.applyMatrix4(ocs);\r\n\r\n this.MoveGripPoints([0], vec);\r\n }\r\n else if (ids[1] === 3)//左\r\n {\r\n vec.y = 0;\r\n vec.z = 0;\r\n vec.applyMatrix4(ocs);\r\n this.MoveGripPoints([0], vec);\r\n }\r\n }\r\n else if (ids[0] === 1)\r\n {\r\n if (ids[1] === 2)//右\r\n {\r\n vec.y = 0;\r\n vec.z = 0;\r\n vec.applyMatrix4(ocs);\r\n this.MoveGripPoints([1], vec);\r\n }\r\n }\r\n else if (ids[0] === 2)\r\n {\r\n if (ids[1] === 3)//上\r\n {\r\n vec.x = 0;\r\n vec.z = 0;\r\n vec.applyMatrix4(ocs);\r\n\r\n this.MoveGripPoints([2], vec);\r\n }\r\n }\r\n }\r\n\r\n protected InitDrawObject(renderType: RenderType = RenderType.Wireframe): Object3D\r\n {\r\n let lightGroup = new Group();\r\n let light = new TRectAreaLight(this.Color, this.WebIntensity, this._Width, this._Height);\r\n lightGroup.add(light);\r\n this.UpdateDrawObject(renderType, lightGroup);\r\n return lightGroup;\r\n }\r\n\r\n UpdateDrawObject(type: RenderType, obj: Object3D)\r\n {\r\n let light = obj.children[0] as TRectAreaLight;\r\n super.UpdateDrawObject(type, light);\r\n light.width = this._Width;\r\n light.height = this._Height;\r\n light.color.copy(this.Color);\r\n // light.castShadow = true;//threejs没有支持这个影子\r\n\r\n let help: RectAreaLightHelper;\r\n if (obj.children.length === 1)\r\n {\r\n help = new RectAreaLightHelper(light, light.color);\r\n obj.add(help);\r\n }\r\n else\r\n help = obj.children[1] as RectAreaLightHelper;\r\n\r\n help.BarnDoorAngle = 90 - this.BarnDoorAngle;\r\n help.BarnDoorLength = this.BarnDoorLength;\r\n help.color = this.Color;\r\n help.updataRange();\r\n\r\n help.updateMatrixWorld();\r\n\r\n help = obj.children[1] as RectAreaLightHelper;\r\n help.visible = this._ShowHelper;\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._Height = file.Read();\r\n this._Width = file.Read();\r\n new Vector3().fromArray(file.Read());\r\n\r\n //ver2\r\n if (ver > 1)\r\n {\r\n this.AttenuationRadius = file.Read();\r\n this._BarnDoorAngle = file.Read();\r\n this._BarnDoorLength = file.Read();\r\n this.SourceTexture = file.Read();\r\n }\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._Height);\r\n file.Write(this._Width);\r\n file.Write([0, 0, 0]);\r\n\r\n //ver2\r\n file.Write(this.AttenuationRadius);\r\n file.Write(this._BarnDoorAngle);\r\n file.Write(this._BarnDoorLength);\r\n file.Write(this.SourceTexture);\r\n }\r\n}\r\n","import { BufferGeometry, Float32BufferAttribute, LineBasicMaterial, LineSegments, MathUtils, Object3D } from 'three';\r\nimport { SpotLight } from './SpotLight';\r\n\r\nexport class SpotLightHelper extends Object3D\r\n{\r\n cone: LineSegments[] = [];\r\n constructor(private light: SpotLight)\r\n {\r\n super();\r\n\r\n const geometry = new BufferGeometry();\r\n const positions = [\r\n 0, 0, 0, 0, 0, 1,\r\n 0, 0, 0, 1, 0, 1,\r\n 0, 0, 0, - 1, 0, 1,\r\n 0, 0, 0, 0, 1, 1,\r\n 0, 0, 0, 0, - 1, 1\r\n ];\r\n for (let i = 0, j = 1, l = 32; i < l; i++, j++)\r\n {\r\n const p1 = (i / l) * Math.PI * 2;\r\n const p2 = (j / l) * Math.PI * 2;\r\n\r\n positions.push(\r\n Math.cos(p1), Math.sin(p1), 1,\r\n Math.cos(p2), Math.sin(p2), 1\r\n );\r\n\r\n }\r\n geometry.setAttribute('position', new Float32BufferAttribute(positions, 3));\r\n\r\n this.cone[0] = new LineSegments(geometry, new LineBasicMaterial({ fog: false }));\r\n this.cone[1] = new LineSegments(geometry, new LineBasicMaterial({ fog: false }));\r\n\r\n this.cone[0].rotation.x = Math.PI;\r\n this.cone[1].rotation.x = Math.PI;\r\n\r\n this.add(this.cone[0], this.cone[1]);\r\n }\r\n\r\n dispose()\r\n {\r\n this.cone[0].geometry.dispose();\r\n this.cone[1].geometry.dispose();\r\n this.cone[0].material.dispose();\r\n this.cone[1].material.dispose();\r\n }\r\n\r\n update()\r\n {\r\n const coneLength = this.light.Distance ? this.light.Distance : 1000;\r\n const coneWidth1 = coneLength * Math.tan(this.light.Angle);\r\n const coneWidth2 = coneLength * Math.tan(MathUtils.degToRad(this.light.InnerConeAngle));\r\n\r\n this.cone[0].scale.set(coneWidth1, coneWidth1, coneLength);\r\n this.cone[1].scale.set(coneWidth2, coneWidth2, coneLength);\r\n this.cone[0].updateMatrix();\r\n this.cone[1].updateMatrix();\r\n\r\n this.cone[0].material.color.set(this.light.Color).multiplyScalar(0.3);\r\n this.cone[1].material.color.set(this.light.Color);\r\n }\r\n}\r\n","import { ConeGeometry, Group, MathUtils, Mesh, MeshBasicMaterial, Object3D, SpotLight as TSpotLight, Vector3 } from \"three\";\r\nimport { HostApplicationServices } from \"../../ApplicationServices/HostApplicationServices\";\r\nimport { UpdateDraw } from \"../../Common/Status\";\r\nimport { ObjectSnapMode } from \"../../Editor/ObjectSnapMode\";\r\nimport { equalv3, YAxis } from \"../../Geometry/GeUtils\";\r\nimport { RenderType } from \"../../GraphicsSystem/RenderType\";\r\nimport { equaln } from \"../../Nest/Common/Util\";\r\nimport { AutoRecord } from \"../AutoRecord\";\r\nimport { Factory } from \"../CADFactory\";\r\nimport { CADFiler } from \"../CADFiler\";\r\nimport { Light } from \"./Light\";\r\nimport { SpotLightHelper } from \"./SpotLightHelper\";\r\n\r\n@Factory\r\nexport class SpotLight extends Light\r\n{\r\n /**\r\n * If non-zero, light will attenuate linearly from maximum intensity at light position down to zero at distance.\r\n * Default — 0.0.\r\n */\r\n private _Distance: number = 5000;\r\n protected _Intensity: number = 100; //强度\r\n\r\n // 光线沿着光线的距离变暗的量\r\n // 在物理上正确的模式下,衰减 = 2会导致物理上真实的光线衰减。\r\n // 缺省值是1。\r\n private _Decay: number = 0.2;\r\n // 光线散射角度,最大为Math.PI/2\r\n private _Angle: number = Math.PI / 4;//默认\r\n\r\n // 聚光锥的半影衰减百分比。在0和1之间的值。 默认值 — 0.0。\r\n private _Penumbra: number = 0;\r\n\r\n //SpotLightComponent extends PointLightComponent\r\n @AutoRecord InnerConeAngle: number = 0;//椎体内部角度 默认0 范围0-90\r\n @AutoRecord OuterConeAngle: number = 40;//椎体外部角度 默认40 范围0-90 (弃用,使用Angle)\r\n\r\n //PointLightComponent\r\n @AutoRecord SourceRadius = 0;//源半径 范围0-300\r\n @AutoRecord SoftSourceRadius = 0;//软源半径 范围0-300\r\n @AutoRecord SourceLength = 0;//源长度 默认0 范围0-1000\r\n\r\n //LocalLightComponent\r\n //Radius:number 没设置这个\r\n @AutoRecord AttenuationRadius = 300; //衰减半径 10-1000\r\n\r\n get Target()\r\n {\r\n return this.Position.add(this.Normal.multiplyScalar(-this._Distance * 0.5));\r\n }\r\n set Target(p: Vector3)\r\n {\r\n if (!equalv3(p, this.Position))\r\n {\r\n this.WriteAllObjectRecord();\r\n this._Matrix.lookAt(this.Position, p, YAxis);\r\n this.Update(UpdateDraw.Matrix);\r\n }\r\n }\r\n\r\n get Angle()\r\n {\r\n return this._Angle;\r\n }\r\n set Angle(rad: number)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._Angle = rad;\r\n this.Update();\r\n }\r\n get Decay(): number\r\n {\r\n return this._Decay;\r\n }\r\n set Decay(decay: number)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._Decay = decay;\r\n this.Update();\r\n }\r\n get Distance()\r\n {\r\n return this._Distance;\r\n }\r\n set Distance(dist: number)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._Distance = dist;\r\n this.Update();\r\n }\r\n get Penumbra()\r\n {\r\n return this._Penumbra;\r\n }\r\n set Penumbra(v: number)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._Penumbra = v;\r\n this.Update();\r\n }\r\n\r\n get EndPoint()\r\n {\r\n return this.Position.add(this.Target.sub(this.Position).normalize().multiplyScalar(this._Distance));\r\n }\r\n\r\n get WebIntensity()\r\n {\r\n let x = this._Intensity / 2000;\r\n x = Math.pow(x, 0.45);\r\n return (x * 125) / Math.PI;//流明转cd 文档是4pi\r\n }\r\n\r\n GetGripPoints(): Vector3[]\r\n {\r\n let radius = this.Distance * Math.tan(this._Angle);\r\n let pts: Vector3[] = [\r\n this.Position, this.Target,\r\n new Vector3(radius, 0, -this._Distance).applyMatrix4(this._Matrix),\r\n new Vector3(-radius, 0, -this._Distance).applyMatrix4(this._Matrix),\r\n new Vector3(0, radius, -this._Distance).applyMatrix4(this._Matrix),\r\n new Vector3(0, -radius, -this._Distance).applyMatrix4(this._Matrix),\r\n ];\r\n\r\n let a2 = MathUtils.degToRad(this.InnerConeAngle);\r\n if (this.InnerConeAngle >= 1 && !equaln(this._Angle, a2))\r\n {\r\n let radius2 = this.Distance * Math.tan(a2);\r\n pts.push(\r\n new Vector3(radius2, 0, -this._Distance).applyMatrix4(this._Matrix),\r\n new Vector3(-radius2, 0, -this._Distance).applyMatrix4(this._Matrix),\r\n new Vector3(0, radius2, -this._Distance).applyMatrix4(this._Matrix),\r\n new Vector3(0, -radius2, -this._Distance).applyMatrix4(this._Matrix),\r\n );\r\n }\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 if (indexList[0] === 0)\r\n {\r\n this.Move(vec);\r\n }\r\n else if (indexList[0] === 1)\r\n this.Target = this.Target.add(vec);\r\n else\r\n {\r\n let pts = this.GetGripPoints();\r\n let p = pts[indexList[0]].add(vec);\r\n let pos = this.Position;\r\n\r\n let dir = this.EndPoint.sub(pos).normalize();\r\n let dir2 = p.sub(pos).normalize();\r\n\r\n let angle = dir.angleTo(dir2);\r\n if (indexList[0] < 6)\r\n {\r\n this.Angle = angle;\r\n this.InnerConeAngle = Math.min(this.InnerConeAngle, MathUtils.radToDeg(angle));\r\n }\r\n else\r\n {\r\n this.InnerConeAngle = MathUtils.radToDeg(angle);\r\n this.Angle = Math.max(angle, this.Angle);\r\n }\r\n\r\n this.Update();\r\n }\r\n }\r\n\r\n GetStretchPoints(): Vector3[]\r\n {\r\n return this.GetGripPoints();\r\n }\r\n\r\n MoveStretchPoints(indexList: Array, vec: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n if (indexList.length === 1)\r\n return this.MoveGripPoints(indexList, vec);\r\n else if (indexList.length === 7)\r\n this.Move(vec);\r\n else if (indexList.length > 1)\r\n {\r\n if (indexList.indexOf(0) === -1)\r\n this.MoveGripPoints([1], vec);\r\n else\r\n this.Move(vec);\r\n }\r\n }\r\n\r\n GetObjectSnapPoints(\r\n snapMode: ObjectSnapMode,\r\n pickPoint: Vector3,\r\n lastPoint: Vector3\r\n ): Vector3[]\r\n {\r\n switch (snapMode)\r\n {\r\n case ObjectSnapMode.End:\r\n return this.GetGripPoints();\r\n default:\r\n break;\r\n }\r\n return [];\r\n }\r\n\r\n protected InitDrawObject(renderType: RenderType = RenderType.Wireframe): Object3D\r\n {\r\n // if (renderType !== RenderType.Physical) return;\r\n\r\n let group = new Group();\r\n\r\n let light = new TSpotLight(this._LightColor, this.WebIntensity, this._Distance, this._Angle, this._Penumbra, this._Decay);\r\n light.position.set(0, 0, 0);\r\n light.updateMatrix();\r\n\r\n light.target.position.set(0, 0, -1);\r\n light.target.updateMatrix();\r\n light.add(light.target);\r\n\r\n Object.defineProperty(light, \"castShadow\", { get: () => HostApplicationServices.isShowLightShadow && this.CaseShadow });\r\n light.shadow.camera.matrixAutoUpdate = true;\r\n light.shadow.camera.far = this._Distance;\r\n\r\n group.add(light);//灯光\r\n\r\n //灯光圆锥\r\n let con = new Mesh(new ConeGeometry(50, 80, 30, 1), new MeshBasicMaterial({ color: this._LightColor }));\r\n con.rotation.x = Math.PI * 0.5;\r\n con.position.z = -40;\r\n con.castShadow = false;\r\n con.updateMatrix();\r\n\r\n group.add(con);//椎体\r\n\r\n this.UpdateDrawObject(renderType, group);\r\n return group;\r\n }\r\n\r\n UpdateDrawObject(type: RenderType, en: Object3D)\r\n {\r\n // if (type !== RenderType.Physical) return;\r\n\r\n let [light, con, helper] = en.children as [TSpotLight, Mesh, SpotLightHelper];\r\n\r\n super.UpdateDrawObject(type, light);\r\n light.distance = this._Distance;\r\n light.decay = this._Decay;\r\n light.angle = this._Angle;\r\n light.penumbra = this._Penumbra;\r\n\r\n con.material.color.copy(this.Color);\r\n\r\n if (this._ShowHelper)\r\n {\r\n if (!helper)\r\n {\r\n helper = new SpotLightHelper(this);\r\n en.add(helper);\r\n }\r\n else\r\n helper.visible = true;\r\n\r\n helper.update();\r\n }\r\n else\r\n if (helper) helper.visible = this._ShowHelper;\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._Distance = file.Read();\r\n this._Decay = file.Read();\r\n this._Angle = file.Read();\r\n this._Penumbra = file.Read();\r\n\r\n let target = new Vector3();\r\n target.fromArray(file.Read());\r\n if (ver < 3)\r\n this.Target = target;\r\n\r\n if (ver > 1)\r\n {\r\n this.InnerConeAngle = file.Read();\r\n this.OuterConeAngle = file.Read();\r\n this.SourceRadius = file.Read();\r\n this.SoftSourceRadius = file.Read();\r\n this.SourceLength = file.Read();\r\n this.AttenuationRadius = file.Read();\r\n }\r\n }\r\n WriteFile(file: CADFiler)\r\n {\r\n super.WriteFile(file);\r\n file.Write(3);\r\n file.Write(this._Distance);\r\n file.Write(this._Decay);\r\n file.Write(this._Angle);\r\n file.Write(this._Penumbra);\r\n file.Write([0, 0, 0]);\r\n\r\n //ver2\r\n file.Write(this.InnerConeAngle);\r\n file.Write(this.OuterConeAngle);\r\n file.Write(this.SourceRadius);\r\n file.Write(this.SoftSourceRadius);\r\n file.Write(this.SourceLength);\r\n file.Write(this.AttenuationRadius);\r\n }\r\n}\r\n","import { arrayRemoveIf } from \"../../Common/ArrayExt\";\r\nimport { AutoRecord } from \"../AutoRecord\";\r\nimport { Factory } from \"../CADFactory\";\r\nimport { CADFiler } from \"../CADFiler\";\r\nimport { ObjectId } from \"../ObjectId\";\r\nimport { SymbolTableRecord } from \"../SymbolTableRecord\";\r\n\r\n/**\r\n * 加工组信息设置.\r\n * 为了保证加工组的信息得到正确的添加和删除.\r\n * 请保证更新Entity的加工组数据,并更新ProcessingGroup的数据.\r\n */\r\n@Factory\r\nexport class ProcessingGroupRecord extends SymbolTableRecord\r\n{\r\n @AutoRecord Objects: ObjectId[] = [];\r\n constructor()\r\n {\r\n super();\r\n }\r\n\r\n get Name()\r\n {\r\n return this.name;\r\n }\r\n set Name(name: string)\r\n {\r\n if (name !== this.name)\r\n {\r\n this.WriteAllObjectRecord();\r\n this.name = name;\r\n }\r\n }\r\n\r\n Purge()\r\n {\r\n arrayRemoveIf(this.Objects, id => !id || id.IsErase);\r\n }\r\n\r\n //#region -------------------------File-------------------------\r\n\r\n //对象从文件中读取数据,初始化自身\r\n ReadFile(file: CADFiler)\r\n {\r\n let ver = file.Read();\r\n super.ReadFile(file);\r\n let count = file.Read();\r\n this.Objects.length = 0;\r\n for (let i = 0; i < count; i++)\r\n {\r\n let id = file.ReadObjectId();\r\n if (id) this.Objects.push(id);\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.Objects.length);\r\n for (let id of this.Objects)\r\n file.WriteObjectId(id);\r\n }\r\n //#endregion\r\n}\r\n","import { Box3, BufferGeometry, Geometry, Line as TLine, LineSegments, Mesh, Object3D, ShapeGeometry, Vector2, Vector3 } from \"three\";\r\nimport { ColorMaterial } from \"../../../../Common/ColorPalette\";\r\nimport { Box3Ext } from \"../../../../Geometry/Box\";\r\nimport { BufferGeometryUtils } from \"../../../../Geometry/BufferGeometryUtils\";\r\nimport { AsVector3 } from \"../../../../Geometry/GeUtils\";\r\nimport { ScaleUV } from \"../../../../Geometry/UVUtils\";\r\nimport { RenderType } from \"../../../../GraphicsSystem/RenderType\";\r\nimport { Factory } from \"../../../CADFactory\";\r\nimport { CADFiler } from \"../../../CADFiler\";\r\nimport { Polyline } from \"../../../Entity/Polyline\";\r\nimport { ObjectId } from \"../../../ObjectId\";\r\nimport { RoomBase } from \"../RoomBase\";\r\n\r\nconst TempPolyline = new Polyline;\r\nexport function UpdateTempPolyline(_ContourData: { pts: Vector2[], buls: number[]; })\r\n{\r\n TempPolyline.LineData.length = 0;;\r\n for (let i = 0; i < _ContourData.pts.length; i++)\r\n TempPolyline.LineData.push({ pt: _ContourData.pts[i], bul: _ContourData.buls[i] });\r\n return TempPolyline;\r\n}\r\n\r\n/**\r\n * 平面实体基类\r\n * 子类:地板 天花\r\n */\r\n@Factory\r\nexport class RoomFlatBase extends RoomBase\r\n{\r\n protected _RegionId: ObjectId;\r\n protected _ContourData: { pts: Vector2[]; buls: number[]; };\r\n\r\n protected _HoleDatas: { pts: Vector2[]; buls: number[]; }[];\r\n\r\n constructor(\r\n _Contour?: Polyline,//为了防止contour被删除(所以我们直接备份这个)\r\n _Holes: Polyline[] = []\r\n )\r\n {\r\n super();\r\n if (_Contour) this.Contour = _Contour;\r\n\r\n this._HoleDatas = _Holes.map(h => h.MatrixAlignTo2(this.OCSNoClone));\r\n }\r\n\r\n get ContourData(): { pts: Vector2[]; buls: number[]; }\r\n {\r\n return this._ContourData;\r\n }\r\n\r\n set ContourData(value: { pts: Vector2[]; buls: number[]; })\r\n {\r\n }\r\n\r\n get HoleDatas(): { pts: Vector2[]; buls: number[]; }[]\r\n {\r\n return this._HoleDatas;\r\n }\r\n set HoleDatas(value: { pts: Vector2[]; buls: number[]; }[])\r\n {\r\n }\r\n\r\n get Area()\r\n {\r\n let area = this.Contour.Area;\r\n\r\n for (let hole of this._HoleDatas)\r\n area -= UpdateTempPolyline(hole).Area;\r\n\r\n return area;\r\n }\r\n\r\n get BoundingBoxInOCS(): Box3Ext\r\n {\r\n return this.Contour.BoundingBoxInOCS;\r\n }\r\n\r\n get BoundingBox(): Box3\r\n {\r\n return this.BoundingBoxInOCS.applyMatrix4(this._Matrix);\r\n }\r\n\r\n public UpdateContourHoles(_Contour: Polyline, _Holes: Polyline[])\r\n {\r\n let conData = _Contour.MatrixAlignTo2(this.OCSNoClone);\r\n let holeData = _Holes.map(h => h.MatrixAlignTo2(this.OCSNoClone));\r\n\r\n this.WriteAllObjectRecord();\r\n this._ContourData = conData;\r\n this._HoleDatas = holeData;\r\n this.Update();\r\n }\r\n\r\n\r\n public set Contour(_Contour: Polyline)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._ContourData = _Contour.MatrixAlignTo2(this.OCSNoClone);\r\n this.Update();\r\n }\r\n public get Contour()\r\n {\r\n return UpdateTempPolyline(this._ContourData);\r\n }\r\n\r\n public set Holes(_Holes: Polyline[])\r\n {\r\n this.WriteAllObjectRecord();\r\n this._HoleDatas = _Holes.map(h => h.MatrixAlignTo2(this.OCSNoClone));\r\n this.Update();\r\n }\r\n\r\n public get RegionId(): ObjectId\r\n {\r\n return this._RegionId;\r\n }\r\n public set RegionId(value: ObjectId)\r\n {\r\n if (value === this._RegionId) return;\r\n this.WriteAllObjectRecord();\r\n this._RegionId = value;\r\n }\r\n\r\n override GetGripPoints(): Vector3[]\r\n {\r\n let pts: Vector3[] = [];\r\n const Add2Pts = (p: Vector2) => { pts.push(AsVector3(p).applyMatrix4(this.OCSNoClone)); };\r\n this._ContourData.pts.forEach(Add2Pts);\r\n this._HoleDatas.forEach(h => h.pts.forEach(Add2Pts));\r\n return pts;\r\n }\r\n override MoveGripPoints(indexList: number[], vec: Vector3): void\r\n {\r\n }\r\n\r\n override GetStretchPoints(): Vector3[]\r\n {\r\n return this.GetGripPoints();\r\n // return [new Vector3(1e10, 1e10, 1e10)];//我们允许拉伸内部轮廓 但是不允许拉伸外部轮廓\r\n }\r\n\r\n override MoveStretchPoints(indexList: number[], vec: Vector3): void\r\n {\r\n\r\n }\r\n\r\n //绘制\r\n override UpdateDrawGeometry()\r\n {\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 protected _EdgeGeometry: BufferGeometry;\r\n protected get EdgeGeometry()\r\n {\r\n if (this._EdgeGeometry)\r\n return this._EdgeGeometry;\r\n\r\n let pts = this.Contour.Shape.getPoints(30).map(AsVector3);\r\n this._EdgeGeometry = BufferGeometryUtils.CreateFromPts(pts);\r\n return this._EdgeGeometry;\r\n }\r\n\r\n protected _MeshGeometry: Geometry;\r\n protected get MeshGeometry(): Geometry\r\n {\r\n if (!this._MeshGeometry)\r\n {\r\n let shape = this.Contour.Shape;\r\n for (let hole of this._HoleDatas)\r\n shape.holes.push(UpdateTempPolyline(hole).Shape);\r\n this._MeshGeometry = new ShapeGeometry(shape);\r\n ScaleUV(this.MeshGeometry, 1e-3);\r\n }\r\n return this._MeshGeometry;\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 override InitDrawObject(renderType: RenderType = RenderType.Wireframe): Object3D\r\n {\r\n if (renderType === RenderType.Wireframe)\r\n {\r\n // return new Object3D;//在二维线框中,如果显示这个线框,操作时会选到这个,所以不绘制\r\n\r\n //避免在二维线框下无法选中!\r\n return new TLine(BufferGeometryUtils.CreateFromPts([AsVector3(this.ContourData.pts[0]), AsVector3(this.ContourData.pts[0])]), 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.GetBasicMaterialTransparent2(this.ColorIndex, 0.1)),\r\n new TLine(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\r\n Object.defineProperty(mesh, \"castShadow\", {\r\n get: () => this.CaseShadow\r\n });\r\n Object.defineProperty(mesh, \"receiveShadow\", {\r\n get: () => this.CaseShadow\r\n });\r\n\r\n return mesh;\r\n }\r\n else if (renderType === RenderType.Jig)\r\n {\r\n return new Object3D;\r\n }\r\n }\r\n\r\n override UpdateDrawObject(renderType: RenderType, obj: Object3D)\r\n {\r\n if (renderType === RenderType.Wireframe)\r\n {\r\n let l = obj as TLine;\r\n BufferGeometryUtils.UpdatePts(l.geometry, [AsVector3(this.ContourData.pts[0]), AsVector3(this.ContourData.pts[0])]);\r\n\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 let mesh = obj.children[0] as Mesh;\r\n if (mesh.geometry !== this.MeshGeometry)\r\n {\r\n mesh.geometry.dispose();\r\n mesh.geometry = this.MeshGeometry;\r\n }\r\n\r\n let line = obj.children[1] as LineSegments;\r\n if (line.geometry !== this.EdgeGeometry)\r\n {\r\n line.geometry.dispose();\r\n line.geometry = this.EdgeGeometry;\r\n }\r\n }\r\n else if (renderType === RenderType.Physical)\r\n {\r\n let mesh = obj as Mesh;\r\n if (mesh.geometry !== this.MeshGeometry)\r\n {\r\n mesh.geometry.dispose();\r\n mesh.geometry = this.MeshGeometry;\r\n }\r\n }\r\n }\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\r\n this._RegionId = file.ReadObjectId();\r\n\r\n this._ContourData = ReadContour();\r\n\r\n let count = file.Read();\r\n this._HoleDatas = [];\r\n for (let i = 0; i < count; i++)\r\n this._HoleDatas.push(ReadContour());\r\n\r\n function ReadContour()\r\n {\r\n let count = file.Read() as number;\r\n let conData = { pts: [], buls: [] };\r\n for (let i = 0; i < count; i++)\r\n {\r\n conData.pts.push(new Vector2(file.Read(), file.Read()));\r\n conData.buls.push(file.Read());\r\n }\r\n return conData;\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.WriteObjectId(this._RegionId);\r\n\r\n WriteContour(this._ContourData);\r\n file.Write(this._HoleDatas.length);\r\n for (let h of this._HoleDatas)\r\n WriteContour(h);\r\n\r\n function WriteContour(conData: { pts: Vector2[], buls: number[]; })\r\n {\r\n file.Write(conData.pts.length);\r\n for (let i = 0; i < conData.pts.length; i++)\r\n {\r\n let p = conData.pts[i];\r\n file.Write(p.x);\r\n file.Write(p.y);\r\n file.Write(conData.buls[i]);\r\n }\r\n }\r\n }\r\n}\r\n","import { Factory } from \"../../../CADFactory\";\r\nimport { CADFiler } from \"../../../CADFiler\";\r\nimport { RoomFlatBase } from \"./RoomFlatBase\";\r\n\r\n\r\n/**\r\n * 地板\r\n */\r\n@Factory\r\nexport class RoomFlatFloor extends RoomFlatBase\r\n{\r\n //#region -----------------------------File-----------------------------\r\n //对象应该实现dataIn和DataOut的方法,为了对象的序列化和反序列化\r\n\r\n //对象从文件中读取数据,初始化自身\r\n protected override _ReadFile(file: CADFiler)\r\n {\r\n super._ReadFile(file);\r\n let ver = file.Read();//1\r\n }\r\n //对象将自身数据写入到文件.\r\n override WriteFile(file: CADFiler)\r\n {\r\n super.WriteFile(file);\r\n file.Write(1);//ver\r\n }\r\n}\r\n","import { Face3, Geometry, ShapeUtils, Vector3 } from \"three\";\r\nimport { arrayPushArray } from \"../../../../Common/ArrayExt\";\r\nimport { AsVector3 } from \"../../../../Geometry/GeUtils\";\r\nimport { Factory } from \"../../../CADFactory\";\r\nimport { RoomFlatBase, UpdateTempPolyline } from \"./RoomFlatBase\";\r\n\r\n\r\n/**\r\n * 天花板\r\n */\r\n@Factory\r\nexport class RoomFlatTop extends RoomFlatBase\r\n{\r\n protected override get MeshGeometry(): Geometry\r\n {\r\n if (!this._MeshGeometry)\r\n {\r\n this._MeshGeometry = new Geometry;\r\n let shape = this.Contour.Shape;\r\n for (let hole of this._HoleDatas)\r\n shape.holes.push(UpdateTempPolyline(hole).Shape);\r\n\r\n const points = shape.extractPoints(30);\r\n let shapeVertices = points.shape;\r\n const shapeHoles = points.holes;\r\n\r\n const faces = ShapeUtils.triangulateShape(shapeVertices, shapeHoles);\r\n\r\n for (let hole of shapeHoles)\r\n arrayPushArray(shapeVertices, hole);\r\n\r\n for (let p of shapeVertices)\r\n {\r\n this._MeshGeometry.vertices.push(AsVector3(p));\r\n p.multiplyScalar(1e-3);\r\n }\r\n\r\n let normal = new Vector3(0, 0, -1);\r\n // incides\r\n for (let i = 0, l = faces.length; i < l; i++)\r\n {\r\n const face = faces[i];\r\n\r\n const a = face[2];\r\n const b = face[1];\r\n const c = face[0];\r\n\r\n this._MeshGeometry.faces.push(new Face3(a, b, c, normal));\r\n this._MeshGeometry.faceVertexUvs[0].push([shapeVertices[a], shapeVertices[b], shapeVertices[c]]);\r\n }\r\n }\r\n return this._MeshGeometry;\r\n }\r\n\r\n protected override get CaseShadow()\r\n {\r\n return true;\r\n }\r\n protected override get ReceiveShadow()\r\n {\r\n return false;\r\n }\r\n}\r\n","import { BufferGeometry, Line, Object3D, Vector2, Vector3 } from \"three\";\r\nimport { AddEntityDrawObject } from \"../../../../Common/AddEntityDrawObject\";\r\nimport { FixedNotZero } from \"../../../../Common/Utils\";\r\nimport { BufferGeometryUtils } from \"../../../../Geometry/BufferGeometryUtils\";\r\nimport { AsVector3, equaln } from \"../../../../Geometry/GeUtils\";\r\nimport { RenderType } from \"../../../../GraphicsSystem/RenderType\";\r\nimport { Factory } from \"../../../CADFactory\";\r\nimport { CADFiler } from \"../../../CADFiler\";\r\nimport { ObjectId } from \"../../../ObjectId\";\r\nimport { Text, TextAligen } from \"../../../Text/Text\";\r\nimport { RoomFlatBase } from \"../Flat/RoomFlatBase\";\r\nimport { RoomBase } from \"../RoomBase\";\r\n\r\n/**\r\n * 户型区域:厨房,客厅,主卧,卫生间\r\n * 绑定了天花板和地板对象\r\n */\r\n@Factory\r\nexport class RoomRegion extends RoomBase\r\n{\r\n _Text: Text;\r\n constructor(\r\n private _Name: string = \"\",//名称\r\n\r\n private _Top: ObjectId,//天花板\r\n\r\n private _Floor: ObjectId,//地板\r\n private _Area = 0,\r\n )\r\n {\r\n super();\r\n }\r\n\r\n public get Area()\r\n {\r\n return this._Area;\r\n }\r\n\r\n public set Area(value)\r\n {\r\n if (equaln(value, this._Area, 1e-3)) return;\r\n\r\n this.WriteAllObjectRecord();\r\n this._Area = value;\r\n this.Update();\r\n }\r\n\r\n get TextString() { return this._Name; }\r\n set TextString(name: string)\r\n {\r\n if (name === this._Name) return;\r\n this._Name = name;\r\n this.Update();\r\n }\r\n\r\n public get Top(): ObjectId\r\n {\r\n return this._Top;\r\n }\r\n\r\n public set Top(value: ObjectId)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._Top = value;\r\n }\r\n\r\n public get Floor(): ObjectId\r\n {\r\n return this._Floor;\r\n }\r\n public set Floor(value: ObjectId)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._Floor = value;\r\n }\r\n\r\n private get Text()\r\n {\r\n if (!this._Text)\r\n this._Text = new Text(undefined, undefined, \"yahei\", 100);\r\n\r\n return this._Text;\r\n }\r\n\r\n GetGripPoints(): Vector3[]\r\n {\r\n let pts: Vector3[] = [];\r\n let obj = (this._Floor?.Object ?? this._Top?.Object) as RoomFlatBase;\r\n if (obj)\r\n {\r\n const Add2Pts = (p: Vector2) => { pts.push(AsVector3(p).applyMatrix4(obj.OCSNoClone)); };\r\n obj.ContourData.pts.forEach(Add2Pts);\r\n obj.HoleDatas.forEach(h => h.pts.forEach(Add2Pts));\r\n }\r\n return pts;\r\n }\r\n\r\n //TODO:绘制时只绘制文字对象\r\n InitDrawObject(renderType: RenderType = RenderType.Wireframe): Object3D\r\n {\r\n let obj = new Object3D;\r\n this.UpdateDrawObject(renderType, obj);\r\n return obj;\r\n }\r\n\r\n /**\r\n * 重载:更新绘制的实体\r\n * @param {RenderType} type\r\n * @param {Object3D} obj\r\n */\r\n UpdateDrawObject(renderType: RenderType, obj: Object3D)\r\n {\r\n if (renderType === RenderType.Wireframe || renderType === RenderType.Conceptual)\r\n {\r\n obj.remove(...obj.children.slice(0));\r\n this.Text.TextAligen = TextAligen.Mid;\r\n this._Text.TextString = `${this.TextString || \"未命名\"} ${FixedNotZero(this._Area * 1e-6, 2)}m²`;\r\n AddEntityDrawObject(obj, this._Text, renderType);\r\n }\r\n else\r\n {\r\n //避免在真实视图无法选中!\r\n let line = obj.children[0] as Line;\r\n let pts = this.GetGripPoints();\r\n if (pts.length)\r\n {\r\n let p = pts[0].applyMatrix4(this.OCSInv);\r\n if (!line)\r\n obj.add(new Line(BufferGeometryUtils.CreateFromPts([p, p])));\r\n else\r\n BufferGeometryUtils.UpdatePts(line.geometry, [p, p]);\r\n }\r\n }\r\n }\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._Name = file.Read();\r\n this._Top = file.ReadObjectId();\r\n this._Floor = file.ReadObjectId();\r\n if (ver > 1)\r\n this._Area = file.Read();\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n super.WriteFile(file);\r\n file.Write(2);//ver\r\n file.Write(this._Name);\r\n file.WriteObjectId(this._Top);\r\n file.WriteObjectId(this._Floor);\r\n file.Write(this._Area);\r\n }\r\n //#endregion\r\n}\r\n","import { Object3D, Vector3 } from \"three\";\r\nimport { equalv3 } from \"../../../../../Geometry/GeUtils\";\r\nimport { RenderType } from \"../../../../../GraphicsSystem/RenderType\";\r\nimport { Factory } from \"../../../../CADFactory\";\r\nimport { CADFiler } from \"../../../../CADFiler\";\r\nimport { CADObject } from \"../../../../CADObject\";\r\nimport { Line } from \"../../../../Entity/Line\";\r\nimport { RoomBase } from \"../../RoomBase\";\r\nimport { applyMixins } from \"../RoomWallBase\";\r\nimport { RoomHoleBase } from \"./RoomHoleBase\";\r\n\r\nconst TempP = new Vector3;\r\n\r\n\r\n/**\r\n * 直线洞 2点(暂时不要用这个 全部使用RoomHolePolyline)\r\n */\r\n@Factory\r\nexport class RoomHoleLine extends RoomHoleBase\r\n{\r\n //虽然使用了三维的点,但是我们实际使用的是二维的点 z总是等于0\r\n constructor(private _StartPoint = new Vector3,\r\n private _EndPoint = new Vector3,\r\n )\r\n {\r\n super();\r\n }\r\n\r\n get StartPoint(): Vector3\r\n {\r\n return this._StartPoint.clone().applyMatrix4(this.OCSNoClone);\r\n }\r\n\r\n get EndPoint(): Vector3\r\n {\r\n return this._EndPoint.clone().applyMatrix4(this.OCSNoClone);\r\n }\r\n\r\n set StartPoint(p: Vector3)\r\n {\r\n p = TempP.copy(p).applyMatrix4(this.OCSInv).setZ(0);\r\n if (!equalv3(p, this._StartPoint, 1e-4))\r\n {\r\n this.WriteAllObjectRecord();\r\n this._StartPoint.copy(p);\r\n this.Update();\r\n }\r\n }\r\n\r\n set EndPoint(p: Vector3)\r\n {\r\n p = TempP.copy(p).applyMatrix4(this.OCSInv).setZ(0);\r\n if (!equalv3(p, this._EndPoint, 1e-4))\r\n {\r\n this.WriteAllObjectRecord();\r\n this._EndPoint.copy(p);\r\n this.Update();\r\n }\r\n }\r\n\r\n //#region Draw\r\n InitDrawObject(renderType: RenderType = RenderType.Wireframe)\r\n {\r\n let obj = new Object3D();\r\n return obj;\r\n }\r\n\r\n UpdateDrawObject(type: RenderType, obj: Object3D)\r\n {\r\n }\r\n //#endregion\r\n\r\n //#region -------------------------File-------------------------\r\n //对象从文件中读取数据,初始化自身\r\n protected _ReadFile(file: CADFiler)\r\n {\r\n let ver = file.Read();\r\n super._ReadFile(file);\r\n\r\n this._StartPoint.set(file.Read(), file.Read(), 0);\r\n this._EndPoint.set(file.Read(), file.Read(), 0);\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(1);\r\n super.WriteFile(file);\r\n\r\n file.Write(this._StartPoint.x);\r\n file.Write(this._StartPoint.y);\r\n\r\n file.Write(this._EndPoint.x);\r\n file.Write(this._EndPoint.y);\r\n }\r\n //局部撤销\r\n ApplyPartialUndo(undoData: CADObject)\r\n {\r\n super.ApplyPartialUndo(undoData);\r\n }\r\n //#endregion\r\n\r\n}\r\n\r\n//@ts-ignore\r\nexport interface RoomHoleLine extends RoomBase, Line { }\r\n\r\napplyMixins(RoomHoleLine, Line);\r\n","import { Factory } from \"../../CADFactory\";\r\nimport { CADFiler } from \"../../CADFiler\";\r\nimport { Board } from \"../../Entity/Board\";\r\nimport { ObjectId } from \"../../ObjectId\";\r\nimport { TemplateAction } from \"./TemplateAction\";\r\n\r\nexport enum ThicknessDirection\r\n{\r\n Center = 0,\r\n Back = 1,\r\n Front = 2,\r\n}\r\n\r\nexport interface ThicknessActionData\r\n{\r\n //方向\r\n Direction: ThicknessDirection;\r\n /**\r\n * 附加的动作\r\n */\r\n Actions: TemplateAction[];\r\n}\r\n\r\n/**\r\n * 模版动作\r\n */\r\n@Factory\r\nexport class TempateThicknessAction extends TemplateAction\r\n{\r\n EntityDirectionMap: Map = new Map();\r\n protected _Update(paramDiff: number, newValue: number)\r\n {\r\n for (let [id, d] of this.EntityDirectionMap)\r\n {\r\n if (!id || id.IsErase) continue;\r\n\r\n let br = id.Object as Board;\r\n\r\n br.Thickness += paramDiff;\r\n if (d.Direction === ThicknessDirection.Back)\r\n br.Position = br.Position.sub(br.Normal.multiplyScalar(paramDiff));\r\n else if (d.Direction === ThicknessDirection.Center)\r\n br.Position = br.Position.sub(br.Normal.multiplyScalar(paramDiff * 0.5));\r\n\r\n for (let a of d.Actions)\r\n {\r\n a.parent = this.parent;\r\n a.Update(paramDiff, newValue);\r\n }\r\n }\r\n }\r\n\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 super.ReadFile(file);\r\n\r\n let count = file.Read() as number;\r\n this.EntityDirectionMap.clear();\r\n for (let i = 0; i < count; i++)\r\n {\r\n let id = file.ReadObjectId();\r\n let direction = file.Read() as ThicknessDirection;\r\n let actionsCount = file.Read() as number;\r\n let actions: TemplateAction[] = [];\r\n for (let j = 0; j < actionsCount; j++)\r\n {\r\n actions.push(file.ReadObject() as TemplateAction);\r\n }\r\n this.EntityDirectionMap.set(id, { Direction: direction, Actions: actions });\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\r\n file.Write(this.EntityDirectionMap.size);\r\n for (let [id, d] of this.EntityDirectionMap)\r\n {\r\n file.WriteObjectId(id);\r\n file.Write(d.Direction);\r\n file.Write(d.Actions.length);\r\n for (let a of d.Actions)\r\n file.WriteObject(a);\r\n }\r\n }\r\n}\r\n","import { Vector3 } from \"three\";\r\nimport { MoveMatrix } from \"../../../Geometry/GeUtils\";\r\nimport { Factory } from \"../../CADFactory\";\r\nimport { CADFiler } from \"../../CADFiler\";\r\nimport { Entity } from \"../../Entity/Entity\";\r\nimport { ObjectId } from \"../../ObjectId\";\r\nimport { TemplateAction } from \"./TemplateAction\";\r\n\r\n@Factory\r\nexport class TemplateMoveAction extends TemplateAction\r\n{\r\n\r\n constructor(public StretchDirection = new Vector3,\r\n public MoveEntitys: ObjectId[] = []\r\n )\r\n {\r\n super();\r\n }\r\n\r\n protected _CacheMoveVector: Vector3;\r\n protected _Update(paramDiff: number)\r\n {\r\n if (!this._CacheMoveVector) this._CacheMoveVector = new Vector3();\r\n\r\n this._CacheMoveVector.copy(this.StretchDirection).multiplyScalar(paramDiff);\r\n\r\n let moveMatrix = MoveMatrix(this._CacheMoveVector);\r\n for (let id of this.MoveEntitys)\r\n {\r\n if (id?.Object)\r\n {\r\n let ent = id.Object as Entity;\r\n ent.ApplyMatrix(moveMatrix);\r\n }\r\n }\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 super.ReadFile(file);\r\n this.StretchDirection.fromArray(file.Read());\r\n this.MoveEntitys.length = 0;\r\n let count = file.Read();\r\n for (let i = 0; i < count; i++)\r\n {\r\n let id = file.ReadObjectId();\r\n if (id) this.MoveEntitys.push(id);\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.StretchDirection.toArray());\r\n file.Write(this.MoveEntitys.length);\r\n for (let ent of this.MoveEntitys)\r\n file.WriteObjectId(ent);\r\n }\r\n}\r\n","import { arrayClone } from \"../../../Common/ArrayExt\";\r\nimport { GetBoardHighSeal, GetBoardSealingCurves, HandleRectBoardSealingData } from \"../../../GraphicsSystem/CalcEdgeSealing\";\r\nimport { Factory } from \"../../CADFactory\";\r\nimport { CADFiler } from \"../../CADFiler\";\r\nimport { Board } from \"../../Entity/Board\";\r\nimport { ObjectId } from \"../../ObjectId\";\r\nimport { TemplateAction } from \"./TemplateAction\";\r\n\r\n/**\r\n * 设置封边动作\r\n */\r\n@Factory\r\nexport class TemplateSetSealAction extends TemplateAction\r\n{\r\n EntitySealIndexsMap: {\r\n entity: ObjectId;\r\n indexs: number[];\r\n }[] = [];\r\n\r\n protected override _Update(diff: number, newV: number)\r\n {\r\n for (let { entity, indexs } of this.EntitySealIndexsMap)\r\n {\r\n if (entity?.Object && !entity.IsErase)\r\n {\r\n let br = entity.Object;\r\n let highSealData = GetBoardSealingCurves(br, true);\r\n let highseals = GetBoardHighSeal(br, highSealData);\r\n\r\n for (let i of indexs)\r\n {\r\n if (highseals[i])\r\n highseals[i].size = newV;\r\n }\r\n\r\n HandleRectBoardSealingData(br, highseals, highSealData);\r\n br.BoardProcessOption.highSealed = highseals;\r\n }\r\n }\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 super.ReadFile(file);\r\n this.EntitySealIndexsMap.length = 0;\r\n let count = file.Read() as number;\r\n for (let i = 0; i < count; i++)\r\n {\r\n let entity = file.ReadObjectId() as ObjectId;\r\n let indexs = file.Read();\r\n if (entity) this.EntitySealIndexsMap.push({ entity, indexs });\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.EntitySealIndexsMap.length);\r\n for (let d of this.EntitySealIndexsMap)\r\n {\r\n file.WriteObjectId(d.entity);\r\n file.Write(arrayClone(d.indexs));\r\n }\r\n }\r\n}\r\n","import { arrayClone } from \"../../../Common/ArrayExt\";\r\nimport { Factory } from \"../../CADFactory\";\r\nimport { CADFiler } from \"../../CADFiler\";\r\nimport { Entity } from \"../../Entity/Entity\";\r\nimport { ObjectId } from \"../../ObjectId\";\r\nimport { TemplateMoveAction } from \"./TemplateMoveAction\";\r\n\r\n/**\r\n * Stretch夹点动作\r\n */\r\n@Factory\r\nexport class TemplateStretchGripAction extends TemplateMoveAction\r\n{\r\n EntityStretchPointMap: {\r\n entity: ObjectId;\r\n indexs: number[];\r\n }[] = [];\r\n\r\n protected _Update(dist: number)\r\n {\r\n super._Update(dist);\r\n for (let { entity, indexs } of this.EntityStretchPointMap)\r\n {\r\n if (entity?.Object)\r\n {\r\n let ent = entity.Object as Entity;\r\n ent.MoveStretchPoints(indexs, this._CacheMoveVector);\r\n }\r\n }\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 super.ReadFile(file);\r\n this.EntityStretchPointMap.length = 0;\r\n let count = file.Read() as number;\r\n for (let i = 0; i < count; i++)\r\n {\r\n let entity = file.ReadObjectId();\r\n let indexs = file.Read();\r\n if (entity) this.EntityStretchPointMap.push({ entity, indexs });\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.EntityStretchPointMap.length);\r\n for (let d of this.EntityStretchPointMap)\r\n {\r\n file.WriteObjectId(d.entity);\r\n file.Write(arrayClone(d.indexs));\r\n }\r\n }\r\n}\r\n","import { Box3, Vector3 } from \"three\";\r\nimport { Factory } from \"../../CADFactory\";\r\nimport { CADFiler } from \"../../CADFiler\";\r\nimport { Entity } from \"../../Entity/Entity\";\r\nimport { ObjectId } from \"../../ObjectId\";\r\nimport { TemplateMoveAction } from \"./TemplateMoveAction\";\r\n\r\n/**\r\n * 拽拖比例盒子动作\r\n */\r\n@Factory\r\nexport class TemplateStretchScaleBoxAction extends TemplateMoveAction\r\n{\r\n /**\r\n * 正常不会直接修改下面的2个属性,如果真的需要修改,请调用 `this.WriteAllObjectRecord`;\r\n * 避免历史记录没有记录更新.\r\n */\r\n constructor(\r\n public StretchDirection: Vector3 = new Vector3(),\r\n public EntityStretchData: { entity: ObjectId; scaleBox: Box3; }[] = []\r\n )\r\n {\r\n super();\r\n }\r\n\r\n protected _Update(dist: number)\r\n {\r\n super._Update(dist);\r\n\r\n for (let { entity, scaleBox } of this.EntityStretchData)\r\n {\r\n if (!entity || entity.IsErase) continue;\r\n\r\n let ent = entity.Object as Entity;\r\n let pts = ent.GetStretchPoints();\r\n let ocsInv = ent.OCSInv;\r\n let entityBox = ent.BoundingBoxInOCS;\r\n let size = entityBox.getSize(new Vector3());\r\n scaleBox = scaleBox.clone();\r\n scaleBox.min.multiply(size).sub(new Vector3(1, 1, 1));\r\n scaleBox.max.multiply(size).add(new Vector3(1, 1, 1));\r\n let stretchIndexs: number[] = [];\r\n for (let i = 0, length = pts.length; i < length; i++)\r\n {\r\n let p = pts[i];\r\n p.applyMatrix4(ocsInv);\r\n if (scaleBox.containsPoint(p))\r\n stretchIndexs.push(i);\r\n }\r\n ent.MoveStretchPoints(stretchIndexs, this._CacheMoveVector);\r\n }\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 super.ReadFile(file);\r\n this.EntityStretchData.length = 0;\r\n let count = file.Read() as number;\r\n for (let i = 0; i < count; i++)\r\n {\r\n let entity = file.ReadObjectId();\r\n let min = new Vector3().fromArray(file.Read());\r\n let max = new Vector3().fromArray(file.Read());\r\n this.EntityStretchData.push({ entity, scaleBox: new Box3(min, max) });\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.EntityStretchData.length);\r\n for (let d of this.EntityStretchData)\r\n {\r\n file.WriteObjectId(d.entity);\r\n file.Write(d.scaleBox.min.toArray());\r\n file.Write(d.scaleBox.max.toArray());\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * 拽拖固定大小盒子动作(弃用)\r\n */\r\n/*\r\nclass TemplateStretchSizeBoxAction extends TemplateAction\r\n{\r\n StretchDirection: Vector3;\r\n\r\n EntityStretchPointMap: { entity: Entity, sizeBox: Box3 }[];\r\n}\r\n*/\r\n","import { Vector3 } from \"three\";\r\nimport { AutoRecord } from \"../../AutoRecord\";\r\nimport { Factory } from \"../../CADFactory\";\r\nimport { CADFiler } from \"../../CADFiler\";\r\nimport { Board } from \"../../Entity/Board\";\r\nimport { ObjectId } from \"../../ObjectId\";\r\nimport { Positioning } from \"./Positioning\";\r\n\r\n@Factory\r\nexport class PositioningBoardSpace extends Positioning\r\n{\r\n @AutoRecord ObjectId: ObjectId;\r\n /**\r\n * 定位\r\n */\r\n async Positioning()\r\n {\r\n this.SpaceCS = undefined;\r\n this.SpaceSize = undefined;\r\n\r\n if (this.ObjectId && !this.ObjectId.IsErase)\r\n {\r\n let ent = this.ObjectId.Object as Board;\r\n this.SpaceCS = ent.OCS;\r\n this.SpaceSize = new Vector3(ent.Width, ent.Height, ent.Thickness);\r\n }\r\n }\r\n\r\n //#region File\r\n ReadFile(file: CADFiler): void\r\n {\r\n let ver = file.Read();\r\n this.ObjectId = file.ReadObjectId();\r\n }\r\n\r\n WriteFile(file: CADFiler): void\r\n {\r\n file.Write(1);\r\n file.WriteObjectId(this.ObjectId);\r\n }\r\n //#endregion\r\n\r\n}\r\n","import { ExtendsBoardThickness } from \"../../../Add-on/DrawBoard/BuildBoardTool\";\r\nimport { EBoardKeyList } from \"../../../Common/BoardKeyList\";\r\nimport { ISpaceParse } from \"../../../Geometry/SpaceParse/ISpaceParse\";\r\nimport { BoardConfigOption, BoardProcessOption } from \"../../../UI/Store/BoardInterface\";\r\nimport { AutoRecord } from \"../../AutoRecord\";\r\nimport { Factory } from \"../../CADFactory\";\r\nimport { CADFiler } from \"../../CADFiler\";\r\nimport { Board } from \"../../Entity/Board\";\r\nimport { Entity } from \"../../Entity/Entity\";\r\nimport { TemplateRecord } from \"../TemplateRecord\";\r\n\r\n/**\r\n * 板件模板的基类.(层板,立板,背板)\r\n */\r\n@Factory\r\nexport class TemplateBoardRecord extends TemplateRecord\r\n{\r\n //板件初始化的时候需要设置周围板件的数据,通常只有一次\r\n UseBoardProcessOption = false;\r\n BoardProcessOption: BoardProcessOption;\r\n\r\n @AutoRecord DrawBoardCount = 1;\r\n\r\n protected _option: BoardConfigOption;\r\n // InitBaseParams()\r\n // {\r\n // super.InitBaseParams();\r\n // return this;\r\n // }\r\n get Option()\r\n {\r\n return Object.assign({}, this._option);\r\n }\r\n set Option(option: BoardConfigOption)\r\n {\r\n this.WriteAllObjectRecord();\r\n Object.assign(this._option, option);\r\n ExtendsBoardThickness(this, option.thickness);\r\n }\r\n protected GeneralBoardList(space: ISpaceParse): Board[]\r\n {\r\n return [];\r\n }\r\n\r\n Purge()\r\n {\r\n super.Purge();\r\n if (this.Objects.length === 0)\r\n this.IsClear = true;\r\n }\r\n\r\n protected async Update()\r\n {\r\n await super.Update();\r\n if (this.IsClear) return;\r\n\r\n let thickness = this.GetParam(\"BH\")?.value as number;\r\n if (thickness)\r\n this._option.thickness = thickness;\r\n let nbrs = this.GeneralBoardList(this.SpaceParse);\r\n\r\n let sbrs = this.PositioningSupportBoards;\r\n\r\n if (this.BoardProcessOption)\r\n {\r\n for (let br of nbrs)\r\n br.BoardProcessOption = this.BoardProcessOption;\r\n this.BoardProcessOption = undefined;\r\n }\r\n if (this.UseBoardProcessOption && sbrs.length > 0)\r\n {\r\n let cname = sbrs[0].BoardProcessOption[EBoardKeyList.CabinetName];\r\n let rname = sbrs[0].BoardProcessOption[EBoardKeyList.RoomName];\r\n for (let br of nbrs)\r\n {\r\n br.BoardProcessOption[EBoardKeyList.CabinetName] = cname;\r\n br.BoardProcessOption[EBoardKeyList.RoomName] = rname;\r\n }\r\n\r\n this.UseBoardProcessOption = false;\r\n }\r\n\r\n let refBr: Board;\r\n if (this.Objects.length > 0)\r\n refBr = this.Objects[0].Object as Board;\r\n\r\n for (let i = nbrs.length; i < this.Objects.length; i++)\r\n this.Objects[i].Object.Erase();\r\n\r\n for (let i = 0; i < nbrs.length; i++)\r\n {\r\n if (i < this.Objects.length)\r\n {\r\n let br = this.Objects[i].Object as Board;\r\n if (i >= this.DrawBoardCount)\r\n br.Erase(false);\r\n br.Position = nbrs[i].Position;\r\n br.Width = nbrs[i].Width;\r\n br.Height = nbrs[i].Height;\r\n br.Thickness = nbrs[i].Thickness;\r\n }\r\n else\r\n {\r\n if (refBr)\r\n {\r\n nbrs[i].ContourCurve = refBr.ContourCurve.Clone();\r\n nbrs[i].BoardProcessOption = refBr.BoardProcessOption;\r\n }\r\n this._db.ModelSpace.Append(nbrs[i]);\r\n this.Objects.push(nbrs[i].Id);\r\n }\r\n }\r\n this.DrawBoardCount = nbrs.length;\r\n\r\n //保持SpaceCS\r\n for (let id of this.Objects)\r\n {\r\n if (id && !id.IsErase)\r\n (id.Object as Entity).SpaceOCS = this._CacheSpaceCS;\r\n }\r\n }\r\n\r\n ReadFile(file: CADFiler)\r\n {\r\n let ver = file.Read();\r\n super.ReadFile(file);\r\n this.DrawBoardCount = file.Read();\r\n }\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(1);\r\n super.WriteFile(file);\r\n file.Write(this.DrawBoardCount);\r\n }\r\n}\r\n","import { BuildBehindBoards } from \"../../../Add-on/DrawBoard/BuildBoardTool\";\r\nimport { ISpaceParse } from \"../../../Geometry/SpaceParse/ISpaceParse\";\r\nimport { BehindBoardOption, IGrooveOption } from \"../../../UI/Store/BoardInterface\";\r\nimport { Factory } from \"../../CADFactory\";\r\nimport { TemplateBoardRecord } from \"./TemplateBoard\";\r\nimport { DefaultBehindBoardConfig } from \"../../../Editor/DefaultConfig\";\r\nimport { CADFiler } from \"../../CADFiler\";\r\n\r\n/**\r\n * 背板模板\r\n */\r\n@Factory\r\nexport class TemplateBehindBoard extends TemplateBoardRecord\r\n{\r\n protected _option: BehindBoardOption = { ...DefaultBehindBoardConfig };\r\n private grooveoption: IGrooveOption = {\r\n grooveAddLength: \"0\",\r\n grooveAddWidth: \"0\",\r\n grooveAddDepth: \"0\",\r\n knifeRadius: \"3\",\r\n };\r\n constructor()\r\n {\r\n super();\r\n this.name = \"背板(自动)\";\r\n }\r\n set Grooveoption(option: IGrooveOption)\r\n {\r\n this.WriteAllObjectRecord();\r\n Object.assign(this.grooveoption, option);\r\n }\r\n GeneralBoardList(space: ISpaceParse)\r\n {\r\n return BuildBehindBoards(this._option, space, this.grooveoption);\r\n }\r\n ReadFile(file: CADFiler)\r\n {\r\n let ver = file.Read();\r\n super.ReadFile(file);\r\n this._option.type = file.Read();\r\n this._option.name = file.Read();\r\n this._option.leftExt = file.Read();\r\n this._option.rightExt = file.Read();\r\n this._option.topExt = file.Read();\r\n this._option.bottomExt = file.Read();\r\n this._option.thickness = file.Read();\r\n this._option.boardPosition = file.Read();\r\n this._option.calcHeight = file.Read();\r\n this._option.moveDist = file.Read();\r\n this._option.boardRelative = file.Read();\r\n this._option.spaceSize = file.Read();\r\n this._option.count = file.Read();\r\n\r\n this.grooveoption.grooveAddLength = file.Read();\r\n this.grooveoption.grooveAddWidth = file.Read();\r\n this.grooveoption.grooveAddDepth = file.Read();\r\n this.grooveoption.knifeRadius = file.Read();\r\n\r\n if (ver === 1)\r\n {\r\n this._option.calcSpaceSize = this._option.spaceSize.toString();\r\n this._option.calcMoveDist = this._option.moveDist.toString();\r\n }\r\n\r\n if (ver >= 2)\r\n {\r\n this._option.calcSpaceSize = file.Read();\r\n this._option.calcMoveDist = file.Read();\r\n }\r\n\r\n }\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(2);\r\n super.WriteFile(file);\r\n file.Write(this._option.type);\r\n file.Write(this._option.name);\r\n file.Write(this._option.leftExt);\r\n file.Write(this._option.rightExt);\r\n file.Write(this._option.topExt);\r\n file.Write(this._option.bottomExt);\r\n file.Write(this._option.thickness);\r\n file.Write(this._option.boardPosition);\r\n file.Write(this._option.calcHeight);\r\n file.Write(this._option.moveDist);\r\n file.Write(this._option.boardRelative);\r\n file.Write(this._option.spaceSize);\r\n file.Write(this._option.count);\r\n\r\n file.Write(this.grooveoption.grooveAddLength);\r\n file.Write(this.grooveoption.grooveAddWidth);\r\n file.Write(this.grooveoption.grooveAddDepth);\r\n file.Write(this.grooveoption.knifeRadius);\r\n\r\n file.Write(this._option.calcSpaceSize);\r\n file.Write(this._option.calcMoveDist);\r\n\r\n }\r\n}\r\n","import { BufferGeometry, Object3D, Points, PointsMaterial } from 'three';\r\nimport { DisposeThreeObj } from '../Common/Dispose';\r\nimport { GetEntity, IsEntity } from '../Common/Utils';\r\nimport { BufferGeometryUtils } from '../Geometry/BufferGeometryUtils';\r\n\r\nexport class GripScene extends Object3D\r\n{\r\n\r\n _GripMaterial: PointsMaterial;\r\n\r\n _GripMap = new Map();\r\n constructor()\r\n {\r\n super();\r\n this._GripMaterial = new PointsMaterial({\r\n size: 15,\r\n color: 0x001dfa,\r\n sizeAttenuation: false\r\n });\r\n }\r\n //增加\r\n Append(obj: Object3D)\r\n {\r\n if (this._GripMap.has(obj))\r\n return;\r\n\r\n if (IsEntity(obj))\r\n {\r\n let en = GetEntity(obj);\r\n let pts = en.GetGripPoints();\r\n if (pts.length > 1000) return;//显示太多的夹点会导致性能过低\r\n let geo = BufferGeometryUtils.CreateFromPts(pts);\r\n let ptsObj = new Points(geo, this._GripMaterial);\r\n ptsObj.userData.Entity = en;\r\n this.add(ptsObj);\r\n this._GripMap.set(obj, ptsObj);\r\n }\r\n }\r\n Remove(obj: Object3D)\r\n {\r\n let pts = this._GripMap.get(obj);\r\n if (pts)\r\n {\r\n DisposeThreeObj(pts);\r\n this.remove(pts);\r\n this._GripMap.delete(obj);\r\n }\r\n }\r\n\r\n //删除所有.\r\n Clear()\r\n {\r\n for (let [, pts] of this._GripMap)\r\n {\r\n this.remove(pts);\r\n pts.geometry.dispose();\r\n }\r\n this._GripMap.clear();\r\n }\r\n Update(entity: Object3D)\r\n {\r\n this.Remove(entity);\r\n this.Append(entity);\r\n }\r\n UpdateAll()\r\n {\r\n for (let [obj, ptsObj] of this._GripMap)\r\n {\r\n if (obj.parent && obj.visible)\r\n {\r\n let en = GetEntity(obj);\r\n let geo = ptsObj.geometry as BufferGeometry;\r\n let pts = en.GetGripPoints();\r\n if (!BufferGeometryUtils.UpdatePts(geo, pts))\r\n {\r\n geo.dispose();\r\n ptsObj.geometry = BufferGeometryUtils.CreateFromPts(pts);\r\n }\r\n }\r\n else\r\n {\r\n this.Remove(obj);\r\n }\r\n }\r\n }\r\n}\r\n","import { Object3D } from \"three\";\r\nimport { GetEntity } from \"../Common/Utils\";\r\nimport { Entity } from \"../DatabaseServices/Entity/Entity\";\r\nimport { GripScene } from \"../GraphicsSystem/GripScene\";\r\n\r\nexport interface Filter\r\n{\r\n //需要过滤的图元类型,如[Line,Arc]].\r\n filterTypes?: any[];\r\n filterFunction?: (obj: Object3D, ent?: Entity) => boolean;\r\n /**\r\n * 过滤掉已经被删除的图元或者未加入到数据库的图元\r\n */\r\n filterErase?: boolean;\r\n}\r\n\r\nexport function CheckFilter(obj: Object3D, filter?: Filter)\r\n{\r\n if (!obj.visible || obj instanceof GripScene)\r\n return false;\r\n if (!filter)\r\n return true;\r\n\r\n let ent = GetEntity(obj);\r\n if (filter.filterErase && (!ent || ent.Id === undefined || ent.IsErase))\r\n return false;\r\n\r\n if (filter.filterFunction && !filter.filterFunction(obj, ent))\r\n return false;\r\n if (filter.filterTypes && filter.filterTypes.some(T => ent instanceof T) !== true)\r\n return false;\r\n return true;\r\n}\r\n","import { Box2, Matrix4, Object3D, OrthographicCamera, PerspectiveCamera, Vector2, Vector3 } from 'three';\r\nimport { BoxCheckIntersect } from '../Geometry/CheckIntersect';\r\nimport { IViewer } from '../GraphicsSystem/IView';\r\nimport { SelectSetBase } from './SelectBase';\r\n\r\n//https://knowledge.autodesk.com/search-result/caas/CloudHelp/cloudhelp/2015/ENU/AutoCAD-AutoLISP/files/GUID-0F37CC5E-1559-4011-B8CF-A3BA0973B2C3-htm.html\r\nexport enum SelectType\r\n{\r\n None = 0,\r\n C = 1,//Crossing selection.\r\n W = 2 //Window selection.\r\n}\r\n\r\n/**\r\n * 矩形选区\r\n * 如果图形无法选择,那么注意该图形是否调用计算图形的包围球.\r\n */\r\nexport class SelectBox extends SelectSetBase\r\n{\r\n\r\n private _SelectBox: Box2 = new Box2();\r\n private _BoxCheck: BoxCheckIntersect;\r\n _SelectType: SelectType;\r\n _bIsPerCamera: boolean;\r\n\r\n constructor(view: IViewer, p1: Vector2, p2: Vector2, selectType?: SelectType)\r\n {\r\n super(view);\r\n this._SelectBox.setFromPoints([p1, p2]);\r\n this._SelectBox.max.add(new Vector2(1, 1));//避免盒子为空\r\n this._BoxCheck = new BoxCheckIntersect(this._SelectBox);\r\n this._SelectType = selectType;\r\n\r\n let camera = this._Viewer.Camera;\r\n if (camera instanceof OrthographicCamera || camera instanceof PerspectiveCamera)\r\n {\r\n let size = this._SelectBox.getSize(new Vector2());\r\n\r\n camera.setViewOffset(view.Width, view.Height, this._SelectBox.min.x, this._SelectBox.min.y, size.x, size.y);\r\n camera.updateProjectionMatrix();\r\n\r\n let _projScreenMatrix = new Matrix4();\r\n _projScreenMatrix.multiplyMatrices(camera.projectionMatrix, camera.matrixWorldInverse);\r\n\r\n this._Frustum.setFromProjectionMatrix(_projScreenMatrix);\r\n\r\n camera.clearViewOffset();\r\n }\r\n }\r\n\r\n get SelectBox()\r\n {\r\n return this._SelectBox;\r\n }\r\n\r\n //重载\r\n CheckSelectTraverse(obj: Object3D): boolean\r\n {\r\n if (!obj.visible) return false;\r\n\r\n if (this._SelectType === SelectType.C)\r\n {\r\n let isSelect = false;\r\n const traverse = (o: Object3D) =>\r\n {\r\n if (!o.visible) return;\r\n\r\n isSelect = this.CheckSelectC(o);\r\n if (isSelect) return;\r\n for (let c of o.children)\r\n {\r\n traverse(c);\r\n if (isSelect) return;\r\n }\r\n };\r\n\r\n traverse(obj);\r\n\r\n return isSelect;\r\n }\r\n else\r\n {\r\n //对于窗选,需要所有的实体都被包含才能被选中,所以这里区分了三个状态,0,-1,1,必须要有1,并且没有-1才行\r\n let isSelect = 0;//0表示没有被选中 1表示有被选中 -1表示选不重 某些东西没有几何体,返回0\r\n const traverse = (o: Object3D) =>\r\n {\r\n if (!o.visible) return;\r\n\r\n let isSelectObject = this.CheckSelectW(o);\r\n if (isSelectObject === 1)\r\n isSelect = isSelectObject;\r\n else if (isSelectObject === -1)\r\n {\r\n isSelect = isSelectObject;\r\n return;\r\n }\r\n\r\n for (let c of o.children)\r\n {\r\n traverse(c);\r\n if (isSelect === -1) return;\r\n }\r\n };\r\n\r\n traverse(obj);\r\n\r\n return isSelect === 1;\r\n }\r\n }\r\n\r\n private CheckSelectC(obj: Object3D): boolean\r\n {\r\n //@ts-ignore\r\n if (!obj.geometry || !this.FrustomIntersectObject(obj))\r\n return false;\r\n\r\n return this.IntersectObject(obj);\r\n }\r\n\r\n private CheckSelectW(obj: Object3D): 0 | -1 | 1\r\n {\r\n //@ts-ignore\r\n if (!obj.geometry || !this.FrustomIntersectObject(obj))\r\n return 0;\r\n\r\n return this.ContainerObject(obj);\r\n }\r\n\r\n //重载\r\n IntersectLine(p1Screen: Vector3, p2Screen: Vector3): boolean\r\n {\r\n return this._BoxCheck.IsIntersectLine(p1Screen, p2Screen);\r\n }\r\n /**\r\n * 包含该对象. 采用所有点都在选区内的做法\r\n */\r\n ContainerObject(obj: Object3D): 1 | -1\r\n {\r\n let { pts, } = this.GetObjectVertices(obj);\r\n if (pts.length === 0)\r\n return -1;\r\n for (let p of pts)\r\n {\r\n if (!this.ContainsPoint(p))\r\n return -1;\r\n }\r\n return 1;\r\n }\r\n //选择框包含该顶点\r\n ContainsPoint(ptWcs: Vector3): boolean\r\n {\r\n return this._Frustum.containsPoint(ptWcs);\r\n }\r\n}\r\n","import { Intersection, Object3D, OrthographicCamera, Raycaster, Vector2, Vector3 } from 'three';\r\nimport { HostApplicationServices } from '../ApplicationServices/HostApplicationServices';\r\nimport { equaln } from '../Geometry/GeUtils';\r\nimport { IViewer } from '../GraphicsSystem/IView';\r\nimport { SelectBox, SelectType } from './SelectBox';\r\nimport { CheckFilter, Filter } from './SelectFilter';\r\n\r\n/**\r\n * 构造射线投射器.\r\n * @param {Vector3} ptVcs 屏幕坐标系的点\r\n */\r\nexport function GenerateRaycaster(ptVcs: Vector3, view: IViewer): Raycaster\r\n{\r\n let raycaster = new Raycaster();\r\n raycaster.setFromCamera({\r\n x: (ptVcs.x / view.Width) * 2 - 1, //-1 到 1 所以 (x-(w/2))/(w/2) =>\r\n y: - (ptVcs.y / view.Height) * 2 + 1 //y轴相反\r\n }, view.Camera);\r\n if (view.Camera instanceof OrthographicCamera)\r\n raycaster.ray.origin.sub(raycaster.ray.direction.clone().multiplyScalar(1e6));\r\n return raycaster;\r\n}\r\n\r\nlet boxSize = new Vector2;\r\nlet pCenter = new Vector2;\r\n\r\n/**\r\n * 根据鼠标位置确定鼠标范围内选中的实体.\r\n * @param {Vector3} ptVcs 鼠标的屏幕点\r\n * @param {IViewer} view 指定视图\r\n * @param {Object3D} [selectObject] 选择的对象. 如果为空则为app.view.scene\r\n * @param {Boolean} selectBoxGetLastestEn 点选曲线和点时是否选取最后创建的 默认true\r\n * @returns {Object3D[]} 返回选择到的对象,注意该返回的对象并不会得到它的子对象.\r\n */\r\nexport function PointPick(ptVcs: Vector3,\r\n view: IViewer,\r\n filter?: Filter,\r\n selectObjects: Object3D[] = view.Scene.children,\r\n selectSize = 10\r\n): Object3D[]\r\n{\r\n let raycaster = GenerateRaycaster(ptVcs, view);\r\n\r\n let intersection = Raycast(raycaster, selectObjects, filter);\r\n if (intersection && intersection.object)\r\n return [intersection.object];\r\n\r\n pCenter.set(ptVcs.x, ptVcs.y);\r\n boxSize.set(selectSize, selectSize);\r\n let minPt = pCenter.clone().sub(boxSize);\r\n let maxPt = pCenter.clone().add(boxSize);\r\n\r\n let selectBox = new SelectBox(view, minPt, maxPt, SelectType.C);\r\n selectBox.Select(selectObjects, filter);\r\n\r\n return [...selectBox._SelectList];\r\n}\r\n\r\nexport function PointPickOneObject(\r\n ptVcs: Vector3,\r\n view: IViewer,\r\n filter?: Filter,\r\n selectObjects: Object3D[] = view.Scene.children,\r\n useSelectBox = true\r\n): Object3D | undefined\r\n{\r\n let raycaster = GenerateRaycaster(ptVcs, view);\r\n\r\n let intersection = Raycast(raycaster, selectObjects, filter);\r\n if (intersection && intersection.object)\r\n return intersection.object;\r\n\r\n if (!useSelectBox) return;\r\n\r\n let pCenter = new Vector2(ptVcs.x, ptVcs.y);\r\n let selectSize = new Vector2(HostApplicationServices.cursorSize.SquareSize, HostApplicationServices.cursorSize.SquareSize);\r\n let minPt = pCenter.clone().sub(selectSize);\r\n let maxPt = pCenter.clone().add(selectSize);\r\n\r\n let selectBox = new SelectBox(view, minPt, maxPt, SelectType.C);\r\n selectBox.Select(selectObjects, filter);\r\n\r\n if (selectBox.SelectEntityList.length > 0)\r\n {\r\n let maxId = -Infinity;\r\n let object: Object3D;\r\n for (let o of selectBox._SelectList)\r\n {\r\n if (o.id > maxId)\r\n {\r\n maxId = o.id;\r\n object = o;\r\n }\r\n }\r\n return object;\r\n }\r\n}\r\n\r\nexport function Raycast(ray: Raycaster, objectCol: Object3D[], filter?: Filter): Intersection | undefined\r\n{\r\n let pick: Intersection;\r\n\r\n for (let obj of objectCol)\r\n {\r\n if (!CheckFilter(obj, filter))\r\n continue;\r\n\r\n let intersects: Intersection[] = [];\r\n obj.traverse(o =>\r\n {\r\n //@ts-ignore\r\n if (intersects.length === 0 && o.visible && !o.isLine && !o.isPoints)\r\n o.raycast(ray, intersects);\r\n });\r\n if (intersects.length > 0)\r\n {\r\n for (let i of intersects)\r\n {\r\n if (!pick\r\n || pick.distance > i.distance\r\n || (equaln(pick.distance, i.distance) && pick.object.id < i.object.id))\r\n {\r\n pick = i;\r\n pick.object = obj;\r\n }\r\n }\r\n }\r\n }\r\n return pick;\r\n}\r\n","import { Box2, Box3, Intersection, Matrix4, Object3D, Raycaster, Vector2, Vector3 } from \"three\";\r\nimport { GetEntity } from \"../../Common/Utils\";\r\nimport { CylinderHole, GangDrillType } from \"../../DatabaseServices/3DSolid/CylinderHole\";\r\nimport { Contour } from \"../../DatabaseServices/Contour\";\r\nimport { Board } from \"../../DatabaseServices/Entity/Board\";\r\nimport { Polyline } from \"../../DatabaseServices/Entity/Polyline\";\r\nimport { ObjectId } from \"../../DatabaseServices/ObjectId\";\r\nimport { Shape } from \"../../DatabaseServices/Shape\";\r\nimport { Raycast } from \"../../Editor/PointPick\";\r\nimport { BoardFaceType, BoardGetFace } from \"../../Geometry/DrillParse/BoardGetFace\";\r\nimport { Face } from \"../../Geometry/DrillParse/Face\";\r\nimport { angleTo, AsVector2, equaln, equalv3, isParallelTo, MoveMatrix } from \"../../Geometry/GeUtils\";\r\nimport { RenderType } from \"../../GraphicsSystem/RenderType\";\r\nimport { INailRule, IShinkOption, LayerNailOption } from \"../../UI/Store/BoardInterface\";\r\n\r\nclass ActivityLayerBoardTool\r\n{\r\n NailRules: INailRule[];\r\n private GetBoardIntersection(face: Face, objects: Object3D[], br: Board)\r\n {\r\n for (let s of [0.5, 0.1, 0.9])\r\n {\r\n let center = new Vector3(face.Length * s, face.Width * s).applyMatrix4(face.OCS).add(face.Normal.negate());\r\n\r\n let intersection = this.RayPoint(center, face.Normal, objects);\r\n if (intersection && intersection.object)\r\n {\r\n let en = GetEntity(intersection.object) as Board;\r\n if (en.BoardProcessOption.roomName === br.BoardProcessOption.roomName && en.BoardProcessOption.cabinetName === br.BoardProcessOption.cabinetName)\r\n return intersection;\r\n }\r\n }\r\n }\r\n private IntersectFace(otherBoard: Board, face: Face)\r\n {\r\n let size: Vector3 | Vector2 = new Vector3();\r\n let min = new Vector3();\r\n let diffMat = face.OCSInv.multiply(otherBoard.OCS);\r\n\r\n if (otherBoard.IsSpecialShape)\r\n {\r\n let rect = new Polyline().RectangleFrom2Pt(new Vector3(), new Vector3(face.Length, face.Width));\r\n let con = otherBoard.ContourCurve.Clone().ApplyMatrix(diffMat);\r\n con.Z0();\r\n let shape1 = new Shape(Contour.CreateContour([rect]));\r\n let shape2 = new Shape(Contour.CreateContour([con]));\r\n\r\n let shapes = shape1.IntersectionBoolOperation(shape2);\r\n if (shapes.length > 0)\r\n {\r\n let box = shapes[0].BoundingBox;\r\n min.copy(box.min);\r\n size = box.getSize(new Vector3);\r\n }\r\n }\r\n else\r\n {\r\n let b1 = new Box3(new Vector3(), new Vector3(otherBoard.Width, otherBoard.Height));\r\n b1.applyMatrix4(diffMat);\r\n\r\n let box = new Box2().setFromPoints([AsVector2(b1.min), AsVector2(b1.max)]);\r\n let box2 = new Box2(new Vector2(), new Vector2(face.Length, face.Width));\r\n\r\n box2.intersect(box);\r\n\r\n size = box2.getSize(new Vector2);\r\n min.set(box2.min.x, box2.min.y, 0);\r\n }\r\n\r\n face.Length = size.x;\r\n face.Width = size.y;\r\n face.OCS.multiply(MoveMatrix(min));\r\n }\r\n private GetShrinkDist(face: Face, br: Board, option: IShinkOption)\r\n {\r\n let fNoarmal = face.Normal;\r\n let xVec = new Vector3().setFromMatrixColumn(br.OCS, 0);\r\n let yVec = new Vector3().setFromMatrixColumn(br.OCS, 1);\r\n\r\n let shrink = 0;\r\n if (isParallelTo(fNoarmal, xVec))\r\n {\r\n if (equalv3(fNoarmal, xVec, 1e-5))\r\n shrink = option.back;\r\n else\r\n shrink = option.front;\r\n }\r\n else if (isParallelTo(fNoarmal, yVec))\r\n {\r\n if (equalv3(fNoarmal, yVec, 1e-5))\r\n shrink = option.left;\r\n else\r\n shrink = option.right;\r\n }\r\n return shrink;\r\n }\r\n private GetShrinkBoardIndexesMap(face: Face, br: Board, shrink: number, indexMap: Map)\r\n {\r\n if (shrink)\r\n {\r\n const FUZZ = 0.1;\r\n let scaleBox = new Box3().setFromPoints([new Vector3(-FUZZ, -FUZZ, -FUZZ), new Vector3(face.Length + FUZZ, face.Width + FUZZ, FUZZ)]).applyMatrix4(face.OCS);\r\n let pts = br.GetStretchPoints();\r\n let stretchIndexs: number[] = [];\r\n for (let i = 0, length = pts.length; i < length; i++)\r\n {\r\n let p = pts[i];\r\n if (scaleBox.containsPoint(p))\r\n stretchIndexs.push(i);\r\n }\r\n indexMap.set(face.Normal.negate().multiplyScalar(shrink), stretchIndexs);\r\n }\r\n }\r\n private GetRuleCount(width: number, rules: INailRule[])\r\n {\r\n if (this.NailRules)\r\n rules = this.NailRules;\r\n for (let rule of rules)\r\n {\r\n if (width > rule.startDist && width <= rule.endDist + 1e-6)\r\n {\r\n return rule.count;\r\n }\r\n }\r\n return 0;\r\n }\r\n private BuildNails(initNail: CylinderHole, nailOpt: LayerNailOption, face: Face, fYVec: Vector3)\r\n {\r\n let fXVec = new Vector3().setFromMatrixColumn(face.OCS, 0);\r\n let addCount = nailOpt.addCount;\r\n let count = nailOpt.count;\r\n let dist = nailOpt.dist;\r\n let frontDist = nailOpt.front;\r\n let backDist = nailOpt.behind;\r\n let singleDist: number;\r\n //绘制数量为1时,层板钉在中间位置\r\n if (count === 1)\r\n singleDist = face.Length / 2 - frontDist;\r\n else\r\n singleDist = (face.Length - frontDist - backDist) / (count - 1);\r\n\r\n let buildNails: CylinderHole[] = [];\r\n\r\n //构建层板钉\r\n for (let i = 0; i < count; i++)\r\n {\r\n if (count === 1)\r\n {\r\n initNail.ApplyMatrix(MoveMatrix(fXVec.multiplyScalar(singleDist)));\r\n buildNails.push(initNail);\r\n }\r\n else\r\n {\r\n let nail = initNail.Clone();\r\n nail.ApplyMatrix(MoveMatrix(fXVec.clone().multiplyScalar(i * singleDist)));\r\n buildNails.push(nail);\r\n }\r\n }\r\n\r\n //增加的层板钉\r\n let addNails: CylinderHole[] = [];\r\n for (let i = 1; i <= addCount; i++)\r\n {\r\n for (let nail of buildNails)\r\n {\r\n addNails.push(nail.Clone().ApplyMatrix(MoveMatrix(fYVec.clone().multiplyScalar(dist * i))));\r\n addNails.push(nail.Clone().ApplyMatrix(MoveMatrix(fYVec.clone().negate().multiplyScalar(dist * i))));\r\n }\r\n }\r\n buildNails.push(...addNails);\r\n return buildNails;\r\n }\r\n private RayPoint(p: Vector3, n: Vector3, brs: Object3D[]): Intersection\r\n {\r\n let ray = new Raycaster(p, n);\r\n let intersection = Raycast(ray, brs);\r\n return intersection;\r\n }\r\n Start(brs: Board[], nailOption: LayerNailOption, rules: INailRule[] = [], option?: IShinkOption)\r\n {\r\n if (brs.length === 0) return;\r\n\r\n let objects: Object3D[] = [];\r\n //如果层板和左右板得距离大于这个值,则这边不绘制层板钉\r\n let refDist = nailOption.length - nailOption.depth;\r\n\r\n for (let br of brs[0].Db.ModelSpace.Entitys)\r\n {\r\n if (!br.IsErase && br.Visible && br instanceof Board)\r\n {\r\n objects.push(br.GetDrawObjectFromRenderType(RenderType.Physical));\r\n }\r\n }\r\n for (let br of brs)\r\n {\r\n let faces = BoardGetFace.GetAllSidesFaces(br, true);\r\n let vecIndexMap: Map = new Map();\r\n let xVec = new Vector3().setFromMatrixColumn(br.OCS, 0);\r\n if (option?.name)\r\n br.Name = option.name;\r\n\r\n let nailBoardMap = new WeakMap();\r\n let allNails: CylinderHole[] = [];\r\n for (let face of faces)\r\n {\r\n if (face.type === BoardFaceType.Side)\r\n {\r\n let shrink = 0;\r\n if (option)\r\n {\r\n shrink = this.GetShrinkDist(face, br, option);\r\n this.GetShrinkBoardIndexesMap(face, br, shrink, vecIndexMap);\r\n }\r\n if (!nailOption.isDraw) continue;\r\n if (!nailOption.isInBack && isParallelTo(face.Normal, xVec)) continue;\r\n\r\n let intersection = this.GetBoardIntersection(face, objects, br);\r\n if (intersection)\r\n {\r\n //防止板件悬空 #I1DPHR\r\n if (intersection.distance - 1 + shrink >= refDist)\r\n continue;\r\n\r\n let otherBoard = GetEntity(intersection.object) as Board;\r\n\r\n this.IntersectFace(otherBoard, face);\r\n\r\n let nail = CylinderHole.CreateCylHole(nailOption.rad, nailOption.length, GangDrillType.Nail);\r\n nail.ColorIndex = 4;\r\n let fNor = face.Normal;\r\n let ang = -angleTo(fNor, otherBoard.Normal.negate());\r\n if (equaln(Math.abs(ang), Math.PI))\r\n ang = 0;\r\n\r\n let xDist = nailOption.front;\r\n let yDist = - nailOption.rad - shrink * Math.sin(ang);\r\n let zDist = 0;\r\n let zRoMat = new Matrix4().makeRotationX(ang);\r\n\r\n let p = new Vector3().setFromMatrixPosition(face.OCS.clone().multiply(zRoMat)).applyMatrix4(otherBoard.OCSInv);\r\n if (p.z < 1e-6)\r\n {\r\n zDist = -p.z;\r\n }\r\n else if (p.z > otherBoard.Thickness - 1e-6)\r\n {\r\n zDist = p.z - otherBoard.Thickness;\r\n }\r\n else\r\n {\r\n console.error(\"不该存在的情况\");\r\n }\r\n\r\n zDist += (- nail.Height + nailOption.depth);\r\n\r\n nail.Position = nail.Position.add(new Vector3(xDist, yDist, zDist));\r\n nail.ApplyMatrix(zRoMat).ApplyMatrix(face.OCS);\r\n\r\n if (option || this.NailRules)\r\n nailOption.count = this.GetRuleCount(face.Length, rules);\r\n\r\n let yVec = new Vector3().setFromMatrixColumn(otherBoard.OCS, 1);\r\n\r\n let nails = this.BuildNails(nail, nailOption, face, yVec);\r\n for (let nail of nails)\r\n nailBoardMap.set(nail, otherBoard);\r\n allNails.push(...nails);\r\n }\r\n }\r\n }\r\n this.AppendBoard(br, nailBoardMap, allNails);\r\n for (let [vec, indexes] of vecIndexMap)\r\n {\r\n br.MoveStretchPoints(indexes, vec);\r\n vec = null;\r\n }\r\n }\r\n this.NailRules = null;\r\n }\r\n private AppendBoard(br: Board, brNailMap: WeakMap, nails: CylinderHole[])\r\n {\r\n let oldNailIds = br.LayerNails.filter(n => n?.Object);\r\n this.HandleNailList(nails, oldNailIds, brNailMap);\r\n for (let i = nails.length; i < oldNailIds.length; i++)\r\n oldNailIds[i]?.Object?.Erase();\r\n for (let i = 0; i < nails.length; i++)\r\n {\r\n let nId: ObjectId;\r\n let otherBoard = brNailMap.get(nails[i]);\r\n if (i < oldNailIds.length && oldNailIds[i])\r\n {\r\n let nail = oldNailIds[i].Object as CylinderHole;\r\n if (nail.IsErase)\r\n nail.Erase(false);\r\n if (!equalv3(nail.Normal, nails[i].Normal))\r\n nail.OCS = nails[i].OCS;\r\n nail.Radius = nails[i].Radius;\r\n nail.Height = nails[i].Height;\r\n nail.Position = nails[i].Position;\r\n nId = nail.Id;\r\n\r\n if (nail.FId !== otherBoard.Id)\r\n {\r\n nail.FId = otherBoard.Id;\r\n otherBoard.AppendNails([nId]);\r\n }\r\n }\r\n else\r\n {\r\n br.Db.ModelSpace.Append(nails[i]);\r\n nId = nails[i].Id;\r\n br.AppendNails([nId]);\r\n nails[i].MId = br.Id;\r\n nails[i].FId = otherBoard.Id;\r\n otherBoard.AppendNails([nId]);\r\n }\r\n }\r\n }\r\n private HandleNailList(newNails: CylinderHole[], oldNails: ObjectId[], naiMap: WeakMap)\r\n {\r\n if (oldNails.length < newNails.length)\r\n {\r\n let temp: CylinderHole[] = [];\r\n for (let i = 0; i < oldNails.length; i++)\r\n {\r\n let nail = oldNails[i].Object as CylinderHole;\r\n if (newNails.length === 0) break;\r\n let j = 0;\r\n for (; j < newNails.length; j++)\r\n {\r\n let newNail = newNails[j] as CylinderHole;\r\n let otherBoard = naiMap.get(newNail);\r\n if (otherBoard.Id === nail.FId)\r\n break;\r\n }\r\n if (j < newNails.length)\r\n temp.push(...newNails.splice(j, 1));\r\n }\r\n newNails.unshift(...temp);\r\n }\r\n else\r\n {\r\n let temp: ObjectId[] = [];\r\n\r\n for (let i = 0; i < newNails.length; i++)\r\n {\r\n let nail = newNails[i];\r\n let otherBoard = naiMap.get(nail);\r\n let j = 0;\r\n for (; j < oldNails.length; j++)\r\n {\r\n let oldNail = oldNails[j].Object as CylinderHole;\r\n if (oldNail.FId === otherBoard.Id)\r\n break;\r\n }\r\n if (j < oldNails.length)\r\n temp.push(...oldNails.splice(j, 1));\r\n else\r\n temp.push(undefined); //不存在可以复用的层板钉,占个位 重新添加\r\n }\r\n oldNails.unshift(...temp);\r\n }\r\n }\r\n}\r\n\r\nexport const activityLayerBoardTool = new ActivityLayerBoardTool();\r\n","import { activityLayerBoardTool } from \"../../../Add-on/DrawBoard/ActivityLayerBoardTool\";\r\nimport { BuildLayerBoards } from \"../../../Add-on/DrawBoard/BuildBoardTool\";\r\nimport { DefaultLayerBoardConfig, DefaultNailOption } from \"../../../Editor/DefaultConfig\";\r\nimport { ISpaceParse } from \"../../../Geometry/SpaceParse/ISpaceParse\";\r\nimport { IGrooveOption, LayerBoardOption, LayerNailOption } from \"../../../UI/Store/BoardInterface\";\r\nimport { Factory } from \"../../CADFactory\";\r\nimport { CADFiler } from \"../../CADFiler\";\r\nimport { Board } from \"../../Entity/Board\";\r\nimport { TemplateBoardRecord } from \"./TemplateBoard\";\r\n\r\n/**\r\n * 层板模板\r\n */\r\n@Factory\r\nexport class TemplateLayerBoard extends TemplateBoardRecord\r\n{\r\n constructor()\r\n {\r\n super();\r\n this.name = \"层板(自动)\";\r\n }\r\n protected _option: LayerBoardOption = { ...DefaultLayerBoardConfig };\r\n private _nailOption: LayerNailOption = { ...DefaultNailOption };\r\n private grooveOption: IGrooveOption = {\r\n grooveAddLength: \"0\",\r\n grooveAddWidth: \"0\",\r\n grooveAddDepth: \"0\",\r\n knifeRadius: \"3\",\r\n };\r\n set GrooveOption(option: IGrooveOption)\r\n {\r\n this.WriteAllObjectRecord();\r\n Object.assign(this.grooveOption, option);\r\n }\r\n get NailOption()\r\n {\r\n return { ...this._nailOption };\r\n }\r\n set NailOption(nailOpt: LayerNailOption)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._nailOption = { ...nailOpt };\r\n }\r\n\r\n GeneralBoardList(space: ISpaceParse)\r\n {\r\n return BuildLayerBoards(this._option, space, this.grooveOption);\r\n }\r\n protected async Update()\r\n {\r\n await super.Update();\r\n\r\n let brs: Board[] = [];\r\n\r\n for (let id of this.Objects)\r\n {\r\n if (!id.IsErase)\r\n {\r\n let b = id.Object as Board;\r\n brs.push(b);\r\n }\r\n }\r\n if (this._option.isActive)\r\n activityLayerBoardTool.Start(brs, this._nailOption);\r\n }\r\n ReadFile(file: CADFiler)\r\n {\r\n let ver = file.Read();\r\n super.ReadFile(file);\r\n this._option.type = file.Read();\r\n this._option.name = file.Read();\r\n this._option.frontShrink = file.Read();\r\n this._option.leftShrink = file.Read();\r\n this._option.rightShrink = file.Read();\r\n this._option.calcHeight = file.Read();\r\n this._option.isTotalLength = file.Read();\r\n this._option.boardRelative = file.Read();\r\n this._option.thickness = file.Read();\r\n this._option.count = file.Read();\r\n this._option.spaceSize = file.Read();\r\n this._option.isActive = file.Read();\r\n\r\n if (ver > 1)\r\n {\r\n this._nailOption.isDraw = file.Read();\r\n this._nailOption.addCount = file.Read();\r\n this._nailOption.dist = file.Read();\r\n this._nailOption.isGroup = file.Read();\r\n this._nailOption.isInBack = file.Read();\r\n this._nailOption.front = file.Read();\r\n this._nailOption.behind = file.Read();\r\n this._nailOption.count = file.Read();\r\n this._nailOption.rad = file.Read();\r\n this._nailOption.length = file.Read();\r\n this._nailOption.depth = file.Read();\r\n }\r\n\r\n if (ver >= 3)\r\n {\r\n this._option.calcSpaceSize = file.Read();\r\n this._option.calcFrontShrink = file.Read();\r\n this._option.calcLeftShrink = file.Read();\r\n this._option.calcRightShrink = file.Read();\r\n }\r\n else\r\n {\r\n this._option.calcSpaceSize = this._option.spaceSize.toString();\r\n this._option.calcFrontShrink = this._option.frontShrink.toString();\r\n this._option.calcLeftShrink = this._option.leftShrink.toString();\r\n this._option.calcRightShrink = this._option.rightShrink.toString();\r\n }\r\n if (ver > 3)\r\n {\r\n this.grooveOption.grooveAddLength = file.Read();\r\n this.grooveOption.grooveAddWidth = file.Read();\r\n this.grooveOption.grooveAddDepth = file.Read();\r\n this.grooveOption.knifeRadius = file.Read();\r\n }\r\n else\r\n {\r\n this.grooveOption.grooveAddLength = this.grooveOption.grooveAddLength.toString();\r\n this.grooveOption.grooveAddWidth = this.grooveOption.grooveAddWidth.toString();\r\n this.grooveOption.grooveAddDepth = this.grooveOption.grooveAddDepth.toString();\r\n this.grooveOption.knifeRadius = this.grooveOption.knifeRadius.toString();\r\n }\r\n }\r\n\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(4);\r\n super.WriteFile(file);\r\n file.Write(this._option.type);\r\n file.Write(this._option.name);\r\n file.Write(this._option.frontShrink);\r\n file.Write(this._option.leftShrink);\r\n file.Write(this._option.rightShrink);\r\n file.Write(this._option.calcHeight);\r\n file.Write(this._option.isTotalLength);\r\n file.Write(this._option.boardRelative);\r\n file.Write(this._option.thickness);\r\n file.Write(this._option.count);\r\n file.Write(this._option.spaceSize);\r\n file.Write(this._option.isActive);\r\n\r\n //ver2\r\n file.Write(this._nailOption.isDraw);\r\n file.Write(this._nailOption.addCount);\r\n file.Write(this._nailOption.dist);\r\n file.Write(this._nailOption.isGroup);\r\n file.Write(this._nailOption.isInBack);\r\n file.Write(this._nailOption.front);\r\n file.Write(this._nailOption.behind);\r\n file.Write(this._nailOption.count);\r\n file.Write(this._nailOption.rad);\r\n file.Write(this._nailOption.length);\r\n file.Write(this._nailOption.depth);\r\n\r\n file.Write(this._option.calcSpaceSize);\r\n file.Write(this._option.calcFrontShrink);\r\n file.Write(this._option.calcLeftShrink);\r\n file.Write(this._option.calcRightShrink);\r\n\r\n //ver4\r\n file.Write(this.grooveOption.grooveAddLength);\r\n file.Write(this.grooveOption.grooveAddWidth);\r\n file.Write(this.grooveOption.grooveAddDepth);\r\n file.Write(this.grooveOption.knifeRadius);\r\n }\r\n}\r\n","import { Vector3 } from \"three\";\r\nimport { Factory } from \"../../CADFactory\";\r\nimport { CADFiler } from \"../../CADFiler\";\r\nimport { Board } from \"../../Entity/Board\";\r\nimport { TemplateParam } from \"../Param/TemplateParam\";\r\nimport { TemplateParamType } from \"../Param/TemplateParamType\";\r\nimport { TemplateRecord } from \"../TemplateRecord\";\r\n\r\n/**\r\n * 左右侧板模板\r\n */\r\n@Factory\r\nexport class TemplateLeftRightBoardRecord extends TemplateRecord\r\n{\r\n constructor()\r\n {\r\n super();\r\n this.name = \"左右侧板(自动)\";\r\n }\r\n InitBaseParams()\r\n {\r\n super.InitBaseParams();\r\n let lparam = new TemplateParam();\r\n lparam.name = \"ZS\";\r\n lparam.description = \"左缩\";\r\n lparam.type = TemplateParamType.Float;\r\n lparam.value = 0;\r\n this.Params.push(lparam);\r\n\r\n let rparam = new TemplateParam();\r\n rparam.name = \"YS\";\r\n rparam.description = \"右缩\";\r\n rparam.type = TemplateParamType.Float;\r\n rparam.value = 0;\r\n this.Params.push(rparam);\r\n return this;\r\n }\r\n protected async Update()\r\n {\r\n let [lId, rId] = this.Objects;\r\n\r\n if (!lId || lId.IsErase || !rId || rId.IsErase) return;\r\n\r\n let lBr = lId.Object as Board;\r\n let rBr = rId.Object as Board;\r\n let ls = this.GetParam(\"ZS\")?.value as number ?? 0;\r\n lBr.Position = lBr.Position.sub(new Vector3(0, ls));\r\n\r\n await super.Update();\r\n\r\n let thickness = this.GetParam(\"BH\")?.value as number ?? 18;\r\n ls = this.GetParam(\"ZS\")?.value as number ?? 0;\r\n let rs = this.GetParam(\"YS\")?.value as number ?? 0;\r\n\r\n lBr.Thickness = thickness;\r\n rBr.Thickness = thickness;\r\n\r\n if (!this._CacheSpaceSize)\r\n {\r\n console.warn(\"左右侧板模板数据错误无法更新\");\r\n return;\r\n }\r\n\r\n lBr.Height = this._CacheSpaceSize.z;\r\n rBr.Height = this._CacheSpaceSize.z;\r\n\r\n lBr.Width = this._CacheSpaceSize.y - ls;\r\n rBr.Width = this._CacheSpaceSize.y - rs;\r\n lBr.Position = lBr.Position.add(new Vector3(0, ls));\r\n\r\n let x = new Vector3().setFromMatrixColumn(this._CacheSpaceCS, 0);\r\n let y = new Vector3().setFromMatrixColumn(this._CacheSpaceCS, 1);\r\n x.multiplyScalar(this._CacheSpaceSize.x - lBr.Thickness);\r\n rBr.Position = lBr.Position.sub(y.multiplyScalar(ls - rs)).add(x);\r\n\r\n //保持SpaceCS\r\n for (let ent of [lBr, rBr])\r\n ent.SpaceOCS = this._CacheSpaceCS;\r\n }\r\n ReadFile(file: CADFiler)\r\n {\r\n super.ReadFile(file);\r\n if (this._Version < 3)\r\n {\r\n if (!this.GetParam((\"ZS\")))\r\n {\r\n let lparam = new TemplateParam();\r\n lparam.name = \"ZS\";\r\n lparam.description = \"左缩\";\r\n lparam.type = TemplateParamType.Float;\r\n lparam.value = 0;\r\n this.Params.push(lparam);\r\n\r\n let rparam = new TemplateParam();\r\n rparam.name = \"YS\";\r\n rparam.description = \"右缩\";\r\n rparam.type = TemplateParamType.Float;\r\n rparam.value = 0;\r\n this.Params.push(rparam);\r\n }\r\n }\r\n\r\n }\r\n}\r\n","import { Factory } from \"../../CADFactory\";\r\nimport { Board } from \"../../Entity/Board\";\r\nimport { TemplateRecord } from \"../TemplateRecord\";\r\nimport { BoardType } from \"../../../UI/Store/BoardInterface\";\r\n\r\n@Factory\r\nexport class TemplateSizeBoard extends TemplateRecord\r\n{\r\n protected async Update()\r\n {\r\n await super.Update();\r\n if (this.Objects.length === 0) return;\r\n\r\n let originBr = this.Objects[0].Object as Board;\r\n\r\n if (!originBr.IsErase)\r\n {\r\n if (originBr.BoardType === BoardType.Layer)\r\n {\r\n originBr.Height = this._CacheSpaceSize.x;\r\n originBr.Width = this._CacheSpaceSize.y;\r\n originBr.Thickness = this._CacheSpaceSize.z;\r\n }\r\n else if (originBr.BoardType === BoardType.Vertical)\r\n {\r\n originBr.Height = this._CacheSpaceSize.z;\r\n originBr.Width = this._CacheSpaceSize.y;\r\n originBr.Thickness = this._CacheSpaceSize.x;\r\n }\r\n else\r\n {\r\n originBr.Height = this._CacheSpaceSize.z;\r\n originBr.Width = this._CacheSpaceSize.x;\r\n originBr.Thickness = this._CacheSpaceSize.y;\r\n }\r\n }\r\n }\r\n}\r\n","import { BuildVerticalBoards } from \"../../../Add-on/DrawBoard/BuildBoardTool\";\r\nimport { DefaultVerticalBoardConfig } from \"../../../Editor/DefaultConfig\";\r\nimport { ISpaceParse } from \"../../../Geometry/SpaceParse/ISpaceParse\";\r\nimport { IGrooveOption, VerticalBoardOption } from \"../../../UI/Store/BoardInterface\";\r\nimport { Factory } from \"../../CADFactory\";\r\nimport { CADFiler } from \"../../CADFiler\";\r\nimport { TemplateBoardRecord } from \"./TemplateBoard\";\r\n\r\n/**\r\n * 立板模板\r\n */\r\n@Factory\r\nexport class TemplateVerticalBoard extends TemplateBoardRecord\r\n{\r\n constructor()\r\n {\r\n super();\r\n this.name = \"立板(自动)\";\r\n }\r\n protected _option: VerticalBoardOption = { ...DefaultVerticalBoardConfig };\r\n private grooveOption: IGrooveOption = {\r\n grooveAddLength: \"0\",\r\n grooveAddWidth: \"0\",\r\n grooveAddDepth: \"0\",\r\n knifeRadius: \"3\",\r\n };\r\n set GrooveOption(option: IGrooveOption)\r\n {\r\n this.WriteAllObjectRecord();\r\n Object.assign(this.grooveOption, option);\r\n }\r\n GeneralBoardList(space: ISpaceParse)\r\n {\r\n return BuildVerticalBoards(this._option, space, this.grooveOption);\r\n }\r\n ReadFile(file: CADFiler)\r\n {\r\n let ver = file.Read();\r\n super.ReadFile(file);\r\n this._option.type = file.Read();\r\n this._option.name = file.Read();\r\n this._option.frontShrink = file.Read();\r\n this._option.bottomShrink = file.Read();\r\n this._option.calcWidth = file.Read();\r\n this._option.calcHeight = file.Read();\r\n this._option.isTotalLength = file.Read();\r\n this._option.isTotalWidth = file.Read();\r\n this._option.boardRelative = file.Read();\r\n this._option.thickness = file.Read();\r\n this._option.count = file.Read();\r\n this._option.spaceSize = file.Read();\r\n\r\n if (ver >= 2)\r\n {\r\n this._option.calcSpaceSize = file.Read();\r\n this._option.calcFrontShrink = file.Read();\r\n this._option.calcBottomShrink = file.Read();\r\n }\r\n else\r\n {\r\n this._option.calcSpaceSize = this._option.spaceSize.toString();\r\n this._option.calcFrontShrink = this._option.frontShrink.toString();\r\n this._option.calcBottomShrink = this._option.bottomShrink.toString();\r\n }\r\n if (ver > 2)\r\n {\r\n this.grooveOption.grooveAddLength = file.Read();\r\n this.grooveOption.grooveAddWidth = file.Read();\r\n this.grooveOption.grooveAddDepth = file.Read();\r\n this.grooveOption.knifeRadius = file.Read();\r\n }\r\n else\r\n {\r\n this.grooveOption.grooveAddLength = this.grooveOption.grooveAddLength.toString();\r\n this.grooveOption.grooveAddWidth = this.grooveOption.grooveAddWidth.toString();\r\n this.grooveOption.grooveAddDepth = this.grooveOption.grooveAddDepth.toString();\r\n this.grooveOption.knifeRadius = this.grooveOption.knifeRadius.toString();\r\n }\r\n }\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(3);\r\n super.WriteFile(file);\r\n file.Write(this._option.type);\r\n file.Write(this._option.name);\r\n file.Write(this._option.frontShrink);\r\n file.Write(this._option.bottomShrink);\r\n file.Write(this._option.calcWidth);\r\n file.Write(this._option.calcHeight);\r\n file.Write(this._option.isTotalLength);\r\n file.Write(this._option.isTotalWidth);\r\n file.Write(this._option.boardRelative);\r\n file.Write(this._option.thickness);\r\n file.Write(this._option.count);\r\n file.Write(this._option.spaceSize);\r\n\r\n file.Write(this._option.calcSpaceSize);\r\n file.Write(this._option.calcFrontShrink);\r\n file.Write(this._option.calcBottomShrink);\r\n\r\n file.Write(this.grooveOption.grooveAddLength);\r\n file.Write(this.grooveOption.grooveAddWidth);\r\n file.Write(this.grooveOption.grooveAddDepth);\r\n file.Write(this.grooveOption.knifeRadius);\r\n }\r\n}\r\n","import { VisualSpaceBox } from \"../../../Editor/VisualSpaceBox\";\r\nimport { AutoRecord } from \"../../AutoRecord\";\r\nimport { Factory } from \"../../CADFactory\";\r\nimport { CADFiler } from \"../../CADFiler\";\r\nimport { TemplateRecord } from \"../TemplateRecord\";\r\n\r\n@Factory\r\nexport class TemplateVisualSpace extends TemplateRecord\r\n{\r\n @AutoRecord IsVisible = true;\r\n constructor()\r\n {\r\n super();\r\n this.Name = \"可视化模块空间\";\r\n }\r\n\r\n protected async Update()\r\n {\r\n await super.Update();\r\n if (!this.Db) return;//如果没有绘制到DB空间,那么将不会进行更新(否则绘制失败)\r\n //在这里重建虚拟空间,(未来我们可能会避免自动重建)\r\n if (this.Objects.length === 0 || this.Objects[0].Object === undefined)\r\n {\r\n this.Objects.length = 0;\r\n let visualEntity = new VisualSpaceBox(this.LParam.value as number, this.WParam.value as number, this.HParam.value as number);\r\n visualEntity.ApplyMatrix(this._CacheSpaceCS);\r\n visualEntity.SpaceOCS = this._CacheSpaceCS;\r\n //这里避免使用app.Database,否则插入图纸后,会错误的在app的图纸里面绘制一个空间,导致程序错误.\r\n this.Db.ModelSpace.Append(visualEntity);\r\n this.Objects.push(visualEntity.Id);\r\n }\r\n let visualEntity = this.Objects[0].Object as VisualSpaceBox;\r\n\r\n let depth = this.NodeDepth;\r\n visualEntity.ColorIndex = depth === 0 ? 7 : depth + 1;\r\n\r\n let IsRoot = this.Parent === undefined;\r\n let isVisual = IsRoot || this.Children.length === 0;\r\n\r\n visualEntity.Visible = this.IsVisible && isVisual;\r\n visualEntity.SetSize(this.LParam.value as number, this.WParam.value as number, this.HParam.value as number);\r\n visualEntity.IsRoot = this.Children.length !== 0;\r\n\r\n if (!IsRoot)\r\n {\r\n let root = this.Root;\r\n visualEntity.DisplayLength = this.LParam.value !== root.LParam.value;\r\n visualEntity.DisplayWidth = this.WParam.value !== root.WParam.value;\r\n visualEntity.DisplayHeight = this.HParam.value !== root.HParam.value;\r\n }\r\n }\r\n\r\n //#region -------------------------File-------------------------\r\n\r\n //对象从文件中读取数据,初始化自身\r\n ReadFile(file: CADFiler)\r\n {\r\n let ver = file.Read();\r\n super.ReadFile(file);\r\n this.IsVisible = file.Read();\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.IsVisible);\r\n }\r\n // //局部撤销\r\n // ApplyPartialUndo(undoData: CADObject)\r\n // {\r\n // super.ApplyPartialUndo(undoData);\r\n // }\r\n //#endregion\r\n}\r\n","import { Geometry, Vector3, WebGLRenderer } from \"three\";\r\nimport { CADFiler } from \"../../api\";\r\nimport { CameraUpdate } from \"../../GraphicsSystem/CameraUpdate\";\r\nimport { RenderType } from \"../../GraphicsSystem/RenderType\";\r\nimport { Factory } from \"../CADFactory\";\r\nimport { Entity } from \"../Entity/Entity\";\r\nimport { ObjectId } from \"../ObjectId\";\r\n\r\nconst MaxSize = 2048 * 2;\r\n\r\n/**\r\n * 更新视口实体的时机:\r\n * ->在布局状态下才应该更新,否则则标记为需要更新(或者不需要标记)\r\n * ->在缩放相机时,标记所有的需要更新(异步更新任务)(优先更新可见视口)\r\n * ->切换到布局时,更新全部视口(使用更新任务)\r\n */\r\n\r\n@Factory\r\nexport class ViewportEntity2 extends Entity\r\n{\r\n static Renderer: WebGLRenderer;\r\n OnlyRenderType = true;\r\n\r\n //当前视口的渲染类型\r\n private _RenderType: RenderType = RenderType.Conceptual;\r\n //当前视口绘制的图形列表\r\n private _DisplayEntitys: Set = new Set();\r\n\r\n private _CameraData = new CameraUpdate;\r\n constructor(\r\n private _Width: number = 1,\r\n private _Height: number = 1,\r\n )\r\n {\r\n super();\r\n }\r\n\r\n SetSize(width: number, height: number)\r\n {\r\n if (this._Width === width && this._Height === height) return;\r\n\r\n this.WriteAllObjectRecord();\r\n this._Width = width;\r\n this._Height = height;\r\n this.Update();\r\n }\r\n\r\n AppendEntity(ens: Iterable)\r\n {\r\n this.WriteAllObjectRecord();\r\n for (let e of ens)\r\n this._DisplayEntitys.add(e.Id);\r\n\r\n this.Update();\r\n }\r\n\r\n _Target = new Vector3(0, 0, -1);\r\n\r\n \r\n\r\n Destroy()\r\n {\r\n super.Destroy();\r\n }\r\n\r\n\r\n //#region -------------------------File-------------------------\r\n //对象从文件中读取数据,初始化自身\r\n protected _ReadFile(file: CADFiler)\r\n {\r\n let ver = file.Read();\r\n super._ReadFile(file);\r\n\r\n\r\n this._Width = file.Read();\r\n this._Height = file.Read();\r\n\r\n this._DisplayEntitys.clear();\r\n let count = file.Read();\r\n for (let i = 0; i < count; i++)\r\n {\r\n let id = file.ReadSoftObjectId();\r\n if (id)\r\n this._DisplayEntitys.add(id);\r\n }\r\n\r\n this._RenderType = file.Read();\r\n this._Target.fromArray(file.Read());\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(1);\r\n super.WriteFile(file);\r\n\r\n file.Write(this._Width);\r\n file.Write(this._Height);\r\n\r\n file.Write(this._DisplayEntitys.size);\r\n for (let id of this._DisplayEntitys)\r\n file.WriteSoftObjectId(id);\r\n\r\n file.Write(this._RenderType);\r\n file.Write(this._Target.toArray());\r\n }\r\n //#endregion\r\n}\r\n\r\n//\r\nfunction ScaleUV2(geo: Geometry, xScale = 1e-3, yScale = 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.x /= xScale;\r\n uv.y /= yScale;\r\n }\r\n }\r\n }\r\n}\r\n","import { Box3, BufferGeometry, Face3, Geometry, Line as TLine, LineSegments, MathUtils, Matrix3, Mesh, Object3D, ShapeUtils, Vector2, Vector3 } from \"three\";\r\nimport { HostApplicationServices } from \"../../../../ApplicationServices/HostApplicationServices\";\r\nimport { arrayPushArray } from \"../../../../Common/ArrayExt\";\r\nimport { ColorMaterial } from \"../../../../Common/ColorPalette\";\r\nimport { EntityUpdateWrap } from \"../../../../Common/EntityUpdateWrap\";\r\nimport { ObjectSnapMode } from \"../../../../Editor/ObjectSnapMode\";\r\nimport { Box3Ext } from \"../../../../Geometry/Box\";\r\nimport { BufferGeometryUtils } from \"../../../../Geometry/BufferGeometryUtils\";\r\nimport { equaln, equalv3, midPoint, MoveMatrix, ZAxis, ZeroVec } from \"../../../../Geometry/GeUtils\";\r\nimport { RenderType } from \"../../../../GraphicsSystem/RenderType\";\r\nimport { SubtractRange, Tape } from \"../../../../ueapi\";\r\nimport { Factory } from \"../../../CADFactory\";\r\nimport { CADFiler } from \"../../../CADFiler\";\r\nimport { Curve } from \"../../../Entity/Curve\";\r\nimport { Line } from \"../../../Entity/Line\";\r\nimport { GetLineParam } from \"../../ParseService/GetCurveParam\";\r\nimport { applyMixins, CURVE_FACE_TYPE_KEY, RoomWallBase, WallFaceType } from \"./RoomWallBase\";\r\nimport { WallSnapMode } from \"./WallSnapMode\";\r\n\r\nconst SnapTempLine = new Line;\r\nconst TempP = new Vector3;\r\n\r\n@Factory\r\nexport class RoomWallLine extends RoomWallBase\r\n{\r\n\r\n constructor(private _StartPoint = new Vector3,\r\n private _EndPoint = new Vector3,\r\n _Thickness = 120\r\n )\r\n {\r\n super();\r\n this.Thickness = _Thickness;\r\n }\r\n\r\n UpdateOCSToMinBox()\r\n {\r\n this.WriteAllObjectRecord();\r\n let sp = this.StartPoint;\r\n let ep = this.EndPoint;\r\n\r\n let x = this.GetFistDeriv(0).normalize();\r\n let z = ZAxis;\r\n let y = z.clone().cross(x).normalize();\r\n this._Matrix.makeBasis(x, y, z).setPosition(sp);\r\n\r\n let inv = this.OCSInv;\r\n this._StartPoint.copy(sp).applyMatrix4(inv);\r\n this._EndPoint.copy(ep).applyMatrix4(inv);\r\n }\r\n\r\n get StartPoint(): Vector3\r\n {\r\n return this._StartPoint.clone().applyMatrix4(this.OCSNoClone);\r\n }\r\n\r\n get EndPoint(): Vector3\r\n {\r\n return this._EndPoint.clone().applyMatrix4(this.OCSNoClone);\r\n }\r\n\r\n set StartPoint(p: Vector3)\r\n {\r\n p = TempP.copy(p).applyMatrix4(this.OCSInv).setZ(0);\r\n if (!equalv3(p, this._StartPoint, 1e-4))\r\n {\r\n this.WriteAllObjectRecord();\r\n this._StartPoint.copy(p);\r\n this.Update();\r\n }\r\n }\r\n\r\n set EndPoint(p: Vector3)\r\n {\r\n p = TempP.copy(p).applyMatrix4(this.OCSInv).setZ(0);\r\n if (!equalv3(p, this._EndPoint, 1e-4))\r\n {\r\n this.WriteAllObjectRecord();\r\n this._EndPoint.copy(p);\r\n this.Update();\r\n }\r\n }\r\n\r\n Reverse(): this\r\n {\r\n this.WriteAllObjectRecord();\r\n [this._EndPoint, this._StartPoint] = [this._StartPoint, this._EndPoint];\r\n return this;\r\n }\r\n\r\n //中心轴线\r\n override get CenterAxisCurve(): Line\r\n {\r\n let line = new Line(this._StartPoint.clone(), this._EndPoint.clone());\r\n line.OCSNoClone.copy(this.OCSNoClone);\r\n return line;\r\n }\r\n\r\n get BoundingBox(): Box3\r\n {\r\n return this.BoundingBoxInOCS.applyMatrix4(this.OCSNoClone);\r\n }\r\n\r\n get BoundingBoxInOCS(): Box3Ext\r\n {\r\n let line = new Line(this._StartPoint, this._EndPoint);\r\n let parse = new GetLineParam(line);\r\n if (parse.Length > 1e-5)\r\n {\r\n let p1 = parse.OffsetPoint(this._StartPoint.clone(), this.Thickness * 0.5);//left\r\n let p2 = parse.OffsetPoint(this._StartPoint.clone(), this.Thickness * -0.5);//right\r\n\r\n let p3 = parse.OffsetPoint(this._EndPoint.clone(), this.Thickness * 0.5);//left\r\n let p4 = parse.OffsetPoint(this._EndPoint.clone(), this.Thickness * -0.5);//right\r\n\r\n p1.z = this._Height;\r\n\r\n return new Box3Ext().setFromPoints([p1, p2, p3, p4]);\r\n }\r\n\r\n return new Box3Ext().setFromPoints([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 let pts = [];\r\n pts = pts.concat(Line.prototype.GetObjectSnapPoints.call(this, snapMode, pickPoint, lastPoint, viewXform));\r\n const CurveSnap = (curve: Curve) =>\r\n {\r\n let bakZ = curve.Z;\r\n //底部线\r\n arrayPushArray(pts, curve.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform));\r\n\r\n //顶部线\r\n curve.Z += this._Height;\r\n arrayPushArray(pts, curve.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform));\r\n curve.Z = bakZ;\r\n\r\n //柱子线\r\n SnapTempLine.OCSNoClone.copy(curve.OCSNoClone);\r\n //@ts-ignore\r\n SnapTempLine._StartPoint.copy(curve._StartPoint);\r\n //@ts-ignore\r\n SnapTempLine._EndPoint.copy(curve._StartPoint);\r\n //@ts-ignore\r\n SnapTempLine._EndPoint.z += this._Height;\r\n\r\n arrayPushArray(pts, SnapTempLine.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform));\r\n\r\n //@ts-ignore\r\n SnapTempLine._StartPoint.copy(curve._EndPoint);\r\n //@ts-ignore\r\n SnapTempLine._EndPoint.copy(curve._EndPoint);\r\n //@ts-ignore\r\n SnapTempLine._EndPoint.z += this._Height;\r\n\r\n arrayPushArray(pts, SnapTempLine.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform));\r\n };\r\n\r\n if (this.LeftCurves && (RoomWallBase.SnapMode & WallSnapMode.Out) > 0)\r\n {\r\n this.LeftCurves.forEach(CurveSnap);\r\n this.RightCurves.forEach(CurveSnap);\r\n this.LidCurves.forEach(CurveSnap);\r\n }\r\n\r\n return pts;\r\n }\r\n\r\n GetGripPoints(): Vector3[]\r\n {\r\n let sp = this.StartPoint;\r\n let ep = this.EndPoint;\r\n let pts = [sp, midPoint(sp, ep), ep];\r\n for (let i = 0; i < 3; i++)\r\n {\r\n let p = pts[i].clone();\r\n pts.push(p.setZ(p.z + this._Height));\r\n }\r\n return pts;\r\n }\r\n\r\n MoveGripPoints(indexs: number[], vec: Vector3)\r\n {\r\n if (equalv3(vec, ZeroVec, 1e-4)) return;\r\n this.WriteAllObjectRecord();\r\n\r\n let set = new Set();\r\n for (let i of indexs)\r\n if (i > 2) set.add(i - 3);\r\n else set.add(i);\r\n\r\n EntityUpdateWrap(this, () =>\r\n {\r\n for (let index of set)\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\r\n GetStretchPoints(): Vector3[]\r\n {\r\n return [this.StartPoint, this.EndPoint];\r\n }\r\n MoveStretchPoints(indexList: number[], vec: Vector3)\r\n {\r\n if (equalv3(vec, ZeroVec, 1e-4)) return;\r\n this.WriteAllObjectRecord();\r\n EntityUpdateWrap(this, () =>\r\n {\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\r\n //#region //绘制\r\n\r\n UpdateDrawGeometry()\r\n {\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\r\n private _EdgeGeometry: BufferGeometry;\r\n get EdgeGeometry()\r\n {\r\n if (this._EdgeGeometry) return this._EdgeGeometry;\r\n\r\n for (let hole of this.RealHoles)\r\n if (hole.StartParam > hole.EndParam)\r\n [hole.StartParam, hole.EndParam] = [hole.EndParam, hole.StartParam];\r\n\r\n let pts: Vector3[];\r\n if (!this.LeftCurves)\r\n {\r\n let line = new Line(this._StartPoint, this._EndPoint);\r\n let parse = new GetLineParam(line);\r\n if (parse.Length > 0.1)\r\n {\r\n let p1 = parse.OffsetPoint(this._StartPoint.clone(), this.Thickness * 0.5);//left\r\n let p2 = parse.OffsetPoint(this._StartPoint.clone(), this.Thickness * -0.5);//right\r\n\r\n let p3 = parse.OffsetPoint(this._EndPoint.clone(), this.Thickness * 0.5);//left\r\n let p4 = parse.OffsetPoint(this._EndPoint.clone(), this.Thickness * -0.5);//right\r\n\r\n let [pz1, pz2, pz3, pz4] = [p1, p2, p3, p4].map(p => p.clone().setZ(this._Height));\r\n pts = [p1, p2, p2, p4, p4, p3, p3, p1,\r\n pz1, pz2, pz2, pz4, pz4, pz3, pz3, pz1,\r\n\r\n p1, pz1,\r\n p2, pz2,\r\n p3, pz3,\r\n p4, pz4\r\n ];\r\n }\r\n }\r\n else\r\n {\r\n pts = [];\r\n let inv = this.OCSInv;\r\n const DrawCurve = (curve: Curve, _leftRanges: [number, number][], _rightRanges: [number, number][]) =>\r\n {\r\n if (curve instanceof Line)\r\n {\r\n let p1 = curve.StartPoint.applyMatrix4(inv);\r\n let p2 = curve.EndPoint.applyMatrix4(inv);\r\n pts.push(p1, p2);\r\n\r\n for (let range of _leftRanges)\r\n pts.push(p1.clone().setZ(range[0]), p1.clone().setZ(range[1]));\r\n for (let range of _rightRanges)\r\n pts.push(p2.clone().setZ(range[0]), p2.clone().setZ(range[1]));\r\n\r\n pts.push(p1.clone().setZ(this._Height), p2.clone().setZ(this._Height));\r\n }\r\n };\r\n\r\n let lidRanges: [number, number][] = [[0, this._Height]];\r\n let leftRanges = lidRanges;\r\n let rightRanges = lidRanges;\r\n for (let hole of this.RealHoles)\r\n {\r\n if (equaln(hole.StartParam, 0))\r\n {\r\n let newLeftRanges = [];\r\n for (let range of leftRanges)\r\n arrayPushArray(newLeftRanges, SubtractRange(range[0], range[1], hole.Bottom, hole.Top, 1e5));\r\n leftRanges = newLeftRanges;\r\n }\r\n\r\n if (equaln(hole.EndParam, 1))\r\n {\r\n let newRightRanges = [];\r\n for (let range of rightRanges)\r\n arrayPushArray(newRightRanges, SubtractRange(range[0], range[1], hole.Bottom, hole.Top, 1e5));\r\n rightRanges = newRightRanges;\r\n }\r\n }\r\n\r\n for (let i = 0; i < this.LeftCurves.length; i++)\r\n {\r\n let curve = this.LeftCurves[i];\r\n DrawCurve(curve, i === 0 ? leftRanges : lidRanges, (i === this.LeftCurves.length - 1) ? rightRanges : lidRanges);\r\n }\r\n for (let i = 0; i < this.RightCurves.length; i++)\r\n {\r\n let curve = this.RightCurves[i];\r\n DrawCurve(curve, i === 0 ? leftRanges : lidRanges, (i === this.RightCurves.length - 1) ? rightRanges : lidRanges);\r\n }\r\n for (let i = 0; i < this.LidCurves.length; i++)\r\n {\r\n let curve = this.LidCurves[i];\r\n DrawCurve(curve, lidRanges, lidRanges);\r\n }\r\n }\r\n\r\n this._EdgeGeometry = BufferGeometryUtils.CreateFromPts(pts ?? []);\r\n return this._EdgeGeometry;\r\n }\r\n\r\n private _MeshGeometry: Geometry;\r\n get MeshGeometry()\r\n {\r\n if (this._MeshGeometry) return this._MeshGeometry;\r\n\r\n this._MeshGeometry = new Geometry;\r\n\r\n let geo = this._MeshGeometry;\r\n\r\n let normal = this.Normal;\r\n let normaln = normal.clone().negate();\r\n\r\n let line = new Line(this._StartPoint, this._EndPoint);\r\n let parse = new GetLineParam(line);\r\n if (!this.LeftCurves)\r\n {\r\n if (parse.Length > 0.1)\r\n {\r\n let p1 = parse.OffsetPoint(this._StartPoint.clone(), this.Thickness * 0.5);//left\r\n let p2 = parse.OffsetPoint(this._StartPoint.clone(), this.Thickness * -0.5);//right\r\n\r\n let p3 = parse.OffsetPoint(this._EndPoint.clone(), this.Thickness * 0.5);//left\r\n let p4 = parse.OffsetPoint(this._EndPoint.clone(), this.Thickness * -0.5);//right\r\n\r\n let [pz1, pz2, pz3, pz4] = [p1, p2, p3, p4].map(p => p.clone().setZ(this._Height));\r\n\r\n geo.vertices.push(p1, p2, p3, p4, pz1, pz2, pz3, pz4);\r\n\r\n geo.faces.push(\r\n //底部\r\n new Face3(0, 2, 1, normaln),\r\n new Face3(1, 2, 3, normaln),\r\n //顶部\r\n new Face3(0 + 4, 1 + 4, 2 + 4, normal),\r\n new Face3(1 + 4, 3 + 4, 2 + 4, normal),\r\n //开始盖子\r\n new Face3(0, 1, 5, parse.Direction.clone().negate()),\r\n new Face3(0, 5, 4, parse.Direction.clone().negate()),\r\n //结束盖子\r\n new Face3(2, 7, 3, parse.Direction),\r\n new Face3(2, 6, 7, parse.Direction),\r\n //left\r\n new Face3(0, 6, 2, parse.LeftDir),\r\n new Face3(0, 4, 6, parse.LeftDir),\r\n //right\r\n new Face3(1, 3, 7, parse.LeftDir.clone().negate()),\r\n new Face3(1, 7, 5, parse.LeftDir.clone().negate()),\r\n );\r\n\r\n //x\r\n let x = parse.Length * 1e-3;\r\n let y = this.Thickness * 1e-3;\r\n let z = this._Height * 1e-3;\r\n geo.faceVertexUvs[0].push(\r\n //floor\r\n [new Vector2(0, 0), new Vector2(x, 0), new Vector2(0, y)],\r\n [new Vector2(0, y), new Vector2(x, 0), new Vector2(x, y)],\r\n //top\r\n [new Vector2(0, 0), new Vector2(0, y), new Vector2(x, 0)],\r\n [new Vector2(0, y), new Vector2(x, y), new Vector2(x, 0)],\r\n //start lid\r\n [new Vector2(0, 0), new Vector2(y, 0), new Vector2(y, z)],\r\n [new Vector2(0, 0), new Vector2(y, z), new Vector2(0, z)],\r\n //end lid\r\n [new Vector2(y, 0), new Vector2(0, z), new Vector2(0, 0)],\r\n [new Vector2(y, 0), new Vector2(y, z), new Vector2(0, z)],\r\n //left\r\n [new Vector2(0, 0), new Vector2(x, z), new Vector2(x, 0)],\r\n [new Vector2(0, 0), new Vector2(0, z), new Vector2(x, z)],\r\n //right\r\n [new Vector2(0, 0), new Vector2(x, 0), new Vector2(0, z)],\r\n [new Vector2(0, 0), new Vector2(0, z), new Vector2(0, z)],\r\n );\r\n\r\n\r\n }\r\n }\r\n else\r\n {\r\n let inv = this.OCSInv;\r\n let thisParam = new GetLineParam(this as unknown as Line);\r\n const BuildLeftFace = (curve: Curve) =>\r\n {\r\n let materialIndex = 0;\r\n if (curve[CURVE_FACE_TYPE_KEY] === WallFaceType.Outside)\r\n {\r\n \r\n materialIndex = 1;\r\n }\r\n\r\n if (curve instanceof Line)\r\n {\r\n let tapes = [new Tape(0, 1, 0, this._Height)];\r\n let curveParam = new GetLineParam(curve);\r\n\r\n let holes = this.RealHoles;\r\n if (holes.length)\r\n {\r\n for (let hole of holes)\r\n {\r\n let start = equaln(hole.StartParam, 0) ? 0 : MathUtils.clamp(curveParam.GetParamAtPoint(thisParam.GetPointAtParam(hole.StartParam)), 0, 1);\r\n let end = equaln(hole.EndParam, 1) ? 1 : MathUtils.clamp(curveParam.GetParamAtPoint(thisParam.GetPointAtParam(hole.EndParam)), 0, 1);\r\n if (equaln(start, end, 1e-8)) continue;//重复的点造成了绘制错误\r\n\r\n if (start > end) [start, end] = [end, start];\r\n start = Math.max(0, start);\r\n end = Math.min(1, end);\r\n if (start >= end) continue;\r\n\r\n let holeTape = new Tape(start, end, hole.Bottom, hole.Top);\r\n\r\n let newTapes: Tape[] = [];\r\n for (let tape of tapes)\r\n arrayPushArray(newTapes, tape.Clip(holeTape));\r\n\r\n tapes = newTapes;\r\n }\r\n }\r\n\r\n for (let tape of tapes)\r\n {\r\n let startIndex = geo.vertices.length;\r\n\r\n let p1 = curveParam.GetPointAtParam(tape.start).applyMatrix4(inv);\r\n let p2 = curveParam.GetPointAtParam(tape.end).applyMatrix4(inv);\r\n geo.vertices.push(p1.setZ(tape.bottom), p2.setZ(tape.bottom));\r\n geo.vertices.push(p1.clone().setZ(tape.top));\r\n geo.vertices.push(p2.clone().setZ(tape.top));\r\n\r\n let startX = curveParam.Length * 1e-3 * tape.start;\r\n let endX = curveParam.Length * 1e-3 * tape.end;\r\n\r\n let startZ = tape.bottom * 1e-3;\r\n let endZ = tape.top * 1e-3;\r\n\r\n geo.faces.push(\r\n new Face3(startIndex, startIndex + 2, startIndex + 1, parse.LeftDir, undefined, materialIndex),\r\n new Face3(startIndex + 1, startIndex + 2, startIndex + 3, parse.LeftDir, undefined, materialIndex),\r\n );\r\n\r\n geo.faceVertexUvs[0].push(\r\n [new Vector2(startX, startZ), new Vector2(startX, endZ), new Vector2(endX, startZ)],\r\n [new Vector2(endX, startZ), new Vector2(startX, endZ), new Vector2(endX, endZ)],\r\n );\r\n }\r\n }\r\n };\r\n const BuildRightFace = (curve: Curve) =>\r\n {\r\n let materialIndex = 0;\r\n if (curve[CURVE_FACE_TYPE_KEY] === WallFaceType.Outside)\r\n {\r\n \r\n materialIndex = 1;\r\n }\r\n\r\n if (curve instanceof Line)\r\n {\r\n let tapes = [new Tape(0, 1, 0, this._Height)];\r\n let curveParam = new GetLineParam(curve);\r\n\r\n let holes = this.RealHoles;\r\n if (holes.length)\r\n {\r\n for (let hole of holes)\r\n {\r\n let start = equaln(hole.StartParam, 0) ? 0 : MathUtils.clamp(curveParam.GetParamAtPoint(thisParam.GetPointAtParam(hole.StartParam)), 0, 1);\r\n let end = equaln(hole.EndParam, 1) ? 1 : MathUtils.clamp(curveParam.GetParamAtPoint(thisParam.GetPointAtParam(hole.EndParam)), 0, 1);\r\n if (equaln(start, end, 1e-8)) continue;//重复的点造成了绘制错误\r\n\r\n if (start > end) [start, end] = [end, start];\r\n start = Math.max(0, start);\r\n end = Math.min(1, end);\r\n if (start >= end) continue;\r\n\r\n let holeTape = new Tape(start, end, hole.Bottom, hole.Top);\r\n\r\n let newTapes: Tape[] = [];\r\n for (let tape of tapes)\r\n arrayPushArray(newTapes, tape.Clip(holeTape));\r\n\r\n tapes = newTapes;\r\n }\r\n }\r\n\r\n for (let tape of tapes)\r\n {\r\n let startIndex = geo.vertices.length;\r\n\r\n let p1 = curveParam.GetPointAtParam(tape.start).applyMatrix4(inv);\r\n let p2 = curveParam.GetPointAtParam(tape.end).applyMatrix4(inv);\r\n geo.vertices.push(p1.setZ(tape.bottom), p2.setZ(tape.bottom));\r\n geo.vertices.push(p1.clone().setZ(tape.top));\r\n geo.vertices.push(p2.clone().setZ(tape.top));\r\n\r\n let startX = curveParam.Length * 1e-3 * tape.start;\r\n let endX = curveParam.Length * 1e-3 * tape.end;\r\n\r\n let startZ = tape.bottom * 1e-3;\r\n let endZ = tape.top * 1e-3;\r\n\r\n geo.faces.push(\r\n new Face3(startIndex, startIndex + 1, startIndex + 2, curveParam.RightDir, undefined, materialIndex),\r\n new Face3(startIndex + 1, startIndex + 3, startIndex + 2, curveParam.RightDir, undefined, materialIndex),\r\n );\r\n\r\n geo.faceVertexUvs[0].push(\r\n [new Vector2(startX, startZ), new Vector2(endX, startZ), new Vector2(startX, endZ)],\r\n [new Vector2(endX, startZ), new Vector2(endX, endZ), new Vector2(startX, endZ)],\r\n );\r\n }\r\n }\r\n };\r\n this.LeftCurves.forEach(BuildLeftFace);\r\n this.RightCurves.forEach(BuildRightFace);\r\n this.LidCurves.forEach(BuildRightFace);\r\n\r\n if (this.Region)\r\n {\r\n let bakZ = this.Region.OCSNoClone.elements[14];\r\n this.Region.OCSNoClone.elements[14] = this._Matrix.elements[14];\r\n\r\n let pts = this.Region.MatrixAlignTo2(this.OCSNoClone).pts;\r\n this.Region.OCSNoClone.elements[14] = bakZ;\r\n\r\n let faces = ShapeUtils.triangulateShape(pts, []);\r\n\r\n let startIndex = geo.vertices.length;\r\n for (let p of pts) geo.vertices.push(new Vector3(p.x, p.y, this._Height));\r\n if (HostApplicationServices.DrawWallBottomFace) for (let p of pts) geo.vertices.push(new Vector3(p.x, p.y, 0));\r\n\r\n for (let i = 0; i < faces.length; i++)\r\n {\r\n let [a, b, c] = faces[i];\r\n geo.faces.push(new Face3(startIndex + a, startIndex + b, startIndex + c, normal));\r\n let uvs = faces[i].map(index => pts[index].clone());\r\n geo.faceVertexUvs[0].push(uvs);\r\n\r\n if (HostApplicationServices.DrawWallBottomFace)\r\n {\r\n geo.faces.push(new Face3(startIndex + pts.length + c, startIndex + pts.length + b, startIndex + pts.length + a, normaln));\r\n geo.faceVertexUvs[0].push(uvs.concat().reverse().map(v => v.clone()));\r\n }\r\n }\r\n\r\n // //todo:为了优化显示 我们可以把侧面也画出来 (应该使用和酷家乐一样的技术 在视线对准时,隐藏整个墙)\r\n // let d = this._EndPoint.clone().sub(this._StartPoint).normalize();\r\n // let pre = pts[pts.length - 1];\r\n // let tempV = new Vector3;\r\n // for (let i = 0; i < pts.length; i++)\r\n // {\r\n // let p = pts[i];\r\n // tempV.set(p.x - pre.x, p.y - pre.y, 0).normalize();\r\n // //todo:盖子会重复绘制\r\n // if (!isParallelTo(d, tempV, 1e-3) && !isPerpendicularityTo(d, tempV, 1e-3))\r\n // {\r\n // startIndex = geo.vertices.length;\r\n // geo.vertices.push(AsVector3(pre), AsVector3(p));\r\n // geo.vertices.push(AsVector3(pre).setZ(this._Height));\r\n // geo.vertices.push(AsVector3(p).setZ(this._Height));\r\n\r\n // LEFT_ROTATE_MTX2.applyVector(tempV);\r\n // tempV.negate();\r\n\r\n // let n = tempV.clone();\r\n\r\n // geo.faces.push(\r\n // new Face3(startIndex, startIndex + 1, startIndex + 2, n),\r\n // new Face3(startIndex + 1, startIndex + 3, startIndex + 2, n),\r\n // );\r\n\r\n // geo.faceVertexUvs[0].push(\r\n // [new Vector2(), new Vector2(0, 0), new Vector2(0, 0)],\r\n // [new Vector2(0, 0), new Vector2(0, 0), new Vector2(0, 0)],\r\n // );\r\n // }\r\n\r\n // pre = p;\r\n // }\r\n }\r\n }\r\n\r\n geo.computeFaceNormals();\r\n geo.verticesNeedUpdate = true;\r\n geo.uvsNeedUpdate = true;\r\n\r\n return geo;\r\n }\r\n\r\n\r\n InitDrawObject(renderType: RenderType = RenderType.Wireframe): Object3D\r\n {\r\n 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\r\n let obj = new Object3D;\r\n if (renderType === RenderType.Wireframe || renderType === RenderType.Jig)\r\n {\r\n let pts = [this._StartPoint, this._EndPoint];\r\n let geo = new BufferGeometry().setFromPoints(pts);\r\n let axisLine = new TLine(geo, ColorMaterial.GetWallLineMtl(1));\r\n axisLine.computeLineDistances();\r\n obj.add(axisLine);\r\n\r\n let line = new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(this.ColorIndex));\r\n obj.add(line);\r\n }\r\n else if (renderType === RenderType.Conceptual)\r\n {\r\n let mesh = new Mesh(this.MeshGeometry, ColorMaterial.GetConceptualMaterial(this.ColorIndex));\r\n let line = new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(this.ColorIndex));\r\n obj.add(mesh, line);\r\n }\r\n return obj;\r\n }\r\n\r\n /**\r\n * 重载:更新绘制的实体\r\n * @param {RenderType} renderType\r\n * @param {Object3D} obj\r\n */\r\n UpdateDrawObject(renderType: RenderType, obj: Object3D)\r\n {\r\n if (renderType === RenderType.Wireframe || renderType === RenderType.Jig)\r\n {\r\n let [axisLine, outWallLine] = obj.children as [TLine, TLine];\r\n\r\n BufferGeometryUtils.UpdatePts(axisLine.geometry, [this._StartPoint, this._EndPoint]);\r\n axisLine.computeLineDistances();\r\n\r\n if (outWallLine.geometry !== this.EdgeGeometry)\r\n {\r\n outWallLine.geometry.dispose();\r\n outWallLine.geometry = this.EdgeGeometry;\r\n }\r\n }\r\n else if (renderType === RenderType.Conceptual)\r\n {\r\n let mesh = obj.children[0] as Mesh;\r\n if (mesh.geometry !== this.MeshGeometry)\r\n {\r\n mesh.geometry.dispose();\r\n mesh.geometry = this.MeshGeometry;\r\n }\r\n\r\n let line = obj.children[1] as LineSegments;\r\n if (line.geometry !== this.EdgeGeometry)\r\n {\r\n line.geometry.dispose();\r\n line.geometry = this.EdgeGeometry;\r\n }\r\n }\r\n else if (renderType === RenderType.Physical)\r\n {\r\n let mesh = obj as Mesh;\r\n if (mesh.geometry !== this.MeshGeometry)\r\n {\r\n mesh.geometry.dispose();\r\n mesh.geometry = this.MeshGeometry;\r\n }\r\n }\r\n }\r\n //#endregion\r\n\r\n\r\n //#region -------------------------File-------------------------\r\n //对象从文件中读取数据,初始化自身\r\n protected override _ReadFile(file: CADFiler)\r\n {\r\n let ver = file.Read();\r\n super._ReadFile(file);\r\n\r\n this._StartPoint.set(file.Read(), file.Read(), file.Read());\r\n this._EndPoint.set(file.Read(), file.Read(), file.Read());\r\n }\r\n //对象将自身数据写入到文件.\r\n override WriteFile(file: CADFiler)\r\n {\r\n file.Write(1);\r\n super.WriteFile(file);\r\n\r\n file.WriteVec3(this._StartPoint);\r\n file.WriteVec3(this._EndPoint);\r\n }\r\n //#endregion\r\n}\r\n\r\napplyMixins(RoomWallLine, Line);\r\n","import { Vector2, Vector3 } from \"three\";\r\nimport { Matrix2 } from \"../../../Geometry/Matrix2\";\r\nimport { Arc } from \"../../Entity/Arc\";\r\nimport { Line } from \"../../Entity/Line\";\r\nimport { RoomWallBase } from \"../Entity/Wall/RoomWallBase\";\r\nimport { RoomWallLine } from \"../Entity/Wall/RoomWallLine\";\r\n\r\nexport const LEFT_ROTATE_MTX2 = new Matrix2().set(0, 1, -1, 0);\r\n\r\nconst TempDiffVec = new Vector3;\r\n\r\nexport interface GetCurveParam\r\n{\r\n // Direction: Vector3;\r\n // NegDirection: Vector3;\r\n // Length: number;\r\n // LeftDir: Vector3;\r\n // RightDir: Vector3;\r\n\r\n GetParamAtPoint(p: Vector3): number;\r\n GetParamAtPoint2(p: Vector3): [number, boolean];\r\n GetPointAtParam(param: number): Vector3;\r\n // OffsetPoint(p: Vector3, dis: number): Vector3;\r\n}\r\n\r\nexport function CreateGetCurveParam(curve: Line | Arc | RoomWallBase)\r\n{\r\n if (curve instanceof Line || curve instanceof RoomWallLine) return new GetLineParam(curve as Line);\r\n else return new GetArcParam(curve as Arc);\r\n}\r\n\r\nexport class GetLineParam\r\n{\r\n Direction: Vector3;\r\n Length: number;\r\n LeftDir: Vector3;\r\n\r\n private _StartPoint: Vector3;\r\n constructor(line: Line)\r\n {\r\n this.Direction = line.GetFistDeriv(0);\r\n this.Length = this.Direction.length();\r\n this.Direction.divideScalar(this.Length);\r\n this._StartPoint = line.StartPoint;\r\n\r\n this.LeftDir = this.Direction.clone();\r\n\r\n LEFT_ROTATE_MTX2.applyVector(this.LeftDir);\r\n }\r\n\r\n private _RightDir: Vector3;\r\n get RightDir()\r\n {\r\n if (!this._RightDir) this._RightDir = this.LeftDir.clone().negate();\r\n\r\n return this._RightDir;\r\n }\r\n\r\n private _NegDirection: Vector3;\r\n get NegDirection()\r\n {\r\n if (!this._NegDirection) this._NegDirection = this.Direction.clone().negate();\r\n return this._NegDirection;\r\n }\r\n\r\n GetParamAtPoint(p: Vector3)\r\n {\r\n TempDiffVec.subVectors(p, this._StartPoint);\r\n let param = this.Direction.dot(TempDiffVec);\r\n\r\n return param / this.Length;\r\n }\r\n\r\n GetParamAtPoint2(p: Vector3): [number, boolean]\r\n {\r\n let param = this.GetParamAtPoint(p);\r\n let np = this.GetPointAtParam(param);\r\n return [param, Vector2.prototype.distanceToSquared.call(np, p) < 1e-4];\r\n }\r\n\r\n GetPointAtParam(param: number)\r\n {\r\n return this.Direction.clone().multiplyScalar(param * this.Length).add(this._StartPoint);\r\n }\r\n\r\n OffsetPoint(p: Vector3, dis: number)\r\n {\r\n return p.add(this.LeftDir.clone().multiplyScalar(dis));\r\n }\r\n}\r\n\r\nexport class GetArcParam implements GetCurveParam\r\n{\r\n constructor(private _Arc: Arc)\r\n {\r\n\r\n }\r\n\r\n GetParamAtPoint2(p: Vector3): [number, boolean]\r\n {\r\n let param = this._Arc.GetParamAtAngle(this._Arc.GetAngleAtPoint(p));\r\n return [param, this._Arc.ParamOnCurve(param)];\r\n }\r\n\r\n GetPointAtParam(param: number): Vector3\r\n {\r\n return this._Arc.GetPointAtParam(param);\r\n }\r\n\r\n GetParamAtPoint(p: Vector3): number\r\n {\r\n return this._Arc.GetParamAtAngle(this._Arc.GetAngleAtPoint(p));\r\n }\r\n}\r\n","import { Point } from \"./Point\";\r\n\r\n//点表面积\r\nexport function Area(pts: Point[]): number\r\n{\r\n let cnt = pts.length;\r\n if (cnt < 3)\r\n return 0;\r\n let a = 0;\r\n for (let i = 0, j = cnt - 1; i < cnt; ++i)\r\n {\r\n a += (pts[j].x + pts[i].x) * (pts[j].y - pts[i].y);\r\n j = i;\r\n }\r\n return -a * 0.5;\r\n}\r\n","import { Point } from \"./Point\";\r\n\r\nexport class Vector2\r\n{\r\n x: number;\r\n y: number;\r\n readonly isVector2: boolean = true;\r\n constructor(x: number = 0, y: number = 0)\r\n {\r\n this.x = x;\r\n this.y = y;\r\n }\r\n get width(): number { return this.x; }\r\n set width(value: number) { this.x = value; }\r\n get height(): number { return this.y; }\r\n set height(value: number) { this.y = value; }\r\n set(x: number, y: number): Vector2\r\n {\r\n this.x = x;\r\n this.y = y;\r\n return this;\r\n }\r\n setScalar(scalar: number): Vector2\r\n {\r\n this.x = scalar;\r\n this.y = scalar;\r\n return this;\r\n }\r\n setX(x: number): Vector2\r\n {\r\n this.x = x;\r\n return this;\r\n }\r\n setY(y: number): Vector2\r\n {\r\n this.y = y;\r\n return this;\r\n }\r\n setComponent(index: number, value: number): Vector2\r\n {\r\n switch (index)\r\n {\r\n case 0: this.x = value; break;\r\n case 1: this.y = value; break;\r\n default: throw new Error('index is out of range: ' + index);\r\n }\r\n return this;\r\n }\r\n getComponent(index: number): number\r\n {\r\n switch (index)\r\n {\r\n case 0: return this.x;\r\n case 1: return this.y;\r\n default: throw new Error('index is out of range: ' + index);\r\n }\r\n }\r\n clone(): Vector2\r\n {\r\n return new (this.constructor as any)().copy(this);\r\n }\r\n copy(v: Vector2): Vector2\r\n {\r\n this.x = v.x;\r\n this.y = v.y;\r\n return this;\r\n }\r\n add(v: Point): Vector2\r\n {\r\n this.x += v.x;\r\n this.y += v.y;\r\n return this;\r\n }\r\n addScalar(s: number): Vector2\r\n {\r\n this.x += s;\r\n this.y += s;\r\n return this;\r\n }\r\n addVectors(a: Vector2, b: Vector2): Vector2\r\n {\r\n this.x = a.x + b.x;\r\n this.y = a.y + b.y;\r\n return this;\r\n }\r\n addScaledVector(v: Vector2, s: number): Vector2\r\n {\r\n this.x += v.x * s;\r\n this.y += v.y * s;\r\n return this;\r\n }\r\n sub(v: Vector2): Vector2\r\n {\r\n this.x -= v.x;\r\n this.y -= v.y;\r\n return this;\r\n }\r\n subScalar(s: number): Vector2\r\n {\r\n this.x -= s;\r\n this.y -= s;\r\n return this;\r\n }\r\n subVectors(a: Vector2, b: Vector2): Vector2\r\n {\r\n this.x = a.x - b.x;\r\n this.y = a.y - b.y;\r\n return this;\r\n }\r\n multiply(v: Vector2): Vector2\r\n {\r\n this.x *= v.x;\r\n this.y *= v.y;\r\n return this;\r\n }\r\n multiplyScalar(scalar: number): Vector2\r\n {\r\n if (isFinite(scalar))\r\n {\r\n this.x *= scalar;\r\n this.y *= scalar;\r\n } else\r\n {\r\n this.x = 0;\r\n this.y = 0;\r\n }\r\n return this;\r\n }\r\n divide(v: Vector2): Vector2\r\n {\r\n this.x /= v.x;\r\n this.y /= v.y;\r\n return this;\r\n }\r\n divideScalar(scalar: number): Vector2\r\n {\r\n return this.multiplyScalar(1 / scalar);\r\n }\r\n min(v: Point): Vector2\r\n {\r\n this.x = Math.min(this.x, v.x);\r\n this.y = Math.min(this.y, v.y);\r\n return this;\r\n }\r\n max(v: Point): Vector2\r\n {\r\n this.x = Math.max(this.x, v.x);\r\n this.y = Math.max(this.y, v.y);\r\n return this;\r\n }\r\n clamp(min: Vector2, max: Vector2): Vector2\r\n {\r\n // This function assumes min < max, if this assumption isn't true it will not operate correctly\r\n this.x = Math.max(min.x, Math.min(max.x, this.x));\r\n this.y = Math.max(min.y, Math.min(max.y, this.y));\r\n return this;\r\n }\r\n private static clampScalar_min = new Vector2();\r\n private static clampScalar_max = new Vector2();\r\n clampScalar(minVal: number, maxVal: number): Vector2\r\n {\r\n const min: Vector2 = Vector2.clampScalar_min.set(minVal, minVal);\r\n const max: Vector2 = Vector2.clampScalar_max.set(maxVal, maxVal);\r\n return this.clamp(min, max);\r\n }\r\n clampLength(min: number, max: number): Vector2\r\n {\r\n const length: number = this.length();\r\n return this.multiplyScalar(Math.max(min, Math.min(max, length)) / length);\r\n }\r\n floor(): Vector2\r\n {\r\n this.x = Math.floor(this.x);\r\n this.y = Math.floor(this.y);\r\n return this;\r\n }\r\n ceil(): Vector2\r\n {\r\n this.x = Math.ceil(this.x);\r\n this.y = Math.ceil(this.y);\r\n return this;\r\n }\r\n round(): Vector2\r\n {\r\n this.x = Math.round(this.x);\r\n this.y = Math.round(this.y);\r\n return this;\r\n }\r\n roundToZero(): Vector2\r\n {\r\n this.x = (this.x < 0) ? Math.ceil(this.x) : Math.floor(this.x);\r\n this.y = (this.y < 0) ? Math.ceil(this.y) : Math.floor(this.y);\r\n return this;\r\n }\r\n negate(): Vector2\r\n {\r\n this.x = - this.x;\r\n this.y = - this.y;\r\n return this;\r\n }\r\n dot(v: Vector2): number\r\n {\r\n return this.x * v.x + this.y * v.y;\r\n }\r\n lengthSq(): number\r\n {\r\n return this.x * this.x + this.y * this.y;\r\n }\r\n length(): number\r\n {\r\n return Math.sqrt(this.x * this.x + this.y * this.y);\r\n }\r\n lengthManhattan(): number\r\n {\r\n return Math.abs(this.x) + Math.abs(this.y);\r\n }\r\n normalize(): Vector2\r\n {\r\n return this.divideScalar(this.length());\r\n }\r\n angle(): number\r\n {\r\n // computes the angle in radians with respect to the positive x-axis\r\n let angle: number = Math.atan2(this.y, this.x);\r\n if (angle < 0) angle += 2 * Math.PI;\r\n return angle;\r\n }\r\n distanceTo(v: Vector2): number\r\n {\r\n return Math.sqrt(this.distanceToSquared(v));\r\n }\r\n distanceToSquared(v: Vector2): number\r\n {\r\n const dx: number = this.x - v.x, dy: number = this.y - v.y;\r\n return dx * dx + dy * dy;\r\n }\r\n distanceToManhattan(v: Vector2): number\r\n {\r\n return Math.abs(this.x - v.x) + Math.abs(this.y - v.y);\r\n }\r\n setLength(length: number): Vector2\r\n {\r\n return this.multiplyScalar(length / this.length());\r\n }\r\n lerp(v: Vector2, alpha: number): Vector2\r\n {\r\n this.x += (v.x - this.x) * alpha;\r\n this.y += (v.y - this.y) * alpha;\r\n return this;\r\n }\r\n lerpVectors(v1: Vector2, v2: Vector2, alpha: number): Vector2\r\n {\r\n return this.subVectors(v2, v1).multiplyScalar(alpha).add(v1);\r\n }\r\n equals(v: Vector2): boolean\r\n {\r\n return ((v.x === this.x) && (v.y === this.y));\r\n }\r\n fromArray(array: Float32Array | number[], offset: number = 0): Vector2\r\n {\r\n this.x = array[offset];\r\n this.y = array[offset + 1];\r\n return this;\r\n }\r\n toArray(array: Float32Array | number[] = [], offset: number = 0): Float32Array | number[]\r\n {\r\n array[offset] = this.x;\r\n array[offset + 1] = this.y;\r\n return array;\r\n }\r\n fromAttribute(attribute: any, index: number, offset: number = 0): Vector2\r\n {\r\n index = index * attribute.itemSize + offset;\r\n this.x = attribute.array[index];\r\n this.y = attribute.array[index + 1];\r\n return this;\r\n }\r\n rotateAround(center: Vector2, angle: number): Vector2\r\n {\r\n const c: number = Math.cos(angle), s: number = Math.sin(angle);\r\n const x: number = this.x - center.x;\r\n const y: number = this.y - center.y;\r\n this.x = x * c - y * s + center.x;\r\n this.y = x * s + y * c + center.y;\r\n return this;\r\n }\r\n}\r\n","import { Vector2 } from \"./Vector2\";\r\nimport { Point } from \"./Point\";\r\n\r\nexport class Box2\r\n{\r\n min: Vector2;\r\n max: Vector2;\r\n constructor(min = new Vector2(+ Infinity, + Infinity), max = new Vector2(- Infinity, - Infinity))\r\n {\r\n this.min = min;\r\n this.max = max;\r\n }\r\n\r\n get area(): number\r\n {\r\n return (this.max.x - this.min.x) * (this.max.y - this.min.y);\r\n }\r\n\r\n set(min: Vector2, max: Vector2): Box2\r\n {\r\n this.min.copy(min);\r\n this.max.copy(max);\r\n return this;\r\n }\r\n setFromPoints(points: Iterable): Box2\r\n {\r\n this.makeEmpty();\r\n for (let p of points)\r\n {\r\n this.expandByPoint(p);\r\n }\r\n return this;\r\n }\r\n private static _setFromCenterAndSize_v1 = new Vector2();\r\n setFromCenterAndSize(center: Vector2, size: Vector2): Box2\r\n {\r\n const v1 = Box2._setFromCenterAndSize_v1;\r\n const halfSize = v1.copy(size).multiplyScalar(0.5);\r\n this.min.copy(center).sub(halfSize);\r\n this.max.copy(center).add(halfSize);\r\n return this;\r\n }\r\n clone(): Box2\r\n {\r\n return new (this.constructor as any)().copy(this);\r\n }\r\n copy(box: Box2): Box2\r\n {\r\n this.min.copy(box.min);\r\n this.max.copy(box.max);\r\n return this;\r\n }\r\n makeEmpty(): Box2\r\n {\r\n this.min.x = this.min.y = + Infinity;\r\n this.max.x = this.max.y = - Infinity;\r\n return this;\r\n }\r\n isEmpty(): boolean\r\n {\r\n // this is a more robust check for empty than (volume <= 0) because volume can get positive with two negative axes\r\n return (this.max.x < this.min.x) || (this.max.y < this.min.y);\r\n }\r\n getCenter(result: Vector2 = new Vector2()): Vector2\r\n {\r\n return this.isEmpty() ? result.set(0, 0) : result.addVectors(this.min, this.max).multiplyScalar(0.5);\r\n }\r\n getSize(result: Vector2 = new Vector2()): Vector2\r\n {\r\n return this.isEmpty() ? result.set(0, 0) : result.subVectors(this.max, this.min);\r\n }\r\n expandByPoint(point: Point): Box2\r\n {\r\n this.min.min(point);\r\n this.max.max(point);\r\n return this;\r\n }\r\n expandByVector(vector: Vector2): Box2\r\n {\r\n this.min.sub(vector);\r\n this.max.add(vector);\r\n return this;\r\n }\r\n expandByScalar(scalar: number): Box2\r\n {\r\n this.min.addScalar(- scalar);\r\n this.max.addScalar(scalar);\r\n return this;\r\n }\r\n containsPoint(point: Vector2): boolean\r\n {\r\n if (point.x < this.min.x || point.x > this.max.x ||\r\n point.y < this.min.y || point.y > this.max.y)\r\n {\r\n return false;\r\n }\r\n return true;\r\n }\r\n containsBox(box: Box2): boolean\r\n {\r\n if ((this.min.x <= box.min.x) && (box.max.x <= this.max.x) &&\r\n (this.min.y <= box.min.y) && (box.max.y <= this.max.y))\r\n {\r\n return true;\r\n }\r\n return false;\r\n }\r\n getParameter(point: Vector2, result: Vector2 = new Vector2()): Vector2\r\n {\r\n // This can potentially have a divide by zero if the box\r\n // has a size dimension of 0.\r\n return result.set(\r\n (point.x - this.min.x) / (this.max.x - this.min.x),\r\n (point.y - this.min.y) / (this.max.y - this.min.y)\r\n );\r\n }\r\n intersectsBox(box: Box2): boolean\r\n {\r\n // using 6 splitting planes to rule out intersections.\r\n if (box.max.x < this.min.x || box.min.x > this.max.x ||\r\n box.max.y < this.min.y || box.min.y > this.max.y)\r\n {\r\n return false;\r\n }\r\n return true;\r\n }\r\n clampPoint(point: Vector2, result: Vector2 = new Vector2()): Vector2\r\n {\r\n return result.copy(point).clamp(this.min, this.max);\r\n }\r\n private static _distanceToPoint_v1 = new Vector2();\r\n distanceToPoint(point: Vector2): number\r\n {\r\n const v1 = Box2._distanceToPoint_v1;\r\n const clampedPoint = v1.copy(point).clamp(this.min, this.max);\r\n return clampedPoint.sub(point).length();\r\n }\r\n intersect(box: Box2): Box2\r\n {\r\n this.min.max(box.min);\r\n this.max.min(box.max);\r\n return this;\r\n }\r\n union(box: Box2): Box2\r\n {\r\n this.min.min(box.min);\r\n this.max.max(box.max);\r\n return this;\r\n }\r\n translate(offset: Point): Box2\r\n {\r\n this.min.add(offset);\r\n this.max.add(offset);\r\n return this;\r\n }\r\n equals(box: Box2): boolean\r\n {\r\n return box.min.equals(this.min) && box.max.equals(this.max);\r\n }\r\n};\r\n","import { Area } from \"../Common/Area\";\r\nimport { Box2 } from \"../Common/Box2\";\r\nimport { clipperCpp } from \"../Common/ClipperCpp\";\r\nimport { NestFiler } from \"../Common/Filer\";\r\nimport { Point } from \"../Common/Point\";\r\nimport { equaln } from \"../Common/Util\";\r\nimport { Vector2 } from \"../Common/Vector2\";\r\n\r\n/**\r\n * 轮廓路径类\r\n * 可以求NFP,和保存NFPCahce\r\n * 因为NFP结果是按照最低点移动的,所以将点旋转后,按照盒子将点移动到0点.\r\n */\r\nexport class Path\r\n{\r\n Id: number;\r\n Points: Point[];\r\n OutsideNFPCache: { [key: number]: Point[][]; } = {};\r\n InsideNFPCache: { [key: number]: Point[][]; } = {};\r\n\r\n constructor(public OrigionPoints?: Point[], rotation: number = 0)\r\n {\r\n if (OrigionPoints)\r\n this.Init(OrigionPoints, rotation);\r\n }\r\n\r\n Origion: Path;\r\n //点表在旋转后的原始最小点.使用这个点将轮廓移动到0点\r\n OrigionMinPoint: Vector2;\r\n Rotation: number;\r\n\r\n Size: Vector2;//序列化\r\n private Init(origionPoints: Point[], rotation: number)\r\n {\r\n this.Rotation = rotation;\r\n if (rotation === 0)\r\n this.Points = origionPoints.map(p => { return { ...p }; });\r\n else\r\n {\r\n let c = Math.cos(rotation);\r\n let s = Math.sin(rotation);\r\n\r\n let npts: Point[] = [];\r\n for (let p of origionPoints)\r\n {\r\n let x = p.x;\r\n let y = p.y;\r\n const x1 = x * c - y * s;\r\n const y1 = x * s + y * c;\r\n npts.push({ x: x1, y: y1 });\r\n }\r\n this.Points = npts;\r\n }\r\n\r\n let box = new Box2();\r\n let v2 = new Vector2();\r\n for (let p of this.Points)\r\n {\r\n v2.x = p.x;\r\n v2.y = p.y;\r\n box.expandByPoint(v2);\r\n }\r\n\r\n this.OrigionMinPoint = box.min;\r\n this.Size = box.max.sub(box.min);\r\n\r\n for (let p of this.Points)\r\n {\r\n p.x -= box.min.x;\r\n p.y -= box.min.y;\r\n }\r\n }\r\n\r\n GetNFPs(path: Path, outside: boolean): (Point[])[]\r\n {\r\n // 寻找内轮廓时,面积应该比本path小,这个判断移交给使用者自己判断\r\n // if (!outside && this.Area < path.Area) return [];\r\n let nfps = clipperCpp.lib.minkowskiSumPath(this.BigIntPoints, path.MirrorPoints, true);\r\n\r\n //必须删除自交,否则将会出错\r\n nfps = clipperCpp.lib.simplifyPolygons(nfps);\r\n nfps = nfps.filter((nfp) =>\r\n {\r\n let area = Area(nfp);\r\n // if (area > 1) return outside;//第一个不一定是外轮廓,但是面积为正时肯定为外轮廓 (因为使用了简化多段线,所以这个代码已经不能有了)\r\n if (Math.abs(area) < 10) return false;//应该不用在移除这个了\r\n\r\n let { x, y } = nfp[0];\r\n if (outside)\r\n {\r\n if (this.Area > path.Area)\r\n {\r\n let p = { x: path.InPoint.x + x, y: path.InPoint.y + y };\r\n if (p.x < 0 || p.y < 0 || p.x > this.BigSize.x || p.y > this.BigSize.y)\r\n return true;\r\n let dir = clipperCpp.lib.pointInPolygon(p, this.BigIntPoints);\r\n return dir === 0;\r\n }\r\n else\r\n {\r\n let p = { x: this.InPoint.x - x, y: this.InPoint.y - y };\r\n if (p.x < 0 || p.y < 0 || p.x > path.BigSize.x || p.y > path.BigSize.y)\r\n return true;\r\n let dir = clipperCpp.lib.pointInPolygon(p, path.BigIntPoints);\r\n return dir === 0;\r\n }\r\n }\r\n else\r\n {\r\n let p = { x: path.InPoint.x + x, y: path.InPoint.y + y };\r\n if (p.x < 0 || p.y < 0 || p.x > this.BigSize.x || p.y > this.BigSize.y)\r\n return false;\r\n let dir = clipperCpp.lib.pointInPolygon(p, this.BigIntPoints);\r\n return dir === 1;\r\n }\r\n });\r\n return nfps;\r\n }\r\n\r\n GetOutsideNFP(path: Path): (Point[])[]\r\n {\r\n let nfps = this.OutsideNFPCache[path.Id];\r\n if (nfps) return nfps;\r\n\r\n if (this.IsRect && path.IsRect)\r\n {\r\n let [ax, ay] = [this.Size.x * 1e4, this.Size.y * 1e4];\r\n let [bx, by] = [path.Size.x * 1e4, path.Size.y * 1e4];\r\n nfps = [[\r\n { x: -bx, y: -by },\r\n { x: ax, y: -by },\r\n { x: ax, y: ay },\r\n { x: -bx, y: ay },\r\n ]];\r\n }\r\n else\r\n nfps = this.GetNFPs(path, true);\r\n this.OutsideNFPCache[path.Id] = nfps;\r\n //虽然有这种神奇的特性,但是好像并不会提高性能。\r\n // path.OutsideNFPCache[this.id] = (this, nfps.map(nfp =>\r\n // {\r\n // return nfp.map(p =>\r\n // {\r\n // return { x: -p.x, y: -p.y };\r\n // });\r\n // }));\r\n return nfps;\r\n }\r\n GetInsideNFP(path: Path): (Point[])[]\r\n {\r\n if (path.Area > this.Area) return;\r\n let nfp = this.InsideNFPCache[path.Id];\r\n if (nfp) return nfp;\r\n\r\n let nfps: (Point[])[];\r\n if (this.IsRect)\r\n {\r\n let [ax, ay] = [this.Size.x * 1e4, this.Size.y * 1e4];\r\n let [bx, by] = [path.Size.x * 1e4, path.Size.y * 1e4];\r\n\r\n let l = ax - bx;\r\n let h = ay - by;\r\n\r\n const MinNumber = 200;//清理的数值是100,所以200是可以接受的, 200=0.020问题不大(过盈配合)\r\n if (l < -MinNumber || h < -MinNumber)\r\n return;\r\n\r\n if (l < MinNumber)\r\n l = MinNumber;\r\n else\r\n l += MinNumber;\r\n\r\n if (h < MinNumber)\r\n h = MinNumber;\r\n else\r\n h += MinNumber;\r\n\r\n nfps = [[\r\n { x: 0, y: 0 },\r\n { x: l, y: 0 },\r\n { x: l, y: h },\r\n { x: 0, y: h }\r\n ]];\r\n }\r\n else\r\n nfps = this.GetNFPs(path, false);\r\n\r\n if (path.Id !== undefined)\r\n this.InsideNFPCache[path.Id] = nfps;\r\n return nfps;\r\n }\r\n\r\n private _InPoint: Point;\r\n\r\n /**\r\n * 用这个点来检测是否在Path内部\r\n */\r\n private get InPoint()\r\n {\r\n if (this._InPoint) return this._InPoint;\r\n let mp = { x: (this.Points[0].x + this.Points[1].x) / 2, y: (this.Points[0].y + this.Points[1].y) / 2 };\r\n let normal = new Vector2(this.Points[1].x - this.Points[0].x, this.Points[1].y - this.Points[0].y).normalize();\r\n // [normal.x, normal.y] = [normal.y, -normal.x];\r\n mp.x -= normal.y;\r\n mp.y += normal.x;\r\n\r\n mp.x *= 1e4;\r\n mp.y *= 1e4;\r\n this._InPoint = mp;\r\n return mp;\r\n }\r\n\r\n protected _BigIntPoints: Point[];\r\n get BigIntPoints()\r\n {\r\n if (this._BigIntPoints) return this._BigIntPoints;\r\n this._BigIntPoints = this.Points.map(p =>\r\n {\r\n return {\r\n x: Math.round(p.x * 1e4),\r\n y: Math.round(p.y * 1e4),\r\n };\r\n });\r\n return this._BigIntPoints;\r\n }\r\n\r\n private _BigSize: Vector2;\r\n get BigSize()\r\n {\r\n if (this._BigSize) return this._BigSize;\r\n this._BigSize = new Vector2(this.Size.x * 1e4, this.Size.y * 1e4);\r\n return this._BigSize;\r\n }\r\n\r\n protected _MirrorPoints: Point[];\r\n get MirrorPoints()\r\n {\r\n if (!this._MirrorPoints)\r\n this._MirrorPoints = this.BigIntPoints.map(p =>\r\n {\r\n return { x: -p.x, y: -p.y };\r\n });\r\n\r\n return this._MirrorPoints;\r\n }\r\n\r\n protected _BoundingBox: Box2;\r\n get BoundingBox()\r\n {\r\n if (!this._BoundingBox)\r\n this._BoundingBox = new Box2(new Vector2, this.Size);\r\n return this._BoundingBox;\r\n }\r\n\r\n protected _Area: number;\r\n get Area()\r\n {\r\n if (this._Area === undefined)\r\n this._Area = Area(this.Points);\r\n return this._Area;\r\n }\r\n set Area(a: number)\r\n {\r\n this._Area = a;\r\n }\r\n\r\n private _IsRect: boolean;\r\n get IsRect()\r\n {\r\n if (this._IsRect === undefined)\r\n {\r\n let s = this.BoundingBox.getSize(new Vector2);\r\n this._IsRect = equaln(this.Area, s.x * s.y, 1);\r\n }\r\n return this._IsRect;\r\n }\r\n\r\n ReadFile(file: NestFiler): void\r\n {\r\n let ver = file.Read();\r\n this.Id = file.Read();\r\n let arr = file.Read();\r\n this.Points = [];\r\n for (let i = 0; i < arr.length; i += 2)\r\n {\r\n let p = { x: arr[i], y: arr[i + 1] };\r\n this.Points.push(p);\r\n }\r\n\r\n this.Size = new Vector2(file.Read(), file.Read());\r\n this._Area = file.Read();\r\n let id = file.Read();\r\n if (id !== -1)\r\n {\r\n this.Origion = id;\r\n this.Rotation = file.Read();\r\n this.OrigionMinPoint = new Vector2(file.Read(), file.Read());\r\n }\r\n }\r\n WriteFile(file: NestFiler): void\r\n {\r\n file.Write(1);//ver\r\n file.Write(this.Id);\r\n let arr: number[] = [];\r\n for (let p of this.Points)\r\n arr.push(p.x, p.y);\r\n file.Write(arr);\r\n\r\n file.Write(this.Size.x);\r\n file.Write(this.Size.y);\r\n file.Write(this._Area);\r\n if (this.Origion && this.Origion.Id)\r\n {\r\n //如果有原始的id,则传递它,以便后续进行NFP复用.\r\n file.Write(this.Origion.Id);\r\n file.Write(this.Rotation);\r\n file.Write(this.OrigionMinPoint.x);\r\n file.Write(this.OrigionMinPoint.y);\r\n }\r\n else\r\n file.Write(-1);\r\n }\r\n}\r\n\r\n/**\r\n * 平移点表,返回新点表\r\n */\r\nexport function TranslatePath(pts: Point[], p: Point): Point[]\r\n{\r\n return pts.map(px =>\r\n {\r\n return { x: p.x + px.x, y: p.y + px.y };\r\n });\r\n}\r\n\r\nexport function TranslatePath_Self(pts: Point[], mx: number, my: number): Point[]\r\n{\r\n for (let pt of pts)\r\n {\r\n pt.x += mx;\r\n pt.y += my;\r\n }\r\n return pts;\r\n}\r\n\r\n//缩放点表,返回原始点表\r\nexport function PathScale(pts: Point[], scale: number): Point[]\r\n{\r\n for (let p of pts)\r\n {\r\n p.x *= scale;\r\n p.y *= scale;\r\n }\r\n return pts;\r\n}\r\n","import { Point } from \"../Common/Point\";\r\nimport { Path } from \"./Path\";\r\n\r\nexport class NestCache\r\n{\r\n //放置零件时,命中缓存的次数\r\n static CachePartPosCount = 0;\r\n //放置零件时,命中无法放置缓存的次数\r\n static CacheNoSetCount = 0;//noset\r\n\r\n static PositionCache: { [key: string]: Point; } = {};\r\n static NoPutCache: { [key: string]: Set; } = {};\r\n private static CacheRect = new Map();\r\n\r\n /**\r\n * 用于创建原点在0点的矩形路径\r\n */\r\n static CreatePath(x: number, y: number, knifRadius = 3.5): Path\r\n {\r\n let minX = -knifRadius;\r\n let maxX = x + knifRadius;\r\n let minY = -knifRadius;\r\n let maxY = y + knifRadius;\r\n return new Path([\r\n { x: minX, y: minY },\r\n { x: maxX, y: minY },\r\n { x: maxX, y: maxY },\r\n { x: minX, y: maxY },\r\n ]);\r\n }\r\n\r\n static Clear()\r\n {\r\n this.CachePartPosCount = 0;\r\n this.CacheNoSetCount = 0;\r\n this.CacheRect.clear();\r\n this.PositionCache = {};\r\n }\r\n}\r\n","import { Point } from \"../Common/Point\";\r\nimport { Polyline } from \"../../DatabaseServices/Entity/Polyline\";\r\nimport { AsVector2 } from \"../../Geometry/GeUtils\";\r\n\r\nexport function Path2Polyline(path: Point[]): Polyline\r\n{\r\n let pl = new Polyline();\r\n pl.LineData = path.map(p =>\r\n {\r\n return { pt: AsVector2(p), bul: 0 };\r\n });\r\n pl.CloseMark = true;\r\n return pl;\r\n}\r\n","import { EndType, JoinType } from \"js-angusj-clipper/web\";\r\nimport { Arc } from \"../../DatabaseServices/Entity/Arc\";\r\nimport { Circle } from \"../../DatabaseServices/Entity/Circle\";\r\nimport { Polyline } from \"../../DatabaseServices/Entity/Polyline\";\r\nimport { polar } from \"../../Geometry/GeUtils\";\r\nimport { clipperCpp } from \"../Common/ClipperCpp\";\r\nimport { Point } from \"../Common/Point\";\r\nimport { PathScale } from \"../Core/Path\";\r\nimport { Circle2Points } from \"./Curves2Parts\";\r\n\r\nexport let Rotations = [\r\n [0, Math.PI],\r\n [Math.PI / 2, Math.PI * 1.5],\r\n [0, Math.PI, Math.PI / 2, Math.PI * 1.5],\r\n];\r\n\r\n/**\r\n * 针对板件的曲线变点表做的特殊优化\r\n */\r\nexport function Curves2Points(cu: Circle | Polyline, outside: boolean, knifeRadius: number): [(Circle | Polyline), Point[]]\r\n{\r\n if (cu instanceof Circle)\r\n return [cu.Clone(), Circle2Points(cu, knifeRadius, 8, outside)];\r\n else\r\n return Polyline2Points(cu, outside, knifeRadius);\r\n}\r\n\r\nexport function Polyline2Points(pl: Polyline, outside: boolean, knifeRadius: number): [Polyline, Point[]]\r\n{\r\n let pts: Point[] = [];\r\n\r\n if (!outside) knifeRadius = -knifeRadius;\r\n if (pl.IsClockWise) pl.Reverse();\r\n for (let i = 0; i < pl.EndParam; i++)\r\n {\r\n pts.push(pl.GetPointAtParam(i));\r\n\r\n let bul = pl.GetBulgeAt(i);\r\n if (bul !== 0)\r\n {\r\n let arc = pl.GetCurveAtIndex(i) as Arc;\r\n\r\n let allAngle = arc.AllAngle;\r\n let arcLength = arc.Length;\r\n\r\n let minCount = Math.floor(allAngle * 4 / Math.PI);\r\n\r\n let splitCount = Math.round(allAngle / 0.4);\r\n if (arcLength < 300)\r\n splitCount = Math.max(2, minCount);\r\n else\r\n splitCount = Math.max(arcLength / 200, splitCount, 2, minCount);\r\n\r\n let radius = arc.Radius;\r\n if (outside === bul > 0)\r\n radius = radius / Math.cos(allAngle / (splitCount * 2));\r\n\r\n let cp = arc.Center;\r\n for (let j = 0.5; j < splitCount; j++)\r\n {\r\n let a = arc.GetAngleAtParam(j * (1 / splitCount));\r\n let p = polar(cp.clone(), a, radius);\r\n pts.push(p);\r\n }\r\n }\r\n }\r\n\r\n if (knifeRadius !== 0)\r\n {\r\n pts = clipperCpp.lib.offsetToPaths({\r\n delta: knifeRadius * 1e4,\r\n offsetInputs: [{ data: PathScale(pts, 1e4), joinType: JoinType.Miter, endType: EndType.ClosedPolygon }]\r\n })[0];\r\n PathScale(pts, 1e-4);\r\n }\r\n return [pl, pts];\r\n}\r\n","import polylabel from \"polylabel\";\r\nimport { Vector3 } from \"three\";\r\nimport { Area } from \"../../../Nest/Common/Area\";\r\nimport { Point } from \"../../../Nest/Common/Point\";\r\nimport { Max } from \"../../../Nest/Common/Util\";\r\nimport { Path2Polyline } from \"../../../Nest/Converter/Path2Polyline\";\r\nimport { NestCache } from \"../../../Nest/Core/NestCache\";\r\nimport { Path, PathScale, TranslatePath_Self } from \"../../../Nest/Core/Path\";\r\nimport { Contour } from \"../../Contour\";\r\nimport { Polyline } from \"../../Entity/Polyline\";\r\nimport { Shape } from \"../../Shape\";\r\nimport { ShapeManager } from \"../../ShapeManager\";\r\n\r\nexport const TEXT_BOX = NestCache.CreatePath(570, 110);\r\n\r\n//分析文字放置位置\r\nexport function ParseRegionTextPos(contour: Point[], holes: (Point[])[])\r\n{\r\n let hasTextBox = true;\r\n let path = new Path(contour);\r\n let nfps: Polyline[] = path.GetInsideNFP(TEXT_BOX)?.map(nfp => Path2Polyline(TranslatePath_Self(PathScale(nfp, 1e-4), path.OrigionMinPoint.x, path.OrigionMinPoint.y))); //可能无法获得\r\n if (!nfps || nfps.length === 0)\r\n {\r\n nfps = [Path2Polyline(contour)];\r\n hasTextBox = false;\r\n }\r\n\r\n let holenfps: Contour[] = [];\r\n for (let hole of holes)\r\n {\r\n let hpath = new Path(hole);\r\n let nfps = hpath.GetOutsideNFP(TEXT_BOX);\r\n let nfp = nfps[Max(nfps, (n1, n2) => Area(n2) > Area(n1))];\r\n\r\n let pl = Path2Polyline(TranslatePath_Self(PathScale(nfp, 1e-4), hpath.OrigionMinPoint.x, hpath.OrigionMinPoint.y));\r\n let box = pl.BoundingBox;\r\n\r\n let boxpl = new Polyline().RectangleFrom2Pt(new Vector3(box.min.x - 1e5, box.min.y - 1), new Vector3(box.max.x + 1e5, box.min.y + 1));\r\n\r\n let con1 = Contour.CreateContour(pl, false);\r\n let con2 = Contour.CreateContour(boxpl, false);\r\n\r\n holenfps.push(\r\n ...con1.UnionBoolOperation(con2).contours\r\n );\r\n }\r\n\r\n let shapes = nfps.map(pl => new Shape(Contour.CreateContour(pl, false)));\r\n let subShapes = new ShapeManager;\r\n holenfps.forEach(pl =>\r\n {\r\n subShapes.UnionBoolOperation(new ShapeManager([new Shape(pl)]));\r\n });\r\n\r\n let resShapes: Shape[] = [];\r\n for (let shape of shapes)\r\n {\r\n // TestDraw(shape.Outline.Curve, 6);\r\n resShapes.push(...shape.SubstactBoolOperation(subShapes.ShapeList)); //可能减完丢了\r\n }\r\n\r\n if (resShapes.length === 0)\r\n resShapes = shapes;\r\n\r\n let maxDist = -Infinity;\r\n let minp: number[];\r\n let curve: Polyline;\r\n\r\n for (let shape of resShapes)\r\n {\r\n let pl = shape.Outline.Curve as Polyline;\r\n if (pl.Area < 1)\r\n {\r\n if (!minp) minp = pl.BoundingBox.getCenter(new Vector3).toArray();\r\n continue;\r\n }\r\n // TestDraw(pl, 3); //绘制裁剪后的线\r\n let p = polylabel([pl.LineData.map(p => p.pt.toArray())], 1.0);//这里不再需要转换 因为我们传递进来的就是没有凸度的点表\r\n\r\n let dist = p[\"distance\"];\r\n if (dist > maxDist)\r\n {\r\n maxDist = dist;\r\n let pos = pl.Position;\r\n minp = p;\r\n minp[0] += pos.x;\r\n minp[1] += pos.y;\r\n\r\n curve = pl;\r\n }\r\n }\r\n\r\n let p = new Vector3(minp[0], minp[1]);\r\n //左右均分\r\n // TestDraw(new Point(p));\r\n // let line = new Line(p, p.clone().setX(minp[0] + 1));\r\n\r\n // let pts = curve.IntersectWith(line, IntersectOption.ExtendArg);\r\n // pts.push(p);\r\n // pts.sort(ComparePoint(\"xyz\"));\r\n // let index = pts.indexOf(p);\r\n // p = midPoint(pts[index - 1], pts[index + 1]);\r\n // TestDraw(new Point(p));\r\n\r\n // //上下居中\r\n // line = new Line(p, p.clone().setY(p.y + 1));\r\n // pts = curve.IntersectWith(line, IntersectOption.ExtendArg);\r\n // pts.push(p);\r\n // pts.sort(ComparePoint(\"xyz\"));\r\n // index = pts.indexOf(p);\r\n // p = midPoint(pts[index - 1], pts[index + 1]);\r\n // TestDraw(new Point(p));\r\n\r\n if (hasTextBox)\r\n {\r\n p.x += 280;\r\n p.y += 60;\r\n }\r\n return p;\r\n}\r\n","import Flatbush from 'flatbush';\r\nimport { Vector3 } from 'three';\r\nimport { Polyline } from '../../Entity/Polyline';\r\nimport { RoomFlatBase, UpdateTempPolyline } from \"../Entity/Flat/RoomFlatBase\";\r\nimport { RoomRegion } from \"../Entity/Region/RoomRegion\";\r\n\r\n//区域更迭(新老新区交换)\r\nexport class RegionReplacement\r\n{\r\n fb: Flatbush;\r\n contours: [Polyline, Polyline[]][] = [];\r\n constructor(private oldRegions: RoomRegion[])\r\n {\r\n if (oldRegions.length === 0) return;\r\n this.fb = new Flatbush(oldRegions.length);\r\n oldRegions.forEach(r =>\r\n {\r\n let flat = (r.Floor?.Object ?? r.Top.Object) as RoomFlatBase;\r\n //TODO:备份轮廓和网洞\r\n let box = flat.BoundingBox;\r\n this.fb.add(box.min.x, box.min.y, box.max.x, box.max.y);\r\n\r\n this.contours.push([flat.Contour.Clone().ApplyMatrix(flat.OCSNoClone), flat.HoleDatas.map(h => UpdateTempPolyline(h).Clone().ApplyMatrix(flat.OCSNoClone))]);\r\n });\r\n this.fb.finish();\r\n }\r\n\r\n //获得旧的区域\r\n GetReplaceOldReg(p: Vector3)\r\n {\r\n if (!this.fb) return;\r\n\r\n let ids = this.fb.search(p.x - 1, p.y - 1, p.x + 1, p.y + 1);\r\n for (let id of ids)\r\n {\r\n let [con, holes] = this.contours[id];\r\n if (con.PtInCurve(p) && !holes.some(h => h.PtInCurve(p)))\r\n {\r\n return this.oldRegions[id];\r\n }\r\n }\r\n }\r\n}\r\n","import { EntitysUpdateWrap } from \"../../../Common/EntityUpdateWrap\";\r\nimport { Route } from \"../../../Geometry/CurveMap\";\r\nimport { RegionParse } from \"../../../Geometry/RegionParse\";\r\nimport { Polyline2Points } from \"../../../Nest/Converter/Curves2Points\";\r\nimport { ContourTreeNode } from \"../../../ueapi\";\r\nimport { Contour } from \"../../Contour\";\r\nimport { Database } from \"../../Database\";\r\nimport { Curve } from \"../../Entity/Curve\";\r\nimport { Polyline } from \"../../Entity/Polyline\";\r\nimport { UpdateTempPolyline } from \"../Entity/Flat/RoomFlatBase\";\r\nimport { RoomFlatFloor } from \"../Entity/Flat/RoomFlatFloor\";\r\nimport { RoomFlatTop } from \"../Entity/Flat/RoomFlatTop\";\r\nimport { RoomRegion } from \"../Entity/Region/RoomRegion\";\r\nimport { CURVE_FACE_TYPE_KEY, RoomWallBase, WallFaceType } from \"../Entity/Wall/RoomWallBase\";\r\nimport { ParseRegionTextPos } from \"./ParseRegionTextPos\";\r\nimport { RegionReplacement } from \"./RegionReplacement\";\r\n\r\n//获取所有的曲线 ?:并且知道每个曲线是墙体的左边还是右边 (有没有用?)\r\n\r\n//分析面域\r\n\r\n//分析可用的内空间(墙面方向指向空间内部为内空间) 否则为外墙空间\r\n\r\n//构造面域树? 不需要了? 还是需要的 需要一个最大的天花板\r\n\r\n//区域对象 (地面+天花?)\r\n\r\n\r\n\r\n/**\r\n * 区域分析(房间+外墙+全屋顶)\r\n */\r\nexport class RoomRegionParse\r\n{\r\n rr: RegionReplacement;//区域替换工具\r\n reped: Set;//已经替换的区域\r\n oldregs: RoomRegion[];//旧的区域\r\n\r\n /**\r\n * @param _UpdateDb 当提供db时,我们更新了区域的信息\r\n */\r\n constructor(private _UpdateDb: Database)\r\n {\r\n if (this._UpdateDb)\r\n {\r\n this.oldregs = this._UpdateDb.ModelSpace.Entitys.filter(e => !e.IsErase && e instanceof RoomRegion) as RoomRegion[];\r\n this.rr = new RegionReplacement(this.oldregs);\r\n this.reped = new Set();\r\n }\r\n }\r\n\r\n Do(walls: RoomWallBase[])\r\n {\r\n let curves: Curve[] = [];\r\n\r\n let aloneWalls: RoomWallBase[] = [];\r\n\r\n let leftCurves = new Set();\r\n\r\n let maxZ = -Infinity;\r\n let minZ = walls[0].Z;\r\n for (let wall of walls)\r\n {\r\n maxZ = Math.max(wall.Z + wall.Height, maxZ);\r\n if (!wall.LeftCurves)\r\n {\r\n aloneWalls.push(wall);\r\n continue;\r\n }\r\n\r\n for (let c of wall.LeftCurves)\r\n {\r\n curves.push(c);\r\n leftCurves.add(c);\r\n }\r\n for (let c of wall.RightCurves)\r\n curves.push(c);\r\n\r\n for (let c of wall.LidCurves)\r\n curves.push(c);\r\n }\r\n\r\n const REGION_PARSE_NUM = 3;\r\n const POLYLINE_JOIN_FUZZ = Math.pow(10, -REGION_PARSE_NUM);\r\n\r\n let parse = new RegionParse(curves, REGION_PARSE_NUM);\r\n\r\n for (let [orgArc, arcs] of parse.ExpLineMap)\r\n {\r\n if (leftCurves.has(orgArc))\r\n for (let arc of arcs)\r\n leftCurves.add(arc);\r\n }\r\n\r\n let regionPolylines: Polyline[] = [];\r\n\r\n let map = new Map();\r\n //分析内外墙1内2外\r\n for (let routes of parse.RegionsOutline)\r\n {\r\n let pl = Polyline.Combine(routes.map(r => r.curve), POLYLINE_JOIN_FUZZ);\r\n\r\n // for (let i = 0; i < routes.length; i++)\r\n // {\r\n if (leftCurves.has(routes[0].curve))\r\n pl.ColorIndex = routes[0].isReverse ? 1 : 2;\r\n else //if (right.has(routes[0].curve))\r\n pl.ColorIndex = routes[0].isReverse ? 2 : 1;\r\n // else //因为盖子不分左右 所以我们忽略盖子 (现在盖子和右侧的一致)\r\n // continue;\r\n\r\n // break;\r\n // }\r\n\r\n // TestDraw(routes[0].curve); //test\r\n regionPolylines.push(pl);\r\n map.set(pl, routes);\r\n }\r\n\r\n //不可能有内部轮廓 如果有 就证明错了\r\n for (let routes of parse.RegionsInternal)\r\n {\r\n let pl = Polyline.Combine(routes.map(r => r.curve));\r\n pl.ColorIndex = pl.Area2 > 0 ? 3 : 4;\r\n // throw \"未知错误 出现外部轮廓\"\r\n }\r\n\r\n let cons = regionPolylines.map(pl => new ContourTreeNode(Contour.CreateContour(pl, false)));\r\n ContourTreeNode.ParseContourTree(cons);\r\n\r\n let roofs: Polyline[] = [];\r\n\r\n //解析 天花板区域 内空区域\r\n for (let con of cons)\r\n {\r\n let routes = map.get(con.contour.Curve as Polyline);\r\n if (con.contour.Curve.ColorIndex === 2)//天花板区域(或者柱子)\r\n {\r\n if (con.Depth !== 0 || con.area < 1e6)//柱子\r\n for (let r of routes)\r\n r.curve[CURVE_FACE_TYPE_KEY] = WallFaceType.Pillar;\r\n else\r\n for (let r of routes)\r\n r.curve[CURVE_FACE_TYPE_KEY] = WallFaceType.Outside;\r\n\r\n //我们需要返回这个轮廓,以便在ue中可以绘制真正的屋顶\r\n con.contour.Curve[\"MaxZ\"] = maxZ;\r\n con.contour.Curve[\"MinZ\"] = minZ;\r\n roofs.push(con.contour.Curve as Polyline);\r\n }\r\n else if (con.contour.Curve.ColorIndex === 1)//内空区域\r\n {\r\n for (let r of routes)\r\n r.curve[CURVE_FACE_TYPE_KEY] = WallFaceType.Inside;\r\n\r\n if (this._UpdateDb && con.contour.Area > 1e4)\r\n {\r\n //组合外圈和网洞 画出来 就行了\r\n let floor = new RoomFlatFloor();\r\n let top = new RoomFlatTop();\r\n floor.OCS = con.contour.Curve.OCSNoClone;//设置坐标系 以便我们正常的应用轮廓\r\n top.OCS = con.contour.Curve.OCSNoClone;\r\n\r\n floor.Contour = con.contour.Curve as Polyline;\r\n top.Contour = con.contour.Curve as Polyline;\r\n\r\n floor.Holes = con.children.map(c => c.contour.Curve as Polyline);\r\n top.Holes = con.children.map(c => c.contour.Curve as Polyline);\r\n\r\n floor.Z = minZ;\r\n top.Z = maxZ;//等轮廓设置完在移动 否则设置失败\r\n\r\n let conPts = Polyline2Points(floor.Contour, false, 0)[1];\r\n let holePts = floor.HoleDatas.map(h => Polyline2Points(UpdateTempPolyline(h), false, 0)[1]);\r\n\r\n let pos = ParseRegionTextPos(conPts, holePts);\r\n pos.applyMatrix4(floor.OCSNoClone);\r\n let oldR = this.rr.GetReplaceOldReg(pos);\r\n\r\n let name = \"\";\r\n if (oldR)\r\n {\r\n if (this.reped.has(oldR)) //新增\r\n {\r\n //继承信息\r\n if (oldR.TextString)//继承名称\r\n {\r\n name = oldR.TextString;\r\n }\r\n }\r\n else//替换旧的\r\n {\r\n floor = oldR.Floor.Object as RoomFlatFloor;\r\n top = oldR.Top.Object as RoomFlatTop;\r\n\r\n EntitysUpdateWrap([floor, top, oldR], () =>\r\n {\r\n top.WriteAllObjectRecord();//因为修改了ocs 所以我们先记录下原始数据\r\n top.OCS = con.contour.Curve.OCSNoClone;\r\n\r\n floor.WriteAllObjectRecord();\r\n floor.OCS = con.contour.Curve.OCSNoClone;\r\n\r\n floor.UpdateContourHoles(con.contour.Curve as Polyline, con.children.map(c => c.contour.Curve as Polyline));\r\n top.UpdateContourHoles(con.contour.Curve as Polyline, con.children.map(c => c.contour.Curve as Polyline));\r\n\r\n floor.Z = minZ;\r\n top.Z = maxZ;//等轮廓设置完在移动 否则设置失败\r\n\r\n oldR.Position = pos;\r\n oldR.Area = floor.Area;\r\n });\r\n\r\n this.reped.add(oldR);\r\n continue;\r\n }\r\n }\r\n\r\n this._UpdateDb.ModelSpace.Append(floor);\r\n this._UpdateDb.ModelSpace.Append(top);\r\n let region = new RoomRegion(name, top.Id, floor.Id, floor.Area);\r\n region.Position = pos;\r\n this._UpdateDb.ModelSpace.Append(region);\r\n floor.RegionId = region.Id;\r\n top.RegionId = region.Id;\r\n }\r\n }\r\n }\r\n\r\n for (let [orgArc, arcs] of parse.ExpLineMap)\r\n orgArc[CURVE_FACE_TYPE_KEY] = arcs[0][CURVE_FACE_TYPE_KEY];\r\n\r\n for (let wall of walls)\r\n {\r\n // 因为我们现在没有分裂圆弧 所以我们不需要在合并线\r\n // wall.LeftCurves && arrayRemoveDuplicateBySort(wall.LeftCurves, (cu1: Curve, cu2: Curve) => cu1.Join(cu2) === Status.True);\r\n // wall.RightCurves && arrayRemoveDuplicateBySort(wall.RightCurves, (cu1: Curve, cu2: Curve) => cu1.Join(cu2) === Status.True);\r\n wall.Update();\r\n }\r\n\r\n return roofs;\r\n }\r\n\r\n End()\r\n {\r\n if (this._UpdateDb)\r\n {\r\n for (let r of this.oldregs)\r\n if (!this.reped.has(r))\r\n {\r\n r.Erase();\r\n r.Floor?.Object.Erase();\r\n r.Top?.Object.Erase();\r\n }\r\n }\r\n }\r\n}\r\n","import { Vector3 } from \"three\";\r\nimport { arrayRemoveDuplicateBySort, arraySortByNumber } from \"../../../Common/ArrayExt\";\r\nimport { CurveIntersection2 } from \"../../../Geometry/CurveIntersection\";\r\nimport { equaln } from \"../../../Geometry/GeUtils\";\r\nimport { IntersectOption } from \"../../../GraphicsSystem/IntersectWith\";\r\nimport { Curve } from \"../../Entity/Curve\";\r\n\r\n/**\r\n * 1.自动合理的延伸墙体,以便保证吸附失败的时候自动吸附(当被MOVE时,我们希望修复吸附失败的问题!)\r\n * 可延伸的距离等于墙体的厚度\r\n *\r\n * 2.在交点处把墙体打断,以便我们分析区域\r\n */\r\nexport class RoomWallExtendAndBreak\r\n{\r\n\r\n //曲线->分裂曲线的映射\r\n _Curve2SplitCurveMap = new Map();\r\n //分裂曲线->原始曲线的映射\r\n _SplitCurve2OrgCurveMap = new Map();\r\n\r\n ExtendCurves = new Set();\r\n AloneCurves: Curve[] = [];\r\n\r\n OrgCurveMapGroup: (Curve[])[] = [];\r\n\r\n constructor(curves: Curve[])\r\n {\r\n let intersect = new CurveIntersection2(curves, true, IntersectOption.ExtendBoth, 100, true);\r\n\r\n let breakCurves: Curve[] = [];\r\n //延伸+打断\r\n for (let [cu, pmap] of intersect.intersect2)\r\n {\r\n pmap.sort((p1, p2) => p1[0] - p2[0]);\r\n\r\n if (pmap.length > 0) breakCurves.push(cu);\r\n else this.AloneCurves.push(cu);\r\n\r\n //#region 1.延伸\r\n let hasExtend = false;\r\n let endParam = cu.EndParam;\r\n\r\n //最接近起点的点(我们使用这个点来决定我们是否延伸,这样有效避免了距离小于间距的一半时,但是距离却又大于设置参数时延伸时的尴尬!) 例如 | --|--------- 该例子不延伸到左边\r\n let index1 = FindMin(pmap, 0);\r\n let index2 = FindMin(pmap, endParam);\r\n\r\n let start = pmap[index1];\r\n let end = pmap[index2];\r\n\r\n if (start[0] < -1e-8)\r\n {\r\n cu.Extend(start[0]);\r\n hasExtend = true;\r\n }\r\n\r\n if (end[0] > (endParam + 1e-8))\r\n {\r\n cu.Extend(hasExtend ? cu.GetParamAtPoint(end[1]) : end[0]);\r\n hasExtend = true;\r\n\r\n pmap.splice(index2);//移除多余的交点参数\r\n }\r\n\r\n if (start[0] < -1e-8)\r\n pmap.splice(0, index1);//移除多余的交点参数\r\n\r\n if (hasExtend)//记录这个曲线被延伸了\r\n this.ExtendCurves.add(cu);\r\n }\r\n\r\n //有效的相交数据(用来切割)\r\n let intersectData = new Map();\r\n for (let cu of breakCurves)\r\n intersectData.set(cu, []);\r\n\r\n //去除无效的交点 移除多余的交点参数\r\n for (let [c1, c2, pts] of intersect.intersect3)\r\n {\r\n let c1arr = intersectData.get(c1);\r\n let c2arr = intersectData.get(c2);\r\n\r\n for (let p of pts)\r\n {\r\n let c1param = c1.GetParamAtPoint(p);\r\n if (!c1.ParamOnCurve(c1param)) continue;\r\n\r\n let c2param = c2.GetParamAtPoint(p);\r\n\r\n if (!c2.ParamOnCurve(c2param)) continue;\r\n\r\n c1arr.push(c1param);\r\n c2arr.push(c2param);\r\n }\r\n }\r\n\r\n //打断\r\n for (let [cu, params] of intersectData)\r\n {\r\n params = params.filter(p => p > 1e-3 && p < 0.999);\r\n // let isArc = cu instanceof Arc;\r\n // if (isArc)\r\n // {\r\n // let param = cu.GetParamAtPoint2((cu as Arc).Center.add(YAxisN));\r\n // if (cu.ParamOnCurve(param))\r\n // params.push(param);//保证切割\r\n // }\r\n if (params.length)\r\n {\r\n arraySortByNumber(params);\r\n arrayRemoveDuplicateBySort(params, (e1, e2) => equaln(e1, e2, 1e-4));\r\n // if (equaln(params[params.length - 1], 1, 1e-4)) //已经filter 不再需要\r\n // params[params.length - 1] = 1;\r\n }\r\n\r\n let splitCurves = params.length === 0 ? [cu.Clone()] : cu.GetSplitCurves(params);\r\n\r\n // if (isArc && splitCurves.length > 1)//将短圆弧转换为直线 我们由上层业务代码决定何时转换 不在此转换\r\n // {\r\n // // for (let i = 0; i < splitCurves.length; i++)\r\n // // {\r\n // // let c = splitCurves[i] as Arc;\r\n // // if (c.Radius < 100) //不能歧视 否则轮廓就错了\r\n // // splitCurves[i] = new Line(c.StartPoint, c.EndPoint);\r\n // // }\r\n // }\r\n\r\n //记录关联关系\r\n this._Curve2SplitCurveMap.set(cu, splitCurves);\r\n for (let scu of splitCurves)\r\n this._SplitCurve2OrgCurveMap.set(scu, cu);\r\n }\r\n\r\n //分组(只有相交的部分才会在一个组)\r\n let parsed = new Set();\r\n for (let cu of curves)\r\n {\r\n if (parsed.has(cu)) continue;\r\n parsed.add(cu);\r\n\r\n let group: Curve[] = [cu];\r\n\r\n for (let i = 0; i < group.length; i++)\r\n {\r\n let interMap = intersect.intersect.get(group[i]);\r\n if (!interMap) continue;\r\n for (let [ic] of interMap)\r\n {\r\n if (parsed.has(ic)) continue;\r\n parsed.add(ic);\r\n\r\n group.push(ic);\r\n }\r\n }\r\n\r\n if (group.length > 1)\r\n this.OrgCurveMapGroup.push(group);\r\n }\r\n }\r\n}\r\n\r\n//找到最接近某个参数的索引位置\r\nfunction FindMin(params: [number, Vector3][], closeToParam: number)\r\n{\r\n if (params.length < 2) return params.length - 1;\r\n\r\n let minDist = Infinity;\r\n let minIndex = -1;\r\n for (let i = 0; i < params.length; i++)\r\n {\r\n let absDist = Math.abs(params[i][0] - closeToParam);\r\n if (absDist < minDist)\r\n {\r\n minDist = absDist;\r\n minIndex = i;\r\n }\r\n }\r\n return minIndex;\r\n}\r\n","import Flatbush from 'flatbush';\r\nimport { Box3, Vector3 } from \"three\";\r\nimport { arrayPushArray } from '../../../Common/ArrayExt';\r\nimport { CurveMap, Vertice } from \"../../../Geometry/CurveMap\";\r\nimport { AsVector2, equalv3, midPoint, SelectNearP } from \"../../../Geometry/GeUtils\";\r\nimport { CalcRouteAngle, RegionParse } from \"../../../Geometry/RegionParse\";\r\nimport { IntersectOption } from \"../../../GraphicsSystem/IntersectWith\";\r\nimport { EntityEncode2 } from \"../../../GraphicsSystem/OffsetPolyline\";\r\nimport { Contour } from \"../../Contour\";\r\nimport { Database } from '../../Database';\r\nimport { Arc } from \"../../Entity/Arc\";\r\nimport { Curve } from \"../../Entity/Curve\";\r\nimport { Line } from \"../../Entity/Line\";\r\nimport { Polyline } from \"../../Entity/Polyline\";\r\nimport { RoomWallBase } from \"../Entity/Wall/RoomWallBase\";\r\nimport { CurveTrim, CurveTrimArc, CurveTrimLine } from \"./CurveTrim\";\r\nimport { CreateGetCurveParam, GetCurveParam, GetLineParam } from './GetCurveParam';\r\nimport { RoomRegionParse } from './RoomRegionParse';\r\nimport { RoomWallExtendAndBreak } from \"./RoomWallExtendAndBreak\";\r\n\r\nconst SHOW_PERF = false;\r\nconst ROOM_WALL_INDEX_KEY = \"__ROOM_WALL_INDEX_KEY__\";\r\nconst SAVE_SP_KEY = \"__SAVE_SP__\";\r\nconst SAVE_EP_KEY = \"__SAVE_EP__\";\r\n\r\n/**\r\n * 户型分析服务:\r\n * 1.自动延伸墙\r\n * 2.合理的构建墙\r\n * 3.自动分析地板\r\n *\r\n * 墙体被分裂后合并(join line)\r\n *\r\n * TODO:\r\n * 删除重复的墙(例如 2个rec wall)\r\n * 增量更新 diff walls(始作俑者 1) -> dep walls(需要更新 2) ->dep's dep walls(需要被依赖 3) +[可能被影响到的wall 2(比如被切割的墙) (依赖墙 3)]\r\n * ->1.用盒子搜索范围依赖(盒子1级依赖)\r\n * ->2.用盒子扩大搜索范围依赖(盒子2级依赖)\r\n * ->正确的分析1级依赖 2级依赖 (或者不要分析? 直接用盒子来?)\r\n * ->分析\r\n * ->更新1级 2级 的墙\r\n */\r\nexport class RoomWallParse\r\n{\r\n\r\n static _CacheWallNodePoints: Vector3[] = [];\r\n static _CacheWallMaps: [RoomWallExtendAndBreak, CurveMap][] = [];\r\n static _CacheCurveWallMaps: Map = new Map();\r\n static _CacheRoofs: Polyline[] = [];\r\n\r\n /**\r\n * @param [_ExtendsWalls=true] 更新墙体,在开图时不更新图纸\r\n * @param [_UpdateDb] 更新的图纸(新绘制Region)\r\n * @param [_IsCacheWallNodePoints] 需要把节点缓存下来?\r\n */\r\n constructor(private _ExtendsWalls: boolean, private _UpdateDb: Database, private _IsCacheWallNodePoints: boolean)\r\n {\r\n\r\n }\r\n\r\n /**\r\n * @param walls 需要解析的墙体列表\r\n * @param changeWalls 更新的墙体列表(如果提供 增量模式)\r\n */\r\n Parse(walls: RoomWallBase[], changeWalls: RoomWallBase[] = undefined)\r\n {\r\n if (this._IsCacheWallNodePoints)\r\n {\r\n RoomWallParse._CacheWallNodePoints = [];\r\n RoomWallParse._CacheWallMaps = [];\r\n RoomWallParse._CacheCurveWallMaps = new Map();\r\n RoomWallParse._CacheRoofs = [];\r\n }\r\n\r\n let regionPrase = new RoomRegionParse(this._UpdateDb);\r\n\r\n const GroupWalls = (walls: RoomWallBase[], fn: (wall: RoomWallBase) => number) =>\r\n {\r\n let map = new Map();\r\n for (let w of walls)\r\n {\r\n if (w.Length < 1e-6)\r\n {\r\n // w.Erase();//删除空长度的墙\r\n\r\n //避免窗户0长度错误\r\n w.LeftCurves = [];\r\n w.RightCurves = [];\r\n w.LidCurves = [];\r\n continue;\r\n };\r\n\r\n let value = fn(w);\r\n let arr = map.get(value);\r\n if (!arr)\r\n {\r\n arr = [];\r\n map.set(value, arr);\r\n }\r\n arr.push(w);\r\n }\r\n return map;\r\n };\r\n\r\n //按Z轴区分\r\n let zgroupMap = GroupWalls(walls, w => Math.round(w.Z * 100));\r\n\r\n for (let [, walls] of zgroupMap)\r\n {\r\n this.PraseWallsFromSameFloor(walls, changeWalls);\r\n let roofs = regionPrase.Do(walls);\r\n\r\n if (this._IsCacheWallNodePoints)\r\n arrayPushArray(RoomWallParse._CacheRoofs, roofs);\r\n }\r\n\r\n regionPrase.End();\r\n }\r\n\r\n private PraseWallsFromSameFloor(walls: RoomWallBase[], changeWalls: RoomWallBase[] = undefined)\r\n {\r\n SHOW_PERF && console.time(\"尖角化+裁剪面\");\r\n //{墙}->{轴线} {轴线}->{墙}\r\n let wallCurveMap = new Map();\r\n let curveWallMap = new Map();\r\n\r\n let axisCurves = walls.map(wall =>\r\n {\r\n //清理\r\n wall.LeftCurves = [];\r\n wall.RightCurves = [];\r\n wall.LidCurves = [];\r\n wall.Region = undefined;\r\n\r\n let cu = wall.CenterAxisCurve;\r\n\r\n wallCurveMap.set(wall, cu);\r\n curveWallMap.set(cu, wall);\r\n\r\n if (this._IsCacheWallNodePoints)\r\n RoomWallParse._CacheCurveWallMaps.set(cu, wall);\r\n return cu;\r\n });\r\n\r\n //打断数据\r\n let breakData = new RoomWallExtendAndBreak(axisCurves);\r\n\r\n if (this._ExtendsWalls)//墙体延伸\r\n for (let cu of breakData.ExtendCurves)\r\n {\r\n let wall = curveWallMap.get(cu);\r\n\r\n wall.StartPoint = cu.StartPoint;\r\n wall.EndPoint = cu.EndPoint;\r\n }\r\n\r\n let orgCurveLeftMap = new Map();\r\n let orgCurveRightMap = new Map();\r\n\r\n //{打断后的曲线}指向{新生成曲线}\r\n let curveLeftCurveMap: Map = new Map;\r\n let curveRightCurveMap: Map = new Map;\r\n //新生成的曲线的补盖子\r\n let curveStartLidCurveMap: Map = new Map;\r\n let curveEndLidCurveMap: Map = new Map;\r\n //半盖\r\n let curveStarLeftHalfLidCurveMap: Map = new Map;\r\n let curveStarRightHalfLidCurveMap: Map = new Map;\r\n let curveEndLeftHalfLidCurveMap: Map = new Map;\r\n let curveEndRightHalfLidCurveMap: Map = new Map;\r\n\r\n //尖角连接\r\n for (let groupCurves of breakData.OrgCurveMapGroup)\r\n {\r\n let curveMap = new CurveMap(4, true);\r\n\r\n for (let orgCurve of groupCurves)\r\n {\r\n let orgWall = curveWallMap.get(orgCurve);\r\n let splitCurves = breakData._Curve2SplitCurveMap.get(orgCurve);\r\n for (let cu of splitCurves)\r\n {\r\n //TODO:墙体重复时, 使用大厚度的墙?\r\n if (curveMap.AddCurveToMap(cu, cu instanceof Arc, true, true) || true)//避免重叠墙体构建错误 我们设置了true 参考用例 `重叠墙分析丢失墙体`\r\n {\r\n //左右线\r\n let leftCurve = cu.GetOffsetCurves(-orgWall.Thickness * 0.5)[0];\r\n let rightCurve = cu.GetOffsetCurves(orgWall.Thickness * 0.5)[0];\r\n\r\n leftCurve.ColorIndex = 2;\r\n rightCurve.ColorIndex = 3;\r\n\r\n curveLeftCurveMap.set(cu, leftCurve);\r\n curveRightCurveMap.set(cu, rightCurve);\r\n }\r\n }\r\n }\r\n\r\n if (this._IsCacheWallNodePoints)\r\n RoomWallParse._CacheWallMaps.push([breakData, curveMap]);\r\n\r\n //逆时针\r\n for (let v of curveMap._Vertices)\r\n {\r\n if (this._IsCacheWallNodePoints)\r\n RoomWallParse._CacheWallNodePoints.push(v.position);\r\n\r\n if (v.routes.length === 0) continue;\r\n if (v.routes.length < 2)\r\n {\r\n let r = v.routes[0];\r\n let preCurve = curveLeftCurveMap.get(r.curve);//左边的\r\n let nowCurve = curveRightCurveMap.get(r.curve);//右边的\r\n\r\n let sp = r.isReverse ? preCurve.EndPoint : preCurve.StartPoint;\r\n let ep = r.isReverse ? nowCurve.EndPoint : nowCurve.StartPoint;\r\n let l = new Line(sp, ep);\r\n l.ColorIndex = 6;\r\n if (r.isReverse)\r\n curveEndLidCurveMap.set(r.curve, new Line(ep, sp));\r\n else\r\n curveStartLidCurveMap.set(r.curve, new Line(sp, ep));\r\n continue;\r\n };\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 //倒角\r\n let pre = v.routes.length - 1;\r\n for (let i = 0; i < v.routes.length; i++)\r\n {\r\n let preR = v.routes[pre];\r\n let nowR = v.routes[i];\r\n\r\n let preCurve = preR.isReverse ? curveRightCurveMap.get(preR.curve) : curveLeftCurveMap.get(preR.curve);//左边的\r\n let nowCurve = nowR.isReverse ? curveLeftCurveMap.get(nowR.curve) : curveRightCurveMap.get(nowR.curve);//右边的\r\n\r\n let sp = preR.isReverse ? preCurve.EndPoint : preCurve.StartPoint;\r\n let ep = nowR.isReverse ? nowCurve.EndPoint : nowCurve.StartPoint;\r\n if (equalv3(sp, ep))//直连\r\n {\r\n pre = i;\r\n continue;\r\n }\r\n\r\n let iPam = preCurve.IntersectWith2(nowCurve, IntersectOption.ExtendBoth);\r\n let iPts = iPam.map(p => p.pt);\r\n let tPts = iPam.filter(p => preCurve.ParamOnCurve(p.thisParam) && nowCurve.ParamOnCurve(p.argParam)).map(p => p.pt);\r\n\r\n let code = EntityEncode2(preCurve, nowCurve);\r\n let tp: Vector3;\r\n if (code === 1)//都是直线\r\n {\r\n if (tPts.length > 0)\r\n {\r\n tp = iPts[0];\r\n\r\n //奇怪的行为,避免它\r\n if (equalv3(tp, preCurve.StartPoint, 1e-3)\r\n || equalv3(tp, preCurve.EndPoint, 1e-3)\r\n || equalv3(tp, nowCurve.StartPoint, 1e-3)\r\n || equalv3(tp, nowCurve.EndPoint, 1e-3)\r\n )\r\n tp = undefined;\r\n }\r\n else\r\n {\r\n if (iPts.length > 0)\r\n {\r\n //fuck 没有括号导致的错误\r\n //尖角时才延伸,否则补盖 (延伸或者在线上)\r\n let isExtend = (preR.isReverse ? iPam[0].thisParam > 0 : iPam[0].thisParam < 1)\r\n && (nowR.isReverse ? iPam[0].argParam > 0 : iPam[0].argParam < 1);\r\n\r\n let distSq = iPts[0].distanceToSquared(v.position);\r\n if (isExtend && distSq < 500 * 500)//尖角\r\n tp = iPts[0];\r\n else\r\n {\r\n //钝角 直接连接 在下面的代码连接\r\n // console.log();\r\n }\r\n }\r\n }\r\n }\r\n else//直线与圆弧\r\n {\r\n if (tPts.length > 0) //ipts = 1 or ipts = 2\r\n tp = SelectNearP(tPts, v.position);\r\n else\r\n {\r\n if (iPts.length === 0)\r\n {\r\n //直接连接 在下面的代码连接\r\n }\r\n else\r\n {\r\n let p: Vector3;\r\n\r\n if (code === 2 && iPts.length === 2)\r\n {\r\n let preArc = preCurve as Arc;\r\n let minArc = new Arc(preArc.Center, preArc.Radius,\r\n preR.isReverse ? preArc.EndAngle : preArc.StartAngle,\r\n 0,\r\n preR.isReverse ? preArc.IsClockWise : !preArc.IsClockWise\r\n );\r\n\r\n let p1 = iPts[0];\r\n let a1 = minArc.GetAngleAtPoint(p1);\r\n let anAll1 = preArc.ParamOnCurve(preArc.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 = preArc.ParamOnCurve(preArc.GetParamAtAngle(a2)) ? Infinity : minArc.ComputeAnlge(a2);\r\n\r\n if (anAll2 < anAll1)\r\n {\r\n p = p2;\r\n iPam[0] = iPam[1];\r\n }\r\n else\r\n p = p1;\r\n }\r\n else\r\n {\r\n p = SelectNearP(iPts, v.position);\r\n if (p === iPts[1])\r\n iPam[0] = iPam[1];\r\n }\r\n\r\n let isExtend = (preR.isReverse ? iPam[0].thisParam > 1 : iPam[0].thisParam < 0)\r\n && (nowR.isReverse ? iPam[0].argParam > 1 : iPam[0].argParam < 0);\r\n\r\n //tp 必须不能破坏圆弧,否则造成裁剪错误\r\n if (!isExtend || p.distanceToSquared(v.position) > 500 * 500)\r\n p = undefined;\r\n else//预习 如果破坏的圆弧轮廓,则不允许连接\r\n {\r\n let line: Line;\r\n if (preCurve instanceof Arc)\r\n {\r\n let tempC = preCurve.Clone();\r\n if (preR.isReverse) tempC.EndPoint = p;\r\n else tempC.StartPoint = p;\r\n\r\n line = new Line(v.position.clone(), p);\r\n let ipts = line.IntersectWith(tempC, IntersectOption.ExtendNone);\r\n if (ipts.length === 2)\r\n p = undefined;\r\n }\r\n\r\n if (p && nowCurve instanceof Arc)\r\n {\r\n let tempC = nowCurve.Clone();\r\n if (nowR.isReverse) tempC.EndPoint = p;\r\n else tempC.StartPoint = p;\r\n\r\n if (!line) line = new Line(v.position.clone(), p);\r\n let ipts = line.IntersectWith(tempC, IntersectOption.ExtendNone);\r\n if (ipts.length === 2)\r\n p = undefined;\r\n }\r\n }\r\n\r\n tp = p;\r\n }\r\n }\r\n }\r\n\r\n if (tp)\r\n {\r\n if (preR.isReverse) preCurve[SAVE_EP_KEY] = tp;\r\n else preCurve[SAVE_SP_KEY] = tp;\r\n\r\n if (nowR.isReverse) nowCurve[SAVE_EP_KEY] = tp;\r\n else nowCurve[SAVE_SP_KEY] = tp;\r\n }\r\n else\r\n {\r\n //如果两线(直线)平行 无交点时,应该只补厚墙的盖子\r\n if (code === 1 && iPts.length === 0)//&& false 尽管是false 这里的代码还是成立的 没有禁用这个代码是因为能带来一丢丢性能提升\r\n {\r\n let w1 = curveWallMap.get(breakData._SplitCurve2OrgCurveMap.get(preR.curve));\r\n let w2 = curveWallMap.get(breakData._SplitCurve2OrgCurveMap.get(nowR.curve));\r\n\r\n let sp = preR.isReverse ? preCurve.EndPoint : preCurve.StartPoint;\r\n let ep = nowR.isReverse ? nowCurve.EndPoint : nowCurve.StartPoint;\r\n\r\n if (w1.Thickness > w2.Thickness)\r\n {\r\n if (preR.isReverse)\r\n curveEndLeftHalfLidCurveMap.set(preR.curve, new Line(sp, ep));\r\n else\r\n curveStarLeftHalfLidCurveMap.set(preR.curve, new Line(sp, ep));\r\n }\r\n else\r\n {\r\n if (nowR.isReverse)\r\n curveEndRightHalfLidCurveMap.set(nowR.curve, new Line(sp, ep));\r\n else\r\n curveStarRightHalfLidCurveMap.set(nowR.curve, new Line(sp, ep));\r\n }\r\n }\r\n // else if (equalv3(sp, ep, 10)) //在sp ep接近时,我们直接连接sp ep 会更好? 看起来是没必要的\r\n // {\r\n // if (preR.isReverse)\r\n // curveEndLeftHalfLidCurveMap.set(preR.curve, new Line(ep, sp));\r\n // else\r\n // curveStarLeftHalfLidCurveMap.set(preR.curve, new Line(sp, ep));\r\n // }\r\n else\r\n {\r\n if (preR.isReverse)\r\n curveEndLeftHalfLidCurveMap.set(preR.curve, new Line(sp, v.position.clone()));//yep\r\n else\r\n curveStarLeftHalfLidCurveMap.set(preR.curve, new Line(sp, v.position.clone()));//yep\r\n\r\n if (nowR.isReverse)\r\n curveEndRightHalfLidCurveMap.set(nowR.curve, new Line(v.position.clone(), ep));//yep\r\n else\r\n curveStarRightHalfLidCurveMap.set(nowR.curve, new Line(v.position.clone(), ep));//yep\r\n }\r\n }\r\n\r\n pre = i;\r\n }\r\n }\r\n\r\n //延迟连接\r\n for (let orgCurve of groupCurves)\r\n {\r\n let splitCurves = breakData._Curve2SplitCurveMap.get(orgCurve);\r\n for (let cu of splitCurves)\r\n {\r\n let left = curveLeftCurveMap.get(cu);\r\n let right = curveRightCurveMap.get(cu);\r\n\r\n UpdateStartEndPoint(left);\r\n UpdateStartEndPoint(right);\r\n }\r\n }\r\n\r\n class RegionParse2 extends RegionParse\r\n {\r\n protected override GenerateVerticeMap(curveList: Curve[]): Vertice[]\r\n {\r\n return curveMap.Stands;\r\n }\r\n }\r\n\r\n //现在已经不再需要移除小房间了\r\n // //移除过小房间的内墙(空间过小 或者 没有空间)\r\n // let regionData = new RegionParse2(undefined);\r\n // const RemoveSmallSpaceInteriorWall = (routes: Route[]) =>\r\n // {\r\n // let polyline = Polyline.Combine(routes.map(r => r.curve), 1e-3);\r\n // let space = polyline.GetOffsetCurves(-120)[0];\r\n\r\n // if (!space || space.Area < 1e4)//0.1平米\r\n // {\r\n // for (let r of routes)\r\n // {\r\n // let cu: Curve;\r\n // //因为是逆时针 所以我们删除右边的线\r\n // if (r.isReverse)\r\n // {\r\n // cu = curveLeftCurveMap.get(r.curve);\r\n // curveLeftCurveMap.delete(r.curve);\r\n // }\r\n // else\r\n // {\r\n // cu = curveRightCurveMap.get(r.curve);\r\n // curveRightCurveMap.delete(r.curve);\r\n // }\r\n\r\n // //还要删除补的盖子\r\n // if (cu)\r\n // {\r\n // curveStarLeftHalfLidCurveMap.delete(cu);\r\n // curveEndLeftHalfLidCurveMap.delete(cu);\r\n\r\n // curveStartLidCurveMap.delete(cu);\r\n // curveEndLidCurveMap.delete(cu);\r\n // }\r\n // }\r\n // }\r\n // };\r\n // regionData.RegionsInternal.forEach(RemoveSmallSpaceInteriorWall);\r\n // regionData.RegionsOutline.forEach(RemoveSmallSpaceInteriorWall);\r\n }\r\n\r\n //构建裁剪面\r\n let trimContours: Contour[] = [];\r\n let orgCurveParams: GetCurveParam[] = [];\r\n for (let i = 0; i < axisCurves.length; i++)\r\n {\r\n let orgCurve = axisCurves[i];\r\n orgCurve[ROOM_WALL_INDEX_KEY] = i;\r\n let parse = CreateGetCurveParam(orgCurve);\r\n orgCurveParams.push(parse);\r\n\r\n let splitCurves = breakData._Curve2SplitCurveMap.get(orgCurve);\r\n let orgWall = curveWallMap.get(orgCurve);\r\n\r\n let leftStartParam = 1, leftEndParam = 0,\r\n rightStartParam = 1, rightEndParam = 0;\r\n if (!splitCurves)\r\n {\r\n //左右线\r\n let leftCurve = orgCurve.GetOffsetCurves(-orgWall.Thickness * 0.5)[0];\r\n let rightCurve = orgCurve.GetOffsetCurves(orgWall.Thickness * 0.5)[0];\r\n\r\n leftCurve.ColorIndex = 2;\r\n rightCurve.ColorIndex = 3;\r\n\r\n curveLeftCurveMap.set(orgCurve, leftCurve);\r\n curveRightCurveMap.set(orgCurve, rightCurve);\r\n\r\n curveStartLidCurveMap.set(orgCurve, new Line(leftCurve.StartPoint, rightCurve.StartPoint));\r\n curveEndLidCurveMap.set(orgCurve, new Line(rightCurve.EndPoint, leftCurve.EndPoint));\r\n\r\n breakData._SplitCurve2OrgCurveMap.set(orgCurve, orgCurve);//直接定位到自己\r\n\r\n //更新 孤独的墙也应该被切割,所以移除这个代码\r\n // orgWall.Region = undefined;\r\n // orgWall.LeftCurves = undefined;\r\n // orgWall.RightCurves = undefined;\r\n // orgWall.LidCurves = undefined;\r\n\r\n if (this._IsCacheWallNodePoints)\r\n RoomWallParse._CacheWallNodePoints.push(orgCurve.StartPoint, orgCurve.EndPoint);\r\n\r\n // continue;//孤独的墙(TODO:) //update:孤独的墙也应该裁剪被人\r\n leftStartParam = rightStartParam = 0;\r\n leftEndParam = rightEndParam = 1;\r\n }\r\n else\r\n {\r\n for (let cu of splitCurves)\r\n {\r\n let left = curveLeftCurveMap.get(cu);\r\n let right = curveRightCurveMap.get(cu);\r\n\r\n if (left)\r\n {\r\n leftStartParam = Math.min(leftStartParam, parse.GetParamAtPoint(left.StartPoint));\r\n leftEndParam = Math.max(leftEndParam, parse.GetParamAtPoint(left.EndPoint));\r\n }\r\n\r\n if (right)\r\n {\r\n rightStartParam = Math.min(rightStartParam, parse.GetParamAtPoint(right.StartPoint));\r\n rightEndParam = Math.max(rightEndParam, parse.GetParamAtPoint(right.EndPoint));\r\n }\r\n }\r\n\r\n if (leftStartParam > leftEndParam)\r\n {\r\n leftStartParam = 0;\r\n leftEndParam = 1;\r\n }\r\n if (rightStartParam > rightEndParam)\r\n {\r\n rightStartParam = 0;\r\n rightEndParam = 1;\r\n }\r\n }\r\n\r\n let sp = orgCurve.StartPoint;\r\n let ep = orgCurve.EndPoint;\r\n if (orgCurve instanceof Line)\r\n {\r\n let lparse = parse as GetLineParam;\r\n let p1 = parse.GetPointAtParam(leftStartParam);\r\n let p2 = parse.GetPointAtParam(leftEndParam);\r\n lparse.OffsetPoint(p1, orgWall.Thickness * 0.5);\r\n lparse.OffsetPoint(p2, orgWall.Thickness * 0.5);\r\n\r\n let p3 = lparse.GetPointAtParam(rightStartParam);\r\n let p4 = lparse.GetPointAtParam(rightEndParam);\r\n lparse.OffsetPoint(p3, orgWall.Thickness * -0.5);\r\n lparse.OffsetPoint(p4, orgWall.Thickness * -0.5);\r\n\r\n\r\n let pts: Vector3[] = [];\r\n if (!equalv3(midPoint(p1, p3), sp))\r\n pts.push(sp);\r\n\r\n pts.push(p1, p2);\r\n\r\n if (!equalv3(midPoint(p2, p4), ep))\r\n pts.push(ep);\r\n\r\n pts.push(p4, p3);\r\n\r\n let pl = new Polyline(pts.map(p => { return { pt: AsVector2(p), bul: 0 }; }));\r\n pl.CloseMark = true;\r\n pl.Z = p1.z;\r\n\r\n let contour = Contour.CreateContour(pl, false);\r\n\r\n // let reg = Region.CreateFromCurves([contour.Curve]);\r\n // if (reg)\r\n // TestDraw(reg);\r\n\r\n trimContours.push(contour);\r\n orgWall.Region = pl;\r\n\r\n orgCurveLeftMap.set(orgCurve, new Line(p1, p2));\r\n orgCurveRightMap.set(orgCurve, new Line(p3, p4));\r\n }\r\n else\r\n {\r\n //左右线\r\n let leftCurve = orgCurve.GetOffsetCurves(-orgWall.Thickness * 0.5)[0];\r\n let rightCurve = orgCurve.GetOffsetCurves(orgWall.Thickness * 0.5)[0];\r\n\r\n leftCurve.EndAngle = orgCurve.GetAngleAtParam(leftEndParam);\r\n leftCurve.StartAngle = orgCurve.GetAngleAtParam(leftStartParam);\r\n\r\n rightCurve.EndAngle = orgCurve.GetAngleAtParam(rightEndParam);\r\n rightCurve.StartAngle = orgCurve.GetAngleAtParam(rightStartParam);\r\n\r\n let curves: (Line | Arc)[] = [];\r\n let [p1, p2] = [leftCurve.StartPoint, leftCurve.EndPoint];\r\n let [p3, p4] = [rightCurve.StartPoint, rightCurve.EndPoint];\r\n\r\n if (!equalv3(midPoint(p1, p3), sp))\r\n curves.push(new Line(p3, sp), new Line(sp, p1));\r\n else\r\n curves.push(new Line(p1, p3));\r\n curves.push(leftCurve);\r\n if (!equalv3(midPoint(p2, p4), ep))\r\n curves.push(new Line(p2, ep), new Line(ep, p4));\r\n else\r\n curves.push(new Line(p2, p4));\r\n curves.push(rightCurve);\r\n\r\n let contour = Contour.CreateContour(curves, false);\r\n if (!contour)\r\n {\r\n // for (let i = 0; i < curves.length; i++)\r\n // TestDraw(curves[i], i + 1);\r\n contour = Contour.CreateContour(new Polyline().RectangleFrom2Pt(new Vector3, new Vector3(100, 100)), false);\r\n console.error(\"生成轮廓失败\");\r\n }\r\n else\r\n {\r\n // let reg = Region.CreateFromCurves([contour.Curve]);\r\n // if (reg)\r\n // TestDraw(reg);\r\n }\r\n trimContours.push(contour);\r\n orgWall.Region = contour.Curve as Polyline;\r\n\r\n orgCurveLeftMap.set(orgCurve, leftCurve);\r\n orgCurveRightMap.set(orgCurve, rightCurve);\r\n }\r\n }\r\n\r\n // jig.End();\r\n\r\n SHOW_PERF && console.timeEnd(\"尖角化+裁剪面\");\r\n\r\n SHOW_PERF && console.time(\"墙体裁剪\");\r\n\r\n this.GenFB(trimContours);\r\n\r\n enum CurveType\r\n {\r\n Left = 0,\r\n Right = 1,\r\n StartLid = 2,\r\n EndLid = 3,\r\n }\r\n\r\n const Trim = (splitCurve: Curve, offsetCurve: Curve, index: number, type: CurveType) =>\r\n {\r\n let trim: CurveTrim;\r\n if (offsetCurve instanceof Line)\r\n {\r\n let getParam = orgCurveParams[index] as GetLineParam;\r\n let dir: Vector3;\r\n if (type === CurveType.Left) dir = getParam.Direction;\r\n else if (type === CurveType.Right) dir = getParam.NegDirection;\r\n else if (type === CurveType.StartLid) dir = getParam.LeftDir;\r\n else if (type === CurveType.EndLid) dir = getParam.RightDir;\r\n\r\n if (!dir)\r\n {\r\n dir = offsetCurve.GetFistDeriv(0).normalize().negate();\r\n }\r\n\r\n trim = new CurveTrimLine(offsetCurve, dir);\r\n }\r\n else\r\n trim = new CurveTrimArc(offsetCurve as Arc, type !== CurveType.Left);\r\n\r\n //需要更快的判断直线会不会被轮廓切割?\r\n\r\n this.fb.search(trim._Box.min.x - 1e-2, trim._Box.min.y - 1e-2, trim._Box.max.x + 1e-2, trim._Box.max.y + 1e-2, (id =>\r\n {\r\n // if (id !== index) //裁剪的好处是有些细的盖子将会消失\r\n trim.TrimBy(trimContours[id], this.boxs[id], index > id);\r\n return false;\r\n }));\r\n\r\n let curves = trim.Curves;\r\n return curves as (Arc | Line)[];\r\n };\r\n\r\n for (let [orgCurve, offsetCurve] of orgCurveLeftMap)\r\n {\r\n let orgWall = curveWallMap.get(orgCurve);\r\n arrayPushArray(orgWall.LeftCurves, Trim(orgCurve, offsetCurve, orgCurve[ROOM_WALL_INDEX_KEY], CurveType.Left));\r\n }\r\n for (let [orgCurve, offsetCurve] of orgCurveRightMap)\r\n {\r\n let orgWall = curveWallMap.get(orgCurve);\r\n arrayPushArray(orgWall.RightCurves, Trim(orgCurve, offsetCurve, orgCurve[ROOM_WALL_INDEX_KEY], CurveType.Right));\r\n }\r\n\r\n for (let [splitCurve, offsetCurve] of curveStartLidCurveMap)\r\n {\r\n let orgCurve = breakData._SplitCurve2OrgCurveMap.get(splitCurve);\r\n let orgWall = curveWallMap.get(orgCurve);\r\n arrayPushArray(orgWall.LidCurves, Trim(splitCurve, offsetCurve, orgCurve[ROOM_WALL_INDEX_KEY], CurveType.StartLid));\r\n }\r\n for (let [splitCurve, offsetCurve] of curveEndLidCurveMap)\r\n {\r\n let orgCurve = breakData._SplitCurve2OrgCurveMap.get(splitCurve);\r\n let orgWall = curveWallMap.get(orgCurve);\r\n arrayPushArray(orgWall.LidCurves, Trim(splitCurve, offsetCurve, orgCurve[ROOM_WALL_INDEX_KEY], CurveType.EndLid));\r\n }\r\n\r\n for (let [splitCurve, offsetCurve] of curveStarLeftHalfLidCurveMap)\r\n {\r\n let orgCurve = breakData._SplitCurve2OrgCurveMap.get(splitCurve);\r\n let orgWall = curveWallMap.get(orgCurve);\r\n arrayPushArray(orgWall.LidCurves, Trim(splitCurve, offsetCurve, orgCurve[ROOM_WALL_INDEX_KEY], CurveType.StartLid));\r\n }\r\n for (let [splitCurve, offsetCurve] of curveStarRightHalfLidCurveMap)\r\n {\r\n let orgCurve = breakData._SplitCurve2OrgCurveMap.get(splitCurve);\r\n let orgWall = curveWallMap.get(orgCurve);\r\n arrayPushArray(orgWall.LidCurves, Trim(splitCurve, offsetCurve, orgCurve[ROOM_WALL_INDEX_KEY], CurveType.StartLid));\r\n }\r\n\r\n for (let [splitCurve, offsetCurve] of curveEndLeftHalfLidCurveMap)\r\n {\r\n let orgCurve = breakData._SplitCurve2OrgCurveMap.get(splitCurve);\r\n let orgWall = curveWallMap.get(orgCurve);\r\n arrayPushArray(orgWall.LidCurves, Trim(splitCurve, offsetCurve, orgCurve[ROOM_WALL_INDEX_KEY], CurveType.EndLid));\r\n }\r\n for (let [splitCurve, offsetCurve] of curveEndRightHalfLidCurveMap)\r\n {\r\n let orgCurve = breakData._SplitCurve2OrgCurveMap.get(splitCurve);\r\n let orgWall = curveWallMap.get(orgCurve);\r\n arrayPushArray(orgWall.LidCurves, Trim(splitCurve, offsetCurve, orgCurve[ROOM_WALL_INDEX_KEY], CurveType.EndLid));\r\n }\r\n\r\n //Update:2022-04-28 我们不再分裂圆弧,所以也不再需要合并线\r\n //区域分析需要破裂的圆弧,这里暂时不合并墙(在room region parse中合并)\r\n // for (let wall of walls)\r\n // {\r\n // wall.LeftCurves && arrayRemoveDuplicateBySort(wall.LeftCurves, (cu1: Curve, cu2: Curve) => cu1.Join(cu2) === Status.True);\r\n // wall.RightCurves && arrayRemoveDuplicateBySort(wall.RightCurves, (cu1: Curve, cu2: Curve) => cu1.Join(cu2) === Status.True);\r\n // }\r\n\r\n SHOW_PERF && console.timeEnd(\"墙体裁剪\");\r\n }\r\n\r\n fb: Flatbush;\r\n boxs: Box3[];\r\n GenFB(trimContours: Contour[])\r\n {\r\n if (trimContours.length === 0) return;\r\n\r\n let fb = new Flatbush(trimContours.length);\r\n this.boxs = [];\r\n\r\n let v = new Vector3(1e-2, 1e-2);\r\n for (let con of trimContours)\r\n {\r\n let box = con.BoundingBox;\r\n box.expandByVector(v);\r\n fb.add(box.min.x, box.min.y, box.max.x, box.max.y);\r\n this.boxs.push(box);\r\n }\r\n fb.finish();\r\n\r\n this.fb = fb;\r\n }\r\n\r\n}\r\n\r\nfunction UpdateStartEndPoint(curve: Curve)\r\n{\r\n let sp = curve[SAVE_SP_KEY];\r\n let ep = curve[SAVE_EP_KEY];\r\n\r\n if (sp && ep)\r\n {\r\n let param1 = curve.GetParamAtPoint(sp);\r\n let param2 = curve.GetParamAtPoint(ep);\r\n\r\n if (curve.ParamOnCurve(param1) && curve.ParamOnCurve(param2) && param1 > param2)\r\n [sp, ep] = [ep, sp];\r\n }\r\n if (sp)\r\n curve.StartPoint = sp;\r\n if (ep)\r\n curve.EndPoint = ep;\r\n}\r\n"],"names":["equaln","FixIndex","Vector2","Shape","ExtendType","TLine","cache","TempPolyline","TShape","Path","BufferGeometryUtils2","Line","TAmbientLight","TDirectionalLight","THemisphereLight","TPointLight","TRectAreaLight","TSpotLight","TempP","Box2"],"mappings":"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,CAAC,EAAE,GAAG,CAAC;AAClB,IAAA,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;AACnB,IAAA,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;AACjB,IAAA,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;AACnB,IAAA,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;AAChB,IAAA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;AACjB,IAAA,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;AAChB,IAAA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;AACjB,IAAA,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;AAClB,IAAA,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACpB,IAAA,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;AAClB,IAAA,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;AACnB,IAAA,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;AAClB,IAAA,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;AACnB,IAAA,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;AAChB,IAAA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;AACjB,IAAA,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;AAChB,IAAA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;AACjB,IAAA,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;AAClB,IAAA,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACpB,IAAA,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;AAClB,IAAA,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;AACnB,IAAA,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;AACjB,IAAA,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;AACnB,IAAA,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;AAChB,IAAA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;AACjB,IAAA,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;AAChB,IAAA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;AACjB,IAAA,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;AAClB,IAAA,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACpB,IAAA,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;AACjB,IAAA,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;AACnB,IAAA,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;AACjB,IAAA,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;AAClB,IAAA,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;AAChB,IAAA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;AACjB,IAAA,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;AAChB,IAAA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;AACjB,IAAA,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;AACjB,IAAA,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACpB,IAAA,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;AACjB,IAAA,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;AACnB,IAAA,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;AACjB,IAAA,CAAC,EAAE,EAAE,G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AE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;AAChB,IAAA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;AACjB,IAAA,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AAClB,IAAA,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACpB,IAAA,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AAClB,IAAA,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACnB,IAAA,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AAClB,IAAA,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACnB,IAAA,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;AAChB,IAAA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;AACjB,IAAA,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;AAChB,IAAA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;AACjB,IAAA,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AAClB,IAAA,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACpB,IAAA,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AAClB,IAAA,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACnB,IAAA,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;AACjB,IAAA,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACnB,IAAA,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;AAChB,IAAA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;AACjB,IAAA,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;AAChB,IAAA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,G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AE,GAAG,CAAC;AACjB,IAAA,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;AACnB,IAAA,CAAC,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;AACjB,IAAA,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;AAClB,IAAA,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;AAChB,IAAA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;AACjB,IAAA,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;AAChB,IAAA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;AACjB,IAAA,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;AAClB,IAAA,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACpB,IAAA,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;AAClB,IAAA,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;AACnB,IAAA,CAAC,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;AACjB,IAAA,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;AACnB,IAAA,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;AAChB,IAAA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;AACjB,IAAA,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;AAChB,IAAA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;AACjB,IAAA,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;AAClB,IAAA,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACpB,IAAA,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;AAClB,IAAA,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;AACnB,IAAA,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;AAClB,IAAA,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;AACnB,IAAA,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;AAChB,IAAA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;AACjB,IAAA,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;AAChB,IAAA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;AACjB,IAAA,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;AAClB,IAAA,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACpB,IAAA,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;AAClB,IAAA,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;AACnB,IAAA,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;AACjB,IAAA,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;AACnB,IAAA,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;AAChB,IAAA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;AACjB,IAAA,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;AAChB,IAAA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;AACjB,IAAA,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;AAClB,IAAA,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACpB,IAAA,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;AACjB,IAAA,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;AACnB,IAAA,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;AACjB,IAAA,CAAC,GAAG,EAAE,EAAE,EAAE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,EACzD,CAAC,IAAIA,SAAO,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAIA,SAAO,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAIA,SAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;;gBAEzD,CAAC,IAAIA,SAAO,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAIA,SAAO,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAIA,SAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EACzD,CAAC,IAAIA,SAAO,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAIA,SAAO,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAIA,SAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;;gBAEzD,CAAC,IAAIA,SAAO,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAIA,SAAO,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAIA,SAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EACzD,CAAC,IAAIA,SAAO,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAIA,SAAO,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAIA,SAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;;gBAEzD,CAAC,IAAIA,SAAO,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAIA,SAAO,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAIA,SAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EACzD,CAAC,IAAIA,SAAO,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAIA,SAAO,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAIA,SAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;;gBAEzD,CAAC,IAAIA,SAAO,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAIA,SAAO,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAIA,SAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EACzD,CAAC,IAAIA,SAAO,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAIA,SAAO,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAIA,SAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;;gBAEzD,CAAC,IAAIA,SAAO,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAIA,SAAO,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAIA,SAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EACzD,CAAC,IAAIA,SAAO,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAIA,SAAO,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAIA,SAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAC5D,CAAC;AAGL,aAAA;AACJ,SAAA;AAED,aAAA;AACI,YAAA,IAAI,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC;AACtB,YAAA,IAAI,SAAS,GAAG,IAAI,YAAY,CAAC,IAAuB,CAAC,CAAC;AAC1D,YAAA,MAAM,aAAa,GAAG,CAAC,KAAY,KAAI;gBAEnC,IAAI,aAAa,GAAG,CAAC,CAAC;gBACtB,IAAI,KAAK,CAAC,mBAAmB,CAAC,KAAK,YAAY,CAAC,OAAO,EACvD;oBAEI,aAAa,GAAG,CAAC,CAAC;AACrB,iBAAA;gBAED,IAAI,KAAK,YAAY,IAAI,EACzB;AACI,oBAAA,IAAI,KAAK,GAAG,CAAC,IAAI,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;AAC9C,oBAAA,IAAI,UAAU,GAAG,IAAI,YAAY,CAAC,KAAK,CAAC,CAAC;AAEzC,oBAAA,IAAI,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC;oBAC3B,IAAI,KAAK,CAAC,MAAM,EAChB;AACI,wBAAA,KAAK,IAAI,IAAI,IAAI,KAAK,EACtB;AACI,4BAAA,IAAI,KAAK,GAAGF,QAAM,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC,UAAU,CAAC,eAAe,CAAC,SAAS,CAAC,eAAe,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAC3I,4BAAA,IAAI,GAAG,GAAGA,QAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC,UAAU,CAAC,eAAe,CAAC,SAAS,CAAC,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AACrI,4BAAA,IAAIA,QAAM,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,CAAC;AAAE,gCAAA,SAAS;4BAEvC,IAAI,KAAK,GAAG,GAAG;gCAAE,CAAC,KAAK,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;4BAC7C,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;4BAC3B,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;4BACvB,IAAI,KAAK,IAAI,GAAG;gCAAE,SAAS;AAE3B,4BAAA,IAAI,QAAQ,GAAG,IAAI,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;4BAE3D,IAAI,QAAQ,GAAW,EAAE,CAAC;4BAC1B,KAAK,IAAI,IAAI,IAAI,KAAK;gCAClB,cAAc,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;4BAElD,KAAK,GAAG,QAAQ,CAAC;AACpB,yBAAA;AACJ,qBAAA;AAED,oBAAA,KAAK,IAAI,IAAI,IAAI,KAAK,EACtB;AACI,wBAAA,IAAI,UAAU,GAAG,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC;AAErC,wBAAA,IAAI,EAAE,GAAG,UAAU,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;AAClE,wBAAA,IAAI,EAAE,GAAG,UAAU,CAAC,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;wBAChE,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;AAC9D,wBAAA,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7C,wBAAA,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;wBAE7C,IAAI,MAAM,GAAG,UAAU,CAAC,MAAM,GAAG,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC;wBACnD,IAAI,IAAI,GAAG,UAAU,CAAC,MAAM,GAAG,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC;AAE/C,wBAAA,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;AAChC,wBAAA,IAAI,IAAI,GAAG,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC;wBAE3B,GAAG,CAAC,KAAK,CAAC,IAAI,CACV,IAAI,KAAK,CAAC,UAAU,EAAE,UAAU,GAAG,CAAC,EAAE,UAAU,GAAG,CAAC,EAAE,KAAK,CAAC,OAAO,EAAE,SAAS,EAAE,aAAa,CAAC,EAC9F,IAAI,KAAK,CAAC,UAAU,GAAG,CAAC,EAAE,UAAU,GAAG,CAAC,EAAE,UAAU,GAAG,CAAC,EAAE,KAAK,CAAC,OAAO,EAAE,SAAS,EAAE,aAAa,CAAC,CACrG,CAAC;AAEF,wBAAA,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,IAAI,CACrB,CAAC,IAAIE,SAAO,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,IAAIA,SAAO,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,IAAIA,SAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,EACnF,CAAC,IAAIA,SAAO,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,IAAIA,SAAO,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,IAAIA,SAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAClF,CAAC;AACL,qBAAA;AACJ,iBAAA;AACL,aAAC,CAAC;AACF,YAAA,MAAM,cAAc,GAAG,CAAC,KAAY,KAAI;gBAEpC,IAAI,aAAa,GAAG,CAAC,CAAC;gBACtB,IAAI,KAAK,CAAC,mBAAmB,CAAC,KAAK,YAAY,CAAC,OAAO,EACvD;oBAEI,aAAa,GAAG,CAAC,CAAC;AACrB,iBAAA;gBAED,IAAI,KAAK,YAAY,IAAI,EACzB;AACI,oBAAA,IAAI,KAAK,GAAG,CAAC,IAAI,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;AAC9C,oBAAA,IAAI,UAAU,GAAG,IAAI,YAAY,CAAC,KAAK,CAAC,CAAC;AAEzC,oBAAA,IAAI,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC;oBAC3B,IAAI,KAAK,CAAC,MAAM,EAChB;AACI,wBAAA,KAAK,IAAI,IAAI,IAAI,KAAK,EACtB;AACI,4BAAA,IAAI,KAAK,GAAGF,QAAM,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC,UAAU,CAAC,eAAe,CAAC,SAAS,CAAC,eAAe,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAC3I,4BAAA,IAAI,GAAG,GAAGA,QAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC,UAAU,CAAC,eAAe,CAAC,SAAS,CAAC,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AACrI,4BAAA,IAAIA,QAAM,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,CAAC;AAAE,gCAAA,SAAS;4BAEvC,IAAI,KAAK,GAAG,GAAG;gCAAE,CAAC,KAAK,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;4BAC7C,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;4BAC3B,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;4BACvB,IAAI,KAAK,IAAI,GAAG;gCAAE,SAAS;AAE3B,4BAAA,IAAI,QAAQ,GAAG,IAAI,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;4BAE3D,IAAI,QAAQ,GAAW,EAAE,CAAC;4BAC1B,KAAK,IAAI,IAAI,IAAI,KAAK;gCAClB,cAAc,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;4BAElD,KAAK,GAAG,QAAQ,CAAC;AACpB,yBAAA;AACJ,qBAAA;AAED,oBAAA,KAAK,IAAI,IAAI,IAAI,KAAK,EACtB;AACI,wBAAA,IAAI,UAAU,GAAG,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC;AAErC,wBAAA,IAAI,EAAE,GAAG,UAAU,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;AAClE,wBAAA,IAAI,EAAE,GAAG,UAAU,CAAC,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;wBAChE,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;AAC9D,wBAAA,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7C,wBAAA,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;wBAE7C,IAAI,MAAM,GAAG,UAAU,CAAC,MAAM,GAAG,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC;wBACnD,IAAI,IAAI,GAAG,UAAU,CAAC,MAAM,GAAG,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC;AAE/C,wBAAA,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;AAChC,wBAAA,IAAI,IAAI,GAAG,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC;wBAE3B,GAAG,CAAC,KAAK,CAAC,IAAI,CACV,IAAI,KAAK,CAAC,UAAU,EAAE,UAAU,GAAG,CAAC,EAAE,UAAU,GAAG,CAAC,EAAE,UAAU,CAAC,QAAQ,EAAE,SAAS,EAAE,aAAa,CAAC,EACpG,IAAI,KAAK,CAAC,UAAU,GAAG,CAAC,EAAE,UAAU,GAAG,CAAC,EAAE,UAAU,GAAG,CAAC,EAAE,UAAU,CAAC,QAAQ,EAAE,SAAS,EAAE,aAAa,CAAC,CAC3G,CAAC;AAEF,wBAAA,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,IAAI,CACrB,CAAC,IAAIE,SAAO,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,IAAIA,SAAO,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,IAAIA,SAAO,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,EACnF,CAAC,IAAIA,SAAO,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,IAAIA,SAAO,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,IAAIA,SAAO,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAClF,CAAC;AACL,qBAAA;AACJ,iBAAA;AACL,aAAC,CAAC;AACF,YAAA,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;AACvC,YAAA,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;AACzC,YAAA,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;YAEvC,IAAI,IAAI,CAAC,MAAM,EACf;AACI,gBAAA,IAAI,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AAC/C,gBAAA,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AAEhE,gBAAA,IAAI,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC;gBAC1D,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC;gBAE3C,IAAI,KAAK,GAAG,UAAU,CAAC,gBAAgB,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;AAEjD,gBAAA,IAAI,UAAU,GAAG,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC;gBACrC,KAAK,IAAI,CAAC,IAAI,GAAG;oBAAE,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;gBAC1E,IAAI,uBAAuB,CAAC,kBAAkB;oBAAE,KAAK,IAAI,CAAC,IAAI,GAAG;AAAE,wBAAA,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAE/G,gBAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EACrC;AACI,oBAAA,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;oBACzB,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,UAAU,GAAG,CAAC,EAAE,UAAU,GAAG,CAAC,EAAE,UAAU,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;oBAClF,IAAI,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;oBACpD,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;oBAE/B,IAAI,uBAAuB,CAAC,kBAAkB,EAC9C;AACI,wBAAA,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,UAAU,GAAG,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,UAAU,GAAG,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,UAAU,GAAG,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;AAC1H,wBAAA,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;AACzE,qBAAA;AACJ,iBAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoCJ,aAAA;AACJ,SAAA;QAED,GAAG,CAAC,kBAAkB,EAAE,CAAC;AACzB,QAAA,GAAG,CAAC,kBAAkB,GAAG,IAAI,CAAC;AAC9B,QAAA,GAAG,CAAC,aAAa,GAAG,IAAI,CAAC;AAEzB,QAAA,OAAO,GAAG,CAAC;KACd;AAGD,IAAA,cAAc,CAAC,UAAA,GAAyB,UAAU,CAAC,SAAS,EAAA;AAExD,QAAA,IAAI,UAAU,KAAK,UAAU,CAAC,QAAQ,EACtC;AACI,YAAA,IAAI,IAAI,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;AAC1D,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;AACvB,YAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;AAC1B,YAAA,OAAO,IAAI,CAAC;AACf,SAAA;AAED,QAAA,IAAI,GAAG,GAAG,IAAI,QAAQ,CAAC;QACvB,IAAI,UAAU,KAAK,UAAU,CAAC,SAAS,IAAI,UAAU,KAAK,UAAU,CAAC,GAAG,EACxE;YACI,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;YAC7C,IAAI,GAAG,GAAG,IAAI,cAAc,EAAE,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;AAClD,YAAA,IAAI,QAAQ,GAAG,IAAIG,MAAK,CAAC,GAAG,EAAE,aAAa,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;YAC/D,QAAQ,CAAC,oBAAoB,EAAE,CAAC;AAChC,YAAA,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AAElB,YAAA,IAAI,IAAI,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,YAAY,EAAE,aAAa,CAAC,eAAe,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;AAC/F,YAAA,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACjB,SAAA;AACI,aAAA,IAAI,UAAU,KAAK,UAAU,CAAC,UAAU,EAC7C;AACI,YAAA,IAAI,IAAI,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,aAAa,CAAC,qBAAqB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;AAC7F,YAAA,IAAI,IAAI,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,YAAY,EAAE,aAAa,CAAC,eAAe,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;AAC/F,YAAA,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AACvB,SAAA;AACD,QAAA,OAAO,GAAG,CAAC;KACd;AAED;;;;AAIG;IACH,gBAAgB,CAAC,UAAsB,EAAE,GAAa,EAAA;QAElD,IAAI,UAAU,KAAK,UAAU,CAAC,SAAS,IAAI,UAAU,KAAK,UAAU,CAAC,GAAG,EACxE;YACI,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,GAAG,CAAC,QAA0D,CAAC;AAE7F,YAAA,mBAAmB,CAAC,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;YACrF,QAAQ,CAAC,oBAAoB,EAAE,CAAC;AAEhC,YAAA,IAAI,WAAW,CAAC,QAAQ,KAAK,IAAI,CAAC,YAAY,EAC9C;AACI,gBAAA,WAAW,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;AAC/B,gBAAA,WAAW,CAAC,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC;AAC5C,aAAA;AACJ,SAAA;AACI,aAAA,IAAI,UAAU,KAAK,UAAU,CAAC,UAAU,EAC7C;YACI,IAAI,IAAI,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAmB,CAAC;AAC7C,YAAA,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC,YAAY,EACvC;AACI,gBAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;AACxB,gBAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC;AACrC,aAAA;YAED,IAAI,IAAI,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAiC,CAAC;AAC3D,YAAA,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC,YAAY,EACvC;AACI,gBAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;AACxB,gBAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC;AACrC,aAAA;AACJ,SAAA;AACI,aAAA,IAAI,UAAU,KAAK,UAAU,CAAC,QAAQ,EAC3C;YACI,IAAI,IAAI,GAAG,GAAqB,CAAC;AACjC,YAAA,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC,YAAY,EACvC;AACI,gBAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;AACxB,gBAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC;AACrC,aAAA;AACJ,SAAA;KACJ;;;;AAMkB,IAAA,SAAS,CAAC,IAAc,EAAA;AAEvC,QAAU,IAAI,CAAC,IAAI,GAAG;AACtB,QAAA,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAEtB,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QAC5D,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;KAC7D;;AAEQ,IAAA,SAAS,CAAC,IAAc,EAAA;AAE7B,QAAA,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACd,QAAA,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;AAEtB,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;AACjC,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;KAClC;EAEJ;AAvsBY,YAAY,GAAA,UAAA,CAAA;IADxB,OAAO;AACK,CAAA,EAAA,YAAY,CAusBxB,CAAA;AAED,WAAW,CAAC,YAAY,EAAE,IAAI,CAAC;;ACztBxB,MAAM,gBAAgB,GAAG,IAAI,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAE/D,MAAM,WAAW,GAAG,IAAI,OAAO,CAAC;AAgB1B,SAAU,mBAAmB,CAAC,KAAgC,EAAA;AAEhE,IAAA,IAAI,KAAK,YAAY,IAAI,IAAI,KAAK,YAAY,YAAY;AAAE,QAAA,OAAO,IAAI,YAAY,CAAC,KAAa,CAAC,CAAC;;AAC9F,QAAA,OAAO,IAAI,WAAW,CAAC,KAAY,CAAC,CAAC;AAC9C,CAAC;MAEY,YAAY,CAAA;AAOrB,IAAA,WAAA,CAAY,IAAU,EAAA;QAElB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QACtC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC;QACtC,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACzC,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC;QAEnC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;AAEtC,QAAA,gBAAgB,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;KAC9C;AAGD,IAAA,IAAI,QAAQ,GAAA;QAER,IAAI,CAAC,IAAI,CAAC,SAAS;AAAE,YAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,CAAC;QAEpE,OAAO,IAAI,CAAC,SAAS,CAAC;KACzB;AAGD,IAAA,IAAI,YAAY,GAAA;QAEZ,IAAI,CAAC,IAAI,CAAC,aAAa;AAAE,YAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,CAAC;QAC9E,OAAO,IAAI,CAAC,aAAa,CAAC;KAC7B;AAED,IAAA,eAAe,CAAC,CAAU,EAAA;QAEtB,WAAW,CAAC,UAAU,CAAC,CAAC,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;QAC5C,IAAI,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;AAE5C,QAAA,OAAO,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC;KAC9B;AAED,IAAA,gBAAgB,CAAC,CAAU,EAAA;QAEvB,IAAI,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;QACpC,IAAI,EAAE,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;AACrC,QAAA,OAAO,CAAC,KAAK,EAAEH,SAAO,CAAC,SAAS,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;KAC1E;AAED,IAAA,eAAe,CAAC,KAAa,EAAA;QAEzB,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,cAAc,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;KAC3F;IAED,WAAW,CAAC,CAAU,EAAE,GAAW,EAAA;AAE/B,QAAA,OAAO,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC;KAC1D;AACJ,CAAA;MAEY,WAAW,CAAA;AAEpB,IAAA,WAAA,CAAoB,IAAS,EAAA;QAAT,IAAI,CAAA,IAAA,GAAJ,IAAI,CAAK;KAG5B;AAED,IAAA,gBAAgB,CAAC,CAAU,EAAA;AAEvB,QAAA,IAAI,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC;AACpE,QAAA,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;KACjD;AAED,IAAA,eAAe,CAAC,KAAa,EAAA;QAEzB,OAAO,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;KAC3C;AAED,IAAA,eAAe,CAAC,CAAU,EAAA;AAEtB,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC;KAClE;AACJ;;AC/GD;AACM,SAAU,IAAI,CAAC,GAAY,EAAA;AAE7B,IAAA,IAAI,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC;IACrB,IAAI,GAAG,GAAG,CAAC;AACP,QAAA,OAAO,CAAC,CAAC;IACb,IAAI,CAAC,GAAG,CAAC,CAAC;AACV,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,EAAE,CAAC,EACzC;AACI,QAAA,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACnD,CAAC,GAAG,CAAC,CAAC;AACT,KAAA;AACD,IAAA,OAAO,CAAC,CAAC,GAAG,GAAG,CAAC;AACpB;;MCba,OAAO,CAAA;AAKhB,IAAA,WAAA,CAAY,CAAY,GAAA,CAAC,EAAE,CAAA,GAAY,CAAC,EAAA;QAD/B,IAAS,CAAA,SAAA,GAAY,IAAI,CAAC;AAG/B,QAAA,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;AACX,QAAA,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;KACd;IACD,IAAI,KAAK,KAAa,OAAO,IAAI,CAAC,CAAC,CAAC,EAAE;IACtC,IAAI,KAAK,CAAC,KAAa,EAAI,EAAA,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,EAAE;IAC5C,IAAI,MAAM,KAAa,OAAO,IAAI,CAAC,CAAC,CAAC,EAAE;IACvC,IAAI,MAAM,CAAC,KAAa,EAAI,EAAA,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,EAAE;IAC7C,GAAG,CAAC,CAAS,EAAE,CAAS,EAAA;AAEpB,QAAA,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;AACX,QAAA,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;AACX,QAAA,OAAO,IAAI,CAAC;KACf;AACD,IAAA,SAAS,CAAC,MAAc,EAAA;AAEpB,QAAA,IAAI,CAAC,CAAC,GAAG,MAAM,CAAC;AAChB,QAAA,IAAI,CAAC,CAAC,GAAG,MAAM,CAAC;AAChB,QAAA,OAAO,IAAI,CAAC;KACf;AACD,IAAA,IAAI,CAAC,CAAS,EAAA;AAEV,QAAA,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;AACX,QAAA,OAAO,IAAI,CAAC;KACf;AACD,IAAA,IAAI,CAAC,CAAS,EAAA;AAEV,QAAA,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;AACX,QAAA,OAAO,IAAI,CAAC;KACf;IACD,YAAY,CAAC,KAAa,EAAE,KAAa,EAAA;AAErC,QAAA,QAAQ,KAAK;AAET,YAAA,KAAK,CAAC;AAAE,gBAAA,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC;gBAAC,MAAM;AAC9B,YAAA,KAAK,CAAC;AAAE,gBAAA,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC;gBAAC,MAAM;YAC9B,SAAS,MAAM,IAAI,KAAK,CAAC,yBAAyB,GAAG,KAAK,CAAC,CAAC;AAC/D,SAAA;AACD,QAAA,OAAO,IAAI,CAAC;KACf;AACD,IAAA,YAAY,CAAC,KAAa,EAAA;AAEtB,QAAA,QAAQ,KAAK;AAET,YAAA,KAAK,CAAC,EAAE,OAAO,IAAI,CAAC,CAAC,CAAC;AACtB,YAAA,KAAK,CAAC,EAAE,OAAO,IAAI,CAAC,CAAC,CAAC;YACtB,SAAS,MAAM,IAAI,KAAK,CAAC,yBAAyB,GAAG,KAAK,CAAC,CAAC;AAC/D,SAAA;KACJ;IACD,KAAK,GAAA;QAED,OAAO,IAAK,IAAI,CAAC,WAAmB,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KACrD;AACD,IAAA,IAAI,CAAC,CAAU,EAAA;AAEX,QAAA,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACb,QAAA,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACb,QAAA,OAAO,IAAI,CAAC;KACf;AACD,IAAA,GAAG,CAAC,CAAQ,EAAA;AAER,QAAA,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACd,QAAA,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACd,QAAA,OAAO,IAAI,CAAC;KACf;AACD,IAAA,SAAS,CAAC,CAAS,EAAA;AAEf,QAAA,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;AACZ,QAAA,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;AACZ,QAAA,OAAO,IAAI,CAAC;KACf;IACD,UAAU,CAAC,CAAU,EAAE,CAAU,EAAA;QAE7B,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACnB,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACnB,QAAA,OAAO,IAAI,CAAC;KACf;IACD,eAAe,CAAC,CAAU,EAAE,CAAS,EAAA;QAEjC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAClB,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AAClB,QAAA,OAAO,IAAI,CAAC;KACf;AACD,IAAA,GAAG,CAAC,CAAU,EAAA;AAEV,QAAA,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACd,QAAA,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACd,QAAA,OAAO,IAAI,CAAC;KACf;AACD,IAAA,SAAS,CAAC,CAAS,EAAA;AAEf,QAAA,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;AACZ,QAAA,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;AACZ,QAAA,OAAO,IAAI,CAAC;KACf;IACD,UAAU,CAAC,CAAU,EAAE,CAAU,EAAA;QAE7B,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACnB,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACnB,QAAA,OAAO,IAAI,CAAC;KACf;AACD,IAAA,QAAQ,CAAC,CAAU,EAAA;AAEf,QAAA,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACd,QAAA,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACd,QAAA,OAAO,IAAI,CAAC;KACf;AACD,IAAA,cAAc,CAAC,MAAc,EAAA;AAEzB,QAAA,IAAI,QAAQ,CAAC,MAAM,CAAC,EACpB;AACI,YAAA,IAAI,CAAC,CAAC,IAAI,MAAM,CAAC;AACjB,YAAA,IAAI,CAAC,CAAC,IAAI,MAAM,CAAC;AACpB,SAAA;AACD,aAAA;AACI,YAAA,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;AACX,YAAA,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;AACd,SAAA;AACD,QAAA,OAAO,IAAI,CAAC;KACf;AACD,IAAA,MAAM,CAAC,CAAU,EAAA;AAEb,QAAA,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACd,QAAA,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACd,QAAA,OAAO,IAAI,CAAC;KACf;AACD,IAAA,YAAY,CAAC,MAAc,EAAA;QAEvB,OAAO,IAAI,CAAC,cAAc,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC;KAC1C;AACD,IAAA,GAAG,CAAC,CAAQ,EAAA;AAER,QAAA,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AAC/B,QAAA,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AAC/B,QAAA,OAAO,IAAI,CAAC;KACf;AACD,IAAA,GAAG,CAAC,CAAQ,EAAA;AAER,QAAA,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AAC/B,QAAA,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AAC/B,QAAA,OAAO,IAAI,CAAC;KACf;IACD,KAAK,CAAC,GAAY,EAAE,GAAY,EAAA;;QAG5B,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QAClD,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AAClD,QAAA,OAAO,IAAI,CAAC;KACf;IAGD,WAAW,CAAC,MAAc,EAAE,MAAc,EAAA;AAEtC,QAAA,MAAM,GAAG,GAAY,OAAO,CAAC,eAAe,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AACjE,QAAA,MAAM,GAAG,GAAY,OAAO,CAAC,eAAe,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACjE,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;KAC/B;IACD,WAAW,CAAC,GAAW,EAAE,GAAW,EAAA;AAEhC,QAAA,MAAM,MAAM,GAAW,IAAI,CAAC,MAAM,EAAE,CAAC;QACrC,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC;KAC7E;IACD,KAAK,GAAA;QAED,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC5B,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAC5B,QAAA,OAAO,IAAI,CAAC;KACf;IACD,IAAI,GAAA;QAEA,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC3B,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAC3B,QAAA,OAAO,IAAI,CAAC;KACf;IACD,KAAK,GAAA;QAED,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC5B,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAC5B,QAAA,OAAO,IAAI,CAAC;KACf;IACD,WAAW,GAAA;AAEP,QAAA,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAC/D,QAAA,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAC/D,QAAA,OAAO,IAAI,CAAC;KACf;IACD,MAAM,GAAA;AAEF,QAAA,IAAI,CAAC,CAAC,GAAG,CAAE,IAAI,CAAC,CAAC,CAAC;AAClB,QAAA,IAAI,CAAC,CAAC,GAAG,CAAE,IAAI,CAAC,CAAC,CAAC;AAClB,QAAA,OAAO,IAAI,CAAC;KACf;AACD,IAAA,GAAG,CAAC,CAAU,EAAA;AAEV,QAAA,OAAO,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;KACtC;IACD,QAAQ,GAAA;AAEJ,QAAA,OAAO,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;KAC5C;IACD,MAAM,GAAA;QAEF,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;KACvD;IACD,eAAe,GAAA;AAEX,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;KAC9C;IACD,SAAS,GAAA;QAEL,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;KAC3C;IACD,KAAK,GAAA;;AAGD,QAAA,IAAI,KAAK,GAAW,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;QAC/C,IAAI,KAAK,GAAG,CAAC;AAAE,YAAA,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC;AACpC,QAAA,OAAO,KAAK,CAAC;KAChB;AACD,IAAA,UAAU,CAAC,CAAU,EAAA;QAEjB,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC;KAC/C;AACD,IAAA,iBAAiB,CAAC,CAAU,EAAA;AAExB,QAAA,MAAM,EAAE,GAAW,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,GAAW,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAC3D,QAAA,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;KAC5B;AACD,IAAA,mBAAmB,CAAC,CAAU,EAAA;QAE1B,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;KAC1D;AACD,IAAA,SAAS,CAAC,MAAc,EAAA;QAEpB,OAAO,IAAI,CAAC,cAAc,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;KACtD;IACD,IAAI,CAAC,CAAU,EAAE,KAAa,EAAA;AAE1B,QAAA,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC;AACjC,QAAA,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC;AACjC,QAAA,OAAO,IAAI,CAAC;KACf;AACD,IAAA,WAAW,CAAC,EAAW,EAAE,EAAW,EAAE,KAAa,EAAA;AAE/C,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;KAChE;AACD,IAAA,MAAM,CAAC,CAAU,EAAA;QAEb,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE;KACjD;AACD,IAAA,SAAS,CAAC,KAA8B,EAAE,MAAA,GAAiB,CAAC,EAAA;AAExD,QAAA,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;QACvB,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AAC3B,QAAA,OAAO,IAAI,CAAC;KACf;AACD,IAAA,OAAO,CAAC,KAAA,GAAiC,EAAE,EAAE,SAAiB,CAAC,EAAA;AAE3D,QAAA,KAAK,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;QACvB,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;AAC3B,QAAA,OAAO,KAAK,CAAC;KAChB;AACD,IAAA,aAAa,CAAC,SAAc,EAAE,KAAa,EAAE,SAAiB,CAAC,EAAA;QAE3D,KAAK,GAAG,KAAK,GAAG,SAAS,CAAC,QAAQ,GAAG,MAAM,CAAC;QAC5C,IAAI,CAAC,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAChC,IAAI,CAAC,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;AACpC,QAAA,OAAO,IAAI,CAAC;KACf;IACD,YAAY,CAAC,MAAe,EAAE,KAAa,EAAA;AAEvC,QAAA,MAAM,CAAC,GAAW,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,GAAW,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC/D,MAAM,CAAC,GAAW,IAAI,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;QACpC,MAAM,CAAC,GAAW,IAAI,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;AACpC,QAAA,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;AAClC,QAAA,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;AAClC,QAAA,OAAO,IAAI,CAAC;KACf;;AAhIc,OAAA,CAAA,eAAe,GAAG,IAAI,OAAO,EAAE,CAAC;AAChC,OAAA,CAAA,eAAe,GAAG,IAAI,OAAO,EAAE;;MC3JrC,IAAI,CAAA;IAIb,WAAY,CAAA,GAAG,GAAG,IAAI,OAAO,CAAC,CAAE,QAAQ,EAAE,CAAE,QAAQ,CAAC,EAAE,GAAG,GAAG,IAAI,OAAO,CAAC,CAAE,QAAQ,EAAE,CAAE,QAAQ,CAAC,EAAA;AAE5F,QAAA,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;AACf,QAAA,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;KAClB;AAED,IAAA,IAAI,IAAI,GAAA;QAEJ,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;KAChE;IAED,GAAG,CAAC,GAAY,EAAE,GAAY,EAAA;AAE1B,QAAA,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACnB,QAAA,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACnB,QAAA,OAAO,IAAI,CAAC;KACf;AACD,IAAA,aAAa,CAAC,MAAuB,EAAA;QAEjC,IAAI,CAAC,SAAS,EAAE,CAAC;AACjB,QAAA,KAAK,IAAI,CAAC,IAAI,MAAM,EACpB;AACI,YAAA,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;AACzB,SAAA;AACD,QAAA,OAAO,IAAI,CAAC;KACf;IAED,oBAAoB,CAAC,MAAe,EAAE,IAAa,EAAA;AAE/C,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,wBAAwB,CAAC;AACzC,QAAA,MAAM,QAAQ,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;AACnD,QAAA,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AACpC,QAAA,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AACpC,QAAA,OAAO,IAAI,CAAC;KACf;IACD,KAAK,GAAA;QAED,OAAO,IAAK,IAAI,CAAC,WAAmB,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KACrD;AACD,IAAA,IAAI,CAAC,GAAS,EAAA;QAEV,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACvB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACvB,QAAA,OAAO,IAAI,CAAC;KACf;IACD,SAAS,GAAA;AAEL,QAAA,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAE,QAAQ,CAAC;AACrC,QAAA,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAE,QAAQ,CAAC;AACrC,QAAA,OAAO,IAAI,CAAC;KACf;IACD,OAAO,GAAA;;QAGH,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;KACjE;AACD,IAAA,SAAS,CAAC,MAAA,GAAkB,IAAI,OAAO,EAAE,EAAA;AAErC,QAAA,OAAO,IAAI,CAAC,OAAO,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;KACxG;AACD,IAAA,OAAO,CAAC,MAAA,GAAkB,IAAI,OAAO,EAAE,EAAA;AAEnC,QAAA,OAAO,IAAI,CAAC,OAAO,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;KACpF;AACD,IAAA,aAAa,CAAC,KAAY,EAAA;AAEtB,QAAA,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AACpB,QAAA,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AACpB,QAAA,OAAO,IAAI,CAAC;KACf;AACD,IAAA,cAAc,CAAC,MAAe,EAAA;AAE1B,QAAA,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AACrB,QAAA,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AACrB,QAAA,OAAO,IAAI,CAAC;KACf;AACD,IAAA,cAAc,CAAC,MAAc,EAAA;QAEzB,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAE,MAAM,CAAC,CAAC;AAC7B,QAAA,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;AAC3B,QAAA,OAAO,IAAI,CAAC;KACf;AACD,IAAA,aAAa,CAAC,KAAc,EAAA;AAExB,QAAA,IAAI,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;AAC5C,YAAA,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAChD;AACI,YAAA,OAAO,KAAK,CAAC;AAChB,SAAA;AACD,QAAA,OAAO,IAAI,CAAC;KACf;AACD,IAAA,WAAW,CAAC,GAAS,EAAA;QAEjB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;aACrD,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAC1D;AACI,YAAA,OAAO,IAAI,CAAC;AACf,SAAA;AACD,QAAA,OAAO,KAAK,CAAC;KAChB;AACD,IAAA,YAAY,CAAC,KAAc,EAAE,MAAkB,GAAA,IAAI,OAAO,EAAE,EAAA;;;QAIxD,OAAO,MAAM,CAAC,GAAG,CACb,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAClD,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CACrD,CAAC;KACL;AACD,IAAA,aAAa,CAAC,GAAS,EAAA;;QAGnB,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;YAChD,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EACpD;AACI,YAAA,OAAO,KAAK,CAAC;AAChB,SAAA;AACD,QAAA,OAAO,IAAI,CAAC;KACf;AACD,IAAA,UAAU,CAAC,KAAc,EAAE,MAAkB,GAAA,IAAI,OAAO,EAAE,EAAA;AAEtD,QAAA,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;KACvD;AAED,IAAA,eAAe,CAAC,KAAc,EAAA;AAE1B,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,mBAAmB,CAAC;AACpC,QAAA,MAAM,YAAY,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;QAC9D,OAAO,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,CAAC;KAC3C;AACD,IAAA,SAAS,CAAC,GAAS,EAAA;QAEf,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACtB,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACtB,QAAA,OAAO,IAAI,CAAC;KACf;AACD,IAAA,KAAK,CAAC,GAAS,EAAA;QAEX,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACtB,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACtB,QAAA,OAAO,IAAI,CAAC;KACf;AACD,IAAA,SAAS,CAAC,MAAa,EAAA;AAEnB,QAAA,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AACrB,QAAA,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AACrB,QAAA,OAAO,IAAI,CAAC;KACf;AACD,IAAA,MAAM,CAAC,GAAS,EAAA;QAEZ,OAAO,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;KAC/D;;AA7Hc,IAAA,CAAA,wBAAwB,GAAG,IAAI,OAAO,EAAE,CAAC;AAiGzC,IAAA,CAAA,mBAAmB,GAAG,IAAI,OAAO,EAAE;;AC1HtD;;;;AAIG;MACU,IAAI,CAAA;IAOb,WAAmB,CAAA,aAAuB,EAAE,QAAA,GAAmB,CAAC,EAAA;QAA7C,IAAa,CAAA,aAAA,GAAb,aAAa,CAAU;QAH1C,IAAe,CAAA,eAAA,GAAkC,EAAE,CAAC;QACpD,IAAc,CAAA,cAAA,GAAkC,EAAE,CAAC;AAI/C,QAAA,IAAI,aAAa;AACb,YAAA,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;KAC1C;IAQO,IAAI,CAAC,aAAsB,EAAE,QAAgB,EAAA;AAEjD,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,QAAQ,KAAK,CAAC;YACd,IAAI,CAAC,MAAM,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,MAAM,OAAO,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAE/D,aAAA;YACI,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YAC3B,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YAE3B,IAAI,IAAI,GAAY,EAAE,CAAC;AACvB,YAAA,KAAK,IAAI,CAAC,IAAI,aAAa,EAC3B;AACI,gBAAA,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACZ,gBAAA,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBACZ,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBACzB,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACzB,gBAAA,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;AAC/B,aAAA;AACD,YAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;AACtB,SAAA;AAED,QAAA,IAAI,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;AACrB,QAAA,IAAI,EAAE,GAAG,IAAI,OAAO,EAAE,CAAC;AACvB,QAAA,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,EACzB;AACI,YAAA,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACX,YAAA,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACX,YAAA,GAAG,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;AACzB,SAAA;AAED,QAAA,IAAI,CAAC,eAAe,GAAG,GAAG,CAAC,GAAG,CAAC;AAC/B,QAAA,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAEjC,QAAA,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,EACzB;YACI,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;YACjB,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AACpB,SAAA;KACJ;IAED,OAAO,CAAC,IAAU,EAAE,OAAgB,EAAA;;;AAIhC,QAAA,IAAI,IAAI,GAAG,UAAU,CAAC,GAAG,CAAC,gBAAgB,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;;QAGvF,IAAI,GAAG,UAAU,CAAC,GAAG,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;QAC7C,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,KAAI;AAEvB,YAAA,IAAI,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;;AAErB,YAAA,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE;gBAAE,OAAO,KAAK,CAAC;YAEtC,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;AACtB,YAAA,IAAI,OAAO,EACX;AACI,gBAAA,IAAI,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,EACzB;oBACI,IAAI,CAAC,GAAG,EAAE,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;AACzD,oBAAA,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;AAClE,wBAAA,OAAO,IAAI,CAAC;AAChB,oBAAA,IAAI,GAAG,GAAG,UAAU,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;oBAC9D,OAAO,GAAG,KAAK,CAAC,CAAC;AACpB,iBAAA;AAED,qBAAA;oBACI,IAAI,CAAC,GAAG,EAAE,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;AACzD,oBAAA,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;AAClE,wBAAA,OAAO,IAAI,CAAC;AAChB,oBAAA,IAAI,GAAG,GAAG,UAAU,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;oBAC9D,OAAO,GAAG,KAAK,CAAC,CAAC;AACpB,iBAAA;AACJ,aAAA;AAED,iBAAA;gBACI,IAAI,CAAC,GAAG,EAAE,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;AACzD,gBAAA,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;AAClE,oBAAA,OAAO,KAAK,CAAC;AACjB,gBAAA,IAAI,GAAG,GAAG,UAAU,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;gBAC9D,OAAO,GAAG,KAAK,CAAC,CAAC;AACpB,aAAA;AACL,SAAC,CAAC,CAAC;AACH,QAAA,OAAO,IAAI,CAAC;KACf;AAED,IAAA,aAAa,CAAC,IAAU,EAAA;QAEpB,IAAI,IAAI,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACzC,QAAA,IAAI,IAAI;AAAE,YAAA,OAAO,IAAI,CAAC;AAEtB,QAAA,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,EAC9B;YACI,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;YACtD,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;AACtD,YAAA,IAAI,GAAG,CAAC;oBACJ,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE;oBAClB,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE;AACjB,oBAAA,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE;oBAChB,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE;AACpB,iBAAA,CAAC,CAAC;AACN,SAAA;;YAEG,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACpC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC;;;;;;;;;AASrC,QAAA,OAAO,IAAI,CAAC;KACf;AACD,IAAA,YAAY,CAAC,IAAU,EAAA;AAEnB,QAAA,IAAI,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI;YAAE,OAAO;QAClC,IAAI,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACvC,QAAA,IAAI,GAAG;AAAE,YAAA,OAAO,GAAG,CAAC;AAEpB,QAAA,IAAI,IAAiB,CAAC;QACtB,IAAI,IAAI,CAAC,MAAM,EACf;YACI,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;YACtD,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;AAEtD,YAAA,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC;AAChB,YAAA,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC;AAEhB,YAAA,MAAM,SAAS,GAAG,GAAG,CAAC;YACtB,IAAI,CAAC,GAAG,CAAC,SAAS,IAAI,CAAC,GAAG,CAAC,SAAS;gBAChC,OAAO;YAEX,IAAI,CAAC,GAAG,SAAS;gBACb,CAAC,GAAG,SAAS,CAAC;;gBAEd,CAAC,IAAI,SAAS,CAAC;YAEnB,IAAI,CAAC,GAAG,SAAS;gBACb,CAAC,GAAG,SAAS,CAAC;;gBAEd,CAAC,IAAI,SAAS,CAAC;AAEnB,YAAA,IAAI,GAAG,CAAC;AACJ,oBAAA,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;AACd,oBAAA,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;AACd,oBAAA,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;AACd,oBAAA,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;AACjB,iBAAA,CAAC,CAAC;AACN,SAAA;;YAEG,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AAErC,QAAA,IAAI,IAAI,CAAC,EAAE,KAAK,SAAS;YACrB,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC;AACxC,QAAA,OAAO,IAAI,CAAC;KACf;AAID;;AAEG;AACH,IAAA,IAAY,OAAO,GAAA;QAEf,IAAI,IAAI,CAAC,QAAQ;YAAE,OAAO,IAAI,CAAC,QAAQ,CAAC;QACxC,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;QACxG,IAAI,MAAM,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;;AAE/G,QAAA,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC;AACjB,QAAA,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC;AAEjB,QAAA,EAAE,CAAC,CAAC,IAAI,GAAG,CAAC;AACZ,QAAA,EAAE,CAAC,CAAC,IAAI,GAAG,CAAC;AACZ,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;AACnB,QAAA,OAAO,EAAE,CAAC;KACb;AAGD,IAAA,IAAI,YAAY,GAAA;QAEZ,IAAI,IAAI,CAAC,aAAa;YAAE,OAAO,IAAI,CAAC,aAAa,CAAC;QAClD,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAG;YAErC,OAAO;gBACH,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;gBACxB,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;aAC3B,CAAC;AACN,SAAC,CAAC,CAAC;QACH,OAAO,IAAI,CAAC,aAAa,CAAC;KAC7B;AAGD,IAAA,IAAI,OAAO,GAAA;QAEP,IAAI,IAAI,CAAC,QAAQ;YAAE,OAAO,IAAI,CAAC,QAAQ,CAAC;QACxC,IAAI,CAAC,QAAQ,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;QAClE,OAAO,IAAI,CAAC,QAAQ,CAAC;KACxB;AAGD,IAAA,IAAI,YAAY,GAAA;QAEZ,IAAI,CAAC,IAAI,CAAC,aAAa;YACnB,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,IAAG;AAE3C,gBAAA,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AAChC,aAAC,CAAC,CAAC;QAEP,OAAO,IAAI,CAAC,aAAa,CAAC;KAC7B;AAGD,IAAA,IAAI,WAAW,GAAA;QAEX,IAAI,CAAC,IAAI,CAAC,YAAY;AAClB,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI,IAAI,CAAC,IAAI,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QACzD,OAAO,IAAI,CAAC,YAAY,CAAC;KAC5B;AAGD,IAAA,IAAI,IAAI,GAAA;AAEJ,QAAA,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS;YACxB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACnC,OAAO,IAAI,CAAC,KAAK,CAAC;KACrB;IACD,IAAI,IAAI,CAAC,CAAS,EAAA;AAEd,QAAA,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;KAClB;AAGD,IAAA,IAAI,MAAM,GAAA;AAEN,QAAA,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS,EAC9B;YACI,IAAI,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,CAAC;AAC9C,YAAA,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAClD,SAAA;QACD,OAAO,IAAI,CAAC,OAAO,CAAC;KACvB;AAED,IAAA,QAAQ,CAAC,IAAe,EAAA;AAEpB,QAAU,IAAI,CAAC,IAAI,GAAG;AACtB,QAAA,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;AACtB,QAAA,IAAI,GAAG,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;AACtB,QAAA,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;AACjB,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EACtC;AACI,YAAA,IAAI,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;AACrC,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACvB,SAAA;AAED,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;AAClD,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;AACzB,QAAA,IAAI,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;AACrB,QAAA,IAAI,EAAE,KAAK,CAAC,CAAC,EACb;AACI,YAAA,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;AAClB,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;AAC5B,YAAA,IAAI,CAAC,eAAe,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;AAChE,SAAA;KACJ;AACD,IAAA,SAAS,CAAC,IAAe,EAAA;AAErB,QAAA,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACd,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACpB,IAAI,GAAG,GAAa,EAAE,CAAC;AACvB,QAAA,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM;YACrB,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AACvB,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAEhB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACxB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACxB,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACvB,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,EAAE,EACnC;;YAEI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;AAC5B,YAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC1B,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;YACnC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;AACtC,SAAA;;AAEG,YAAA,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;KACtB;AACJ,CAAA;SAae,kBAAkB,CAAC,GAAY,EAAE,EAAU,EAAE,EAAU,EAAA;AAEnE,IAAA,KAAK,IAAI,EAAE,IAAI,GAAG,EAClB;AACI,QAAA,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;AACX,QAAA,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;AACd,KAAA;AACD,IAAA,OAAO,GAAG,CAAC;AACf,CAAC;AAED;AACgB,SAAA,SAAS,CAAC,GAAY,EAAE,KAAa,EAAA;AAEjD,IAAA,KAAK,IAAI,CAAC,IAAI,GAAG,EACjB;AACI,QAAA,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC;AACb,QAAA,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC;AAChB,KAAA;AACD,IAAA,OAAO,GAAG,CAAC;AACf;;MC/Va,SAAS,CAAA;AAWlB;;AAEG;IACH,OAAO,UAAU,CAAC,CAAS,EAAE,CAAS,EAAE,UAAU,GAAG,GAAG,EAAA;AAEpD,QAAA,IAAI,IAAI,GAAG,CAAC,UAAU,CAAC;AACvB,QAAA,IAAI,IAAI,GAAG,CAAC,GAAG,UAAU,CAAC;AAC1B,QAAA,IAAI,IAAI,GAAG,CAAC,UAAU,CAAC;AACvB,QAAA,IAAI,IAAI,GAAG,CAAC,GAAG,UAAU,CAAC;QAC1B,OAAO,IAAI,IAAI,CAAC;AACZ,YAAA,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE;AACpB,YAAA,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE;AACpB,YAAA,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE;AACpB,YAAA,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE;AACvB,SAAA,CAAC,CAAC;KACN;AAED,IAAA,OAAO,KAAK,GAAA;AAER,QAAA,IAAI,CAAC,iBAAiB,GAAG,CAAC,CAAC;AAC3B,QAAA,IAAI,CAAC,eAAe,GAAG,CAAC,CAAC;AACzB,QAAA,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;AACvB,QAAA,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;KAC3B;;AAhCD;AACO,SAAiB,CAAA,iBAAA,GAAG,CAAC,CAAC;AAC7B;AACO,SAAA,CAAA,eAAe,GAAG,CAAC,CAAC;AAEpB,SAAa,CAAA,aAAA,GAA8B,EAAE,CAAC;AAC9C,SAAU,CAAA,UAAA,GAAoC,EAAE,CAAC;AACzC,SAAA,CAAA,SAAS,GAAG,IAAI,GAAG,EAAgB;;ACRhD,SAAU,aAAa,CAAC,IAAa,EAAA;AAEvC,IAAA,IAAI,EAAE,GAAG,IAAI,QAAQ,EAAE,CAAC;IACxB,EAAE,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,IAAG;AAEvB,QAAA,OAAO,EAAE,EAAE,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;AACxC,KAAC,CAAC,CAAC;AACH,IAAA,EAAE,CAAC,SAAS,GAAG,IAAI,CAAC;AACpB,IAAA,OAAO,EAAE,CAAC;AACd;;SCcgB,eAAe,CAAC,EAAY,EAAE,OAAgB,EAAE,WAAmB,EAAA;IAE/E,IAAI,GAAG,GAAY,EAAE,CAAC;AAEtB,IAAA,IAAI,CAAC,OAAO;QAAE,WAAW,GAAG,CAAC,WAAW,CAAC;IACzC,IAAI,EAAE,CAAC,WAAW;QAAE,EAAE,CAAC,OAAO,EAAE,CAAC;AACjC,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,EAAE,EACpC;QACI,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC;QAEhC,IAAI,GAAG,GAAG,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QAC3B,IAAI,GAAG,KAAK,CAAC,EACb;YACI,IAAI,GAAG,GAAG,EAAE,CAAC,eAAe,CAAC,CAAC,CAAQ,CAAC;AAEvC,YAAA,IAAI,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC;AAC5B,YAAA,IAAI,SAAS,GAAG,GAAG,CAAC,MAAM,CAAC;AAE3B,YAAA,IAAI,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC;YAElD,IAAI,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,GAAG,CAAC,CAAC;YAC5C,IAAI,SAAS,GAAG,GAAG;gBACf,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;;AAEnC,gBAAA,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,GAAG,GAAG,EAAE,UAAU,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC;AAEpE,YAAA,IAAI,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC;AACxB,YAAA,IAAI,OAAO,KAAK,GAAG,GAAG,CAAC;AACnB,gBAAA,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,IAAI,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC;AAE5D,YAAA,IAAI,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC;YACpB,KAAK,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EACrC;AACI,gBAAA,IAAI,CAAC,GAAG,GAAG,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC;AAClD,gBAAA,IAAI,CAAC,GAAG,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC;AACrC,gBAAA,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACf,aAAA;AACJ,SAAA;AACJ,KAAA;IAED,IAAI,WAAW,KAAK,CAAC,EACrB;AACI,QAAA,GAAG,GAAG,UAAU,CAAC,GAAG,CAAC,aAAa,CAAC;YAC/B,KAAK,EAAE,WAAW,GAAG,GAAG;YACxB,YAAY,EAAE,CAAC,EAAE,IAAI,EAAE,SAAS,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,aAAa,EAAE,CAAC;SAC1G,CAAC,CAAC,CAAC,CAAC,CAAC;AACN,QAAA,SAAS,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;AACxB,KAAA;AACD,IAAA,OAAO,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;AACrB;;AC/DO,MAAM,QAAQ,GAAG,SAAS,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;AAEvD;AACgB,SAAA,kBAAkB,CAAC,OAAgB,EAAE,KAAkB,EAAA;IAEnE,IAAI,UAAU,GAAG,IAAI,CAAC;AACtB,IAAA,IAAI,IAAI,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC;AAC7B,IAAA,IAAI,IAAI,GAAe,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,EAAE,GAAG,CAAC,GAAG,IAAI,aAAa,CAAC,kBAAkB,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACxK,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAC9B;AACI,QAAA,IAAI,GAAG,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC;QAChC,UAAU,GAAG,KAAK,CAAC;AACtB,KAAA;IAED,IAAI,QAAQ,GAAc,EAAE,CAAC;AAC7B,IAAA,KAAK,IAAI,IAAI,IAAI,KAAK,EACtB;AACI,QAAA,IAAI,KAAK,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC;QAC3B,IAAI,IAAI,GAAG,KAAK,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;QACzC,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAE3D,IAAI,EAAE,GAAG,aAAa,CAAC,kBAAkB,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,KAAK,CAAC,eAAe,CAAC,CAAC,EAAE,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC;AACnH,QAAA,IAAI,GAAG,GAAG,EAAE,CAAC,WAAW,CAAC;QAEzB,IAAI,KAAK,GAAG,IAAI,QAAQ,EAAE,CAAC,gBAAgB,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAEtI,IAAI,IAAI,GAAG,OAAO,CAAC,aAAa,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;QAC5C,IAAI,IAAI,GAAG,OAAO,CAAC,aAAa,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AAE/C,QAAA,QAAQ,CAAC,IAAI,CACT,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC,QAAQ,CAC5C,CAAC;AACL,KAAA;IAED,IAAI,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;AACzE,IAAA,IAAI,SAAS,GAAG,IAAI,YAAY,CAAC;AACjC,IAAA,QAAQ,CAAC,OAAO,CAAC,EAAE,IAAG;AAElB,QAAA,SAAS,CAAC,kBAAkB,CAAC,IAAI,YAAY,CAAC,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AACpE,KAAC,CAAC,CAAC;IAEH,IAAI,SAAS,GAAY,EAAE,CAAC;AAC5B,IAAA,KAAK,IAAI,KAAK,IAAI,MAAM,EACxB;;AAEI,QAAA,SAAS,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,qBAAqB,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC;AACvE,KAAA;AAED,IAAA,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;QACtB,SAAS,GAAG,MAAM,CAAC;AAEvB,IAAA,IAAI,OAAO,GAAG,CAAC,QAAQ,CAAC;AACxB,IAAA,IAAI,IAAc,CAAC;AAGnB,IAAA,KAAK,IAAI,KAAK,IAAI,SAAS,EAC3B;AACI,QAAA,IAAI,EAAE,GAAG,KAAK,CAAC,OAAO,CAAC,KAAiB,CAAC;AACzC,QAAA,IAAI,EAAE,CAAC,IAAI,GAAG,CAAC,EACf;AACI,YAAA,IAAI,CAAC,IAAI;AAAE,gBAAA,IAAI,GAAG,EAAE,CAAC,WAAW,CAAC,SAAS,CAAC,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,CAAC;YAClE,SAAS;AACZ,SAAA;;AAED,QAAA,IAAI,CAAC,GAAG,SAAS,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;AAE/D,QAAA,IAAI,IAAI,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC;QACzB,IAAI,IAAI,GAAG,OAAO,EAClB;YACI,OAAO,GAAG,IAAI,CAAC;AACf,YAAA,IAAI,GAAG,GAAG,EAAE,CAAC,QAAQ,CAAC;YACtB,IAAI,GAAG,CAAC,CAAC;AACT,YAAA,IAAI,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC;AACjB,YAAA,IAAI,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC;AAGpB,SAAA;AACJ,KAAA;AAED,IAAA,IAAI,CAAC,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;;;;;;;;;;;;;;;;;;AAqBtC,IAAA,IAAI,UAAU,EACd;AACI,QAAA,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC;AACX,QAAA,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;AACb,KAAA;AACD,IAAA,OAAO,CAAC,CAAC;AACb;;ACjHA;MACa,iBAAiB,CAAA;AAI1B,IAAA,WAAA,CAAoB,UAAwB,EAAA;QAAxB,IAAU,CAAA,UAAA,GAAV,UAAU,CAAc;QAD5C,IAAQ,CAAA,QAAA,GAA6B,EAAE,CAAC;AAGpC,QAAA,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QACpC,IAAI,CAAC,EAAE,GAAG,IAAI,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;AAC1C,QAAA,UAAU,CAAC,OAAO,CAAC,CAAC,IAAG;AAEnB,YAAA,IAAI,IAAI,IAAI,CAAC,CAAC,KAAK,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,MAAM,CAAiB,CAAC;;AAE7D,YAAA,IAAI,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC;AAC3B,YAAA,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAExD,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,kBAAkB,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;AACjK,SAAC,CAAC,CAAC;AACH,QAAA,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC;KACpB;;AAGD,IAAA,gBAAgB,CAAC,CAAU,EAAA;QAEvB,IAAI,CAAC,IAAI,CAAC,EAAE;YAAE,OAAO;AAErB,QAAA,IAAI,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7D,QAAA,KAAK,IAAI,EAAE,IAAI,GAAG,EAClB;AACI,YAAA,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;YACrC,IAAI,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EACxD;AACI,gBAAA,OAAO,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;AAC9B,aAAA;AACJ,SAAA;KACJ;AACJ;;ACzBD;AAEA;AAEA;AAEA;AAEA;AAIA;;AAEG;MACU,eAAe,CAAA;AAMxB;;AAEG;AACH,IAAA,WAAA,CAAoB,SAAmB,EAAA;QAAnB,IAAS,CAAA,SAAA,GAAT,SAAS,CAAU;QAEnC,IAAI,IAAI,CAAC,SAAS,EAClB;YACI,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,YAAY,UAAU,CAAiB,CAAC;YACpH,IAAI,CAAC,EAAE,GAAG,IAAI,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAC9C,YAAA,IAAI,CAAC,KAAK,GAAG,IAAI,GAAG,EAAc,CAAC;AACtC,SAAA;KACJ;AAED,IAAA,EAAE,CAAC,KAAqB,EAAA;QAEpB,IAAI,MAAM,GAAY,EAAE,CAAC;AAIzB,QAAA,IAAI,UAAU,GAAG,IAAI,GAAG,EAAS,CAAC;AAElC,QAAA,IAAI,IAAI,GAAG,CAAC,QAAQ,CAAC;QACrB,IAAI,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACtB,QAAA,KAAK,IAAI,IAAI,IAAI,KAAK,EACtB;AACI,YAAA,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;AAC5C,YAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EACpB;gBAEI,SAAS;AACZ,aAAA;AAED,YAAA,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC,UAAU,EAC7B;AACI,gBAAA,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACf,gBAAA,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACrB,aAAA;AACD,YAAA,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC,WAAW;AAC1B,gBAAA,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAEnB,YAAA,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC,SAAS;AACxB,gBAAA,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACtB,SAAA;QAED,MAAM,gBAAgB,GAAG,CAAC,CAAC;QAC3B,MAAM,kBAAkB,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,gBAAgB,CAAC,CAAC;QAE3D,IAAI,KAAK,GAAG,IAAI,WAAW,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;QAEtD,KAAK,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,KAAK,CAAC,UAAU,EAC3C;AACI,YAAA,IAAI,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC;gBACtB,KAAK,IAAI,GAAG,IAAI,IAAI;AAChB,oBAAA,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAC/B,SAAA;QAED,IAAI,eAAe,GAAe,EAAE,CAAC;AAErC,QAAA,IAAI,GAAG,GAAG,IAAI,GAAG,EAAqB,CAAC;;AAEvC,QAAA,KAAK,IAAI,MAAM,IAAI,KAAK,CAAC,cAAc,EACvC;YACI,IAAI,EAAE,GAAG,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,EAAE,kBAAkB,CAAC,CAAC;;;YAIxE,IAAI,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;AAC/B,gBAAA,EAAE,CAAC,UAAU,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,GAAG,CAAC,CAAC;;AAE5C,gBAAA,EAAE,CAAC,UAAU,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,GAAG,CAAC,CAAC;;;;;;AAQhD,YAAA,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACzB,YAAA,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;AACvB,SAAA;;AAGD,QAAA,KAAK,IAAI,MAAM,IAAI,KAAK,CAAC,eAAe,EACxC;AACI,YAAA,IAAI,EAAE,GAAG,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AACpD,YAAA,EAAE,CAAC,UAAU,GAAG,EAAE,CAAC,KAAK,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;;AAExC,SAAA;QAED,IAAI,IAAI,GAAG,eAAe,CAAC,GAAG,CAAC,EAAE,IAAI,IAAI,eAAe,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;AAC5F,QAAA,eAAe,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;QAEvC,IAAI,KAAK,GAAe,EAAE,CAAC;;AAG3B,QAAA,KAAK,IAAI,GAAG,IAAI,IAAI,EACpB;AACI,YAAA,IAAI,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,KAAiB,CAAC,CAAC;YACpD,IAAI,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,KAAK,CAAC;AACtC,aAAA;AACI,gBAAA,IAAI,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,GAAG,CAAC,IAAI,GAAG,GAAG;oBACjC,KAAK,IAAI,CAAC,IAAI,MAAM;wBAChB,CAAC,CAAC,KAAK,CAAC,mBAAmB,CAAC,GAAG,YAAY,CAAC,MAAM,CAAC;;oBAEvD,KAAK,IAAI,CAAC,IAAI,MAAM;wBAChB,CAAC,CAAC,KAAK,CAAC,mBAAmB,CAAC,GAAG,YAAY,CAAC,OAAO,CAAC;;gBAG5D,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC;gBACjC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC;gBACjC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,KAAiB,CAAC,CAAC;AAC7C,aAAA;iBACI,IAAI,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,KAAK,CAAC;AAC3C,aAAA;gBACI,KAAK,IAAI,CAAC,IAAI,MAAM;oBAChB,CAAC,CAAC,KAAK,CAAC,mBAAmB,CAAC,GAAG,YAAY,CAAC,MAAM,CAAC;gBAEvD,IAAI,IAAI,CAAC,SAAS,IAAI,GAAG,CAAC,OAAO,CAAC,IAAI,GAAG,GAAG,EAC5C;;AAEI,oBAAA,IAAI,KAAK,GAAG,IAAI,aAAa,EAAE,CAAC;AAChC,oBAAA,IAAI,GAAG,GAAG,IAAI,WAAW,EAAE,CAAC;AAC5B,oBAAA,KAAK,CAAC,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC;oBACzC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC;oBAEvC,KAAK,CAAC,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,KAAiB,CAAC;oBAC9C,GAAG,CAAC,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,KAAiB,CAAC;AAE5C,oBAAA,KAAK,CAAC,KAAK,GAAG,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,KAAiB,CAAC,CAAC;AACjE,oBAAA,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,KAAiB,CAAC,CAAC;AAE/D,oBAAA,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC;AACf,oBAAA,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC;AAEb,oBAAA,IAAI,MAAM,GAAG,eAAe,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBACzD,IAAI,OAAO,GAAG,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,eAAe,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBAE5F,IAAI,GAAG,GAAG,kBAAkB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAC9C,oBAAA,GAAG,CAAC,YAAY,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;oBACnC,IAAI,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC;oBAEzC,IAAI,IAAI,GAAG,EAAE,CAAC;AACd,oBAAA,IAAI,IAAI,EACR;wBACI,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;AACxB,yBAAA;;AAEI,4BAAA,IAAI,IAAI,CAAC,UAAU;AACnB,6BAAA;AACI,gCAAA,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC;AAC1B,6BAAA;AACJ,yBAAA;;AAED,yBAAA;AACI,4BAAA,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAuB,CAAC;AAC3C,4BAAA,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,MAAqB,CAAC;4BAErC,iBAAiB,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,CAAC,EAAE,MAAK;AAEvC,gCAAA,GAAG,CAAC,oBAAoB,EAAE,CAAC;gCAC3B,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC;gCAEvC,KAAK,CAAC,oBAAoB,EAAE,CAAC;gCAC7B,KAAK,CAAC,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC;gCAEzC,KAAK,CAAC,kBAAkB,CAAC,GAAG,CAAC,OAAO,CAAC,KAAiB,EAAE,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,KAAiB,CAAC,CAAC,CAAC;gCAC5G,GAAG,CAAC,kBAAkB,CAAC,GAAG,CAAC,OAAO,CAAC,KAAiB,EAAE,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,KAAiB,CAAC,CAAC,CAAC;AAE1G,gCAAA,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC;AACf,gCAAA,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC;AAEb,gCAAA,IAAI,CAAC,QAAQ,GAAG,GAAG,CAAC;AACpB,gCAAA,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;AAC3B,6BAAC,CAAC,CAAC;AAEH,4BAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;4BACrB,SAAS;AACZ,yBAAA;AACJ,qBAAA;oBAED,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;oBACxC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AACtC,oBAAA,IAAI,MAAM,GAAG,IAAI,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;AAChE,oBAAA,MAAM,CAAC,QAAQ,GAAG,GAAG,CAAC;oBACtB,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AACzC,oBAAA,KAAK,CAAC,QAAQ,GAAG,MAAM,CAAC,EAAE,CAAC;AAC3B,oBAAA,GAAG,CAAC,QAAQ,GAAG,MAAM,CAAC,EAAE,CAAC;AAC5B,iBAAA;AACJ,aAAA;AACJ,SAAA;QAED,KAAK,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,KAAK,CAAC,UAAU;YACvC,MAAM,CAAC,mBAAmB,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC;AAE/D,QAAA,KAAK,IAAI,IAAI,IAAI,KAAK,EACtB;;;;YAII,IAAI,CAAC,MAAM,EAAE,CAAC;AACjB,SAAA;AAED,QAAA,OAAO,KAAK,CAAC;KAChB;IAED,GAAG,GAAA;QAEC,IAAI,IAAI,CAAC,SAAS,EAClB;AACI,YAAA,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC,OAAO;gBACtB,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EACtB;oBACI,CAAC,CAAC,KAAK,EAAE,CAAC;AACV,oBAAA,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC;AACxB,oBAAA,CAAC,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC;AACzB,iBAAA;AACR,SAAA;KACJ;AACJ;;ACzPD;;;;;AAKG;MACU,sBAAsB,CAAA;AAa/B,IAAA,WAAA,CAAY,MAAe,EAAA;;AAT3B,QAAA,IAAA,CAAA,oBAAoB,GAAG,IAAI,GAAG,EAAkB,CAAC;;AAEjD,QAAA,IAAA,CAAA,uBAAuB,GAAG,IAAI,GAAG,EAAgB,CAAC;AAElD,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,GAAG,EAAS,CAAC;QAChC,IAAW,CAAA,WAAA,GAAY,EAAE,CAAC;QAE1B,IAAgB,CAAA,gBAAA,GAAgB,EAAE,CAAC;AAI/B,QAAA,IAAI,SAAS,GAAG,IAAI,kBAAkB,CAAC,MAAM,EAAE,IAAI,EAAE,eAAe,CAAC,UAAU,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;QAE5F,IAAI,WAAW,GAAY,EAAE,CAAC;;QAE9B,KAAK,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,SAAS,CAAC,UAAU,EAC3C;YACI,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AAErC,YAAA,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC;AAAE,gBAAA,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;;AACrC,gBAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;;YAG/B,IAAI,SAAS,GAAG,KAAK,CAAC;AACtB,YAAA,IAAI,QAAQ,GAAG,EAAE,CAAC,QAAQ,CAAC;;YAG3B,IAAI,MAAM,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;YAC9B,IAAI,MAAM,GAAG,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;AAErC,YAAA,IAAI,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;AACzB,YAAA,IAAI,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;AAEvB,YAAA,IAAI,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,EACpB;gBACI,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;gBACpB,SAAS,GAAG,IAAI,CAAC;AACpB,aAAA;YAED,IAAI,GAAG,CAAC,CAAC,CAAC,IAAI,QAAQ,GAAG,IAAI,CAAC,EAC9B;gBACI,EAAE,CAAC,MAAM,CAAC,SAAS,GAAG,EAAE,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC3D,SAAS,GAAG,IAAI,CAAC;AAEjB,gBAAA,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AACvB,aAAA;AAED,YAAA,IAAI,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI;gBAChB,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;YAE3B,IAAI,SAAS;AACT,gBAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AACjC,SAAA;;AAGD,QAAA,IAAI,aAAa,GAAG,IAAI,GAAG,EAAmB,CAAC;QAC/C,KAAK,IAAI,EAAE,IAAI,WAAW;AACtB,YAAA,aAAa,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;;AAG9B,QAAA,KAAK,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,IAAI,SAAS,CAAC,UAAU,EAC9C;YACI,IAAI,KAAK,GAAG,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAClC,IAAI,KAAK,GAAG,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAElC,YAAA,KAAK,IAAI,CAAC,IAAI,GAAG,EACjB;gBACI,IAAI,OAAO,GAAG,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;AACpC,gBAAA,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,OAAO,CAAC;oBAAE,SAAS;gBAExC,IAAI,OAAO,GAAG,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;AAEpC,gBAAA,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,OAAO,CAAC;oBAAE,SAAS;AAExC,gBAAA,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACpB,gBAAA,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACvB,aAAA;AACJ,SAAA;;QAGD,KAAK,IAAI,CAAC,EAAE,EAAE,MAAM,CAAC,IAAI,aAAa,EACtC;AACI,YAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC;;;;;;;;YAQnD,IAAI,MAAM,CAAC,MAAM,EACjB;gBACI,iBAAiB,CAAC,MAAM,CAAC,CAAC;AAC1B,gBAAA,0BAA0B,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,KAAKF,QAAM,CAAC,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC;;;AAGxE,aAAA;YAED,IAAI,WAAW,GAAG,MAAM,CAAC,MAAM,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,GAAG,EAAE,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;;;;;;;;;;;YAajF,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC;YAC/C,KAAK,IAAI,GAAG,IAAI,WAAW;gBACvB,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;AACjD,SAAA;;AAGD,QAAA,IAAI,MAAM,GAAG,IAAI,GAAG,EAAS,CAAC;AAC9B,QAAA,KAAK,IAAI,EAAE,IAAI,MAAM,EACrB;AACI,YAAA,IAAI,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;gBAAE,SAAS;AAC7B,YAAA,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAEf,YAAA,IAAI,KAAK,GAAY,CAAC,EAAE,CAAC,CAAC;AAE1B,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EACrC;AACI,gBAAA,IAAI,QAAQ,GAAG,SAAS,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AACjD,gBAAA,IAAI,CAAC,QAAQ;oBAAE,SAAS;AACxB,gBAAA,KAAK,IAAI,CAAC,EAAE,CAAC,IAAI,QAAQ,EACzB;AACI,oBAAA,IAAI,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;wBAAE,SAAS;AAC7B,oBAAA,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAEf,oBAAA,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAClB,iBAAA;AACJ,aAAA;AAED,YAAA,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;AAChB,gBAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACzC,SAAA;KACJ;AACJ,CAAA;AAED;AACA,SAAS,OAAO,CAAC,MAA2B,EAAE,YAAoB,EAAA;AAE9D,IAAA,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC;AAAE,QAAA,OAAO,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;IAEhD,IAAI,OAAO,GAAG,QAAQ,CAAC;AACvB,IAAA,IAAI,QAAQ,GAAG,CAAC,CAAC,CAAC;AAClB,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EACtC;AACI,QAAA,IAAI,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC;QACpD,IAAI,OAAO,GAAG,OAAO,EACrB;YACI,OAAO,GAAG,OAAO,CAAC;YAClB,QAAQ,GAAG,CAAC,CAAC;AAChB,SAAA;AACJ,KAAA;AACD,IAAA,OAAO,QAAQ,CAAC;AACpB;;AC7JA,MAAM,mBAAmB,GAAG,yBAAyB,CAAC;AACtD,MAAM,WAAW,GAAG,aAAa,CAAC;AAClC,MAAM,WAAW,GAAG,aAAa,CAAC;AAElC;;;;;;;;;;;;;;;;AAgBG;MACU,aAAa,CAAA;AAQtB;;;;AAIG;AACH,IAAA,WAAA,CAAoB,aAAsB,EAAU,SAAmB,EAAU,sBAA+B,EAAA;QAA5F,IAAa,CAAA,aAAA,GAAb,aAAa,CAAS;QAAU,IAAS,CAAA,SAAA,GAAT,SAAS,CAAU;QAAU,IAAsB,CAAA,sBAAA,GAAtB,sBAAsB,CAAS;KAG/G;AAED;;;AAGG;AACH,IAAA,KAAK,CAAC,KAAqB,EAAE,WAAA,GAA8B,SAAS,EAAA;QAEhE,IAAI,IAAI,CAAC,sBAAsB,EAC/B;AACI,YAAA,aAAa,CAAC,oBAAoB,GAAG,EAAE,CAAC;AACxC,YAAA,aAAa,CAAC,cAAc,GAAG,EAAE,CAAC;AAClC,YAAA,aAAa,CAAC,mBAAmB,GAAG,IAAI,GAAG,EAAE,CAAC;AAC9C,YAAA,aAAa,CAAC,WAAW,GAAG,EAAE,CAAC;AAClC,SAAA;QAED,IAAI,WAAW,GAAG,IAAI,eAAe,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AAEtD,QAAA,MAAM,UAAU,GAAG,CAAC,KAAqB,EAAE,EAAkC,KAAI;AAE7E,YAAA,IAAI,GAAG,GAAG,IAAI,GAAG,EAA0B,CAAC;AAC5C,YAAA,KAAK,IAAI,CAAC,IAAI,KAAK,EACnB;AACI,gBAAA,IAAI,CAAC,CAAC,MAAM,GAAG,IAAI,EACnB;;;AAII,oBAAA,CAAC,CAAC,UAAU,GAAG,EAAE,CAAC;AAClB,oBAAA,CAAC,CAAC,WAAW,GAAG,EAAE,CAAC;AACnB,oBAAA,CAAC,CAAC,SAAS,GAAG,EAAE,CAAC;oBACjB,SAAS;AACZ,iBAAA;AAED,gBAAA,IAAI,KAAK,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;gBAClB,IAAI,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;gBACzB,IAAI,CAAC,GAAG,EACR;oBACI,GAAG,GAAG,EAAE,CAAC;AACT,oBAAA,GAAG,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;AACvB,iBAAA;AACD,gBAAA,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACf,aAAA;AACD,YAAA,OAAO,GAAG,CAAC;AACf,SAAC,CAAC;;QAGF,IAAI,SAAS,GAAG,UAAU,CAAC,KAAK,EAAE,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;AAE9D,QAAA,KAAK,IAAI,GAAG,KAAK,CAAC,IAAI,SAAS,EAC/B;AACI,YAAA,IAAI,CAAC,uBAAuB,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;YACjD,IAAI,KAAK,GAAG,WAAW,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;YAElC,IAAI,IAAI,CAAC,sBAAsB;AAC3B,gBAAA,cAAc,CAAC,aAAa,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;AACxD,SAAA;QAED,WAAW,CAAC,GAAG,EAAE,CAAC;KACrB;AAEO,IAAA,uBAAuB,CAAC,KAAqB,EAAE,WAAA,GAA8B,SAAS,EAAA;;AAI1F,QAAA,IAAI,YAAY,GAAG,IAAI,GAAG,EAAuB,CAAC;AAClD,QAAA,IAAI,YAAY,GAAG,IAAI,GAAG,EAAuB,CAAC;QAElD,IAAI,UAAU,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,IAAG;;AAG9B,YAAA,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;AACrB,YAAA,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;AACtB,YAAA,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;AACpB,YAAA,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;AAExB,YAAA,IAAI,EAAE,GAAG,IAAI,CAAC,eAAe,CAAC;AAE9B,YAAA,YAAY,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;AAC3B,YAAA,YAAY,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;YAE3B,IAAI,IAAI,CAAC,sBAAsB;gBAC3B,aAAa,CAAC,mBAAmB,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;AACpD,YAAA,OAAO,EAAE,CAAC;AACd,SAAC,CAAC,CAAC;;AAGH,QAAA,IAAI,SAAS,GAAG,IAAI,sBAAsB,CAAC,UAAU,CAAC,CAAC;AAEvD,QAAA,IAAI,IAAI,CAAC,aAAa;AAClB,YAAA,KAAK,IAAI,EAAE,IAAI,SAAS,CAAC,YAAY,EACrC;gBACI,IAAI,IAAI,GAAG,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAEhC,gBAAA,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC,UAAU,CAAC;AAChC,gBAAA,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC,QAAQ,CAAC;AAC/B,aAAA;AAEL,QAAA,IAAI,eAAe,GAAG,IAAI,GAAG,EAAgB,CAAC;AAC9C,QAAA,IAAI,gBAAgB,GAAG,IAAI,GAAG,EAAgB,CAAC;;AAG/C,QAAA,IAAI,iBAAiB,GAAsB,IAAI,GAAG,CAAC;AACnD,QAAA,IAAI,kBAAkB,GAAsB,IAAI,GAAG,CAAC;;AAEpD,QAAA,IAAI,qBAAqB,GAAsB,IAAI,GAAG,CAAC;AACvD,QAAA,IAAI,mBAAmB,GAAsB,IAAI,GAAG,CAAC;;AAErD,QAAA,IAAI,4BAA4B,GAAsB,IAAI,GAAG,CAAC;AAC9D,QAAA,IAAI,6BAA6B,GAAsB,IAAI,GAAG,CAAC;AAC/D,QAAA,IAAI,2BAA2B,GAAsB,IAAI,GAAG,CAAC;AAC7D,QAAA,IAAI,4BAA4B,GAAsB,IAAI,GAAG,CAAC;;AAG9D,QAAA,KAAK,IAAI,WAAW,IAAI,SAAS,CAAC,gBAAgB,EAClD;YACI,IAAI,QAAQ,GAAG,IAAI,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;AAErC,YAAA,KAAK,IAAI,QAAQ,IAAI,WAAW,EAChC;gBACI,IAAI,OAAO,GAAG,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;gBACzC,IAAI,WAAW,GAAG,SAAS,CAAC,oBAAoB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AAC/D,gBAAA,KAAK,IAAI,EAAE,IAAI,WAAW,EAC1B;;AAEI,oBAAA,IAAI,QAAQ,CAAC,aAAa,CAAC,EAAE,EAAE,EAAE,YAAY,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI;AACrE,qBAAA;;AAEI,wBAAA,IAAI,SAAS,GAAG,EAAE,CAAC,eAAe,CAAC,CAAC,OAAO,CAAC,SAAS,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAChE,wBAAA,IAAI,UAAU,GAAG,EAAE,CAAC,eAAe,CAAC,OAAO,CAAC,SAAS,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAEhE,wBAAA,SAAS,CAAC,UAAU,GAAG,CAAC,CAAC;AACzB,wBAAA,UAAU,CAAC,UAAU,GAAG,CAAC,CAAC;AAE1B,wBAAA,iBAAiB,CAAC,GAAG,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;AACrC,wBAAA,kBAAkB,CAAC,GAAG,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;AAC1C,qBAAA;AACJ,iBAAA;AACJ,aAAA;YAED,IAAI,IAAI,CAAC,sBAAsB;gBAC3B,aAAa,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC;;AAG7D,YAAA,KAAK,IAAI,CAAC,IAAI,QAAQ,CAAC,SAAS,EAChC;gBACI,IAAI,IAAI,CAAC,sBAAsB;oBAC3B,aAAa,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;AAExD,gBAAA,IAAI,CAAC,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC;oBAAE,SAAS;AACpC,gBAAA,IAAI,CAAC,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EACvB;oBACI,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AACpB,oBAAA,IAAI,QAAQ,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;AAC9C,oBAAA,IAAI,QAAQ,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;AAE/C,oBAAA,IAAI,EAAE,GAAG,CAAC,CAAC,SAAS,GAAG,QAAQ,CAAC,QAAQ,GAAG,QAAQ,CAAC,UAAU,CAAC;AAC/D,oBAAA,IAAI,EAAE,GAAG,CAAC,CAAC,SAAS,GAAG,QAAQ,CAAC,QAAQ,GAAG,QAAQ,CAAC,UAAU,CAAC;oBAC/D,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;AACzB,oBAAA,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC;oBACjB,IAAI,CAAC,CAAC,SAAS;AACX,wBAAA,mBAAmB,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;;AAEnD,wBAAA,qBAAqB,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;oBACzD,SAAS;AACZ,iBAAA;gBAED,IAAI,SAAS,GAAG,QAAQ,CAAC;AACzB,gBAAA,KAAK,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM;AAClB,oBAAA,IAAI,CAAC,CAAC,MAAM,GAAG,SAAS;AAAE,wBAAA,SAAS,GAAG,CAAC,CAAC,MAAM,CAAC;AACnD,gBAAA,KAAK,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM;AAClB,oBAAA,cAAc,CAAC,CAAC,EAAE,SAAS,GAAG,GAAG,CAAC,CAAC;gBACvC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;;gBAGzC,IAAI,GAAG,GAAG,CAAC,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;AAC9B,gBAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EACxC;oBACI,IAAI,IAAI,GAAG,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;oBACzB,IAAI,IAAI,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AAEvB,oBAAA,IAAI,QAAQ,GAAG,IAAI,CAAC,SAAS,GAAG,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACvG,oBAAA,IAAI,QAAQ,GAAG,IAAI,CAAC,SAAS,GAAG,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAEvG,oBAAA,IAAI,EAAE,GAAG,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC,QAAQ,GAAG,QAAQ,CAAC,UAAU,CAAC;AAClE,oBAAA,IAAI,EAAE,GAAG,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC,QAAQ,GAAG,QAAQ,CAAC,UAAU,CAAC;AAClE,oBAAA,IAAI,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC;AACnB,qBAAA;wBACI,GAAG,GAAG,CAAC,CAAC;wBACR,SAAS;AACZ,qBAAA;AAED,oBAAA,IAAI,IAAI,GAAG,QAAQ,CAAC,cAAc,CAAC,QAAQ,EAAE,eAAe,CAAC,UAAU,CAAC,CAAC;AACzE,oBAAA,IAAI,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;AAC/B,oBAAA,IAAI,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;oBAEpH,IAAI,IAAI,GAAG,aAAa,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;AAC7C,oBAAA,IAAI,EAAW,CAAC;AAChB,oBAAA,IAAI,IAAI,KAAK,CAAC;AACd,qBAAA;AACI,wBAAA,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EACnB;AACI,4BAAA,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;;4BAGb,IAAI,OAAO,CAAC,EAAE,EAAE,QAAQ,CAAC,UAAU,EAAE,IAAI,CAAC;mCACnC,OAAO,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC;mCACpC,OAAO,CAAC,EAAE,EAAE,QAAQ,CAAC,UAAU,EAAE,IAAI,CAAC;mCACtC,OAAO,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC;gCAEvC,EAAE,GAAG,SAAS,CAAC;AACtB,yBAAA;AAED,6BAAA;AACI,4BAAA,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EACnB;;;AAGI,gCAAA,IAAI,QAAQ,GAAG,CAAC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC;wCACtE,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;AAEtE,gCAAA,IAAI,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;gCACnD,IAAI,QAAQ,IAAI,MAAM,GAAG,GAAG,GAAG,GAAG;AAC9B,oCAAA,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAKf;AACJ,6BAAA;AACJ,yBAAA;AACJ,qBAAA;;AAED,qBAAA;AACI,wBAAA,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC;4BACf,EAAE,GAAG,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC;AAEvC,6BAAA;AACI,4BAAA,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EACrB,CAEC;AAED,iCAAA;AACI,gCAAA,IAAI,CAAU,CAAC;gCAEf,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EACnC;oCACI,IAAI,MAAM,GAAG,QAAe,CAAC;oCAC7B,IAAI,MAAM,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAC7C,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,QAAQ,GAAG,MAAM,CAAC,UAAU,EACpD,CAAC,EACD,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,WAAW,GAAG,CAAC,MAAM,CAAC,WAAW,CAC5D,CAAC;AAEF,oCAAA,IAAI,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;oCACjB,IAAI,EAAE,GAAG,MAAM,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;oCACpC,IAAI,MAAM,GAAG,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC,GAAG,QAAQ,GAAG,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;AAElG,oCAAA,IAAI,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;oCACjB,IAAI,EAAE,GAAG,MAAM,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;oCACpC,IAAI,MAAM,GAAG,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC,GAAG,QAAQ,GAAG,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;oCAElG,IAAI,MAAM,GAAG,MAAM,EACnB;wCACI,CAAC,GAAG,EAAE,CAAC;wCACP,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;AACrB,qCAAA;;wCAEG,CAAC,GAAG,EAAE,CAAC;AACd,iCAAA;AAED,qCAAA;oCACI,CAAC,GAAG,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC;AAClC,oCAAA,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC;wCACb,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;AACzB,iCAAA;AAED,gCAAA,IAAI,QAAQ,GAAG,CAAC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC;wCACtE,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;;AAGtE,gCAAA,IAAI,CAAC,QAAQ,IAAI,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,GAAG,GAAG,GAAG;oCACxD,CAAC,GAAG,SAAS,CAAC;;AAElB,iCAAA;AACI,oCAAA,IAAI,IAAU,CAAC;oCACf,IAAI,QAAQ,YAAY,GAAG,EAC3B;AACI,wCAAA,IAAI,KAAK,GAAG,QAAQ,CAAC,KAAK,EAAE,CAAC;wCAC7B,IAAI,IAAI,CAAC,SAAS;AAAE,4CAAA,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAC;;AAClC,4CAAA,KAAK,CAAC,UAAU,GAAG,CAAC,CAAC;AAE1B,wCAAA,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC;AACvC,wCAAA,IAAI,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,eAAe,CAAC,UAAU,CAAC,CAAC;AACjE,wCAAA,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;4CACjB,CAAC,GAAG,SAAS,CAAC;AACrB,qCAAA;AAED,oCAAA,IAAI,CAAC,IAAI,QAAQ,YAAY,GAAG,EAChC;AACI,wCAAA,IAAI,KAAK,GAAG,QAAQ,CAAC,KAAK,EAAE,CAAC;wCAC7B,IAAI,IAAI,CAAC,SAAS;AAAE,4CAAA,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAC;;AAClC,4CAAA,KAAK,CAAC,UAAU,GAAG,CAAC,CAAC;AAE1B,wCAAA,IAAI,CAAC,IAAI;AAAE,4CAAA,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC;AAClD,wCAAA,IAAI,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,eAAe,CAAC,UAAU,CAAC,CAAC;AACjE,wCAAA,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;4CACjB,CAAC,GAAG,SAAS,CAAC;AACrB,qCAAA;AACJ,iCAAA;gCAED,EAAE,GAAG,CAAC,CAAC;AACV,6BAAA;AACJ,yBAAA;AACJ,qBAAA;AAED,oBAAA,IAAI,EAAE,EACN;wBACI,IAAI,IAAI,CAAC,SAAS;AAAE,4BAAA,QAAQ,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC;;AAC1C,4BAAA,QAAQ,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC;wBAEhC,IAAI,IAAI,CAAC,SAAS;AAAE,4BAAA,QAAQ,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC;;AAC1C,4BAAA,QAAQ,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC;AACnC,qBAAA;AAED,yBAAA;;wBAEI,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;AACnC,yBAAA;AACI,4BAAA,IAAI,EAAE,GAAG,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,uBAAuB,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;AAC7E,4BAAA,IAAI,EAAE,GAAG,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,uBAAuB,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;AAE7E,4BAAA,IAAI,EAAE,GAAG,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC,QAAQ,GAAG,QAAQ,CAAC,UAAU,CAAC;AAClE,4BAAA,IAAI,EAAE,GAAG,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC,QAAQ,GAAG,QAAQ,CAAC,UAAU,CAAC;AAElE,4BAAA,IAAI,EAAE,CAAC,SAAS,GAAG,EAAE,CAAC,SAAS,EAC/B;gCACI,IAAI,IAAI,CAAC,SAAS;AACd,oCAAA,2BAA2B,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;;AAE9D,oCAAA,4BAA4B,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;AACtE,6BAAA;AAED,iCAAA;gCACI,IAAI,IAAI,CAAC,SAAS;AACd,oCAAA,4BAA4B,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;;AAE/D,oCAAA,6BAA6B,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;AACvE,6BAAA;AACJ,yBAAA;;;;;;;;AASD,6BAAA;4BACI,IAAI,IAAI,CAAC,SAAS;gCACd,2BAA2B,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;;gCAE9E,4BAA4B,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;4BAEnF,IAAI,IAAI,CAAC,SAAS;gCACd,4BAA4B,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;;gCAE/E,6BAA6B,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;AACvF,yBAAA;AACJ,qBAAA;oBAED,GAAG,GAAG,CAAC,CAAC;AACX,iBAAA;AACJ,aAAA;;AAGD,YAAA,KAAK,IAAI,QAAQ,IAAI,WAAW,EAChC;gBACI,IAAI,WAAW,GAAG,SAAS,CAAC,oBAAoB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AAC/D,gBAAA,KAAK,IAAI,EAAE,IAAI,WAAW,EAC1B;oBACI,IAAI,IAAI,GAAG,iBAAiB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;oBACrC,IAAI,KAAK,GAAG,kBAAkB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;oBAEvC,mBAAmB,CAAC,IAAI,CAAC,CAAC;oBAC1B,mBAAmB,CAAC,KAAK,CAAC,CAAC;AAC9B,iBAAA;AACJ,aAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiDJ,SAAA;;QAGD,IAAI,YAAY,GAAc,EAAE,CAAC;QACjC,IAAI,cAAc,GAAoB,EAAE,CAAC;AACzC,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAC1C;AACI,YAAA,IAAI,QAAQ,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;AAC7B,YAAA,QAAQ,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC;AAClC,YAAA,IAAI,KAAK,GAAG,mBAAmB,CAAC,QAAQ,CAAC,CAAC;AAC1C,YAAA,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAE3B,IAAI,WAAW,GAAG,SAAS,CAAC,oBAAoB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YAC/D,IAAI,OAAO,GAAG,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AAEzC,YAAA,IAAI,cAAc,GAAG,CAAC,EAAE,YAAY,GAAG,CAAC,EACpC,eAAe,GAAG,CAAC,EAAE,aAAa,GAAG,CAAC,CAAC;YAC3C,IAAI,CAAC,WAAW,EAChB;;AAEI,gBAAA,IAAI,SAAS,GAAG,QAAQ,CAAC,eAAe,CAAC,CAAC,OAAO,CAAC,SAAS,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACtE,gBAAA,IAAI,UAAU,GAAG,QAAQ,CAAC,eAAe,CAAC,OAAO,CAAC,SAAS,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAEtE,gBAAA,SAAS,CAAC,UAAU,GAAG,CAAC,CAAC;AACzB,gBAAA,UAAU,CAAC,UAAU,GAAG,CAAC,CAAC;AAE1B,gBAAA,iBAAiB,CAAC,GAAG,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;AAC3C,gBAAA,kBAAkB,CAAC,GAAG,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;AAE7C,gBAAA,qBAAqB,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC;AAC3F,gBAAA,mBAAmB,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC;gBAErF,SAAS,CAAC,uBAAuB,CAAC,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;;;;;;gBAQ1D,IAAI,IAAI,CAAC,sBAAsB;AAC3B,oBAAA,aAAa,CAAC,oBAAoB,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC;;AAGpF,gBAAA,cAAc,GAAG,eAAe,GAAG,CAAC,CAAC;AACrC,gBAAA,YAAY,GAAG,aAAa,GAAG,CAAC,CAAC;AACpC,aAAA;AAED,iBAAA;AACI,gBAAA,KAAK,IAAI,EAAE,IAAI,WAAW,EAC1B;oBACI,IAAI,IAAI,GAAG,iBAAiB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;oBACrC,IAAI,KAAK,GAAG,kBAAkB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAEvC,oBAAA,IAAI,IAAI,EACR;AACI,wBAAA,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,cAAc,EAAE,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;AAClF,wBAAA,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;AAC/E,qBAAA;AAED,oBAAA,IAAI,KAAK,EACT;AACI,wBAAA,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC,eAAe,EAAE,KAAK,CAAC,eAAe,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC;AACrF,wBAAA,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,KAAK,CAAC,eAAe,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;AAClF,qBAAA;AACJ,iBAAA;gBAED,IAAI,cAAc,GAAG,YAAY,EACjC;oBACI,cAAc,GAAG,CAAC,CAAC;oBACnB,YAAY,GAAG,CAAC,CAAC;AACpB,iBAAA;gBACD,IAAI,eAAe,GAAG,aAAa,EACnC;oBACI,eAAe,GAAG,CAAC,CAAC;oBACpB,aAAa,GAAG,CAAC,CAAC;AACrB,iBAAA;AACJ,aAAA;AAED,YAAA,IAAI,EAAE,GAAG,QAAQ,CAAC,UAAU,CAAC;AAC7B,YAAA,IAAI,EAAE,GAAG,QAAQ,CAAC,QAAQ,CAAC;YAC3B,IAAI,QAAQ,YAAY,IAAI,EAC5B;gBACI,IAAI,MAAM,GAAG,KAAqB,CAAC;gBACnC,IAAI,EAAE,GAAG,KAAK,CAAC,eAAe,CAAC,cAAc,CAAC,CAAC;gBAC/C,IAAI,EAAE,GAAG,KAAK,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC;gBAC7C,MAAM,CAAC,WAAW,CAAC,EAAE,EAAE,OAAO,CAAC,SAAS,GAAG,GAAG,CAAC,CAAC;gBAChD,MAAM,CAAC,WAAW,CAAC,EAAE,EAAE,OAAO,CAAC,SAAS,GAAG,GAAG,CAAC,CAAC;gBAEhD,IAAI,EAAE,GAAG,MAAM,CAAC,eAAe,CAAC,eAAe,CAAC,CAAC;gBACjD,IAAI,EAAE,GAAG,MAAM,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC;AAC/C,gBAAA,MAAM,CAAC,WAAW,CAAC,EAAE,EAAE,OAAO,CAAC,SAAS,GAAG,CAAC,GAAG,CAAC,CAAC;AACjD,gBAAA,MAAM,CAAC,WAAW,CAAC,EAAE,EAAE,OAAO,CAAC,SAAS,GAAG,CAAC,GAAG,CAAC,CAAC;gBAGjD,IAAI,GAAG,GAAc,EAAE,CAAC;gBACxB,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;AAC9B,oBAAA,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAEjB,gBAAA,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;gBAEjB,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;AAC9B,oBAAA,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAEjB,gBAAA,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;AAEjB,gBAAA,IAAI,EAAE,GAAG,IAAI,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,MAAM,OAAO,EAAE,EAAE,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAC9E,gBAAA,EAAE,CAAC,SAAS,GAAG,IAAI,CAAC;AACpB,gBAAA,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;gBAEZ,IAAI,OAAO,GAAG,OAAO,CAAC,aAAa,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;;;;AAM/C,gBAAA,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAC3B,gBAAA,OAAO,CAAC,MAAM,GAAG,EAAE,CAAC;AAEpB,gBAAA,eAAe,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;AAChD,gBAAA,gBAAgB,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;AACpD,aAAA;AAED,iBAAA;;AAEI,gBAAA,IAAI,SAAS,GAAG,QAAQ,CAAC,eAAe,CAAC,CAAC,OAAO,CAAC,SAAS,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACtE,gBAAA,IAAI,UAAU,GAAG,QAAQ,CAAC,eAAe,CAAC,OAAO,CAAC,SAAS,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;gBAEtE,SAAS,CAAC,QAAQ,GAAG,QAAQ,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC;gBAC5D,SAAS,CAAC,UAAU,GAAG,QAAQ,CAAC,eAAe,CAAC,cAAc,CAAC,CAAC;gBAEhE,UAAU,CAAC,QAAQ,GAAG,QAAQ,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC;gBAC9D,UAAU,CAAC,UAAU,GAAG,QAAQ,CAAC,eAAe,CAAC,eAAe,CAAC,CAAC;gBAElE,IAAI,MAAM,GAAmB,EAAE,CAAC;AAChC,gBAAA,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,SAAS,CAAC,UAAU,EAAE,SAAS,CAAC,QAAQ,CAAC,CAAC;AAC1D,gBAAA,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,UAAU,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC;gBAE5D,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;AAC9B,oBAAA,MAAM,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;;oBAEhD,MAAM,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;AAClC,gBAAA,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBACvB,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;AAC9B,oBAAA,MAAM,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;;oBAEhD,MAAM,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;AAClC,gBAAA,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;gBAExB,IAAI,OAAO,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;gBACnD,IAAI,CAAC,OAAO,EACZ;;;oBAGI,OAAO,GAAG,OAAO,CAAC,aAAa,CAAC,IAAI,QAAQ,EAAE,CAAC,gBAAgB,CAAC,IAAI,OAAO,EAAE,IAAI,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;AAC5G,oBAAA,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;AAC3B,iBAMA;AACD,gBAAA,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAC3B,gBAAA,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC,KAAiB,CAAC;AAE3C,gBAAA,eAAe,CAAC,GAAG,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;AACzC,gBAAA,gBAAgB,CAAC,GAAG,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;AAC9C,aAAA;AACJ,SAAA;AAQD,QAAA,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;AAEzB,QAAA,IAAK,SAMJ,CAAA;AAND,QAAA,CAAA,UAAK,SAAS,EAAA;AAEV,YAAA,SAAA,CAAA,SAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAQ,CAAA;AACR,YAAA,SAAA,CAAA,SAAA,CAAA,OAAA,CAAA,GAAA,CAAA,CAAA,GAAA,OAAS,CAAA;AACT,YAAA,SAAA,CAAA,SAAA,CAAA,UAAA,CAAA,GAAA,CAAA,CAAA,GAAA,UAAY,CAAA;AACZ,YAAA,SAAA,CAAA,SAAA,CAAA,QAAA,CAAA,GAAA,CAAA,CAAA,GAAA,QAAU,CAAA;AACd,SAAC,EANI,SAAS,KAAT,SAAS,GAMb,EAAA,CAAA,CAAA,CAAA;QAED,MAAM,IAAI,GAAG,CAAC,UAAiB,EAAE,WAAkB,EAAE,KAAa,EAAE,IAAe,KAAI;AAEnF,YAAA,IAAI,IAAe,CAAC;YACpB,IAAI,WAAW,YAAY,IAAI,EAC/B;AACI,gBAAA,IAAI,QAAQ,GAAG,cAAc,CAAC,KAAK,CAAiB,CAAC;AACrD,gBAAA,IAAI,GAAY,CAAC;AACjB,gBAAA,IAAI,IAAI,KAAK,SAAS,CAAC,IAAI;AAAE,oBAAA,GAAG,GAAG,QAAQ,CAAC,SAAS,CAAC;AACjD,qBAAA,IAAI,IAAI,KAAK,SAAS,CAAC,KAAK;AAAE,oBAAA,GAAG,GAAG,QAAQ,CAAC,YAAY,CAAC;AAC1D,qBAAA,IAAI,IAAI,KAAK,SAAS,CAAC,QAAQ;AAAE,oBAAA,GAAG,GAAG,QAAQ,CAAC,OAAO,CAAC;AACxD,qBAAA,IAAI,IAAI,KAAK,SAAS,CAAC,MAAM;AAAE,oBAAA,GAAG,GAAG,QAAQ,CAAC,QAAQ,CAAC;gBAE5D,IAAI,CAAC,GAAG,EACR;AACI,oBAAA,GAAG,GAAG,WAAW,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,MAAM,EAAE,CAAC;AAC1D,iBAAA;gBAED,IAAI,GAAG,IAAI,aAAa,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;AAC9C,aAAA;;AAEG,gBAAA,IAAI,GAAG,IAAI,YAAY,CAAC,WAAkB,EAAE,IAAI,KAAK,SAAS,CAAC,IAAI,CAAC,CAAC;;YAIzE,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,GAAG,EAAE,IAAG;;AAGjH,gBAAA,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,KAAK,GAAG,EAAE,CAAC,CAAC;AACzD,gBAAA,OAAO,KAAK,CAAC;aAChB,EAAE,CAAC;AAEJ,YAAA,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;AACzB,YAAA,OAAO,MAAwB,CAAC;AACpC,SAAC,CAAC;QAEF,KAAK,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,IAAI,eAAe,EACnD;YACI,IAAI,OAAO,GAAG,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YACzC,cAAc,CAAC,OAAO,CAAC,UAAU,EAAE,IAAI,CAAC,QAAQ,EAAE,WAAW,EAAE,QAAQ,CAAC,mBAAmB,CAAC,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;AAClH,SAAA;QACD,KAAK,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,IAAI,gBAAgB,EACpD;YACI,IAAI,OAAO,GAAG,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YACzC,cAAc,CAAC,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC,QAAQ,EAAE,WAAW,EAAE,QAAQ,CAAC,mBAAmB,CAAC,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;AACpH,SAAA;QAED,KAAK,IAAI,CAAC,UAAU,EAAE,WAAW,CAAC,IAAI,qBAAqB,EAC3D;YACI,IAAI,QAAQ,GAAG,SAAS,CAAC,uBAAuB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;YACjE,IAAI,OAAO,GAAG,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YACzC,cAAc,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,UAAU,EAAE,WAAW,EAAE,QAAQ,CAAC,mBAAmB,CAAC,EAAE,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC;AACvH,SAAA;QACD,KAAK,IAAI,CAAC,UAAU,EAAE,WAAW,CAAC,IAAI,mBAAmB,EACzD;YACI,IAAI,QAAQ,GAAG,SAAS,CAAC,uBAAuB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;YACjE,IAAI,OAAO,GAAG,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YACzC,cAAc,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,UAAU,EAAE,WAAW,EAAE,QAAQ,CAAC,mBAAmB,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AACrH,SAAA;QAED,KAAK,IAAI,CAAC,UAAU,EAAE,WAAW,CAAC,IAAI,4BAA4B,EAClE;YACI,IAAI,QAAQ,GAAG,SAAS,CAAC,uBAAuB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;YACjE,IAAI,OAAO,GAAG,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YACzC,cAAc,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,UAAU,EAAE,WAAW,EAAE,QAAQ,CAAC,mBAAmB,CAAC,EAAE,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC;AACvH,SAAA;QACD,KAAK,IAAI,CAAC,UAAU,EAAE,WAAW,CAAC,IAAI,6BAA6B,EACnE;YACI,IAAI,QAAQ,GAAG,SAAS,CAAC,uBAAuB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;YACjE,IAAI,OAAO,GAAG,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YACzC,cAAc,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,UAAU,EAAE,WAAW,EAAE,QAAQ,CAAC,mBAAmB,CAAC,EAAE,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC;AACvH,SAAA;QAED,KAAK,IAAI,CAAC,UAAU,EAAE,WAAW,CAAC,IAAI,2BAA2B,EACjE;YACI,IAAI,QAAQ,GAAG,SAAS,CAAC,uBAAuB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;YACjE,IAAI,OAAO,GAAG,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YACzC,cAAc,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,UAAU,EAAE,WAAW,EAAE,QAAQ,CAAC,mBAAmB,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AACrH,SAAA;QACD,KAAK,IAAI,CAAC,UAAU,EAAE,WAAW,CAAC,IAAI,4BAA4B,EAClE;YACI,IAAI,QAAQ,GAAG,SAAS,CAAC,uBAAuB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;YACjE,IAAI,OAAO,GAAG,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YACzC,cAAc,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,UAAU,EAAE,WAAW,EAAE,QAAQ,CAAC,mBAAmB,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AACrH,SAAA;KAWJ;AAID,IAAA,KAAK,CAAC,YAAuB,EAAA;AAEzB,QAAA,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QAEtC,IAAI,EAAE,GAAG,IAAI,QAAQ,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;AAC3C,QAAA,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC;QAEf,IAAI,CAAC,GAAG,IAAI,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AAChC,QAAA,KAAK,IAAI,GAAG,IAAI,YAAY,EAC5B;AACI,YAAA,IAAI,GAAG,GAAG,GAAG,CAAC,WAAW,CAAC;AAC1B,YAAA,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;YACtB,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACnD,YAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACvB,SAAA;QACD,EAAE,CAAC,MAAM,EAAE,CAAC;AAEZ,QAAA,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;KAChB;;AAjvBM,aAAoB,CAAA,oBAAA,GAAc,EAAE,CAAC;AACrC,aAAc,CAAA,cAAA,GAAyC,EAAE,CAAC;AAC1D,aAAA,CAAA,mBAAmB,GAA6B,IAAI,GAAG,EAAE,CAAC;AAC1D,aAAW,CAAA,WAAA,GAAe,EAAE,CAAC;AAkvBxC,SAAS,mBAAmB,CAAC,KAAY,EAAA;AAErC,IAAA,IAAI,EAAE,GAAG,KAAK,CAAC,WAAW,CAAC,CAAC;AAC5B,IAAA,IAAI,EAAE,GAAG,KAAK,CAAC,WAAW,CAAC,CAAC;IAE5B,IAAI,EAAE,IAAI,EAAE,EACZ;QACI,IAAI,MAAM,GAAG,KAAK,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;QACvC,IAAI,MAAM,GAAG,KAAK,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;AAEvC,QAAA,IAAI,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,MAAM,GAAG,MAAM;YAC3E,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;AAC3B,KAAA;AACD,IAAA,IAAI,EAAE;AACF,QAAA,KAAK,CAAC,UAAU,GAAG,EAAE,CAAC;AAC1B,IAAA,IAAI,EAAE;AACF,QAAA,KAAK,CAAC,QAAQ,GAAG,EAAE,CAAC;AAC5B;;;;"} \ No newline at end of file diff --git a/package.json b/package.json index 00296e1..2a1bb08 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "webcad_ue4_api", - "version": "0.3.9", + "version": "0.3.10", "description": "", "main": "api.esm.js", "module": "api.esm.js", diff --git a/types/Add-on/Break.d.ts.map b/types/Add-on/Break.d.ts.map index 42abb1b..6f9e4b0 100644 --- a/types/Add-on/Break.d.ts.map +++ b/types/Add-on/Break.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"Break.d.ts","sourceRoot":"","sources":["../../../src/Add-on/Break.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAKnD,qBAAa,aAAc,YAAW,OAAO;IAEnC,IAAI;CAoGb;AAED,qBAAa,gBAAiB,YAAW,OAAO;IAEtC,IAAI;CAIb"} \ No newline at end of file +{"version":3,"file":"Break.d.ts","sourceRoot":"","sources":["../../../src/Add-on/Break.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAKnD,qBAAa,aAAc,YAAW,OAAO;IAEnC,IAAI;CAmGb;AAED,qBAAa,gBAAiB,YAAW,OAAO;IAEtC,IAAI;CAIb"} \ No newline at end of file diff --git a/types/Add-on/DrawBoard/DrawClosingStrip.d.ts.map b/types/Add-on/DrawBoard/DrawClosingStrip.d.ts.map index 8d7f4e9..3ce30b5 100644 --- a/types/Add-on/DrawBoard/DrawClosingStrip.d.ts.map +++ b/types/Add-on/DrawBoard/DrawClosingStrip.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"DrawClosingStrip.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/DrawBoard/DrawClosingStrip.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAW,MAAM,OAAO,CAAC;AAKzC,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAEtD,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAc7C,qBAAa,gBAAiB,YAAW,OAAO;IAEtC,IAAI;IA4GV,iBAAiB,CAAC,UAAU,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO;CA+GtD"} \ No newline at end of file +{"version":3,"file":"DrawClosingStrip.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/DrawBoard/DrawClosingStrip.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAW,MAAM,OAAO,CAAC;AAKzC,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAEtD,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAc7C,qBAAa,gBAAiB,YAAW,OAAO;IAEtC,IAAI;IA4GV,iBAAiB,CAAC,UAAU,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO;CAsHtD"} \ No newline at end of file diff --git a/types/Add-on/DrawBoard/DrawDoorDrawer/DrawDoorTool.d.ts b/types/Add-on/DrawBoard/DrawDoorDrawer/DrawDoorTool.d.ts index cfa2a97..4abf957 100644 --- a/types/Add-on/DrawBoard/DrawDoorDrawer/DrawDoorTool.d.ts +++ b/types/Add-on/DrawBoard/DrawDoorDrawer/DrawDoorTool.d.ts @@ -30,22 +30,22 @@ export declare class DrawDoorTool { private GetPositionSpace; protected GetHandleTemp(info: IDoorInfo, doorTemp: TemplateRecord): void; protected GetHingeTemp(info: IDoorInfo, door: TemplateRecord): void; - protected RelativeMetalsToBoard(allEntitys: Entity[]): boolean; + protected RelativeMetalsToBoard(allEntitys: Entity[], isUpDownDoor: boolean): boolean; private SetHingeType; getSpaceAllBoards(): Board[]; protected GetDoorTemp(info: IDoorInfo): TemplateRecord; protected SetOpenDir(doorsTemp: TemplateRecord, info: IDoorInfo): void; private GetBoardOpenDir; /** - *上下偏移判断位置是否超出门板 或与其他层板碰撞 上下上下尝试n个单位后停止 + *上下偏移判断位置是否超出门板 或与其他层板碰撞 上下/左右 尝试n个单位后停止 * * @private - * @param {number} doorHight 门板高度 + * @param {number} doorSpecs 门板高度/宽度 * @param {Box3} enBox 铰链空间box - * @param {Entity[]} layers 所有层板 + * @param {Entity[]} checkEnts 判断碰撞板 * @param {number} distance 一次偏移量 * @param {Matrix4} ocs - * @param {number} number 偏移次数 正负表方向 上下 + * @param {number} number 偏移次数 正负表方向 上下或左右 * @return {*} {number} * @memberof DrawDoorTool */ diff --git a/types/Add-on/DrawBoard/DrawDoorDrawer/DrawDoorTool.d.ts.map b/types/Add-on/DrawBoard/DrawDoorDrawer/DrawDoorTool.d.ts.map index a485505..4c975d3 100644 --- a/types/Add-on/DrawBoard/DrawDoorDrawer/DrawDoorTool.d.ts.map +++ b/types/Add-on/DrawBoard/DrawDoorDrawer/DrawDoorTool.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"DrawDoorTool.d.ts","sourceRoot":"","sources":["../../../../../src/Add-on/DrawBoard/DrawDoorDrawer/DrawDoorTool.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,KAAK,EAAE,MAAM,wCAAwC,CAAC;AAC/D,OAAO,EAAE,MAAM,EAAE,MAAM,yCAAyC,CAAC;AAQjE,OAAO,EAAE,cAAc,EAAE,MAAM,mDAAmD,CAAC;AAGnF,OAAO,EAAE,WAAW,EAAE,MAAM,0CAA0C,CAAC;AAEvE,OAAO,EAAgB,kBAAkB,EAAwB,MAAM,kCAAkC,CAAC;AAC1G,OAAO,EAAE,SAAS,EAAgB,MAAM,6CAA6C,CAAC;AACtF,OAAO,EAAgE,iBAAiB,EAAE,SAAS,EAAE,MAAM,iCAAiC,CAAC;AAM7I,qBAAa,YAAY;IAiBjB,OAAO,CAAC,KAAK;IACb,SAAS,CAAC,UAAU,EAAE,WAAW;IAhBrC,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;IAC5C,SAAS,CAAC,MAAM,EAAE,iBAAiB,CAAC;IACpC,SAAS,CAAC,SAAS,EAAE,SAAS,EAAE,CAAC;IACjC,OAAO,CAAC,kBAAkB,CAAmB;gBAEjC,KAAK,EAAE,SAAS,EACd,UAAU,EAAE,WAAW;IAOrC,OAAO,CAAC,aAAa;cAIL,IAAI;IA2Fd,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;IAkDzB,OAAO,CAAC,gBAAgB;IAUxB,SAAS,CAAC,aAAa,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,cAAc;IAwEjE,SAAS,CAAC,YAAY,CAAC,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,cAAc;IAuJ5D,SAAS,CAAC,qBAAqB,CAAC,UAAU,EAAE,MAAM,EAAE;IAyKpD,OAAO,CAAC,YAAY;IAapB,iBAAiB;IAgBjB,SAAS,CAAC,WAAW,CAAC,IAAI,EAAE,SAAS;IA4ErC,SAAS,CAAC,UAAU,CAAC,SAAS,EAAE,cAAc,EAAE,IAAI,EAAE,SAAS;IAqB/D,OAAO,CAAC,eAAe;IAiCvB;;;;;;;;;;;;OAYG;IACH,OAAO,CAAC,eAAe;IAiBvB,OAAO,CAAC,SAAS;IAgCjB,OAAO,CAAC,YAAY;CAUvB"} \ No newline at end of file +{"version":3,"file":"DrawDoorTool.d.ts","sourceRoot":"","sources":["../../../../../src/Add-on/DrawBoard/DrawDoorDrawer/DrawDoorTool.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,KAAK,EAAE,MAAM,wCAAwC,CAAC;AAC/D,OAAO,EAAE,MAAM,EAAE,MAAM,yCAAyC,CAAC;AAQjE,OAAO,EAAE,cAAc,EAAE,MAAM,mDAAmD,CAAC;AAGnF,OAAO,EAAE,WAAW,EAAE,MAAM,0CAA0C,CAAC;AAEvE,OAAO,EAAgB,kBAAkB,EAAwB,MAAM,kCAAkC,CAAC;AAC1G,OAAO,EAAE,SAAS,EAAgB,MAAM,6CAA6C,CAAC;AACtF,OAAO,EAAgE,iBAAiB,EAAE,SAAS,EAAE,MAAM,iCAAiC,CAAC;AAM7I,qBAAa,YAAY;IAiBjB,OAAO,CAAC,KAAK;IACb,SAAS,CAAC,UAAU,EAAE,WAAW;IAhBrC,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;IAC5C,SAAS,CAAC,MAAM,EAAE,iBAAiB,CAAC;IACpC,SAAS,CAAC,SAAS,EAAE,SAAS,EAAE,CAAC;IACjC,OAAO,CAAC,kBAAkB,CAAmB;gBAEjC,KAAK,EAAE,SAAS,EACd,UAAU,EAAE,WAAW;IAOrC,OAAO,CAAC,aAAa;cAIL,IAAI;IA2Fd,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;IAkDzB,OAAO,CAAC,gBAAgB;IAUxB,SAAS,CAAC,aAAa,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,cAAc;IAwEjE,SAAS,CAAC,YAAY,CAAC,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,cAAc;IAuJ5D,SAAS,CAAC,qBAAqB,CAAC,UAAU,EAAE,MAAM,EAAE,EAAE,YAAY,EAAE,OAAO;IAkM3E,OAAO,CAAC,YAAY;IAcpB,iBAAiB;IAgBjB,SAAS,CAAC,WAAW,CAAC,IAAI,EAAE,SAAS;IA4ErC,SAAS,CAAC,UAAU,CAAC,SAAS,EAAE,cAAc,EAAE,IAAI,EAAE,SAAS;IAqB/D,OAAO,CAAC,eAAe;IAiCvB;;;;;;;;;;;;OAYG;IACH,OAAO,CAAC,eAAe;IA0BvB,OAAO,CAAC,SAAS;IAyCjB,OAAO,CAAC,YAAY;CAUvB"} \ No newline at end of file diff --git a/types/Add-on/DrawBoard/DrawLeftRightBoard.d.ts.map b/types/Add-on/DrawBoard/DrawLeftRightBoard.d.ts.map index e06a1e6..29ba337 100644 --- a/types/Add-on/DrawBoard/DrawLeftRightBoard.d.ts.map +++ b/types/Add-on/DrawBoard/DrawLeftRightBoard.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"DrawLeftRightBoard.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/DrawBoard/DrawLeftRightBoard.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAYtD,qBAAa,aAAc,YAAW,OAAO;IAEnC,IAAI;IAgBV,OAAO,CAAC,WAAW;IAgBnB,OAAO,CAAC,aAAa,CA0DnB;IACF,OAAO,CAAC,aAAa,CAiCnB;CACL"} \ No newline at end of file +{"version":3,"file":"DrawLeftRightBoard.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/DrawBoard/DrawLeftRightBoard.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAatD,qBAAa,aAAc,YAAW,OAAO;IAEnC,IAAI;IAgBV,OAAO,CAAC,WAAW;IAgBnB,OAAO,CAAC,aAAa,CAqKnB;IACF,OAAO,CAAC,aAAa,CAiCnB;CACL"} \ 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 index af0f001..3759207 100644 --- a/types/Add-on/DrawBoard/ParseHinge.d.ts.map +++ b/types/Add-on/DrawBoard/ParseHinge.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"ParseHinge.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/DrawBoard/ParseHinge.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAMtD,qBAAa,UAAW,YAAW,OAAO;IAEhC,IAAI;CAoGb"} \ No newline at end of file +{"version":3,"file":"ParseHinge.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/DrawBoard/ParseHinge.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAMtD,qBAAa,UAAW,YAAW,OAAO;IAEhC,IAAI;CAuGb"} \ 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 a2519db..ebc547a 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;AASnD,OAAO,EAAE,KAAK,EAAE,MAAM,qCAAqC,CAAC;AAM5D,OAAO,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAC;AAG3D,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAO7C,OAAO,EAAE,cAAc,EAAe,MAAM,+BAA+B,CAAC;AAG5E,qBAAa,gBAAiB,SAAQ,SAAS;IAE3C,OAAO,CAAC,cAAc,CAAgB;IACtC,OAAO,CAAC,MAAM,CAAO;IACrB,OAAO,CAAC,QAAQ,CAAiB;IACjC,OAAO,CAAC,YAAY,CAAiB,CAAC,UAAU;IAChD,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;IAChD,OAAO,CAAC,gBAAgB,CAAS;IACjC,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,aAAa,CAAS;;IAW9B,SAAS,CAAC,IAAI,EAAE,MAAM;IAKtB,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;IAwHlB,OAAO,CAAC,iBAAiB;IAezB,OAAO,CAAC,gBAAgB;IAYxB,OAAO,CAAC,sBAAsB;IAsB9B,OAAO,CAAC,wBAAwB;IAqBhC,OAAO,CAAC,cAAc;IA4DtB,OAAO,CAAC,gBAAgB;IAkBxB,OAAO,CAAC,iBAAiB;IAwDzB,OAAO,CAAC,mBAAmB;IA+E3B,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;IAuCxF,OAAO,CAAC,QAAQ;IAahB,OAAO,CAAC,iBAAiB;IAczB,iBAAiB,CAAC,GAAG,EAAE,KAAK,EAAE;YAehB,cAAc;IAuB5B,OAAO,CAAC,IAAI;IA6EZ,WAAW;IACL,mBAAmB,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAyCtE,OAAO,CAAC,YAAY;YAON,eAAe;IAwB7B,eAAe,CAAC,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO;IA6BlC,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;AASnD,OAAO,EAAE,KAAK,EAAE,MAAM,qCAAqC,CAAC;AAM5D,OAAO,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAC;AAG3D,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAO7C,OAAO,EAAE,cAAc,EAAe,MAAM,+BAA+B,CAAC;AAG5E,qBAAa,gBAAiB,SAAQ,SAAS;IAE3C,OAAO,CAAC,cAAc,CAAgB;IACtC,OAAO,CAAC,MAAM,CAAO;IACrB,OAAO,CAAC,QAAQ,CAAiB;IACjC,OAAO,CAAC,YAAY,CAAiB,CAAC,UAAU;IAChD,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;IAChD,OAAO,CAAC,gBAAgB,CAAS;IACjC,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,aAAa,CAAS;;IAW9B,SAAS,CAAC,IAAI,EAAE,MAAM;IAKtB,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;IAwHlB,OAAO,CAAC,iBAAiB;IAezB,OAAO,CAAC,gBAAgB;IAYxB,OAAO,CAAC,sBAAsB;IAsB9B,OAAO,CAAC,wBAAwB;IAqBhC,OAAO,CAAC,cAAc;IA4DtB,OAAO,CAAC,gBAAgB;IAkBxB,OAAO,CAAC,iBAAiB;IAwDzB,OAAO,CAAC,mBAAmB;IA+E3B,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;IAuCxF,OAAO,CAAC,QAAQ;IAahB,OAAO,CAAC,iBAAiB;IAczB,iBAAiB,CAAC,GAAG,EAAE,KAAK,EAAE;YAehB,cAAc;IAuB5B,OAAO,CAAC,IAAI;IA6EZ,WAAW;IACL,mBAAmB,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAyCtE,OAAO,CAAC,YAAY;YAON,eAAe;IAwB7B,eAAe,CAAC,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO;IAmClC,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.map b/types/Add-on/DrawDrilling/HoleUtils.d.ts.map index bf198a1..e46c169 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":"AAAA,OAAO,EAAQ,OAAO,EAAW,MAAM,OAAO,CAAC;AAG/C,OAAO,EAAE,YAAY,EAAiB,MAAM,6CAA6C,CAAC;AAC1F,OAAO,EAAE,WAAW,EAAE,MAAM,4CAA4C,CAAC;AACzE,OAAO,EAAE,IAAI,EAAE,MAAM,qCAAqC,CAAC;AAC3D,OAAO,EAAE,KAAK,EAAE,MAAM,qCAAqC,CAAC;AAQ5D,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,QAqBzE;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,QA2BjE"} \ No newline at end of file +{"version":3,"file":"HoleUtils.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/DrawDrilling/HoleUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,OAAO,EAAW,MAAM,OAAO,CAAC;AAG/C,OAAO,EAAE,YAAY,EAAiB,MAAM,6CAA6C,CAAC;AAC1F,OAAO,EAAE,WAAW,EAAE,MAAM,4CAA4C,CAAC;AACzE,OAAO,EAAE,IAAI,EAAE,MAAM,qCAAqC,CAAC;AAC3D,OAAO,EAAE,KAAK,EAAE,MAAM,qCAAqC,CAAC;AAQ5D,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,QAyBzE;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,QA+BjE"} \ No newline at end of file diff --git a/types/Add-on/DrawViewport.d.ts.map b/types/Add-on/DrawViewport.d.ts.map index 13f89bc..814201f 100644 --- a/types/Add-on/DrawViewport.d.ts.map +++ b/types/Add-on/DrawViewport.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"DrawViewport.d.ts","sourceRoot":"","sources":["../../../src/Add-on/DrawViewport.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAOhC,OAAO,EAAE,MAAM,EAAE,MAAM,mCAAmC,CAAC;AAE3D,OAAO,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AACpE,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAEnD,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AA6E1D,qBAAa,YAAa,YAAW,OAAO;IAElC,IAAI;CA4Bb;AACD,qBAAa,aAAc,YAAW,OAAO;IAEnC,IAAI;CA6Bb;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE;;;;;;EAuCzC;AAED,wBAAgB,YAAY,CAAC,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,UAAU,UAAQ,oBA0CvH;AAED,qBAAa,aAAc,YAAW,OAAO;IAEnC,IAAI;CAkDb;AAGD,qBAAa,aAAc,YAAW,OAAO;IAEnC,IAAI;CAgGb;AAED,MAAM,WAAW,mBAAmB;IAEhC,UAAU,EAAE,UAAU,CAAC;IACvB,GAAG,EAAE,OAAO,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,OAAO,CAAC;IAClB,WAAW,EAAE,MAAM,EAAE,CAAC;CACzB;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,mBAAmB,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,oBAwB9E"} \ No newline at end of file +{"version":3,"file":"DrawViewport.d.ts","sourceRoot":"","sources":["../../../src/Add-on/DrawViewport.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAMhC,OAAO,EAAE,MAAM,EAAE,MAAM,mCAAmC,CAAC;AAC3D,OAAO,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AACpE,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAEnD,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AA6E1D,qBAAa,YAAa,YAAW,OAAO;IAElC,IAAI;CA4Bb;AACD,qBAAa,aAAc,YAAW,OAAO;IAEnC,IAAI;CA6Bb;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE;;;;;;EA0BzC;AAED,wBAAgB,YAAY,CAAC,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,UAAU,UAAQ,oBA0CvH;AAED,qBAAa,aAAc,YAAW,OAAO;IAEnC,IAAI;CAkDb;AAGD,qBAAa,aAAc,YAAW,OAAO;IAEnC,IAAI;CAgGb;AAED,MAAM,WAAW,mBAAmB;IAEhC,UAAU,EAAE,UAAU,CAAC;IACvB,GAAG,EAAE,OAAO,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,OAAO,CAAC;IAClB,WAAW,EAAE,MAAM,EAAE,CAAC;CACzB;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,mBAAmB,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,oBAwB9E"} \ No newline at end of file diff --git a/types/Add-on/ExportData.d.ts b/types/Add-on/ExportData.d.ts index b58c8be..dbdb53d 100644 --- a/types/Add-on/ExportData.d.ts +++ b/types/Add-on/ExportData.d.ts @@ -1,5 +1,6 @@ import * as React from 'react'; import { Entity } from "../DatabaseServices/Entity/Entity"; +import { Polyline } from "../DatabaseServices/Entity/Polyline"; import { PhysicalMaterialRecord } from "../DatabaseServices/PhysicalMaterialRecord"; import { Command } from "../Editor/CommandMachine"; export declare class ExportDataModal extends React.Component<{ @@ -24,4 +25,6 @@ export declare type Data = { export declare function AppendUserInfo(d: Data | any): void; export declare function Entitys2Data(ents: Iterable): Data; export declare function ConverMaterialData(material: PhysicalMaterialRecord): any; +export declare function ConverRoomRoof2Data(roofPolyline: Polyline): any; +export declare function ConverRoomUnderFloor2Data(roofPolyline: Polyline): any; //# sourceMappingURL=ExportData.d.ts.map \ 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 13dec6b..2196d9b 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;AAsB/B,OAAO,EAAE,MAAM,EAAE,MAAM,mCAAmC,CAAC;AAc3D,OAAO,EAAE,sBAAsB,EAAE,MAAM,4CAA4C,CAAC;AAOpF,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAcnD,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;CAoEb;AAED,oBAAY,IAAI,GAAG;IACf,OAAO,EAAE,GAAG,EAAE,CAAC;IACf,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,wBAAgB,cAAc,CAAC,CAAC,EAAE,IAAI,GAAG,GAAG,QAK3C;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,GAAG,IAAI,CAmEzD;AA2ID,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,sBAAsB,OA6ElE"} \ 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;AAsB/B,OAAO,EAAE,MAAM,EAAE,MAAM,mCAAmC,CAAC;AAI3D,OAAO,EAAE,QAAQ,EAAE,MAAM,qCAAqC,CAAC;AAU/D,OAAO,EAAE,sBAAsB,EAAE,MAAM,4CAA4C,CAAC;AAMpF,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAenD,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;CAgFb;AAED,oBAAY,IAAI,GAAG;IACf,OAAO,EAAE,GAAG,EAAE,CAAC;IACf,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,wBAAgB,cAAc,CAAC,CAAC,EAAE,IAAI,GAAG,GAAG,QAK3C;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,GAAG,IAAI,CAmEzD;AA6ID,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,sBAAsB,OA6ElE;AAuSD,wBAAgB,mBAAmB,CAAC,YAAY,EAAE,QAAQ,OAezD;AAED,wBAAgB,yBAAyB,CAAC,YAAY,EAAE,QAAQ,OAe/D"} \ No newline at end of file diff --git a/types/Add-on/File/OperLog.d.ts.map b/types/Add-on/File/OperLog.d.ts.map index d8a0e78..35d7bf2 100644 --- a/types/Add-on/File/OperLog.d.ts.map +++ b/types/Add-on/File/OperLog.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"OperLog.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/File/OperLog.tsx"],"names":[],"mappings":"AAUA,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAQtD,eAAO,MAAM,cAAc,sCAIzB,CAAC;AAEH,qBAAa,QAAS,YAAW,OAAO;IAExB,OAAO,CAAC,WAAW;gBAAX,WAAW,GAAE,OAAc;IAEzC,IAAI;YAiEI,eAAe;IAY7B,OAAO,CAAC,SAAS;CAWpB"} \ No newline at end of file +{"version":3,"file":"OperLog.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/File/OperLog.tsx"],"names":[],"mappings":"AAUA,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAQtD,eAAO,MAAM,cAAc,sCAIzB,CAAC;AAEH,qBAAa,QAAS,YAAW,OAAO;IAExB,OAAO,CAAC,WAAW;gBAAX,WAAW,GAAE,OAAc;IAEzC,IAAI;YA2FI,eAAe;IAY7B,OAAO,CAAC,SAAS;CAWpB"} \ No newline at end of file diff --git a/types/Add-on/KJL/Import/KJLUtils.d.ts.map b/types/Add-on/KJL/Import/KJLUtils.d.ts.map index d44e390..6605440 100644 --- a/types/Add-on/KJL/Import/KJLUtils.d.ts.map +++ b/types/Add-on/KJL/Import/KJLUtils.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"KJLUtils.d.ts","sourceRoot":"","sources":["../../../../../src/Add-on/KJL/Import/KJLUtils.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,MAAM,EAAE,MAAM,yCAAyC,CAAC;AAEjE,OAAO,EAAE,uBAAuB,EAAE,MAAM,4DAA4D,CAAC;AACrG,OAAO,EAAE,sBAAsB,EAAE,MAAM,kDAAkD,CAAC;AAG1F,OAAO,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AAEzD,wBAAgB,cAAc,CAAC,MAAM,EAAE,uBAAuB,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,uBAAuB,CAgBxH;AAED,wBAAgB,aAAa,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,sBAAsB,QAMpE"} \ No newline at end of file +{"version":3,"file":"KJLUtils.d.ts","sourceRoot":"","sources":["../../../../../src/Add-on/KJL/Import/KJLUtils.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,MAAM,EAAE,MAAM,yCAAyC,CAAC;AAEjE,OAAO,EAAE,uBAAuB,EAAE,MAAM,4DAA4D,CAAC;AACrG,OAAO,EAAE,sBAAsB,EAAE,MAAM,kDAAkD,CAAC;AAG1F,OAAO,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AAEzD,wBAAgB,cAAc,CAAC,MAAM,EAAE,uBAAuB,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,uBAAuB,CAwBxH;AAED,wBAAgB,aAAa,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,sBAAsB,QAMpE"} \ No newline at end of file diff --git a/types/Add-on/KJL/KJLImportConfig/KJLImportConfigModal.d.ts.map b/types/Add-on/KJL/KJLImportConfig/KJLImportConfigModal.d.ts.map index 3f961d3..32ee1da 100644 --- a/types/Add-on/KJL/KJLImportConfig/KJLImportConfigModal.d.ts.map +++ b/types/Add-on/KJL/KJLImportConfig/KJLImportConfigModal.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"KJLImportConfigModal.d.ts","sourceRoot":"","sources":["../../../../../src/Add-on/KJL/KJLImportConfig/KJLImportConfigModal.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAK1B,OAAO,wBAAwB,CAAC;AAChC,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAI9D,oBAAY,SAAS,GAAG,QAAQ,GAAG,UAAU,CAAC;AAE9C,qBAAa,oBAAqB,SAAQ,KAAK,CAAC,SAAS,CAAC;IAAE,KAAK,EAAE,oBAAoB,CAAC;IAAC,KAAK,CAAC,EAAE,SAAS,CAAC;CAAE,CAAC;IAE1G,MAAM;IAkCN,OAAO,CAAC,MAAM;CAIjB"} \ No newline at end of file +{"version":3,"file":"KJLImportConfigModal.d.ts","sourceRoot":"","sources":["../../../../../src/Add-on/KJL/KJLImportConfig/KJLImportConfigModal.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAM1B,OAAO,wBAAwB,CAAC;AAChC,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAI9D,oBAAY,SAAS,GAAG,QAAQ,GAAG,UAAU,CAAC;AAE9C,qBAAa,oBAAqB,SAAQ,KAAK,CAAC,SAAS,CAAC;IAAE,KAAK,EAAE,oBAAoB,CAAC;IAAC,KAAK,CAAC,EAAE,SAAS,CAAC;CAAE,CAAC;IAE1G,MAAM;IAmCN,OAAO,CAAC,MAAM;CAIjB"} \ No newline at end of file diff --git a/types/Add-on/OpenCabinet/OpenCabinet.d.ts.map b/types/Add-on/OpenCabinet/OpenCabinet.d.ts.map index e474a72..27f2958 100644 --- a/types/Add-on/OpenCabinet/OpenCabinet.d.ts.map +++ b/types/Add-on/OpenCabinet/OpenCabinet.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"OpenCabinet.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/OpenCabinet/OpenCabinet.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAWtD,qBAAa,mBAAoB,YAAW,OAAO;IAE/C,OAAO,CAAC,eAAe,CAAqC;IAC5D,OAAO,CAAC,aAAa,CAA8C;IACnE,OAAO,CAAC,MAAM,CAAiB;IAC/B,OAAO,CAAC,MAAM,CAAK;IAEb,IAAI;IA+FV,OAAO,CAAC,kBAAkB;IAY1B,OAAO,CAAC,YAAY;IA+DpB,OAAO,CAAC,aAAa;IAuCrB,OAAO,CAAC,MAAM;IA6Dd,OAAO,CAAC,cAAc;IAOtB,OAAO,CAAC,kBAAkB;CAkF7B"} \ No newline at end of file +{"version":3,"file":"OpenCabinet.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/OpenCabinet/OpenCabinet.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAWtD,qBAAa,mBAAoB,YAAW,OAAO;IAE/C,OAAO,CAAC,eAAe,CAAqC;IAC5D,OAAO,CAAC,aAAa,CAA8C;IACnE,OAAO,CAAC,MAAM,CAAiB;IAC/B,OAAO,CAAC,MAAM,CAAK;IAEb,IAAI;IA+FV,OAAO,CAAC,kBAAkB;IAY1B,OAAO,CAAC,YAAY;IA+DpB,OAAO,CAAC,aAAa;IAuCrB,OAAO,CAAC,MAAM;IA6Dd,OAAO,CAAC,cAAc;IAOtB,OAAO,CAAC,kBAAkB;CA+F7B"} \ No newline at end of file diff --git a/types/Add-on/Template/DrawVisualSpaceBox.d.ts.map b/types/Add-on/Template/DrawVisualSpaceBox.d.ts.map index a8690b7..8b39de9 100644 --- a/types/Add-on/Template/DrawVisualSpaceBox.d.ts.map +++ b/types/Add-on/Template/DrawVisualSpaceBox.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"DrawVisualSpaceBox.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/Template/DrawVisualSpaceBox.tsx"],"names":[],"mappings":"AAUA,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAatD,qBAAa,kBAAmB,YAAW,OAAO;IAExC,IAAI;CA2Cb"} \ No newline at end of file +{"version":3,"file":"DrawVisualSpaceBox.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/Template/DrawVisualSpaceBox.tsx"],"names":[],"mappings":"AAaA,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAetD,qBAAa,kBAAmB,YAAW,OAAO;IAExC,IAAI;CA+Hb"} \ No newline at end of file diff --git a/types/Add-on/TemplateSearch.d.ts.map b/types/Add-on/TemplateSearch.d.ts.map index 78e802f..a6eff64 100644 --- a/types/Add-on/TemplateSearch.d.ts.map +++ b/types/Add-on/TemplateSearch.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"TemplateSearch.d.ts","sourceRoot":"","sources":["../../../src/Add-on/TemplateSearch.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAY/B,OAAO,EAAE,OAAO,EAAe,MAAM,0BAA0B,CAAC;AAOhE,OAAO,EAAE,YAAY,EAAE,MAAM,0CAA0C,CAAC;AACxE,OAAO,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AAIrE,qBAAa,sBAAuB,YAAW,OAAO;IAEtC,OAAO,CAAC,OAAO;gBAAP,OAAO,UAAQ;IAC7B,IAAI;CAUb;AAED,qBACa,oBAAqB,SAAQ,KAAK,CAAC,SAAS,CAAC;IAAE,GAAG,EAAE,MAAM,CAAC;CAAE,EAAE,EAAE,CAAC;IAC/D,OAAO,CAAC,aAAa,CAAqE;IACtG,SAAS,MAAa,YAAY,mBAOhC;IACF,OAAO,CAAC,SAAS,CAyCf;IACF,OAAO,CAAC,WAAW,CAMjB;IACF,OAAO,CAAC,YAAY,CAUlB;IACI,yBAAyB;IAIzB,oBAAoB;IAI1B,MAAM;CAYT;AAGD,wBAAsB,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,aAAa,EAAE,uBAAuB,EAAE,MAAM,CAAC,EAAE,YAAY,iBA4BjH;AAED,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,aAAa,EAAE,uBAAuB,EAAE,MAAM,CAAC,EAAE,YAAY,iBAqBpH"} \ No newline at end of file +{"version":3,"file":"TemplateSearch.d.ts","sourceRoot":"","sources":["../../../src/Add-on/TemplateSearch.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAS/B,OAAO,EAAE,OAAO,EAAe,MAAM,0BAA0B,CAAC;AAIhE,OAAO,EAAE,YAAY,EAAE,MAAM,0CAA0C,CAAC;AAExE,OAAO,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AAIrE,qBAAa,sBAAuB,YAAW,OAAO;IAEtC,OAAO,CAAC,OAAO;gBAAP,OAAO,UAAQ;IAC7B,IAAI;CAUb;AAED,qBACa,oBAAqB,SAAQ,KAAK,CAAC,SAAS,CAAC;IAAE,GAAG,EAAE,MAAM,CAAC;CAAE,EAAE,EAAE,CAAC;IAC/D,OAAO,CAAC,aAAa,CAAqE;IACtG,SAAS,MAAa,YAAY,mBAOhC;IACF,OAAO,CAAC,SAAS,CAwBf;IACF,OAAO,CAAC,WAAW,CAMjB;IACF,OAAO,CAAC,YAAY,CAUlB;IACI,yBAAyB;IAIzB,oBAAoB;IAI1B,MAAM;CAYT;AAGD,wBAAsB,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,aAAa,EAAE,uBAAuB,EAAE,MAAM,CAAC,EAAE,YAAY,iBA4BjH;AAED,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,aAAa,EAAE,uBAAuB,EAAE,MAAM,CAAC,EAAE,YAAY,iBAqBpH"} \ No newline at end of file diff --git a/types/Add-on/ViewortConfig/Viewport2Config.d.ts.map b/types/Add-on/ViewortConfig/Viewport2Config.d.ts.map index e2d8c0a..cc5af1c 100644 --- a/types/Add-on/ViewortConfig/Viewport2Config.d.ts.map +++ b/types/Add-on/ViewortConfig/Viewport2Config.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"Viewport2Config.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/ViewortConfig/Viewport2Config.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,MAAM,OAAO,CAAC;AAM1B,OAAO,EAAE,aAAa,EAAc,MAAM,sCAAsC,CAAC;AAEjF,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AACtE,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAGzD,qBAAa,oBAAqB,YAAW,YAAY;IAEzC,UAAU,SAAQ;IAC9B,UAAU;IAQE,QAAQ,EAAE,qBAAqB,CAAuC;IACtE,YAAY,EAAE,MAAM,EAAE,CAAM;IACxC,UAAU;IAIV,YAAY,CAAC,GAAG,EAAE,aAAa,CAAC,qBAAqB,CAAC;IAQtD,OAAO,CAAC,MAAM,CAAC,eAAe,CAAuB;IACrD,MAAM,CAAC,WAAW,IAAI,oBAAoB;CAM7C;AAED,qBACa,oBAAqB,SAAQ,KAAK,CAAC,SAAS,CAAC;IAAE,KAAK,EAAE,oBAAoB,CAAC;CAAE,EAAE,EAAE,CAAC;IAE3F,MAAM,EAAE,QAAQ,CAAC;IAEjB,aAAa;IAcb,yBAAyB;IAKzB,oBAAoB;IAMpB,MAAM;CAqGT"} \ No newline at end of file +{"version":3,"file":"Viewport2Config.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/ViewortConfig/Viewport2Config.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,MAAM,OAAO,CAAC;AAM1B,OAAO,EAAoB,aAAa,EAAc,MAAM,sCAAsC,CAAC;AAEnG,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AACtE,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAGzD,qBAAa,oBAAqB,YAAW,YAAY;IAEzC,UAAU,SAAQ;IAC9B,UAAU;IAQE,QAAQ,EAAE,qBAAqB,CAAuC;IACtE,YAAY,EAAE,MAAM,EAAE,CAAM;IACxC,UAAU;IAIV,YAAY,CAAC,GAAG,EAAE,aAAa,CAAC,qBAAqB,CAAC;IAQtD,OAAO,CAAC,MAAM,CAAC,eAAe,CAAuB;IACrD,MAAM,CAAC,WAAW,IAAI,oBAAoB;CAM7C;AAED,qBACa,oBAAqB,SAAQ,KAAK,CAAC,SAAS,CAAC;IAAE,KAAK,EAAE,oBAAoB,CAAC;CAAE,EAAE,EAAE,CAAC;IAE3F,MAAM,EAAE,QAAQ,CAAC;IAEjB,aAAa;IAcb,yBAAyB;IAKzB,oBAAoB;IAMpB,MAAM;CAsGT"} \ No newline at end of file diff --git a/types/Add-on/ViewortConfig/Viewport3Config.d.ts.map b/types/Add-on/ViewortConfig/Viewport3Config.d.ts.map index d57bd9a..7360b11 100644 --- a/types/Add-on/ViewortConfig/Viewport3Config.d.ts.map +++ b/types/Add-on/ViewortConfig/Viewport3Config.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"Viewport3Config.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/ViewortConfig/Viewport3Config.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,MAAM,OAAO,CAAC;AAM1B,OAAO,EAAE,aAAa,EAAc,MAAM,sCAAsC,CAAC;AAEjF,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AACtE,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAGzD,qBAAa,oBAAqB,YAAW,YAAY;IAEzC,UAAU,SAAQ;IAC9B,UAAU;IAQE,QAAQ,EAAE,qBAAqB,CAAuC;IACtE,YAAY,EAAE,MAAM,EAAE,CAAM;IACxC,UAAU;IAIV,YAAY,CAAC,GAAG,EAAE,aAAa,CAAC,qBAAqB,CAAC;IAOtD,OAAO,CAAC,MAAM,CAAC,eAAe,CAAuB;IACrD,MAAM,CAAC,WAAW,IAAI,oBAAoB;CAM7C;AAED,qBACa,oBAAqB,SAAQ,KAAK,CAAC,SAAS,CAAC;IAAE,KAAK,EAAE,oBAAoB,CAAC;CAAE,EAAE,EAAE,CAAC;IAE3F,MAAM,EAAE,QAAQ,CAAC;IAEjB,aAAa;IAeb,yBAAyB;IAKzB,oBAAoB;IAMpB,MAAM;CA6HT;AAED,qBACa,cAAe,SAAQ,KAAK,CAAC,SAAS,CAAC;IAAE,KAAK,EAAE,oBAAoB,CAAC;CAAE,EAAE,EAAE,CAAC;IAErF,MAAM;CA0BT;AAED,qBACa,cAAe,SAAQ,KAAK,CAAC,SAAS,CAAC;IAAE,KAAK,EAAE,oBAAoB,CAAC;CAAE,EAAE,EAAE,CAAC;IAErF,MAAM;CAyBT;AACD,qBACa,cAAe,SAAQ,KAAK,CAAC,SAAS,CAAC;IAAE,KAAK,EAAE,oBAAoB,CAAC;CAAE,EAAE,EAAE,CAAC;IAErF,MAAM;CAyBT"} \ No newline at end of file +{"version":3,"file":"Viewport3Config.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/ViewortConfig/Viewport3Config.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,MAAM,OAAO,CAAC;AAM1B,OAAO,EAAoB,aAAa,EAAc,MAAM,sCAAsC,CAAC;AAEnG,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AACtE,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAGzD,qBAAa,oBAAqB,YAAW,YAAY;IAEzC,UAAU,SAAQ;IAC9B,UAAU;IAQE,QAAQ,EAAE,qBAAqB,CAAuC;IACtE,YAAY,EAAE,MAAM,EAAE,CAAM;IACxC,UAAU;IAIV,YAAY,CAAC,GAAG,EAAE,aAAa,CAAC,qBAAqB,CAAC;IAOtD,OAAO,CAAC,MAAM,CAAC,eAAe,CAAuB;IACrD,MAAM,CAAC,WAAW,IAAI,oBAAoB;CAM7C;AAED,qBACa,oBAAqB,SAAQ,KAAK,CAAC,SAAS,CAAC;IAAE,KAAK,EAAE,oBAAoB,CAAC;CAAE,EAAE,EAAE,CAAC;IAE3F,MAAM,EAAE,QAAQ,CAAC;IAEjB,aAAa;IAeb,yBAAyB;IAKzB,oBAAoB;IAMpB,MAAM;CA8HT;AAED,qBACa,cAAe,SAAQ,KAAK,CAAC,SAAS,CAAC;IAAE,KAAK,EAAE,oBAAoB,CAAC;CAAE,EAAE,EAAE,CAAC;IAErF,MAAM;CA0BT;AAED,qBACa,cAAe,SAAQ,KAAK,CAAC,SAAS,CAAC;IAAE,KAAK,EAAE,oBAAoB,CAAC;CAAE,EAAE,EAAE,CAAC;IAErF,MAAM;CAyBT;AACD,qBACa,cAAe,SAAQ,KAAK,CAAC,SAAS,CAAC;IAAE,KAAK,EAAE,oBAAoB,CAAC;CAAE,EAAE,EAAE,CAAC;IAErF,MAAM;CAyBT"} \ No newline at end of file diff --git a/types/Add-on/ViewortConfig/Viewport4Config.d.ts.map b/types/Add-on/ViewortConfig/Viewport4Config.d.ts.map index bd7d8e7..6e30a13 100644 --- a/types/Add-on/ViewortConfig/Viewport4Config.d.ts.map +++ b/types/Add-on/ViewortConfig/Viewport4Config.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"Viewport4Config.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/ViewortConfig/Viewport4Config.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,MAAM,OAAO,CAAC;AAM1B,OAAO,EAAE,aAAa,EAAc,MAAM,sCAAsC,CAAC;AAEjF,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AACtE,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAGzD,qBAAa,oBAAqB,YAAW,YAAY;IAEzC,UAAU,SAAQ;IAC9B,UAAU;IAQE,QAAQ,EAAE,qBAAqB,CAAuC;IACtE,YAAY,EAAE,MAAM,EAAE,CAAM;IACxC,UAAU;IAIV,YAAY,CAAC,GAAG,EAAE,aAAa,CAAC,qBAAqB,CAAC;IAMtD,OAAO,CAAC,MAAM,CAAC,eAAe,CAAuB;IACrD,MAAM,CAAC,WAAW,IAAI,oBAAoB;CAM7C;AAED,qBACa,oBAAqB,SAAQ,KAAK,CAAC,SAAS,CAAC;IAAE,KAAK,EAAE,oBAAoB,CAAC;CAAE,EAAE,EAAE,CAAC;IAE3F,MAAM,EAAE,QAAQ,CAAC;IAEjB,aAAa;IAcb,yBAAyB;IAKzB,oBAAoB;IAMpB,MAAM;CAwDT;AAED,qBACa,aAAc,SAAQ,KAAK,CAAC,SAAS,CAAC;IAAE,KAAK,EAAE,oBAAoB,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;CAAE,EAAE,EAAE,CAAC;IAE/F,MAAM;CAyBT"} \ No newline at end of file +{"version":3,"file":"Viewport4Config.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/ViewortConfig/Viewport4Config.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,MAAM,OAAO,CAAC;AAM1B,OAAO,EAAoB,aAAa,EAAc,MAAM,sCAAsC,CAAC;AAEnG,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AACtE,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAGzD,qBAAa,oBAAqB,YAAW,YAAY;IAEzC,UAAU,SAAQ;IAC9B,UAAU;IAQE,QAAQ,EAAE,qBAAqB,CAAuC;IACtE,YAAY,EAAE,MAAM,EAAE,CAAM;IACxC,UAAU;IAIV,YAAY,CAAC,GAAG,EAAE,aAAa,CAAC,qBAAqB,CAAC;IAMtD,OAAO,CAAC,MAAM,CAAC,eAAe,CAAuB;IACrD,MAAM,CAAC,WAAW,IAAI,oBAAoB;CAM7C;AAED,qBACa,oBAAqB,SAAQ,KAAK,CAAC,SAAS,CAAC;IAAE,KAAK,EAAE,oBAAoB,CAAC;CAAE,EAAE,EAAE,CAAC;IAE3F,MAAM,EAAE,QAAQ,CAAC;IAEjB,aAAa;IAcb,yBAAyB;IAKzB,oBAAoB;IAMpB,MAAM;CAyDT;AAED,qBACa,aAAc,SAAQ,KAAK,CAAC,SAAS,CAAC;IAAE,KAAK,EAAE,oBAAoB,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;CAAE,EAAE,EAAE,CAAC;IAE/F,MAAM;CAyBT"} \ No newline at end of file diff --git a/types/Add-on/ViewortConfig/ViewportConfig.d.ts.map b/types/Add-on/ViewortConfig/ViewportConfig.d.ts.map index c3c237d..87febd3 100644 --- a/types/Add-on/ViewortConfig/ViewportConfig.d.ts.map +++ b/types/Add-on/ViewortConfig/ViewportConfig.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"ViewportConfig.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/ViewortConfig/ViewportConfig.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,MAAM,OAAO,CAAC;AAM1B,OAAO,EAAE,aAAa,EAAc,MAAM,sCAAsC,CAAC;AAEjF,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAGzD,qBAAa,mBAAoB,YAAW,YAAY;IAExC,UAAU,SAAQ;IAC9B,UAAU;IAQE,QAAQ,EAAE,oBAAoB,CAAsC;IACpE,YAAY,EAAE,MAAM,EAAE,CAAM;IACxC,UAAU;IAIV,YAAY,CAAC,GAAG,EAAE,aAAa,CAAC,oBAAoB,CAAC;IAMrD,OAAO,CAAC,MAAM,CAAC,eAAe,CAAsB;IACpD,MAAM,CAAC,WAAW,IAAI,mBAAmB;CAM5C;AAED,qBACa,mBAAoB,SAAQ,KAAK,CAAC,SAAS,CAAC;IAAE,KAAK,EAAE,mBAAmB,CAAC;CAAE,EAAE,EAAE,CAAC;IAEzF,MAAM,EAAE,QAAQ,CAAC;IAEjB,aAAa;IAcb,yBAAyB;IAKzB,oBAAoB;IAMpB,MAAM;CAmET"} \ No newline at end of file +{"version":3,"file":"ViewportConfig.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/ViewortConfig/ViewportConfig.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,MAAM,OAAO,CAAC;AAM1B,OAAO,EAAoB,aAAa,EAAc,MAAM,sCAAsC,CAAC;AAEnG,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAGzD,qBAAa,mBAAoB,YAAW,YAAY;IAExC,UAAU,SAAQ;IAC9B,UAAU;IAQE,QAAQ,EAAE,oBAAoB,CAAsC;IACpE,YAAY,EAAE,MAAM,EAAE,CAAM;IACxC,UAAU;IAIV,YAAY,CAAC,GAAG,EAAE,aAAa,CAAC,oBAAoB,CAAC;IAMrD,OAAO,CAAC,MAAM,CAAC,eAAe,CAAsB;IACpD,MAAM,CAAC,WAAW,IAAI,mBAAmB;CAM5C;AAED,qBACa,mBAAoB,SAAQ,KAAK,CAAC,SAAS,CAAC;IAAE,KAAK,EAAE,mBAAmB,CAAC;CAAE,EAAE,EAAE,CAAC;IAEzF,MAAM,EAAE,QAAQ,CAAC;IAEjB,aAAa;IAcb,yBAAyB;IAKzB,oBAAoB;IAMpB,MAAM;CAoET"} \ No newline at end of file diff --git a/types/Add-on/twoD2threeD/Modals/Curve2RecModal.d.ts.map b/types/Add-on/twoD2threeD/Modals/Curve2RecModal.d.ts.map index c71c15e..9f76190 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":"AAGA,OAAO,KAAK,MAAM,OAAO,CAAC;AAO1B,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAGtD,OAAO,EAAE,aAAa,EAAc,MAAM,yCAAyC,CAAC;AAKpF,OAAO,EAAE,SAAS,EAAE,MAAM,kCAAkC,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAC5D,OAAO,0BAA0B,CAAC;AAClC,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpD,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;IAcV,UAAU;IAMV,YAAY,CAAC,GAAG,EAAE,aAAa,CAAC,eAAe,CAAC;IAMhD,cAAc;IAMd,MAAM;IAMN,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;IAgBjB,oBAAoB;IAOpB,MAAM;CAgGT"} \ No newline at end of file +{"version":3,"file":"Curve2RecModal.d.ts","sourceRoot":"","sources":["../../../../../src/Add-on/twoD2threeD/Modals/Curve2RecModal.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,MAAM,OAAO,CAAC;AAO1B,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAGtD,OAAO,EAAoB,aAAa,EAAc,MAAM,yCAAyC,CAAC;AAKtG,OAAO,EAAE,SAAS,EAAE,MAAM,kCAAkC,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAC5D,OAAO,0BAA0B,CAAC;AAClC,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpD,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;IAcV,UAAU;IAMV,YAAY,CAAC,GAAG,EAAE,aAAa,CAAC,eAAe,CAAC;IAMhD,cAAc;IAMd,MAAM;IAMN,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;IAgBjB,oBAAoB;IAOpB,MAAM;CAmGT"} \ 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 index bace9c7..fc5b1e3 100644 --- a/types/Add-on/twoD2threeD/Modals/R2b2.d.ts.map +++ b/types/Add-on/twoD2threeD/Modals/R2b2.d.ts.map @@ -1 +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;AAUzC,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAUzC,qBACa,SAAU,SAAQ,SAAS,CAAC;IAAE,KAAK,EAAE,SAAS,CAAC;CAAE,CAAC;IAE3D,OAAO,CAAC,KAAK,CAAW;IACxB,iBAAiB;IAejB,oBAAoB;IAMpB,MAAM;IA2EN,OAAO,CAAC,KAAK,CAKX;IACF,OAAO,CAAC,OAAO,CAkBb;CACL"} \ No newline at end of file +{"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;AAWzC,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAUzC,qBACa,SAAU,SAAQ,SAAS,CAAC;IAAE,KAAK,EAAE,SAAS,CAAC;CAAE,CAAC;IAE3D,OAAO,CAAC,KAAK,CAAW;IACxB,iBAAiB;IAejB,oBAAoB;IAMpB,MAAM;IA4EN,OAAO,CAAC,KAAK,CAKX;IACF,OAAO,CAAC,OAAO,CAkBb;CACL"} \ No newline at end of file diff --git a/types/Add-on/twoD2threeD/Modals/Rec2Br.d.ts.map b/types/Add-on/twoD2threeD/Modals/Rec2Br.d.ts.map index 078c925..92a6c20 100644 --- a/types/Add-on/twoD2threeD/Modals/Rec2Br.d.ts.map +++ b/types/Add-on/twoD2threeD/Modals/Rec2Br.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"Rec2Br.d.ts","sourceRoot":"","sources":["../../../../../src/Add-on/twoD2threeD/Modals/Rec2Br.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAC;AAiB1B,OAAO,uBAAuB,CAAC;AAG/B,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE7C,qBACa,WAAY,SAAQ,KAAK,CAAC,SAAS,CAAC;IAAE,KAAK,EAAE,WAAW,CAAC;CAAE,EAAE,EAAE,CAAC;IAEzE,OAAO,CAAC,WAAW,CAAkB;IAErC,iBAAiB;IAgCjB,oBAAoB;IAOpB,OAAO,CAAC,SAAS,CA6Cf;IACF,MAAM;IA+DA,UAAU;CAoBnB"} \ No newline at end of file +{"version":3,"file":"Rec2Br.d.ts","sourceRoot":"","sources":["../../../../../src/Add-on/twoD2threeD/Modals/Rec2Br.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAC;AAkB1B,OAAO,uBAAuB,CAAC;AAI/B,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE7C,qBACa,WAAY,SAAQ,KAAK,CAAC,SAAS,CAAC;IAAE,KAAK,EAAE,WAAW,CAAC;CAAE,EAAE,EAAE,CAAC;IAEzE,OAAO,CAAC,WAAW,CAAkB;IAErC,iBAAiB;IAgCjB,oBAAoB;IAOpB,OAAO,CAAC,SAAS,CA6Cf;IACF,MAAM;IAqEA,UAAU;CAoBnB"} \ No newline at end of file diff --git a/types/Add-on/twoD2threeD/ParseBoardNamePanel.d.ts.map b/types/Add-on/twoD2threeD/ParseBoardNamePanel.d.ts.map index 5b09f87..754ca12 100644 --- a/types/Add-on/twoD2threeD/ParseBoardNamePanel.d.ts.map +++ b/types/Add-on/twoD2threeD/ParseBoardNamePanel.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"ParseBoardNamePanel.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/twoD2threeD/ParseBoardNamePanel.tsx"],"names":[],"mappings":"AAEA,OAAc,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AASzC,OAAO,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C,UAAU,gBAAgB;IAEtB,KAAK,EAAE;QACH,QAAQ,EAAE,qBAAqB,CAAC;QAChC,QAAQ,EAAE,SAAS,CAAC,qBAAqB,CAAC,CAAC;KAC9C,CAAC;CACL;AAED,qBACa,cAAe,SAAQ,SAAS,CAAC,gBAAgB,CAAC;IAE3D,OAAO,CAAC,gBAAgB,CAGtB;IACF,WAAW,cAA4C;IACvD,MAAM;CAgNT;AAED,qBAAa,mBAAoB,SAAQ,SAAS,CAAC;IAAE,KAAK,EAAE,mBAAmB,CAAC;CAAE,CAAC;IAE/E,OAAO,CAAC,KAAK,CAAW;IACxB,iBAAiB;IAgBjB,oBAAoB;IAKpB,MAAM;IAkCN,OAAO,CAAC,EAAE,CAaR;IACF,OAAO,CAAC,KAAK,CAKX;CACL"} \ No newline at end of file +{"version":3,"file":"ParseBoardNamePanel.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/twoD2threeD/ParseBoardNamePanel.tsx"],"names":[],"mappings":"AAEA,OAAc,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAUzC,OAAO,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C,UAAU,gBAAgB;IAEtB,KAAK,EAAE;QACH,QAAQ,EAAE,qBAAqB,CAAC;QAChC,QAAQ,EAAE,SAAS,CAAC,qBAAqB,CAAC,CAAC;KAC9C,CAAC;CACL;AAED,qBACa,cAAe,SAAQ,SAAS,CAAC,gBAAgB,CAAC;IAE3D,OAAO,CAAC,gBAAgB,CAGtB;IACF,WAAW,cAA4C;IACvD,MAAM;CAwMT;AAED,qBAAa,mBAAoB,SAAQ,SAAS,CAAC;IAAE,KAAK,EAAE,mBAAmB,CAAC;CAAE,CAAC;IAE/E,OAAO,CAAC,KAAK,CAAW;IACxB,iBAAiB;IAgBjB,oBAAoB;IAKpB,MAAM;IAmCN,OAAO,CAAC,EAAE,CAaR;IACF,OAAO,CAAC,KAAK,CAKX;CACL"} \ No newline at end of file diff --git a/types/Add-on/twoD2threeD/R2bConfigComponent.d.ts.map b/types/Add-on/twoD2threeD/R2bConfigComponent.d.ts.map index 908feb3..7ba6119 100644 --- a/types/Add-on/twoD2threeD/R2bConfigComponent.d.ts.map +++ b/types/Add-on/twoD2threeD/R2bConfigComponent.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"R2bConfigComponent.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/twoD2threeD/R2bConfigComponent.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,MAAM,OAAO,CAAC;AAQ1B,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C,MAAM,WAAW,eAAe;IAE5B,YAAY,EAAE,OAAO,CAAC;CACzB;AAED,oBAAY,cAAc;IAEtB,WAAW,IAAI;IACf,QAAQ,IAAI;IACZ,WAAW,IAAI;CAClB;AAED,UAAU,wBAAwB;IAE9B,KAAK,EAAE,WAAW,CAAC;IACnB,SAAS,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,IAAI,CAAC;CAC9C;AAGD,qBACa,kBAAmB,SAAQ,KAAK,CAAC,SAAS,CAAC,wBAAwB,CAAC;IAEjE,gBAAgB,UAAS;IAErC,MAAM;CAwHT"} \ No newline at end of file +{"version":3,"file":"R2bConfigComponent.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/twoD2threeD/R2bConfigComponent.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,MAAM,OAAO,CAAC;AAO1B,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C,MAAM,WAAW,eAAe;IAE5B,YAAY,EAAE,OAAO,CAAC;CACzB;AAED,oBAAY,cAAc;IAEtB,WAAW,IAAI;IACf,QAAQ,IAAI;IACZ,WAAW,IAAI;CAClB;AAED,UAAU,wBAAwB;IAE9B,KAAK,EAAE,WAAW,CAAC;IACnB,SAAS,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,IAAI,CAAC;CAC9C;AAGD,qBACa,kBAAmB,SAAQ,KAAK,CAAC,SAAS,CAAC,wBAAwB,CAAC;IAEjE,gBAAgB,UAAS;IAErC,MAAM;CAiIT"} \ No newline at end of file diff --git a/types/Common/BoardUtil.d.ts b/types/Common/BoardUtil.d.ts index d2577db..5ca3b92 100644 --- a/types/Common/BoardUtil.d.ts +++ b/types/Common/BoardUtil.d.ts @@ -1,7 +1,7 @@ -import { Matrix4, Vector3 } from "three"; +import { Vector3 } from "three"; import { Entity } from "../DatabaseServices/Entity/Entity"; import { Box3Ext } from "../Geometry/Box"; /**打包接触在一起的实体 */ -export declare function ClassifyEntityList(borads: T[], ocsInv?: Matrix4): Map; +export declare function ClassifyEntityList(borads: T[]): Map; export declare function MirrorEntitys(ens: Entity[], p1: Vector3, p2: Vector3, nor: Vector3): void; //# sourceMappingURL=BoardUtil.d.ts.map \ No newline at end of file diff --git a/types/Common/BoardUtil.d.ts.map b/types/Common/BoardUtil.d.ts.map index 1949c28..95e676a 100644 --- a/types/Common/BoardUtil.d.ts.map +++ b/types/Common/BoardUtil.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"BoardUtil.d.ts","sourceRoot":"","sources":["../../../src/Common/BoardUtil.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,mCAAmC,CAAC;AAC3D,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAG1C,gBAAgB;AAChB,wBAAgB,kBAAkB,CAAC,CAAC,SAAS,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,GAAG,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,CA2CrG;AAED,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,QAUlF"} \ No newline at end of file +{"version":3,"file":"BoardUtil.d.ts","sourceRoot":"","sources":["../../../src/Common/BoardUtil.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,OAAO,EAAE,MAAM,OAAO,CAAC;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,mCAAmC,CAAC;AAC3D,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAG1C,gBAAgB;AAChB,wBAAgB,kBAAkB,CAAC,CAAC,SAAS,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,GAAG,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,CAwCnF;AAED,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,QAUlF"} \ No newline at end of file diff --git a/types/Common/CommandNames.d.ts b/types/Common/CommandNames.d.ts index d471d5a..112ba8f 100644 --- a/types/Common/CommandNames.d.ts +++ b/types/Common/CommandNames.d.ts @@ -137,9 +137,14 @@ export declare enum CommandNames { PropertiesBar = "PROPERTIESBAR", ModuleBar = "MODULEBAR", ChangeLayout = "CHANGELAYOUT", - RightPanel = "RIGHTPANEL", + RightPanelTemplateParam = "RIGHTPANELTEMPLATEPARAM", RightPanelScene = "RIGHTPANELSCENE", - RightPanelmMaterial = "RIGHTPANELMATERIAL", + RightPanelMaterial = "RIGHTPANELMATERIAL", + RightPanelModel = "RIGHTPANELMODEL", + RightPanelModel2 = "RIGHTPANELMODEL2", + RightPanelModel3 = "RIGHTPANELMODEL3", + RightPanelMetals = "RIGHTPANELMETALS", + RightPanelModule = "RIGHTPANELMODULE", Config = "CONFIG", Enablesyncdata = "ENABLESYNCDATA", DimStyle = "DIMSTYLE", diff --git a/types/Common/CommandNames.d.ts.map b/types/Common/CommandNames.d.ts.map index e8a4af2..578b769 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/DatabaseServices/AutoRecord.d.ts b/types/DatabaseServices/AutoRecord.d.ts index eade90b..62c8f0d 100644 --- a/types/DatabaseServices/AutoRecord.d.ts +++ b/types/DatabaseServices/AutoRecord.d.ts @@ -4,6 +4,8 @@ export declare const ISPROXYKEY = "_isProxy"; * 如果属性是数组,那么自动添加`Proxy`. * 可以使用`ISPROXYKEY`覆盖这个函数的代理行为(使用CADObject.CreateProxyArray快速覆盖) * + * ! 仅在{数组}或者{值}类型上使用,如果是Object,请使用AutoRecordObject + * * @param target * @param property * @param [descriptor] @@ -11,4 +13,7 @@ export declare const ISPROXYKEY = "_isProxy"; export declare function AutoRecord(target: { WriteAllObjectRecord: () => void; }, property: string, descriptor?: PropertyDecorator): void; +export declare function AutoRecordObject(target: { + WriteAllObjectRecord: () => void; +}, property: string, descriptor?: PropertyDecorator): void; //# sourceMappingURL=AutoRecord.d.ts.map \ No newline at end of file diff --git a/types/DatabaseServices/AutoRecord.d.ts.map b/types/DatabaseServices/AutoRecord.d.ts.map index 92b5d2e..220a347 100644 --- a/types/DatabaseServices/AutoRecord.d.ts.map +++ b/types/DatabaseServices/AutoRecord.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"AutoRecord.d.ts","sourceRoot":"","sources":["../../../src/DatabaseServices/AutoRecord.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,UAAU,aAAa,CAAC;AAErC;;;;;;;;GAQG;AACH,wBAAgB,UAAU,CACtB,MAAM,EAAE;IAAE,oBAAoB,EAAE,MAAM,IAAI,CAAC;CAAE,EAC7C,QAAQ,EAAE,MAAM,EAChB,UAAU,CAAC,EAAE,iBAAiB,QAyDjC"} \ No newline at end of file +{"version":3,"file":"AutoRecord.d.ts","sourceRoot":"","sources":["../../../src/DatabaseServices/AutoRecord.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,UAAU,aAAa,CAAC;AAErC;;;;;;;;;;GAUG;AACH,wBAAgB,UAAU,CACtB,MAAM,EAAE;IAAE,oBAAoB,EAAE,MAAM,IAAI,CAAC;CAAE,EAC7C,QAAQ,EAAE,MAAM,EAChB,UAAU,CAAC,EAAE,iBAAiB,QA8DjC;AAGD,wBAAgB,gBAAgB,CAC5B,MAAM,EAAE;IAAE,oBAAoB,EAAE,MAAM,IAAI,CAAC;CAAE,EAC7C,QAAQ,EAAE,MAAM,EAChB,UAAU,CAAC,EAAE,iBAAiB,QA4DjC"} \ No newline at end of file diff --git a/types/DatabaseServices/Entity/BoxSolid.d.ts b/types/DatabaseServices/Entity/BoxSolid.d.ts index 84fa797..955fe8f 100644 --- a/types/DatabaseServices/Entity/BoxSolid.d.ts +++ b/types/DatabaseServices/Entity/BoxSolid.d.ts @@ -1,6 +1,7 @@ -import { Entity } from "./Entity"; import { BoxBufferGeometry, Object3D } from "three"; +import { Box3Ext } from "../../Geometry/Box"; import { RenderType } from "../../GraphicsSystem/RenderType"; +import { Entity } from "./Entity"; export declare function GetBoxGeoBufferGeometry(): BoxBufferGeometry; export declare class BoxSolid extends Entity { private _length; @@ -9,8 +10,16 @@ export declare class BoxSolid extends Entity { OnlyRenderType: boolean; private _opacity; constructor(_length?: number, _width?: number, _height?: number); + get Length(): number; + get Width(): number; + get Height(): number; + set Length(v: number); + set Width(v: number); + set Height(v: number); set Opacity(o: number); InitDrawObject(renderType?: RenderType): Object3D; UpdateDrawObject(type: RenderType, obj: Object3D): void; + get BoundingBoxInOCS(): Box3Ext; + get BoundingBox(): Box3Ext; } //# sourceMappingURL=BoxSolid.d.ts.map \ No newline at end of file diff --git a/types/DatabaseServices/Entity/BoxSolid.d.ts.map b/types/DatabaseServices/Entity/BoxSolid.d.ts.map index 0144a08..0a83332 100644 --- a/types/DatabaseServices/Entity/BoxSolid.d.ts.map +++ b/types/DatabaseServices/Entity/BoxSolid.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"BoxSolid.d.ts","sourceRoot":"","sources":["../../../../src/DatabaseServices/Entity/BoxSolid.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,iBAAiB,EAAQ,QAAQ,EAA8B,MAAM,OAAO,CAAC;AAEtF,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAI7D,wBAAgB,uBAAuB,sBAKtC;AAED,qBACa,QAAS,SAAQ,MAAM;IAIpB,OAAO,CAAC,OAAO;IAAM,OAAO,CAAC,MAAM;IAAM,OAAO,CAAC,OAAO;IAFpE,cAAc,UAAQ;IACtB,OAAO,CAAC,QAAQ,CAAO;gBACH,OAAO,SAAI,EAAU,MAAM,SAAI,EAAU,OAAO,SAAI;IAIxE,IAAI,OAAO,CAAC,CAAC,EAAE,MAAM,EAQpB;IACD,cAAc,CAAC,UAAU,GAAE,UAAiC;IAS5D,gBAAgB,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,QAAQ;CAOnD"} \ No newline at end of file +{"version":3,"file":"BoxSolid.d.ts","sourceRoot":"","sources":["../../../../src/DatabaseServices/Entity/BoxSolid.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAA2B,QAAQ,EAAW,MAAM,OAAO,CAAC;AAEtF,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAE7C,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAE7D,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAIlC,wBAAgB,uBAAuB,sBAKtC;AAED,qBACa,QAAS,SAAQ,MAAM;IAIpB,OAAO,CAAC,OAAO;IAAM,OAAO,CAAC,MAAM;IAAM,OAAO,CAAC,OAAO;IAFpE,cAAc,UAAQ;IACtB,OAAO,CAAC,QAAQ,CAAO;gBACH,OAAO,SAAI,EAAU,MAAM,SAAI,EAAU,OAAO,SAAI;IAKxE,IAAI,MAAM,IAII,MAAM,CAJiB;IACrC,IAAI,KAAK,IAYI,MAAM,CAZgB;IACnC,IAAI,MAAM,IAqBI,MAAM,CArBiB;IAErC,IAAI,MAAM,CAAC,CAAC,EAAE,MAAM,EAQnB;IACD,IAAI,KAAK,CAAC,CAAC,EAAE,MAAM,EAQlB;IAED,IAAI,MAAM,CAAC,CAAC,EAAE,MAAM,EAQnB;IAED,IAAI,OAAO,CAAC,CAAC,EAAE,MAAM,EAQpB;IACD,cAAc,CAAC,UAAU,GAAE,UAAiC;IAS5D,gBAAgB,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,QAAQ;IAQhD,IAAI,gBAAgB,YAGnB;IAED,IAAI,WAAW,YAGd;CACJ"} \ No newline at end of file diff --git a/types/DatabaseServices/Entity/Entity.d.ts b/types/DatabaseServices/Entity/Entity.d.ts index 23db1a9..985a459 100644 --- a/types/DatabaseServices/Entity/Entity.d.ts +++ b/types/DatabaseServices/Entity/Entity.d.ts @@ -26,9 +26,10 @@ export declare class Entity extends CADObject { protected _Matrix: Matrix4; protected _SpaceOCS: Matrix4; get CacheDrawObject(): Map; + get SpaceCSNoClone(): Matrix4; get SpaceOCS(): Matrix4; - get SpaceOCSInv(): Matrix4; set SpaceOCS(m: Matrix4); + get SpaceOCSInv(): Matrix4; protected _Visible: boolean; GroupId: ObjectId; Template: ObjectId; diff --git a/types/DatabaseServices/Entity/Entity.d.ts.map b/types/DatabaseServices/Entity/Entity.d.ts.map index 45919b5..f2342ab 100644 --- a/types/DatabaseServices/Entity/Entity.d.ts.map +++ b/types/DatabaseServices/Entity/Entity.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"Entity.d.ts","sourceRoot":"","sources":["../../../../src/DatabaseServices/Entity/Entity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,oBAAoB,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAK5F,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAE7C,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,oCAAoC,CAAC;AACrE,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAG7D,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAGvC;;GAEG;AACH,qBACa,MAAO,SAAQ,SAAS;IAGjC,aAAa,UAAS;IAEtB;;OAEG;IACH,SAAS,CAAC,cAAc,UAAS;IACjC,SAAS,CAAC,iBAAiB,UAAS;IACpC,SAAS,CAAC,sBAAsB,UAAS;IAEzC,SAAS,CAAC,gBAAgB,4BAAmC;IAE7D,SAAS,CAAC,WAAW,EAAE,QAAQ,CAAC;IAChC,SAAS,CAAC,MAAM,EAAE,MAAM,CAAK;IAG7B,SAAS,CAAC,OAAO,UAAiB;IAGlC,SAAS,CAAC,SAAS,EAAE,OAAO,CAAiB;IAC7C,IAAI,eAAe,8BAAoC;IACvD,IAAI,QAAQ,IAQI,OAAO,CALtB;IACD,IAAI,WAAW,YAGd;IACD,IAAI,QAAQ,CAAC,CAAC,EAAE,OAAO,EAItB;IAED,SAAS,CAAC,QAAQ,UAAQ;IAEd,OAAO,EAAE,QAAQ,CAAC;IAClB,QAAQ,EAAE,QAAQ,CAAC;IAEnB,mBAAmB,EAAE,QAAQ,EAAE,CAAM;IAEjD;;;OAGG;IACH,cAAc,EAAE,UAAU,CAAmB;IAC7C,UAAU,UAAQ;IAClB,gBAAgB,EAAE,UAAU,CAAC;IAC7B,IAAI,QAAQ,CAAC,UAAU,EAAE,QAAQ,EAiBhC;IAED,IAAI,QAAQ,IAnBa,QAAQ,CAsBhC;IAED,IAAI,UAAU,CAAC,KAAK,EAAE,MAAM,EAgB3B;IACD,IAAI,UAAU,IAAI,MAAM,CAGvB;IACD;;OAEG;IACH,OAAO,IAAI,MAAM,EAAE;IAEnB;;OAEG;IACH,IAAI,WAAW,yBAKd;IAED;;OAEG;IACH,IAAI,gBAAgB,IAAI,OAAO,CAO9B;IAED,mBAAmB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO;IAK1C,IAAI,oBAAoB,IAAI,OAAO,CAGlC;IAED,IAAI,GAAG,IAAI,OAAO,CAGjB;IAED,IAAI,UAAU,YAGb;IAGD,IAAI,GAAG,CAAC,IAAI,EAAE,OAAO,EAGpB;IACD,IAAI,MAAM,IAAI,OAAO,CAGpB;IACD,IAAI,QAAQ,IAAI,OAAO,CAGtB;IAED,IAAI,CAAC,CAAC,EAAE,IAAI;IAiBZ,IAAI,QAAQ,CAAC,EAAE,EAAE,OAAO,EAcvB;IAED,IAAI,CAAC,IACI,MAAM,CAD8B;IAC7C,IAAI,CAAC,CAAC,CAAC,EAAE,MAAM,EAId;IAGD,EAAE;IAUF,iBAAiB;IAWjB,IAAI,MAAM,IAAI,OAAO,CAGpB;IAED;;MAEE;IACF,WAAW,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO;IAK/B;;OAEG;IACH,wBAAwB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAS7C,SAAS;IAaT,cAAc;IAYd,IAAI,YAAY,YAGf;IAED,SAAS,KAAK,UAAU,YAIvB;IAED,SAAS,KAAK,aAAa,YAG1B;IAED,WAAW,EAAE,QAAQ,CAAC;IAEtB,IAAI,UAAU,aAiBb;IAED,IAAI,SAAS,aAMZ;IAED,gBAAgB;IAahB,SAAS,CAAC,cAAc,EAAE,UAAU,CAAC;IACrC,gBAAgB,CAAC,IAAI,EAAE,UAAU;IAYjC,2BAA2B,CAAC,UAAU,GAAE,UAAiC,GAAG,QAAQ;IA4CpF;;OAEG;IACH,SAAS,CAAC,cAAc,CAAC,UAAU,GAAE,UAAiC,GAAG,QAAQ;IAMjF,iBAAiB,SAAK;IAEtB;;OAEG;IAEH,MAAM,CAAC,IAAI,aAAiB;IAc5B,kBAAkB;IAElB,WAAW;IAiDX;;OAEG;IACH,gBAAgB,CAAC,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE,QAAQ;IAK/C;;OAEG;IACH,wBAAwB,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,QAAQ,EAAE,QAAQ,CAAC,EAAE,QAAQ;IAK7E,SAAS,KAAK,YAAY,6DAKzB;IAED;;OAEG;IACH,iBAAiB,CAAC,KAAK,SAAI;IAG3B,kBAAkB;IAKlB,IAAI,OAAO,IAII,OAAO,CADrB;IACD,IAAI,OAAO,CAAC,CAAC,EAAE,OAAO,EAQrB;IAED,OAAO,KAAK,SAAS,GAGpB;IAED,aAAa;IAYb,OAAO;IAQP,KAAK,CAAC,OAAO,GAAE,OAAc;IAW7B,UAAU,CAAC,OAAO,EAAE,OAAO;IAK3B,MAAM,CAAC,GAAG,UAAe;IACzB,MAAM,CAAC,GAAG,UAAe;IACzB,MAAM,CAAC,GAAG,UAAe;IACzB;;;QAGI;IACJ,WAAW,CAAC,CAAC,EAAE,OAAO,GAAG,IAAI;IAsB7B,SAAS,CAAC,gBAAgB,CAAC,CAAC,EAAE,OAAO,GAAG,IAAI;IAI5C,SAAS,CAAC,iBAAiB,CAAC,CAAC,EAAE,OAAO,GAAG,IAAI;IAK7C;;;;;;;MAOE;IACF,mBAAmB,CACf,QAAQ,EAAE,cAAc,EACxB,SAAS,EAAE,OAAO,EAClB,SAAS,EAAE,OAAO,EAClB,SAAS,CAAC,EAAE,OAAO,GACpB,OAAO,EAAE;IAKZ,aAAa,IAAI,OAAO,EAAE;IAK1B,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,OAAO;IAKhD,gBAAgB,IAAI,KAAK,CAAC,OAAO,CAAC;IAKlC;;;;OAIG;IACH,iBAAiB,CAAC,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,OAAO;IAIxD,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,GAAG,OAAO,EAAE;IAIxD,KAAK,IAAI,IAAI;IAStB,eAAe,CAAC,IAAI,EAAE,IAAI;IAkB1B,MAAM,CAAC,eAAe,EAAE,OAAO,CAAC;IAChC,eAAe,EAAE,OAAO,CAAC;IAEzB,IAAI,WAAW,YAGd;IAED;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,QAAQ;IASvB,SAAS,CAAC,SAAS,CAAC,IAAI,EAAE,QAAQ;IAiClC,SAAS,CAAC,IAAI,EAAE,QAAQ;IAiBxB,gBAAgB,CAAC,QAAQ,EAAE,SAAS;IAO3B,QAAQ,CAAC,GAAG,EAAE,SAAS;CASnC;AAED,qBACa,wBAAyB,YAAW,UAAU;IAEpC,KAAK,EAAE,MAAM;gBAAb,KAAK,EAAE,MAAM;IAChC,QAAQ,CAAC,IAAI,EAAE,QAAQ,GAAG,IAAI;IAK9B,SAAS,CAAC,IAAI,EAAE,QAAQ,GAAG,IAAI;CAKlC"} \ No newline at end of file +{"version":3,"file":"Entity.d.ts","sourceRoot":"","sources":["../../../../src/DatabaseServices/Entity/Entity.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/types/DatabaseServices/FileServer.d.ts b/types/DatabaseServices/FileServer.d.ts index 46e1f37..8e73a52 100644 --- a/types/DatabaseServices/FileServer.d.ts +++ b/types/DatabaseServices/FileServer.d.ts @@ -6,6 +6,7 @@ export interface IFileInfo { name?: string; logo?: string; file?: string; + props?: string; zip_type?: "gzip"; update_date?: string; code?: string; @@ -40,6 +41,7 @@ export declare class FileServer extends Singleton { UploadFile(fileInfo: IFileInfo, rawFile?: string): Promise; UpdateFile(fileInfo: IFileInfo, rawFile?: string): Promise; Download(fid: string): Promise; + DownloadTemplate(fid: string): Promise; private SaveCurrentFileInfo; Clear(): void; } diff --git a/types/DatabaseServices/FileServer.d.ts.map b/types/DatabaseServices/FileServer.d.ts.map index 0d96ecc..76e0378 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":"AAQA,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAQhD,OAAO,EAAE,eAAe,EAAE,MAAM,2CAA2C,CAAC;AAK5E,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;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACtB;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;IACvB,gBAAgB,EAAE,MAAM,CAAM;;IAqBxB,UAAU;IA4BV,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAOpD,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAuFtD,YAAY,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;IAY1C;;;;;OAKG;IACG,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC;IAiC3D,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS;IAW1C,UAAU,CAAC,QAAQ,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,MAAM;IAyBhD,UAAU,CAAC,QAAQ,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,MAAM;IAkBhD,QAAQ,CAAC,GAAG,EAAE,MAAM;IAQ1B,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":"AAQA,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAQhD,OAAO,EAAE,eAAe,EAAE,MAAM,2CAA2C,CAAC;AAK5E,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,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACtB;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;IACvB,gBAAgB,EAAE,MAAM,CAAM;;IAqBxB,UAAU;IA4BV,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAOpD,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAuFtD,YAAY,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;IAY1C;;;;;OAKG;IACG,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC;IAiC3D,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS;IAW1C,UAAU,CAAC,QAAQ,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,MAAM;IAyBhD,UAAU,CAAC,QAAQ,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,MAAM;IAkBhD,QAAQ,CAAC,GAAG,EAAE,MAAM;IASpB,gBAAgB,CAAC,GAAG,EAAE,MAAM;IAkBlC,OAAO,CAAC,mBAAmB;IAM3B,KAAK;CAMR"} \ No newline at end of file diff --git a/types/DatabaseServices/Hardware/HardwareCompositeEntity.d.ts.map b/types/DatabaseServices/Hardware/HardwareCompositeEntity.d.ts.map index f748f71..1c0fc13 100644 --- a/types/DatabaseServices/Hardware/HardwareCompositeEntity.d.ts.map +++ b/types/DatabaseServices/Hardware/HardwareCompositeEntity.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"HardwareCompositeEntity.d.ts","sourceRoot":"","sources":["../../../../src/DatabaseServices/Hardware/HardwareCompositeEntity.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,oDAAoD,CAAC;AAGzF,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvC,qBACa,uBAAwB,SAAQ,eAAe;IAE5C,cAAc,EAAE,mBAAmB,CAAuC;IAC1E,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAM;IAClC,eAAe,EAAE,QAAQ,EAAE,CAAM;IACjC,iBAAiB,EAAE,QAAQ,EAAE,CAAM;IAC/C;;;;;OAKG;IACH,YAAY,CAAC,WAAW,GAAE,OAAe,EAAE,WAAW,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,OAAO;IAmB/E,SAAS,CAAC,SAAS,CAAC,IAAI,EAAE,QAAQ;IAuDlC,SAAS,CAAC,IAAI,EAAE,QAAQ;CAuC3B"} \ No newline at end of file +{"version":3,"file":"HardwareCompositeEntity.d.ts","sourceRoot":"","sources":["../../../../src/DatabaseServices/Hardware/HardwareCompositeEntity.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,oDAAoD,CAAC;AAGzF,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvC,qBACa,uBAAwB,SAAQ,eAAe;IAEtC,cAAc,EAAE,mBAAmB,CAAuC;IAChF,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAM;IAClC,eAAe,EAAE,QAAQ,EAAE,CAAM;IACjC,iBAAiB,EAAE,QAAQ,EAAE,CAAM;IAC/C;;;;;OAKG;IACH,YAAY,CAAC,WAAW,GAAE,OAAe,EAAE,WAAW,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,OAAO;IAmB/E,SAAS,CAAC,SAAS,CAAC,IAAI,EAAE,QAAQ;IAuDlC,SAAS,CAAC,IAAI,EAAE,QAAQ;CAuC3B"} \ No newline at end of file diff --git a/types/DatabaseServices/Hardware/HardwareTopline.d.ts.map b/types/DatabaseServices/Hardware/HardwareTopline.d.ts.map index cce0c67..f106bac 100644 --- a/types/DatabaseServices/Hardware/HardwareTopline.d.ts.map +++ b/types/DatabaseServices/Hardware/HardwareTopline.d.ts.map @@ -1 +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,IAAI,KAAK,EAAE,CAmJ3B;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 +{"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;IAEzB,cAAc,EAAE,cAAc,CAAqC;IACzE,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,IAAI,KAAK,EAAE,CAmJ3B;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/Room/Entity/Wall/RoomWallArc.d.ts.map b/types/DatabaseServices/Room/Entity/Wall/RoomWallArc.d.ts.map index cb5784f..6b664e9 100644 --- a/types/DatabaseServices/Room/Entity/Wall/RoomWallArc.d.ts.map +++ b/types/DatabaseServices/Room/Entity/Wall/RoomWallArc.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"RoomWallArc.d.ts","sourceRoot":"","sources":["../../../../../../src/DatabaseServices/Room/Entity/Wall/RoomWallArc.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAS,QAAQ,EAA0C,OAAO,EAAQ,QAAQ,EAAuB,OAAO,EAAE,MAAM,OAAO,CAAC;AAIvJ,OAAO,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AAKnE,OAAO,EAAE,UAAU,EAAE,MAAM,uCAAuC,CAAC;AAEnE,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,GAAG,EAAE,MAAM,qBAAqB,CAAC;AAE1C,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAG5C,OAAO,EAAiC,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAI7E,qBACa,WAAY,SAAQ,YAAY;IAGrC,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,WAAW;IACnB,OAAO,CAAC,SAAS;IACjB;;OAEG;IACH,OAAO,CAAC,UAAU;gBAPV,OAAO,GAAE,OAAuB,EAChC,OAAO,SAAM,EACb,WAAW,SAAM,EACjB,SAAS,SAAM;IACvB;;OAEG;IACK,UAAU,UAAO,EACzB,UAAU,SAAM;IAYpB,IAAa,eAAe,IAAI,GAAG,GAAG,IAAI,CAazC;IAED,mBAAmB,CACf,QAAQ,EAAE,cAAc,EACxB,SAAS,EAAE,OAAO,EAClB,SAAS,EAAE,OAAO,EAClB,SAAS,EAAE,OAAO,GACnB,OAAO,EAAE;IAiCZ,aAAa,IAAI,KAAK,CAAC,OAAO,CAAC;IAe/B,cAAc,CAAC,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,OAAO;IAUrD,gBAAgB,IAAI,OAAO,EAAE;IAI7B,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,OAAO,GAAG,IAAI;IAQ1D,kBAAkB;IAWlB,OAAO,CAAC,aAAa,CAAiB;IACtC,OAAO,CAAC,aAAa,CAAW;IAChC,IAAI,YAAY,mBA0If;IACD,IAAI,YAAY,aA8af;IAED,cAAc,CAAC,UAAU,GAAE,UAAiC,GAAG,QAAQ;IAgCvE;;;;OAIG;IACH,gBAAgB,CAAC,UAAU,EAAE,UAAU,EAAE,GAAG,EAAE,QAAQ;cAoDnC,SAAS,CAAC,IAAI,EAAE,QAAQ;IAWlC,SAAS,CAAC,IAAI,EAAE,QAAQ;CAUpC;AA+BD,MAAM,WAAW,WAAY,SAAQ,YAAY,EAAE,GAAG;CAAI"} \ No newline at end of file +{"version":3,"file":"RoomWallArc.d.ts","sourceRoot":"","sources":["../../../../../../src/DatabaseServices/Room/Entity/Wall/RoomWallArc.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAS,QAAQ,EAA0C,OAAO,EAAQ,QAAQ,EAAuB,OAAO,EAAE,MAAM,OAAO,CAAC;AAIvJ,OAAO,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AAKnE,OAAO,EAAE,UAAU,EAAE,MAAM,uCAAuC,CAAC;AAEnE,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,GAAG,EAAE,MAAM,qBAAqB,CAAC;AAE1C,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAG5C,OAAO,EAAsD,YAAY,EAAgB,MAAM,gBAAgB,CAAC;AAIhH,qBACa,WAAY,SAAQ,YAAY;IAGrC,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,WAAW;IACnB,OAAO,CAAC,SAAS;IACjB;;OAEG;IACH,OAAO,CAAC,UAAU;gBAPV,OAAO,GAAE,OAAuB,EAChC,OAAO,SAAM,EACb,WAAW,SAAM,EACjB,SAAS,SAAM;IACvB;;OAEG;IACK,UAAU,UAAO,EACzB,UAAU,SAAM;IAYpB,IAAa,eAAe,IAAI,GAAG,GAAG,IAAI,CAazC;IAED,mBAAmB,CACf,QAAQ,EAAE,cAAc,EACxB,SAAS,EAAE,OAAO,EAClB,SAAS,EAAE,OAAO,EAClB,SAAS,EAAE,OAAO,GACnB,OAAO,EAAE;IAiCZ,aAAa,IAAI,KAAK,CAAC,OAAO,CAAC;IAe/B,cAAc,CAAC,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,OAAO;IAUrD,gBAAgB,IAAI,OAAO,EAAE;IAI7B,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,OAAO,GAAG,IAAI;IAQ1D,kBAAkB;IAWlB,OAAO,CAAC,aAAa,CAAiB;IACtC,OAAO,CAAC,aAAa,CAAW;IAChC,IAAI,YAAY,mBA0If;IACD,IAAI,YAAY,aAwbf;IAED,cAAc,CAAC,UAAU,GAAE,UAAiC,GAAG,QAAQ;IAgCvE;;;;OAIG;IACH,gBAAgB,CAAC,UAAU,EAAE,UAAU,EAAE,GAAG,EAAE,QAAQ;cAoDnC,SAAS,CAAC,IAAI,EAAE,QAAQ;IAWlC,SAAS,CAAC,IAAI,EAAE,QAAQ;CAUpC;AA+BD,MAAM,WAAW,WAAY,SAAQ,YAAY,EAAE,GAAG;CAAI"} \ No newline at end of file diff --git a/types/DatabaseServices/Room/Entity/Wall/RoomWallLine.d.ts.map b/types/DatabaseServices/Room/Entity/Wall/RoomWallLine.d.ts.map index 6f48533..c0616e5 100644 --- a/types/DatabaseServices/Room/Entity/Wall/RoomWallLine.d.ts.map +++ b/types/DatabaseServices/Room/Entity/Wall/RoomWallLine.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"RoomWallLine.d.ts","sourceRoot":"","sources":["../../../../../../src/DatabaseServices/Room/Entity/Wall/RoomWallLine.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,cAAc,EAAS,QAAQ,EAA0C,OAAO,EAAQ,QAAQ,EAAuB,OAAO,EAAE,MAAM,OAAO,CAAC;AAK7J,OAAO,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AACnE,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAGnD,OAAO,EAAE,UAAU,EAAE,MAAM,uCAAuC,CAAC;AAGnE,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAE7C,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAE5C,OAAO,EAAe,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAM3D,qBACa,YAAa,SAAQ,YAAY;IAG9B,OAAO,CAAC,WAAW;IAC3B,OAAO,CAAC,SAAS;gBADD,WAAW,UAAc,EACjC,SAAS,UAAc,EAC/B,UAAU,SAAM;IAOpB,iBAAiB;IAgBjB,IAAI,UAAU,IAAI,OAAO,CAGxB;IAED,IAAI,QAAQ,IAAI,OAAO,CAGtB;IAED,IAAI,UAAU,CAAC,CAAC,EAAE,OAAO,EASxB;IAED,IAAI,QAAQ,CAAC,CAAC,EAAE,OAAO,EAStB;IAED,OAAO,IAAI,IAAI;IAQf,IAAa,eAAe,IAAI,IAAI,CAKnC;IAED,IAAI,WAAW,IAAI,IAAI,CAGtB;IAED,IAAI,gBAAgB,IAAI,OAAO,CAkB9B;IAED,mBAAmB,CACf,QAAQ,EAAE,cAAc,EACxB,SAAS,EAAE,OAAO,EAClB,SAAS,EAAE,OAAO,EAClB,SAAS,EAAE,OAAO,GACnB,OAAO,EAAE;IA8CZ,aAAa,IAAI,OAAO,EAAE;IAa1B,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,OAAO;IA2B7C,gBAAgB,IAAI,OAAO,EAAE;IAI7B,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,OAAO;IAkBnD,kBAAkB;IAWlB,OAAO,CAAC,aAAa,CAAiB;IACtC,IAAI,YAAY,mBA8Ff;IAED,OAAO,CAAC,aAAa,CAAW;IAChC,IAAI,YAAY,aAoRf;IAGD,cAAc,CAAC,UAAU,GAAE,UAAiC,GAAG,QAAQ;IA+BvE;;;;OAIG;IACH,gBAAgB,CAAC,UAAU,EAAE,UAAU,EAAE,GAAG,EAAE,QAAQ;cA8CnC,SAAS,CAAC,IAAI,EAAE,QAAQ;IASlC,SAAS,CAAC,IAAI,EAAE,QAAQ;CASpC"} \ No newline at end of file +{"version":3,"file":"RoomWallLine.d.ts","sourceRoot":"","sources":["../../../../../../src/DatabaseServices/Room/Entity/Wall/RoomWallLine.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,cAAc,EAAS,QAAQ,EAA0C,OAAO,EAAQ,QAAQ,EAAuB,OAAO,EAAE,MAAM,OAAO,CAAC;AAK7J,OAAO,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AACnE,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAGnD,OAAO,EAAE,UAAU,EAAE,MAAM,uCAAuC,CAAC;AAGnE,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAE7C,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAE5C,OAAO,EAAoC,YAAY,EAAgB,MAAM,gBAAgB,CAAC;AAM9F,qBACa,YAAa,SAAQ,YAAY;IAG9B,OAAO,CAAC,WAAW;IAC3B,OAAO,CAAC,SAAS;gBADD,WAAW,UAAc,EACjC,SAAS,UAAc,EAC/B,UAAU,SAAM;IAOpB,iBAAiB;IAgBjB,IAAI,UAAU,IAAI,OAAO,CAGxB;IAED,IAAI,QAAQ,IAAI,OAAO,CAGtB;IAED,IAAI,UAAU,CAAC,CAAC,EAAE,OAAO,EASxB;IAED,IAAI,QAAQ,CAAC,CAAC,EAAE,OAAO,EAStB;IAED,OAAO,IAAI,IAAI;IAQf,IAAa,eAAe,IAAI,IAAI,CAKnC;IAED,IAAI,WAAW,IAAI,IAAI,CAGtB;IAED,IAAI,gBAAgB,IAAI,OAAO,CAkB9B;IAED,mBAAmB,CACf,QAAQ,EAAE,cAAc,EACxB,SAAS,EAAE,OAAO,EAClB,SAAS,EAAE,OAAO,EAClB,SAAS,EAAE,OAAO,GACnB,OAAO,EAAE;IA8CZ,aAAa,IAAI,OAAO,EAAE;IAa1B,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,OAAO;IA2B7C,gBAAgB,IAAI,OAAO,EAAE;IAI7B,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,OAAO;IAkBnD,kBAAkB;IAWlB,OAAO,CAAC,aAAa,CAAiB;IACtC,IAAI,YAAY,mBA8Ff;IAED,OAAO,CAAC,aAAa,CAAW;IAChC,IAAI,YAAY,aA8Rf;IAGD,cAAc,CAAC,UAAU,GAAE,UAAiC,GAAG,QAAQ;IA+BvE;;;;OAIG;IACH,gBAAgB,CAAC,UAAU,EAAE,UAAU,EAAE,GAAG,EAAE,QAAQ;cA8CnC,SAAS,CAAC,IAAI,EAAE,QAAQ;IASlC,SAAS,CAAC,IAAI,EAAE,QAAQ;CASpC"} \ No newline at end of file diff --git a/types/DatabaseServices/Room/ParseService/RoomParseReactor.d.ts.map b/types/DatabaseServices/Room/ParseService/RoomParseReactor.d.ts.map index f7d4888..8351f39 100644 --- a/types/DatabaseServices/Room/ParseService/RoomParseReactor.d.ts.map +++ b/types/DatabaseServices/Room/ParseService/RoomParseReactor.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"RoomParseReactor.d.ts","sourceRoot":"","sources":["../../../../../src/DatabaseServices/Room/ParseService/RoomParseReactor.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,0CAA0C,CAAC;AAuD9E;;;;GAIG;AACH,qBAAa,gBAAgB;IAEb,OAAO,CAAC,GAAG;gBAAH,GAAG,EAAE,kBAAkB;CA+D9C"} \ No newline at end of file +{"version":3,"file":"RoomParseReactor.d.ts","sourceRoot":"","sources":["../../../../../src/DatabaseServices/Room/ParseService/RoomParseReactor.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,0CAA0C,CAAC;AAwD9E;;;;GAIG;AACH,qBAAa,gBAAgB;IAEb,OAAO,CAAC,GAAG;gBAAH,GAAG,EAAE,kBAAkB;CA+D9C"} \ No newline at end of file diff --git a/types/DatabaseServices/Room/ParseService/RoomRegionParse.d.ts.map b/types/DatabaseServices/Room/ParseService/RoomRegionParse.d.ts.map index 52c6919..59fdd23 100644 --- a/types/DatabaseServices/Room/ParseService/RoomRegionParse.d.ts.map +++ b/types/DatabaseServices/Room/ParseService/RoomRegionParse.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"RoomRegionParse.d.ts","sourceRoot":"","sources":["../../../../../src/DatabaseServices/Room/ParseService/RoomRegionParse.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE1C,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAIjD,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AACzD,OAAO,EAAuB,YAAY,EAAgB,MAAM,6BAA6B,CAAC;AAE9F,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAcxD;;GAEG;AACH,qBAAa,eAAe;IASZ,OAAO,CAAC,SAAS;IAP7B,EAAE,EAAE,iBAAiB,CAAC;IACtB,KAAK,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC;IACvB,OAAO,EAAE,UAAU,EAAE,CAAC;IAEtB;;OAEG;gBACiB,SAAS,EAAE,QAAQ;IAUvC,EAAE,CAAC,KAAK,EAAE,YAAY,EAAE;IA+LxB,GAAG;CAaN"} \ No newline at end of file +{"version":3,"file":"RoomRegionParse.d.ts","sourceRoot":"","sources":["../../../../../src/DatabaseServices/Room/ParseService/RoomRegionParse.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE1C,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAIjD,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AACzD,OAAO,EAAuB,YAAY,EAAgB,MAAM,6BAA6B,CAAC;AAE9F,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAcxD;;GAEG;AACH,qBAAa,eAAe;IASZ,OAAO,CAAC,SAAS;IAP7B,EAAE,EAAE,iBAAiB,CAAC;IACtB,KAAK,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC;IACvB,OAAO,EAAE,UAAU,EAAE,CAAC;IAEtB;;OAEG;gBACiB,SAAS,EAAE,QAAQ;IAUvC,EAAE,CAAC,KAAK,EAAE,YAAY,EAAE;IAgMxB,GAAG;CAaN"} \ No newline at end of file diff --git a/types/DatabaseServices/Template/Positioning/PositioningClampSpace.d.ts.map b/types/DatabaseServices/Template/Positioning/PositioningClampSpace.d.ts.map index 461deb2..ca761ee 100644 --- a/types/DatabaseServices/Template/Positioning/PositioningClampSpace.d.ts.map +++ b/types/DatabaseServices/Template/Positioning/PositioningClampSpace.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"PositioningClampSpace.d.ts","sourceRoot":"","sources":["../../../../../src/DatabaseServices/Template/Positioning/PositioningClampSpace.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,8CAA8C,CAAC;AAC/E,OAAO,EAAE,kBAAkB,EAAE,MAAM,iDAAiD,CAAC;AAGrF,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE1C,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAE9D,qBACa,qBAAsB,SAAQ,WAAW;IAEtC,OAAO,EAAE,QAAQ,EAAE,CAAM;IAGzB,cAAc,EAAE,MAAM,EAAE,CAAa;IACrC,UAAU,SAAO;IAE7B,cAAc,CAAC,KAAK,EAAE,eAAe;IAQrC,WAAW,EAAE,kBAAkB,CAAC;IAChC;;MAEE;IACI,WAAW,CAAC,KAAK,CAAC,EAAE,gBAAgB;IAyB1C,QAAQ,CAAC,IAAI,EAAE,QAAQ,GAAG,IAAI;IAe9B,SAAS,CAAC,IAAI,EAAE,QAAQ,GAAG,IAAI;CAYlC"} \ No newline at end of file +{"version":3,"file":"PositioningClampSpace.d.ts","sourceRoot":"","sources":["../../../../../src/DatabaseServices/Template/Positioning/PositioningClampSpace.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,8CAA8C,CAAC;AAC/E,OAAO,EAAE,kBAAkB,EAAE,MAAM,iDAAiD,CAAC;AAGrF,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE1C,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAE9D,qBACa,qBAAsB,SAAQ,WAAW;IAEtC,OAAO,EAAE,QAAQ,EAAE,CAAM;IAGzB,cAAc,EAAE,MAAM,EAAE,CAAa;IACrC,UAAU,SAAO;IAE7B,cAAc,CAAC,KAAK,EAAE,eAAe;IAQrC,WAAW,EAAE,kBAAkB,CAAC;IAChC;;MAEE;IACI,WAAW,CAAC,KAAK,CAAC,EAAE,gBAAgB;IAyB1C,QAAQ,CAAC,IAAI,EAAE,QAAQ,GAAG,IAAI;IAe9B,SAAS,CAAC,IAAI,EAAE,QAAQ,GAAG,IAAI;CAYlC"} \ No newline at end of file diff --git a/types/DatabaseServices/Template/ProgramTempate/TemplateBoard.d.ts.map b/types/DatabaseServices/Template/ProgramTempate/TemplateBoard.d.ts.map index 078d5c3..4f86b68 100644 --- a/types/DatabaseServices/Template/ProgramTempate/TemplateBoard.d.ts.map +++ b/types/DatabaseServices/Template/ProgramTempate/TemplateBoard.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"TemplateBoard.d.ts","sourceRoot":"","sources":["../../../../../src/DatabaseServices/Template/ProgramTempate/TemplateBoard.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,0CAA0C,CAAC;AACvE,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AAGzF,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEnD;;GAEG;AACH,qBACa,mBAAoB,SAAQ,cAAc;IAGnD,qBAAqB,UAAS;IAC9B,kBAAkB,EAAE,kBAAkB,CAAC;IAE3B,cAAc,SAAK;IAE/B,SAAS,CAAC,OAAO,EAAE,iBAAiB,CAAC;IAMrC,IAAI,MAAM,IAIS,iBAAiB,CADnC;IACD,IAAI,MAAM,CAAC,MAAM,EAAE,iBAAiB,EAKnC;IACD,SAAS,CAAC,gBAAgB,CAAC,KAAK,EAAE,WAAW,GAAG,KAAK,EAAE;IAKvD,KAAK;cAOW,MAAM;IAmEtB,QAAQ,CAAC,IAAI,EAAE,QAAQ;IAMvB,SAAS,CAAC,IAAI,EAAE,QAAQ;CAM3B"} \ No newline at end of file +{"version":3,"file":"TemplateBoard.d.ts","sourceRoot":"","sources":["../../../../../src/DatabaseServices/Template/ProgramTempate/TemplateBoard.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,0CAA0C,CAAC;AACvE,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AAGzF,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAE3C,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEnD;;GAEG;AACH,qBACa,mBAAoB,SAAQ,cAAc;IAGnD,qBAAqB,UAAS;IAC9B,kBAAkB,EAAE,kBAAkB,CAAC;IAE3B,cAAc,SAAK;IAE/B,SAAS,CAAC,OAAO,EAAE,iBAAiB,CAAC;IAMrC,IAAI,MAAM,IAIS,iBAAiB,CADnC;IACD,IAAI,MAAM,CAAC,MAAM,EAAE,iBAAiB,EAKnC;IACD,SAAS,CAAC,gBAAgB,CAAC,KAAK,EAAE,WAAW,GAAG,KAAK,EAAE;IAKvD,KAAK;cAOW,MAAM;IAuEtB,QAAQ,CAAC,IAAI,EAAE,QAAQ;IAMvB,SAAS,CAAC,IAAI,EAAE,QAAQ;CAM3B"} \ No newline at end of file diff --git a/types/DatabaseServices/Template/ProgramTempate/TemplateLeftRightBoardRecord.d.ts.map b/types/DatabaseServices/Template/ProgramTempate/TemplateLeftRightBoardRecord.d.ts.map index 54679ee..8674c04 100644 --- a/types/DatabaseServices/Template/ProgramTempate/TemplateLeftRightBoardRecord.d.ts.map +++ b/types/DatabaseServices/Template/ProgramTempate/TemplateLeftRightBoardRecord.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"TemplateLeftRightBoardRecord.d.ts","sourceRoot":"","sources":["../../../../../src/DatabaseServices/Template/ProgramTempate/TemplateLeftRightBoardRecord.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAI1C,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEnD;;GAEG;AACH,qBACa,4BAA6B,SAAQ,cAAc;;IAO5D,cAAc;cAkBE,MAAM;IAsCtB,QAAQ,CAAC,IAAI,EAAE,QAAQ;CAwB1B"} \ No newline at end of file +{"version":3,"file":"TemplateLeftRightBoardRecord.d.ts","sourceRoot":"","sources":["../../../../../src/DatabaseServices/Template/ProgramTempate/TemplateLeftRightBoardRecord.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAI1C,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEnD;;GAEG;AACH,qBACa,4BAA6B,SAAQ,cAAc;;IAO5D,cAAc;cAkBE,MAAM;IA0CtB,QAAQ,CAAC,IAAI,EAAE,QAAQ;CAwB1B"} \ No newline at end of file diff --git a/types/DatabaseServices/Template/ProgramTempate/TemplateTopBottomBoard.d.ts.map b/types/DatabaseServices/Template/ProgramTempate/TemplateTopBottomBoard.d.ts.map index 039aac6..ea77257 100644 --- a/types/DatabaseServices/Template/ProgramTempate/TemplateTopBottomBoard.d.ts.map +++ b/types/DatabaseServices/Template/ProgramTempate/TemplateTopBottomBoard.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"TemplateTopBottomBoard.d.ts","sourceRoot":"","sources":["../../../../../src/DatabaseServices/Template/ProgramTempate/TemplateTopBottomBoard.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,kBAAkB,EAA4B,aAAa,EAAE,MAAM,kCAAkC,CAAC;AAG/G,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE1C,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEnD,WAAW;AACX,qBACa,sBAAuB,SAAQ,cAAc;IAEtD,OAAO,CAAC,UAAU,CAA+C;IACjE,OAAO,CAAC,aAAa,CAAkD;IACvE,qBAAqB,UAAS;IAC9B,kBAAkB,EAAE,kBAAkB,CAAC;IAC3B,UAAU,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAa;;IAM7D,IAAI,SAAS,IAIS,aAAa,CADlC;IACD,IAAI,SAAS,CAAC,MAAM,EAAE,aAAa,EAKlC;IACD,IAAI,YAAY,IAIS,aAAa,CADrC;IACD,IAAI,YAAY,CAAC,MAAM,EAAE,aAAa,EAIrC;cAQe,MAAM;IAmGtB,OAAO,CAAC,eAAe;IAmBvB,QAAQ,CAAC,IAAI,EAAE,QAAQ;IA0CvB,SAAS,CAAC,IAAI,EAAE,QAAQ;CAuC3B"} \ No newline at end of file +{"version":3,"file":"TemplateTopBottomBoard.d.ts","sourceRoot":"","sources":["../../../../../src/DatabaseServices/Template/ProgramTempate/TemplateTopBottomBoard.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,kBAAkB,EAA4B,aAAa,EAAE,MAAM,kCAAkC,CAAC;AAG/G,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAG1C,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEnD,WAAW;AACX,qBACa,sBAAuB,SAAQ,cAAc;IAEtD,OAAO,CAAC,UAAU,CAA+C;IACjE,OAAO,CAAC,aAAa,CAAkD;IACvE,qBAAqB,UAAS;IAC9B,kBAAkB,EAAE,kBAAkB,CAAC;IAC3B,UAAU,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAa;;IAM7D,IAAI,SAAS,IAIS,aAAa,CADlC;IACD,IAAI,SAAS,CAAC,MAAM,EAAE,aAAa,EAKlC;IACD,IAAI,YAAY,IAIS,aAAa,CADrC;IACD,IAAI,YAAY,CAAC,MAAM,EAAE,aAAa,EAIrC;cAQe,MAAM;IAwGtB,OAAO,CAAC,eAAe;IAmBvB,QAAQ,CAAC,IAAI,EAAE,QAAQ;IA0CvB,SAAS,CAAC,IAAI,EAAE,QAAQ;CAuC3B"} \ No newline at end of file diff --git a/types/DatabaseServices/Template/TempateUtils.d.ts.map b/types/DatabaseServices/Template/TempateUtils.d.ts.map index 37b874f..83f4c78 100644 --- a/types/DatabaseServices/Template/TempateUtils.d.ts.map +++ b/types/DatabaseServices/Template/TempateUtils.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"TempateUtils.d.ts","sourceRoot":"","sources":["../../../../src/DatabaseServices/Template/TempateUtils.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"TempateUtils.d.ts","sourceRoot":"","sources":["../../../../src/DatabaseServices/Template/TempateUtils.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/types/DatabaseServices/Template/TemplateRecord.d.ts.map b/types/DatabaseServices/Template/TemplateRecord.d.ts.map index 2ad5309..8e11846 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/DatabaseServices/Template/TemplateType.d.ts b/types/DatabaseServices/Template/TemplateType.d.ts index c53156a..46aad1e 100644 --- a/types/DatabaseServices/Template/TemplateType.d.ts +++ b/types/DatabaseServices/Template/TemplateType.d.ts @@ -9,7 +9,11 @@ export declare enum TemplateType { Expanded = 8, Hidden = 16, HiddenChildren = 32, - Sign = 64 + Sign = 64, + Door = 128, + Drawer = 256, + Handle = 512, + Hinge = 1024 } export declare enum TemplateSplitType { None = -1, diff --git a/types/DatabaseServices/Template/TemplateType.d.ts.map b/types/DatabaseServices/Template/TemplateType.d.ts.map index 961ffb8..d838935 100644 --- a/types/DatabaseServices/Template/TemplateType.d.ts.map +++ b/types/DatabaseServices/Template/TemplateType.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"TemplateType.d.ts","sourceRoot":"","sources":["../../../../src/DatabaseServices/Template/TemplateType.ts"],"names":[],"mappings":"AACA;;GAEG;AACH,oBAAY,YAAY;IAGpB,KAAK,IAAI;IAET,IAAI,IAAI;IAER,KAAK,IAAI;IAET,KAAK,IAAI;IAET,QAAQ,IAAI;IAEZ,MAAM,KAAK;IACX,cAAc,KAAK;IAEnB,IAAI,KAAK;CACZ;AAED,oBAAY,iBAAiB;IAEzB,IAAI,KAAK;IACT,CAAC,IAAI;IACL,CAAC,IAAI;IACL,CAAC,IAAI;CACR"} \ No newline at end of file +{"version":3,"file":"TemplateType.d.ts","sourceRoot":"","sources":["../../../../src/DatabaseServices/Template/TemplateType.ts"],"names":[],"mappings":"AACA;;GAEG;AACH,oBAAY,YAAY;IAGpB,KAAK,IAAI;IAET,IAAI,IAAI;IAER,KAAK,IAAI;IAET,KAAK,IAAI;IAET,QAAQ,IAAI;IAEZ,MAAM,KAAK;IACX,cAAc,KAAK;IAEnB,IAAI,KAAK;IAGT,IAAI,MAAM;IACV,MAAM,MAAM;IACZ,MAAM,MAAM;IACZ,KAAK,OAAO;CACf;AAcD,oBAAY,iBAAiB;IAEzB,IAAI,KAAK;IACT,CAAC,IAAI;IACL,CAAC,IAAI;IACL,CAAC,IAAI;CACR"} \ No newline at end of file diff --git a/types/DatabaseServices/ViewportEntity.d.ts.map b/types/DatabaseServices/ViewportEntity.d.ts.map index 4365847..ba7a687 100644 --- a/types/DatabaseServices/ViewportEntity.d.ts.map +++ b/types/DatabaseServices/ViewportEntity.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"ViewportEntity.d.ts","sourceRoot":"","sources":["../../../src/DatabaseServices/ViewportEntity.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"ViewportEntity.d.ts","sourceRoot":"","sources":["../../../src/DatabaseServices/ViewportEntity.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/types/Editor/CommandMachine.d.ts.map b/types/Editor/CommandMachine.d.ts.map index 2607944..cfa91e9 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,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,eAAe,CAAqB;IAEtC,WAAW,CAAC,OAAO,EAAE,MAAM;IAiDjC,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO;IAQ7C,aAAa,CAAC,OAAO,EAAE,MAAM;IAQ7B;;;;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,cAAc,IAAI,GAAG,CAAC,MAAM,CAAC,CAGhC;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":"AAYA,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,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,eAAe,CAAqB;IAEtC,WAAW,CAAC,OAAO,EAAE,MAAM;IA8DjC,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO;IAQ7C,aAAa,CAAC,OAAO,EAAE,MAAM;IAQ7B;;;;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,cAAc,IAAI,GAAG,CAAC,MAAM,CAAC,CAGhC;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 3176649..95ddb85 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":"AAyQA,wBAAgB,eAAe,SA6f9B;AAED,wBAAsB,YAAY,kBAIjC"} \ No newline at end of file +{"version":3,"file":"CommandRegister.d.ts","sourceRoot":"","sources":["../../../src/Editor/CommandRegister.ts"],"names":[],"mappings":"AAyQA,wBAAgB,eAAe,SA+f9B;AAED,wBAAsB,YAAY,kBAIjC"} \ No newline at end of file diff --git a/types/Editor/GetPointServices.d.ts.map b/types/Editor/GetPointServices.d.ts.map index 2f802a7..d332d4f 100644 --- a/types/Editor/GetPointServices.d.ts.map +++ b/types/Editor/GetPointServices.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"GetPointServices.d.ts","sourceRoot":"","sources":["../../../src/Editor/GetPointServices.ts"],"names":[],"mappings":"AACA,OAAO,EAAkB,YAAY,EAAe,OAAO,EAAE,MAAM,OAAO,CAAC;AAkB3E,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,iBAAiB,EAAgB,MAAM,gBAAgB,CAAC;AAEjE,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAK9C;;GAEG;AACH,qBAAa,gBAAiB,YAAW,aAAa;IAElD,OAAO,EAAE,OAAO,CAAS;IACnB,IAAI,CAAC,CAAC,EAAE,UAAU;IAuBxB,OAAO,CAAC,aAAa,CAAmC;IAExD,SAAS,CAAC,WAAW,EAAE,QAAQ,EAAE,CAAM;IAEhC,YAAY,eAAsB;IAClC,eAAe,EAAE,cAAc,CAAsB;IAE5D,OAAO,CAAC,OAAO,CAAiB;IAC1B,KAAK,CAAC,MAAM,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,iBAAiB,CAAC;YA+ClD,gBAAgB;IAwC9B,MAAM;IAON,OAAO,CAAC,QAAQ,CAAU;IAC1B,OAAO,CAAC,cAAc,CAAS;IAC/B,IAAI,MAAM,YAAkC;IAC5C,OAAO,CAAC,SAAS,CAAU;IAC3B,YAAY,EAAE,YAAY,CAAC;IAE3B,mBAAmB;IA2BnB,OAAO,CAAC,kBAAkB;IAW1B,OAAO,CAAC,iBAAiB;IAYzB,OAAO,CAAC,mBAAmB;IAK3B,OAAO,CAAC,mBAAmB;IAuB3B,OAAO,CAAC,kBAAkB;IAiC1B,OAAO,CAAC,eAAe;IA2DvB,OAAO,CAAC,UAAU;IAclB,SAAS,CAAC,YAAY,CAAC,MAAM,EAAE,cAAc;IAsF7C,OAAO,CAAC,UAAU;IAOlB,OAAO,CAAC,qBAAqB;IAW7B,SAAS,CAAC,WAAW,CAAC,CAAC,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,cAAc;IA0B3D,aAAa,CAAC,OAAO,EAAE,MAAM;IAQ7B,SAAS,CAAC,YAAY,CAAC,QAAQ,EAAE,iBAAiB;IAUlD,OAAO,CAAC,gBAAgB,CAAU;IAElC,OAAO,CAAC,SAAS;IASjB,OAAO,CAAC,SAAS;CAkBpB"} \ No newline at end of file +{"version":3,"file":"GetPointServices.d.ts","sourceRoot":"","sources":["../../../src/Editor/GetPointServices.ts"],"names":[],"mappings":"AACA,OAAO,EAAkB,YAAY,EAAe,OAAO,EAAE,MAAM,OAAO,CAAC;AAkB3E,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,iBAAiB,EAAgB,MAAM,gBAAgB,CAAC;AAEjE,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAK9C;;GAEG;AACH,qBAAa,gBAAiB,YAAW,aAAa;IAElD,OAAO,EAAE,OAAO,CAAS;IACnB,IAAI,CAAC,CAAC,EAAE,UAAU;IAuBxB,OAAO,CAAC,aAAa,CAAmC;IAExD,SAAS,CAAC,WAAW,EAAE,QAAQ,EAAE,CAAM;IAEhC,YAAY,eAAsB;IAClC,eAAe,EAAE,cAAc,CAAsB;IAE5D,OAAO,CAAC,OAAO,CAAiB;IAC1B,KAAK,CAAC,MAAM,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,iBAAiB,CAAC;YA+ClD,gBAAgB;IAwC9B,MAAM;IAON,OAAO,CAAC,QAAQ,CAAU;IAC1B,OAAO,CAAC,cAAc,CAAS;IAC/B,IAAI,MAAM,YAAkC;IAC5C,OAAO,CAAC,SAAS,CAAU;IAC3B,YAAY,EAAE,YAAY,CAAC;IAE3B,mBAAmB;IA6BnB,OAAO,CAAC,kBAAkB;IAW1B,OAAO,CAAC,iBAAiB;IAYzB,OAAO,CAAC,mBAAmB;IAK3B,OAAO,CAAC,mBAAmB;IAuB3B,OAAO,CAAC,kBAAkB;IAiC1B,OAAO,CAAC,eAAe;IA2DvB,OAAO,CAAC,UAAU;IAclB,SAAS,CAAC,YAAY,CAAC,MAAM,EAAE,cAAc;IAsF7C,OAAO,CAAC,UAAU;IAOlB,OAAO,CAAC,qBAAqB;IAW7B,SAAS,CAAC,WAAW,CAAC,CAAC,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,cAAc;IA0B3D,aAAa,CAAC,OAAO,EAAE,MAAM;IAQ7B,SAAS,CAAC,YAAY,CAAC,QAAQ,EAAE,iBAAiB;IAUlD,OAAO,CAAC,gBAAgB,CAAU;IAElC,OAAO,CAAC,SAAS;IASjB,OAAO,CAAC,SAAS;CAmBpB"} \ No newline at end of file diff --git a/types/Editor/TranstrolControl/ParsePlaceEntitys.d.ts b/types/Editor/TranstrolControl/ParsePlaceEntitys.d.ts new file mode 100644 index 0000000..1a07faf --- /dev/null +++ b/types/Editor/TranstrolControl/ParsePlaceEntitys.d.ts @@ -0,0 +1,17 @@ +import { Matrix4, Vector3 } from "three"; +import { BoxSolid } from "../../DatabaseServices/Entity/BoxSolid"; +import { Entity } from "../../DatabaseServices/Entity/Entity"; +import { TemplateRecord } from "../../DatabaseServices/Template/TemplateRecord"; +export declare class ParsePlaceEntitys { + Entitys: Entity[]; + private _Size; + _CacheOCS: Matrix4[]; + constructor(Entitys: Entity[], _Size?: Vector3); + FromTemplateSize(template: TemplateRecord): this; + private _PalceEntity; + get PlaceEntity(): BoxSolid; + tempmtx: Matrix4; + ApplyPlace(): void; + RestorePlace(): void; +} +//# sourceMappingURL=ParsePlaceEntitys.d.ts.map \ No newline at end of file diff --git a/types/Editor/TranstrolControl/ParsePlaceEntitys.d.ts.map b/types/Editor/TranstrolControl/ParsePlaceEntitys.d.ts.map new file mode 100644 index 0000000..7319837 --- /dev/null +++ b/types/Editor/TranstrolControl/ParsePlaceEntitys.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"ParsePlaceEntitys.d.ts","sourceRoot":"","sources":["../../../../src/Editor/TranstrolControl/ParsePlaceEntitys.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,wCAAwC,CAAC;AAClE,OAAO,EAAE,MAAM,EAAE,MAAM,sCAAsC,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,gDAAgD,CAAC;AAEhF,qBAAa,iBAAiB;IAIf,OAAO,EAAE,MAAM,EAAE;IACxB,OAAO,CAAC,KAAK;IAHjB,SAAS,EAAE,OAAO,EAAE,CAAC;gBAEV,OAAO,EAAE,MAAM,EAAE,EAChB,KAAK,GAAE,OAA8B;IAMjD,gBAAgB,CAAC,QAAQ,EAAE,cAAc;IAMzC,OAAO,CAAC,YAAY,CAAW;IAC/B,IAAI,WAAW,aAKd;IAED,OAAO,UAAe;IACtB,UAAU;IAYV,YAAY;CASf"} \ No newline at end of file diff --git a/types/Editor/TranstrolControl/ParsePlacePos.d.ts b/types/Editor/TranstrolControl/ParsePlacePos.d.ts index 86150fc..2fe5520 100644 --- a/types/Editor/TranstrolControl/ParsePlacePos.d.ts +++ b/types/Editor/TranstrolControl/ParsePlacePos.d.ts @@ -1,12 +1,21 @@ -import { Intersection } from "three"; +import { Intersection, Object3D } from "three"; import { Entity } from "../../DatabaseServices/Entity/Entity"; export declare class ParsePlacePos { - private _Entity; - private _Inter; - private _Collision; + protected _Entity: Entity; + protected _Inter: Intersection; + protected CallNewLengthFunc: (newLength: number) => number; + protected CallNewWidthFunc: (newWidth: number) => number; + protected CallNewHeightFunc: (newHeight: number) => number; + protected _Collision: boolean; constructor(_Entity: Entity, //直接修改这个实体的坐标系 (如果可以) - _Inter: Intersection, _Collision?: boolean); + _Inter: Intersection, CallNewLengthFunc?: (newLength: number) => number, CallNewWidthFunc?: (newWidth: number) => number, CallNewHeightFunc?: (newHeight: number) => number, _Collision?: boolean); private PlaceHorizontalPlane; - private GetRayObjects; + protected GetRayObjects(): Object3D[]; +} +export declare class ParsePlacePosWithTemplate extends ParsePlacePos { + protected GetRayObjects(): Object3D[]; +} +export declare class ParsePlacePosWithTemplate2 extends ParsePlacePos { + protected GetRayObjects(): Object3D[]; } //# sourceMappingURL=ParsePlacePos.d.ts.map \ No newline at end of file diff --git a/types/Editor/TranstrolControl/ParsePlacePos.d.ts.map b/types/Editor/TranstrolControl/ParsePlacePos.d.ts.map index 2d3dc6e..6cae031 100644 --- a/types/Editor/TranstrolControl/ParsePlacePos.d.ts.map +++ b/types/Editor/TranstrolControl/ParsePlacePos.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"ParsePlacePos.d.ts","sourceRoot":"","sources":["../../../../src/Editor/TranstrolControl/ParsePlacePos.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAyC,MAAM,OAAO,CAAC;AAO5E,OAAO,EAAE,MAAM,EAAE,MAAM,sCAAsC,CAAC;AAM9D,qBAAa,aAAa;IAGlB,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,UAAU;gBAFV,OAAO,EAAE,MAAM,EAAC,qBAAqB;IACrC,MAAM,EAAE,YAAY,EACpB,UAAU,UAAgB;IAoFtC,OAAO,CAAC,oBAAoB;IA6E5B,OAAO,CAAC,aAAa;CAqBxB"} \ No newline at end of file +{"version":3,"file":"ParsePlacePos.d.ts","sourceRoot":"","sources":["../../../../src/Editor/TranstrolControl/ParsePlacePos.ts"],"names":[],"mappings":"AACA,OAAO,EAAQ,YAAY,EAAW,QAAQ,EAAsB,MAAM,OAAO,CAAC;AAOlF,OAAO,EAAE,MAAM,EAAE,MAAM,sCAAsC,CAAC;AAQ9D,qBAAa,aAAa;IAIlB,SAAS,CAAC,OAAO,EAAE,MAAM;IACzB,SAAS,CAAC,MAAM,EAAE,YAAY;IAC9B,SAAS,CAAC,iBAAiB,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,MAAM;IAC1D,SAAS,CAAC,gBAAgB,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,MAAM;IACxD,SAAS,CAAC,iBAAiB,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,MAAM;IAC1D,SAAS,CAAC,UAAU;gBALV,OAAO,EAAE,MAAM,EAAC,qBAAqB;IACrC,MAAM,EAAE,YAAY,EACpB,iBAAiB,GAAE,CAAC,SAAS,EAAE,MAAM,KAAK,MAAkB,EAC5D,gBAAgB,GAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,MAAkB,EAC1D,iBAAiB,GAAE,CAAC,SAAS,EAAE,MAAM,KAAK,MAAkB,EAC5D,UAAU,UAAgB;IAgGxC,OAAO,CAAC,oBAAoB;IA4F5B,SAAS,CAAC,aAAa,IAAI,QAAQ,EAAE;CAkDxC;AAoBD,qBAAa,yBAA0B,SAAQ,aAAa;cAErC,aAAa,IAAI,QAAQ,EAAE;CA+FjD;AAGD,qBAAa,0BAA2B,SAAQ,aAAa;cAEtC,aAAa,IAAI,QAAQ,EAAE;CAkHjD"} \ No newline at end of file diff --git a/types/Editor/UserConfig.d.ts b/types/Editor/UserConfig.d.ts index 5c3ab3b..2056a53 100644 --- a/types/Editor/UserConfig.d.ts +++ b/types/Editor/UserConfig.d.ts @@ -38,6 +38,7 @@ export declare class UserConfig implements IConfigStore { userConfigName: { [key: string]: string; }; + isNeedUpdataOption: boolean; _modeling2HoleRad: number; isAdmin: boolean; isMaster: boolean; @@ -59,6 +60,7 @@ export declare class UserConfig implements IConfigStore { cabinetSpacing: number; ConceptualEdgeColor: number; Physical2EdgeColor: number; + titleWidthMap: Map; autoSaveConfig: { enable: boolean; time: number; @@ -184,6 +186,9 @@ export declare class UserConfig implements IConfigStore { isOpenAxisSwitch: boolean; isOpenCameraSetting: boolean; dxfImportBlock: boolean; + titleWidthMap: { + [k: string]: number; + }; }; }; UpdateOption(config: IConfigOption): void; diff --git a/types/Editor/UserConfig.d.ts.map b/types/Editor/UserConfig.d.ts.map index 8a469b7..ad8d923 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":"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"} \ No newline at end of file +{"version":3,"file":"UserConfig.d.ts","sourceRoot":"","sources":["../../../src/Editor/UserConfig.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/types/GraphicsSystem/CalcEdgeSealing.d.ts.map b/types/GraphicsSystem/CalcEdgeSealing.d.ts.map index 48f4c49..3359768 100644 --- a/types/GraphicsSystem/CalcEdgeSealing.d.ts.map +++ b/types/GraphicsSystem/CalcEdgeSealing.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"CalcEdgeSealing.d.ts","sourceRoot":"","sources":["../../../src/GraphicsSystem/CalcEdgeSealing.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,KAAK,EAAE,MAAM,kCAAkC,CAAC;AACzD,OAAO,EAAE,MAAM,EAAE,MAAM,mCAAmC,CAAC;AAC3D,OAAO,EAAE,KAAK,EAAE,MAAM,kCAAkC,CAAC;AAGzD,OAAO,EAAE,QAAQ,EAAE,MAAM,qCAAqC,CAAC;AAI/D,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAI3E;;;GAGG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,KAAK,EAAE,QA4G3C;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,SAAS,CAAC,EAAE,eAAe,EAAE,WAuG1E;AAGD,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,eAAe,EAAE,CA8C/E;AAED,iBAAiB;AACjB,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,WASlE;AAED;;;;KAIK;AACL,wBAAgB,qBAAqB,CAAC,EAAE,EAAE,KAAK,EAAE,QAAQ,UAAQ,GAAG,KAAK,EAAE,CA8C1E;AAMD;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CAAC,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,WAAW,UAAQ,GAAG,QAAQ,GAAG,MAAM,GAAG,SAAS,CA6HxH;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,QAAQ,GAAG,MAAM,kBAS3D;AAGD,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,eAAe,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,qBAoF9E;AAED,wBAAwB;AACxB,wBAAgB,0BAA0B,CAAC,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,eAAe,EAAE,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,QA0C5F"} \ No newline at end of file +{"version":3,"file":"CalcEdgeSealing.d.ts","sourceRoot":"","sources":["../../../src/GraphicsSystem/CalcEdgeSealing.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,KAAK,EAAE,MAAM,kCAAkC,CAAC;AACzD,OAAO,EAAE,MAAM,EAAE,MAAM,mCAAmC,CAAC;AAC3D,OAAO,EAAE,KAAK,EAAE,MAAM,kCAAkC,CAAC;AAGzD,OAAO,EAAE,QAAQ,EAAE,MAAM,qCAAqC,CAAC;AAI/D,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAI3E;;;GAGG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,KAAK,EAAE,QA4G3C;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,SAAS,CAAC,EAAE,eAAe,EAAE,WAuG1E;AAGD,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,eAAe,EAAE,CAiD/E;AAED,iBAAiB;AACjB,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,WASlE;AAED;;;;KAIK;AACL,wBAAgB,qBAAqB,CAAC,EAAE,EAAE,KAAK,EAAE,QAAQ,UAAQ,GAAG,KAAK,EAAE,CA8C1E;AAMD;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CAAC,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,WAAW,UAAQ,GAAG,QAAQ,GAAG,MAAM,GAAG,SAAS,CA6HxH;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,QAAQ,GAAG,MAAM,kBAS3D;AAGD,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,eAAe,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,qBAoF9E;AAED,wBAAwB;AACxB,wBAAgB,0BAA0B,CAAC,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,eAAe,EAAE,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,QA0C5F"} \ No newline at end of file diff --git a/types/Reactor/SyncDataReactor.d.ts.map b/types/Reactor/SyncDataReactor.d.ts.map index 091e47c..978a4d0 100644 --- a/types/Reactor/SyncDataReactor.d.ts.map +++ b/types/Reactor/SyncDataReactor.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"SyncDataReactor.d.ts","sourceRoot":"","sources":["../../../src/Reactor/SyncDataReactor.ts"],"names":[],"mappings":"AACA,OAAO,EAAkB,IAAI,EAAgB,MAAM,sBAAsB,CAAC;AAC1E,OAAO,EAAO,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AAa7E,MAAM,WAAW,aAAa;IAE1B,GAAG,EAAE,IAAI,CAAC;IACV,MAAM,EAAE,IAAI,CAAC;IACb,MAAM,EAAE,IAAI,CAAC;CAChB;AAOD,qBAAa,eAAe;IAEZ,OAAO,CAAC,GAAG;gBAAH,GAAG,EAAE,kBAAkB;IAmE3C,gBAAgB;IA2BhB,OAAO,CAAC,QAAQ;CAkFnB"} \ No newline at end of file +{"version":3,"file":"SyncDataReactor.d.ts","sourceRoot":"","sources":["../../../src/Reactor/SyncDataReactor.ts"],"names":[],"mappings":"AACA,OAAO,EAAkE,IAAI,EAAgB,MAAM,sBAAsB,CAAC;AAC1H,OAAO,EAAO,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AAc7E,MAAM,WAAW,aAAa;IAE1B,GAAG,EAAE,IAAI,CAAC;IACV,MAAM,EAAE,IAAI,CAAC;IACb,MAAM,EAAE,IAAI,CAAC;CAChB;AAOD,qBAAa,eAAe;IAEZ,OAAO,CAAC,GAAG;gBAAH,GAAG,EAAE,kBAAkB;IAmE3C,gBAAgB;IA2BhB,OAAO,CAAC,QAAQ;CAqGnB"} \ No newline at end of file diff --git a/types/UI/Components/BBS/BBSCommon.d.ts b/types/UI/Components/BBS/BBSCommon.d.ts index 7639d39..e3b86e6 100644 --- a/types/UI/Components/BBS/BBSCommon.d.ts +++ b/types/UI/Components/BBS/BBSCommon.d.ts @@ -11,15 +11,19 @@ export interface SortBtnData { icon: IconName; } export declare const SelectElementIndex: number[]; -export declare class TitleBanner extends React.Component<{ +interface ITitleBannerProps { sortBtnData: SortBtnData[]; style: any; handleOrder: Function; AutoWidth: (title: [string, string]) => void; TitleResize: (e: React.PointerEvent, title: string) => void; -}, {}> { +} +export declare class TitleBanner extends React.Component { icon: IconName; + titleRef: React.RefObject; + componentDidMount(): void; getBtnData: (data: string) => boolean; + getWidthStyle: (title: string, index: number) => React.CSSProperties; render(): JSX.Element; } export declare enum PartsType { diff --git a/types/UI/Components/BBS/BBSCommon.d.ts.map b/types/UI/Components/BBS/BBSCommon.d.ts.map index 5e413f6..76d5073 100644 --- a/types/UI/Components/BBS/BBSCommon.d.ts.map +++ b/types/UI/Components/BBS/BBSCommon.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"BBSCommon.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/BBS/BBSCommon.tsx"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"BBSCommon.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/BBS/BBSCommon.tsx"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/types/UI/Components/BBS/BBSEditor.d.ts.map b/types/UI/Components/BBS/BBSEditor.d.ts.map index d0b6359..15a1f75 100644 --- a/types/UI/Components/BBS/BBSEditor.d.ts.map +++ b/types/UI/Components/BBS/BBSEditor.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"BBSEditor.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/BBS/BBSEditor.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAE,cAAc,EAA0B,MAAM,4BAA4B,CAAC;AAIpF,MAAM,WAAW,eAAe;IAE5B,KAAK,EAAE,cAAc,CAAC;CACzB;AAED,qBACa,SAAU,SAAQ,KAAK,CAAC,SAAS,CAAC,eAAe,CAAC;IAC/C,WAAW,SAAM;IACtB,MAAM;IAmEb,OAAO,CAAC,SAAS,CAAS;IAC1B,eAAe,MAAO,eAAe,UAOnC;IACF,cAAc,MAAO,eAAe,UAWlC;IACF,aAAa,MAAO,eAAe,UAuBjC;CACL"} \ No newline at end of file +{"version":3,"file":"BBSEditor.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/BBS/BBSEditor.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAE,cAAc,EAA0B,MAAM,4BAA4B,CAAC;AAKpF,MAAM,WAAW,eAAe;IAE5B,KAAK,EAAE,cAAc,CAAC;CACzB;AAED,qBACa,SAAU,SAAQ,KAAK,CAAC,SAAS,CAAC,eAAe,CAAC;IAC/C,WAAW,SAAM;IACtB,MAAM;IAoEb,OAAO,CAAC,SAAS,CAAS;IAC1B,eAAe,MAAO,eAAe,UAOnC;IACF,cAAc,MAAO,eAAe,UAWlC;IACF,aAAa,MAAO,eAAe,UAuBjC;CACL"} \ No newline at end of file diff --git a/types/UI/Components/BBS/LookOverBoardInfos.d.ts b/types/UI/Components/BBS/LookOverBoardInfos.d.ts index 6da09fb..1059387 100644 --- a/types/UI/Components/BBS/LookOverBoardInfos.d.ts +++ b/types/UI/Components/BBS/LookOverBoardInfos.d.ts @@ -66,6 +66,7 @@ export declare class LookOverBoardInfosModal extends React.Component void; TitleResize: (e: React.PointerEvent, title: string) => void; AutoWidth: (title: [string, string]) => void; + SetTitleWidthMap: (title: string, value: number) => void; getCalcStyles: (key: string) => React.CSSProperties; Modify(): void; CalcArea: () => string; diff --git a/types/UI/Components/BBS/LookOverBoardInfos.d.ts.map b/types/UI/Components/BBS/LookOverBoardInfos.d.ts.map index 652ed1e..f5db351 100644 --- a/types/UI/Components/BBS/LookOverBoardInfos.d.ts.map +++ b/types/UI/Components/BBS/LookOverBoardInfos.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"LookOverBoardInfos.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/BBS/LookOverBoardInfos.tsx"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"LookOverBoardInfos.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/BBS/LookOverBoardInfos.tsx"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/types/UI/Components/BatchModifyPanelModal.d.ts b/types/UI/Components/BatchModifyPanelModal.d.ts index 6294c79..c443de9 100644 --- a/types/UI/Components/BatchModifyPanelModal.d.ts +++ b/types/UI/Components/BatchModifyPanelModal.d.ts @@ -17,13 +17,15 @@ export declare class BatchModifyPanelStore extends BoardStore { UpdateOption(conf: IConfigOption): void; } export declare class BatchModifyPanelModal extends React.Component { + private boardSize; + private event; + componentDidMount(): void; + componentWillUnmount(): void; + SizeInput: (key: string, title: string) => JSX.Element; + render(): JSX.Element; private Ok; private Close; private getModifyValue; private getBoardValue; - private event; - componentDidMount(): void; - componentWillUnmount(): void; - render(): JSX.Element; } //# sourceMappingURL=BatchModifyPanelModal.d.ts.map \ No newline at end of file diff --git a/types/UI/Components/BatchModifyPanelModal.d.ts.map b/types/UI/Components/BatchModifyPanelModal.d.ts.map index b01dd6f..958ef08 100644 --- a/types/UI/Components/BatchModifyPanelModal.d.ts.map +++ b/types/UI/Components/BatchModifyPanelModal.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"BatchModifyPanelModal.d.ts","sourceRoot":"","sources":["../../../../src/UI/Components/BatchModifyPanelModal.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAU/B,OAAO,8BAA8B,CAAC;AACtC,OAAO,EAAE,uBAAuB,EAAa,MAAM,yBAAyB,CAAC;AAC7E,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAGjD,OAAO,EAAE,aAAa,EAAc,MAAM,oBAAoB,CAAC;AAI/D,MAAM,WAAW,sBAAsB;IAEnC,KAAK,EAAE,qBAAqB,CAAC;CAChC;AACD,qBAAa,qBAAsB,SAAQ,UAAU;IAErC,QAAQ,EAAE,uBAAuB,CAAwC;IACrF,UAAU,EAAE,uBAAuB,CAA6C;IAChF,cAAc;IAId,UAAU;IAMV,UAAU;;;IAMV,YAAY,CAAC,IAAI,EAAE,aAAa,CAAC,uBAAuB,CAAC;CAM5D;AACD,qBACa,qBAAsB,SAAQ,KAAK,CAAC,SAAS,CAAC,sBAAsB,EAAE,EAAE,CAAC;IAElF,OAAO,CAAC,EAAE,CAkBR;IACF,OAAO,CAAC,KAAK,CAKX;IACF,OAAO,CAAC,cAAc,CAiBpB;IACF,OAAO,CAAC,aAAa,CAiBnB;IACF,OAAO,CAAC,KAAK,CAAW;IACxB,iBAAiB;IAajB,oBAAoB;IAQb,MAAM;CA+FhB"} \ No newline at end of file +{"version":3,"file":"BatchModifyPanelModal.d.ts","sourceRoot":"","sources":["../../../../src/UI/Components/BatchModifyPanelModal.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAU/B,OAAO,8BAA8B,CAAC;AACtC,OAAO,EAAE,uBAAuB,EAAa,MAAM,yBAAyB,CAAC;AAC7E,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAGjD,OAAO,EAAoB,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAKrE,MAAM,WAAW,sBAAsB;IAEnC,KAAK,EAAE,qBAAqB,CAAC;CAChC;AACD,qBAAa,qBAAsB,SAAQ,UAAU;IAErC,QAAQ,EAAE,uBAAuB,CAAwC;IACrF,UAAU,EAAE,uBAAuB,CAA6C;IAChF,cAAc;IAId,UAAU;IAMV,UAAU;;;IAMV,YAAY,CAAC,IAAI,EAAE,aAAa,CAAC,uBAAuB,CAAC;CAM5D;AACD,qBACa,qBAAsB,SAAQ,KAAK,CAAC,SAAS,CAAC,sBAAsB,EAAE,EAAE,CAAC;IAElF,OAAO,CAAC,SAAS,CAAkG;IACnH,OAAO,CAAC,KAAK,CAAW;IACxB,iBAAiB;IAajB,oBAAoB;IASpB,SAAS,QAAS,MAAM,SAAS,MAAM,iBAmBrC;IAEK,MAAM;IAoEb,OAAO,CAAC,EAAE,CAkBR;IACF,OAAO,CAAC,KAAK,CAKX;IACF,OAAO,CAAC,cAAc,CAiBpB;IACF,OAAO,CAAC,aAAa,CAiBnB;CACL"} \ No newline at end of file diff --git a/types/UI/Components/Board/BoardConfigModal.d.ts.map b/types/UI/Components/Board/BoardConfigModal.d.ts.map index f595e2a..8b0c0bd 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;AAW/B,OAAO,EAAE,KAAK,EAAuC,MAAM,wCAAwC,CAAC;AAcpG,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAiB,aAAa,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAQ5H,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;IAC5C,cAAc,CAAC,EAAE,OAAO,CAAC;CAC5B;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;IA0HN;;OAEG;IACH,OAAO,CAAC,YAAY,CAoBlB;IACF;;MAEE;IACF,OAAO,CAAC,qBAAqB,CAyE3B;IACF,sBAAsB,sBA4CpB;IACF,sBAAsB,sBAsFpB;IAGF,OAAO,CAAC,cAAc,CA8FpB;IAGF,OAAO,CAAC,eAAe,CAoFrB;IACF,OAAO,CAAC,WAAW,CAiDjB;IAGF,OAAO,CAAC,YAAY,CA4ClB;IACF,OAAO,CAAC,eAAe,CAsErB;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;AAW/B,OAAO,EAAE,KAAK,EAAuC,MAAM,wCAAwC,CAAC;AAcpG,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAiB,aAAa,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAQ5H,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;IAC5C,cAAc,CAAC,EAAE,OAAO,CAAC;CAC5B;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;IA0HN;;OAEG;IACH,OAAO,CAAC,YAAY,CAoBlB;IACF;;MAEE;IACF,OAAO,CAAC,qBAAqB,CA6F3B;IACF,sBAAsB,sBA4CpB;IACF,sBAAsB,sBAsFpB;IAGF,OAAO,CAAC,cAAc,CA8FpB;IAGF,OAAO,CAAC,eAAe,CAoFrB;IACF,OAAO,CAAC,WAAW,CAiDjB;IAGF,OAAO,CAAC,YAAY,CA4ClB;IACF,OAAO,CAAC,eAAe,CAsErB;CACL"} \ No newline at end of file diff --git a/types/UI/Components/Board/BoardFindModify.d.ts.map b/types/UI/Components/Board/BoardFindModify.d.ts.map index d9a6957..7f4f232 100644 --- a/types/UI/Components/Board/BoardFindModify.d.ts.map +++ b/types/UI/Components/Board/BoardFindModify.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"BoardFindModify.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/Board/BoardFindModify.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAS/B,OAAO,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AASlE,UAAU,eAAe;IAErB,aAAa,EAAE,MAAM,CAAC;CACzB;AAID,MAAM,CAAC,OAAO,OAAO,oBAAqB,SAAQ,KAAK,CAAC,SAAS,CAAC;IAAE,KAAK,CAAC,EAAE,cAAc,CAAC;CAAE,EAAE,eAAe,CAAC;IAC3G,OAAO,CAAC,KAAK,CAAW;IACZ,WAAW,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAG1C;IACF,OAAO,CAAC,SAAS,CAAyB;gBAC9B,KAAK,KAAA;IAOjB,iBAAiB;IAYjB,oBAAoB;IAQpB,OAAO,CAAC,eAAe,CAUrB;IACF,OAAO,CAAC,mBAAmB,CAUzB;IACF,OAAO,CAAC,0BAA0B,CAchC;IACF,OAAO,CAAC,iBAAiB,CAGvB;YACY,cAAc;IAQ5B,OAAO,CAAC,iBAAiB,CAYvB;IACF,OAAO,CAAC,iBAAiB,CAOvB;IACF,MAAM;CAgZT"} \ No newline at end of file +{"version":3,"file":"BoardFindModify.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/Board/BoardFindModify.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAS/B,OAAO,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAUlE,UAAU,eAAe;IAErB,aAAa,EAAE,MAAM,CAAC;CACzB;AAID,MAAM,CAAC,OAAO,OAAO,oBAAqB,SAAQ,KAAK,CAAC,SAAS,CAAC;IAAE,KAAK,CAAC,EAAE,cAAc,CAAC;CAAE,EAAE,eAAe,CAAC;IAC3G,OAAO,CAAC,KAAK,CAAW;IACZ,WAAW,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAG1C;IACF,OAAO,CAAC,SAAS,CAAyB;gBAC9B,KAAK,KAAA;IAOjB,iBAAiB;IAYjB,oBAAoB;IAQpB,OAAO,CAAC,eAAe,CAUrB;IACF,OAAO,CAAC,mBAAmB,CAUzB;IACF,OAAO,CAAC,0BAA0B,CAchC;IACF,OAAO,CAAC,iBAAiB,CAGvB;YACY,cAAc;IAQ5B,OAAO,CAAC,iBAAiB,CAYvB;IACF,OAAO,CAAC,iBAAiB,CAOvB;IACF,MAAM;CAiZT"} \ No newline at end of file diff --git a/types/UI/Components/Board/BoardModal.d.ts.map b/types/UI/Components/Board/BoardModal.d.ts.map index 3ef4e67..bbe541c 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;AAM/B,OAAO,EAAoB,UAAU,EAAiH,MAAM,wBAAwB,CAAC;AAKrL,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AASlD,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;AAM/B,OAAO,EAAoB,UAAU,EAAiH,MAAM,wBAAwB,CAAC;AAKrL,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAUlD,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;IAmEN,OAAO,CAAC,OAAO,CAcb;CACL"} \ No newline at end of file diff --git a/types/UI/Components/Board/ClosingStripModal.d.ts.map b/types/UI/Components/Board/ClosingStripModal.d.ts.map index d25959b..dd93d4b 100644 --- a/types/UI/Components/Board/ClosingStripModal.d.ts.map +++ b/types/UI/Components/Board/ClosingStripModal.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"ClosingStripModal.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/Board/ClosingStripModal.tsx"],"names":[],"mappings":";AASA,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAI3D,eAAO,MAAM,iBAAiB,UACR;IAAE,KAAK,CAAC,EAAE,iBAAiB,CAAC;CAAE,gBAsH7C,CAAC"} \ No newline at end of file +{"version":3,"file":"ClosingStripModal.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/Board/ClosingStripModal.tsx"],"names":[],"mappings":";AASA,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAI3D,eAAO,MAAM,iBAAiB,UACR;IAAE,KAAK,CAAC,EAAE,iBAAiB,CAAC;CAAE,gBAyH7C,CAAC"} \ No newline at end of file diff --git a/types/UI/Components/Board/ConfigList.d.ts b/types/UI/Components/Board/ConfigList.d.ts new file mode 100644 index 0000000..fec65a1 --- /dev/null +++ b/types/UI/Components/Board/ConfigList.d.ts @@ -0,0 +1,33 @@ +import React from "react"; +import { IConfigStore } from "../../Store/BoardStore"; +import { BoardModalType } from "./BoardModalType"; +import { Config_ModalType } from "./UserConfig"; +interface IConfigListProps { + type: BoardModalType; + store: IConfigStore; + configType: Config_ModalType; + isNotModify?: boolean; + updateBoardOption: (k: string) => void; + handleSaveConfig: () => void; + handleDeleteConfig: () => void; +} +export declare class ConfigList extends React.Component { + private flag; + private isShow; + private isCNInput; + private tagRef; + disposeAutorun: Function; + componentDidMount(): void; + componentWillUnmount(): void; + ShortcutLabel: (errorMsg: string) => JSX.Element; + InputSelect: () => JSX.Element; + SaveAndDelete: () => JSX.Element; + UserConfig: (errorMag: string) => JSX.Element; + ConfigListTag: (errorMsg: string) => JSX.Element; + renderBody: (errorMsg: string) => JSX.Element; + render(): JSX.Element; + private handleTagChange; + private handleSaveTagConfig; +} +export {}; +//# sourceMappingURL=ConfigList.d.ts.map \ No newline at end of file diff --git a/types/UI/Components/Board/ConfigList.d.ts.map b/types/UI/Components/Board/ConfigList.d.ts.map new file mode 100644 index 0000000..8fce891 --- /dev/null +++ b/types/UI/Components/Board/ConfigList.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"ConfigList.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/Board/ConfigList.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAItD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAShD,UAAU,gBAAgB;IAEtB,IAAI,EAAE,cAAc,CAAC;IACrB,KAAK,EAAE,YAAY,CAAC;IACpB,UAAU,EAAE,gBAAgB,CAAC;IAC7B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,iBAAiB,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,gBAAgB,EAAE,MAAM,IAAI,CAAC;IAC7B,kBAAkB,EAAE,MAAM,IAAI,CAAC;CAClC;AACD,qBACa,UAAW,SAAQ,KAAK,CAAC,SAAS,CAAC,gBAAgB,CAAC;IAEjD,OAAO,CAAC,IAAI,CAAuB;IACnC,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,SAAS,CAAkB;IAC/C,OAAO,CAAC,MAAM,CAAuC;IACrD,cAAc,EAAE,QAAQ,CAAC;IACzB,iBAAiB;IASjB,oBAAoB;IAMpB,aAAa,aAAc,MAAM,iBA4B/B;IAEF,WAAW,oBA8CT;IAEF,aAAa,oBAkBX;IAEF,UAAU,aAAc,MAAM,iBAiB5B;IAEF,aAAa,aAAc,MAAM,iBAoD/B;IAEF,UAAU,aAAc,MAAM,iBAW5B;IAEF,MAAM;IAcN,OAAO,CAAC,eAAe,CAwBrB;IAEF,OAAO,CAAC,mBAAmB,CAsBzB;CACL"} \ No newline at end of file diff --git a/types/UI/Components/Board/ConfigTagCommand.d.ts b/types/UI/Components/Board/ConfigTagCommand.d.ts new file mode 100644 index 0000000..763d2c9 --- /dev/null +++ b/types/UI/Components/Board/ConfigTagCommand.d.ts @@ -0,0 +1,29 @@ +import { BoardModalType } from "./BoardModalType"; +export interface IConfigtTagProps { + tagName: string; + configName: string; + type: BoardModalType; +} +export declare class ConfigTagCommand { + private _tagList; + private _ConfigTagCommandMap; + private _CustomTagCommandMap; + private constructor(); + private static _SingleInstance; + static GetInstance(): ConfigTagCommand; + get CustomTagCommandMap(): Map; + GetTagByConfig(configName: string, type: BoardModalType): IConfigtTagProps; + GetTagByName(tagName: string): IConfigtTagProps; + AddTag(type: BoardModalType, tagName: string, configName: string): Promise; + RemoveTag(configName: string, type: BoardModalType): void; + UploadTagList(): Promise; + private RegistCustomTagCommand; + private DeleteCustomTagCommand; + InitCustomTagCmd(): Promise; + ClearTagList(): void; +} +//# sourceMappingURL=ConfigTagCommand.d.ts.map \ No newline at end of file diff --git a/types/UI/Components/Board/ConfigTagCommand.d.ts.map b/types/UI/Components/Board/ConfigTagCommand.d.ts.map new file mode 100644 index 0000000..623e710 --- /dev/null +++ b/types/UI/Components/Board/ConfigTagCommand.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"ConfigTagCommand.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/Board/ConfigTagCommand.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD,MAAM,WAAW,gBAAgB;IAE7B,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,cAAc,CAAC;CACxB;AACD,qBAAa,gBAAgB;IAEzB,OAAO,CAAC,QAAQ,CAA0B;IAC1C,OAAO,CAAC,oBAAoB,CAA6B;IACzD,OAAO,CAAC,oBAAoB,CAAqF;IAEjH,OAAO;IACP,OAAO,CAAC,MAAM,CAAC,eAAe,CAAmB;IACjD,MAAM,CAAC,WAAW,IAAI,gBAAgB;IAOtC,IAAI,mBAAmB;;;;OAGtB;IAED,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc;IAKvD,YAAY,CAAC,OAAO,EAAE,MAAM;IAItB,MAAM,CAAC,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM;IAwDtE,SAAS,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc;IAW5C,aAAa;IAYnB,OAAO,CAAC,sBAAsB;IAU9B,OAAO,CAAC,sBAAsB;IAMxB,gBAAgB;IAmBtB,YAAY;CAOf"} \ No newline at end of file diff --git a/types/UI/Components/Board/Door/DoorModal.d.ts.map b/types/UI/Components/Board/Door/DoorModal.d.ts.map index f31950c..8f66e66 100644 --- a/types/UI/Components/Board/Door/DoorModal.d.ts.map +++ b/types/UI/Components/Board/Door/DoorModal.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"DoorModal.d.ts","sourceRoot":"","sources":["../../../../../../src/UI/Components/Board/Door/DoorModal.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,OAAO,EAAE,eAAe,EAAE,MAAM,gDAAgD,CAAC;AAMjF,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AASnD,qBACa,SAAU,SAAQ,KAAK,CAAC,SAAS,CAAC;IAAE,KAAK,EAAE,eAAe,CAAC;IAAC,IAAI,EAAE,cAAc,CAAC;CAAE,EAAE,EAAE,CAAC;IAEjG,OAAO,CAAC,WAAW,CAAyB;IAC5C,yBAAyB;IAKzB,OAAO,CAAC,KAAK,CAAW;IACxB,iBAAiB;IAsBjB,oBAAoB;IAQpB,MAAM;IA6FN,OAAO,CAAC,mBAAmB,CAGzB;IACF,OAAO,CAAC,mBAAmB,CAazB;IACF,OAAO,CAAC,uBAAuB,CAiB7B;CACL"} \ No newline at end of file +{"version":3,"file":"DoorModal.d.ts","sourceRoot":"","sources":["../../../../../../src/UI/Components/Board/Door/DoorModal.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,OAAO,EAAE,eAAe,EAAE,MAAM,gDAAgD,CAAC;AAMjF,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAUnD,qBACa,SAAU,SAAQ,KAAK,CAAC,SAAS,CAAC;IAAE,KAAK,EAAE,eAAe,CAAC;IAAC,IAAI,EAAE,cAAc,CAAC;CAAE,EAAE,EAAE,CAAC;IAEjG,OAAO,CAAC,WAAW,CAAyB;IAC5C,yBAAyB;IAKzB,OAAO,CAAC,KAAK,CAAW;IACxB,iBAAiB;IAsBjB,oBAAoB;IAQpB,MAAM;IAkGN,OAAO,CAAC,mBAAmB,CAGzB;IACF,OAAO,CAAC,mBAAmB,CAazB;IACF,OAAO,CAAC,uBAAuB,CAiB7B;CACL"} \ No newline at end of file diff --git a/types/UI/Components/Board/GangDrillModal.d.ts.map b/types/UI/Components/Board/GangDrillModal.d.ts.map index ad04a6a..fd6a8cf 100644 --- a/types/UI/Components/Board/GangDrillModal.d.ts.map +++ b/types/UI/Components/Board/GangDrillModal.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"GangDrillModal.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/Board/GangDrillModal.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAQ/B,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAWpD,qBAEa,UAAW,SAAQ,KAAK,CAAC,SAAS,CAAC;IAAE,KAAK,CAAC,EAAE,UAAU,CAAC;CAAE,EAAE,EAAE,CAAC;IACxE,OAAO,CAAC,OAAO,CAAiD;IAChE,OAAO,CAAC,QAAQ,CAGd;IACF,OAAO,CAAC,QAAQ,CAId;IACF,OAAO,CAAC,SAAS,CAIf;IACF,OAAO,CAAC,KAAK,CAAW;IACxB,aAAa;IAYb,OAAO,CAAC,SAAS,CAyBf;IACF,OAAO,CAAC,eAAe,CAYrB;IACF,OAAO,CAAC,EAAE,CAUR;IACF,OAAO,CAAC,MAAM,CAKZ;IACF,yBAAyB;IAKzB,oBAAoB;IAKpB,MAAM;CA4QT"} \ No newline at end of file +{"version":3,"file":"GangDrillModal.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/Board/GangDrillModal.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAQ/B,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAYpD,qBAEa,UAAW,SAAQ,KAAK,CAAC,SAAS,CAAC;IAAE,KAAK,CAAC,EAAE,UAAU,CAAC;CAAE,EAAE,EAAE,CAAC;IACxE,OAAO,CAAC,OAAO,CAAiD;IAChE,OAAO,CAAC,QAAQ,CAGd;IACF,OAAO,CAAC,QAAQ,CAId;IACF,OAAO,CAAC,SAAS,CAIf;IACF,OAAO,CAAC,KAAK,CAAW;IACxB,aAAa;IAYb,OAAO,CAAC,SAAS,CAyBf;IACF,OAAO,CAAC,eAAe,CAYrB;IACF,OAAO,CAAC,EAAE,CAUR;IACF,OAAO,CAAC,MAAM,CAKZ;IACF,yBAAyB;IAKzB,oBAAoB;IAKpB,MAAM;CA6QT"} \ No newline at end of file diff --git a/types/UI/Components/Board/Rect2Winerack.d.ts.map b/types/UI/Components/Board/Rect2Winerack.d.ts.map index 387bb8b..84ddc8c 100644 --- a/types/UI/Components/Board/Rect2Winerack.d.ts.map +++ b/types/UI/Components/Board/Rect2Winerack.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"Rect2Winerack.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/Board/Rect2Winerack.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAM/B,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AAMpE,UAAU,mBAAmB;IAEzB,KAAK,EAAE,kBAAkB,CAAC;CAC7B;AAED,qBACa,aAAc,SAAQ,KAAK,CAAC,SAAS,CAAC,mBAAmB,CAAC;IACnE,OAAO,CAAC,KAAK,CAAW;IACxB,iBAAiB;IAoBjB,oBAAoB;IAMb,MAAM;IAwFb,OAAO,CAAC,EAAE,CAaR;IACF,OAAO,CAAC,MAAM,CAKZ;CACL"} \ No newline at end of file +{"version":3,"file":"Rect2Winerack.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/Board/Rect2Winerack.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAM/B,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AAOpE,UAAU,mBAAmB;IAEzB,KAAK,EAAE,kBAAkB,CAAC;CAC7B;AAED,qBACa,aAAc,SAAQ,KAAK,CAAC,SAAS,CAAC,mBAAmB,CAAC;IACnE,OAAO,CAAC,KAAK,CAAW;IACxB,iBAAiB;IAoBjB,oBAAoB;IAMb,MAAM;IA0Fb,OAAO,CAAC,EAAE,CAaR;IACF,OAAO,CAAC,MAAM,CAKZ;CACL"} \ No newline at end of file diff --git a/types/UI/Components/Board/SpecialBoardModal.d.ts.map b/types/UI/Components/Board/SpecialBoardModal.d.ts.map index b318ccf..1b00fed 100644 --- a/types/UI/Components/Board/SpecialBoardModal.d.ts.map +++ b/types/UI/Components/Board/SpecialBoardModal.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"SpecialBoardModal.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/Board/SpecialBoardModal.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAM/B,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAS3D,qBACa,sBAAuB,SAAQ,KAAK,CAAC,SAAS,CAAC;IAAE,KAAK,EAAE,iBAAiB,CAAC;CAAE,EAAE,EAAE,CAAC;IAE1F,OAAO,CAAC,IAAI,CAA+D;IAC3E,OAAO,CAAC,UAAU,CAAiF;IACnG,OAAO,CAAC,KAAK,CAAW;gBACZ,KAAK,KAAA;IAMjB,iBAAiB;IAajB,oBAAoB;IAQpB,MAAM;IAgEN,OAAO,CAAC,EAAE,CASR;IACF,OAAO,CAAC,MAAM,CAKZ;CACL"} \ No newline at end of file +{"version":3,"file":"SpecialBoardModal.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/Board/SpecialBoardModal.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAM/B,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAS3D,qBACa,sBAAuB,SAAQ,KAAK,CAAC,SAAS,CAAC;IAAE,KAAK,EAAE,iBAAiB,CAAC;CAAE,EAAE,EAAE,CAAC;IAE1F,OAAO,CAAC,IAAI,CAA+D;IAC3E,OAAO,CAAC,UAAU,CAAiF;IACnG,OAAO,CAAC,KAAK,CAAW;gBACZ,KAAK,KAAA;IAMjB,iBAAiB;IAajB,oBAAoB;IAQpB,MAAM;IAiEN,OAAO,CAAC,EAAE,CASR;IACF,OAAO,CAAC,MAAM,CAKZ;CACL"} \ No newline at end of file diff --git a/types/UI/Components/Board/UpdateBoardInfos.d.ts.map b/types/UI/Components/Board/UpdateBoardInfos.d.ts.map index ae688d2..9d8f16c 100644 --- a/types/UI/Components/Board/UpdateBoardInfos.d.ts.map +++ b/types/UI/Components/Board/UpdateBoardInfos.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"UpdateBoardInfos.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/Board/UpdateBoardInfos.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAY/B,OAAO,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AAWzE,MAAM,WAAW,0BAA0B;IAEvC,KAAK,EAAE,qBAAqB,CAAC;CAChC;AAED,qBACa,oBAAqB,SAAQ,KAAK,CAAC,SAAS,CAAC,0BAA0B,CAAC;IACjF,OAAO,CAAC,KAAK,CAAW;IACxB,OAAO,CAAC,GAAG,CAAwG;IACnH,OAAO,CAAC,aAAa,CAInB;IACF,iBAAiB;IAWjB,oBAAoB;IAKpB,OAAO,CAAC,iBAAiB,CAGvB;IAEK,MAAM;IA4Ob,OAAO,CAAC,EAAE,CAyBR;IACF,OAAO,CAAC,KAAK,CAKX;IACF,OAAO,CAAC,OAAO,CAKb;IACF,OAAO,CAAC,UAAU,CAWhB;IACF,OAAO,CAAC,WAAW,CA0FjB;IACF,OAAO,CAAC,cAAc,CA4BpB;CACL"} \ No newline at end of file +{"version":3,"file":"UpdateBoardInfos.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/Board/UpdateBoardInfos.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAY/B,OAAO,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AAYzE,MAAM,WAAW,0BAA0B;IAEvC,KAAK,EAAE,qBAAqB,CAAC;CAChC;AAED,qBACa,oBAAqB,SAAQ,KAAK,CAAC,SAAS,CAAC,0BAA0B,CAAC;IACjF,OAAO,CAAC,KAAK,CAAW;IACxB,OAAO,CAAC,GAAG,CAAwG;IACnH,OAAO,CAAC,aAAa,CAInB;IACF,iBAAiB;IAWjB,oBAAoB;IAKpB,OAAO,CAAC,iBAAiB,CAGvB;IAEK,MAAM;IA6Ob,OAAO,CAAC,EAAE,CAyBR;IACF,OAAO,CAAC,KAAK,CAKX;IACF,OAAO,CAAC,OAAO,CAKb;IACF,OAAO,CAAC,UAAU,CAWhB;IACF,OAAO,CAAC,WAAW,CA0FjB;IACF,OAAO,CAAC,cAAc,CA4BpB;CACL"} \ No newline at end of file diff --git a/types/UI/Components/Board/UserConfig.d.ts b/types/UI/Components/Board/UserConfig.d.ts index f51bdf4..7a561f1 100644 --- a/types/UI/Components/Board/UserConfig.d.ts +++ b/types/UI/Components/Board/UserConfig.d.ts @@ -15,7 +15,6 @@ export interface IConfigOption { doorsInfo?: (IDrawerInfo | IDoorInfo)[]; processGroupCategory?: string[]; autoCutOption?: IDrawBoardAutoCutOption; - followNarrow?: boolean; other?: any; } export interface IExportConfigData { @@ -23,6 +22,12 @@ export interface IExportConfigData { config: AnyObject; other?: any; } +export declare enum Config_ModalType { + UserConfigModal = 0, + ConfigListTagModal = 1, + UserConfigTagModal = 2, + ConfigListModal = 3 +} interface IConfigProps { type: BoardModalType; store: IConfigStore; @@ -30,7 +35,9 @@ interface IConfigProps { isExpImp?: boolean; isNotModify?: boolean; otherConfig?: () => AnyObject; + hasconfig?: boolean; configurationType?: string; + configType?: Config_ModalType; } /** *用户配置 @@ -40,6 +47,7 @@ export declare class UserConfig extends React.Component { static defaultProps: { isUpdate: boolean; isExpImp: boolean; + hasconfig: boolean; }; private exportData; constructor(props: any); diff --git a/types/UI/Components/Board/UserConfig.d.ts.map b/types/UI/Components/Board/UserConfig.d.ts.map index b93acb4..8beb35f 100644 --- a/types/UI/Components/Board/UserConfig.d.ts.map +++ b/types/UI/Components/Board/UserConfig.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"UserConfig.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/Board/UserConfig.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAK/B,OAAO,EAAE,SAAS,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,aAAa,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AACnJ,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAI5D,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAGlD,MAAM,WAAW,aAAa,CAAC,CAAC,GAAG,SAAS;IAExC,MAAM,CAAC,EAAE,CAAC,CAAC;IACX,QAAQ,CAAC,EAAE,eAAe,CAAC;IAC3B,YAAY,CAAC,EAAE,aAAa,CAAC;IAC7B,eAAe,CAAC,EAAE,aAAa,CAAC;IAChC,WAAW,CAAC,EAAE,kBAAkB,CAAC;IACjC,OAAO,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,EAAE,CAAC,CAAC;IACxC,UAAU,CAAC,EAAE,aAAa,CAAC;IAC3B,SAAS,CAAC,EAAE,CAAC,WAAW,GAAG,SAAS,CAAC,EAAE,CAAC;IACxC,oBAAoB,CAAC,EAAE,MAAM,EAAE,CAAC;IAChC,aAAa,CAAC,EAAE,uBAAuB,CAAC;IACxC,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,KAAK,CAAC,EAAE,GAAG,CAAC;CACf;AAED,MAAM,WAAW,iBAAiB;IAE9B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,SAAS,CAAC;IAClB,KAAK,CAAC,EAAE,GAAG,CAAC;CACf;AAED,UAAU,YAAY;IAElB,IAAI,EAAE,cAAc,CAAC;IACrB,KAAK,EAAE,YAAY,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,SAAS,CAAC;IAC9B,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED;;GAEG;AACH,qBACa,UAAW,SAAQ,KAAK,CAAC,SAAS,CAAC,YAAY,EAAE,EAAE,CAAC;IAC7D,OAAO,CAAC,gBAAgB,CAAkB;IAC1C,MAAM,CAAC,YAAY;;;MAGjB;IACU,OAAO,CAAC,UAAU,CAA2B;gBAC7C,KAAK,KAAA;IAMjB,OAAO,CAAC,gBAAgB,CAgBtB;IACF,OAAO,CAAC,gBAAgB,CAGtB;IAEF,OAAO,CAAC,kBAAkB,CAGxB;IAEF,OAAO,CAAC,iBAAiB,CASvB;IACI,yBAAyB;IA6C/B,MAAM;IA0FN,OAAO,CAAC,YAAY,CAMlB;IACF,OAAO,CAAC,YAAY,CAsBlB;CACL"} \ No newline at end of file +{"version":3,"file":"UserConfig.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/Board/UserConfig.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAK/B,OAAO,EAAE,SAAS,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,aAAa,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AACnJ,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAI5D,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAIlD,MAAM,WAAW,aAAa,CAAC,CAAC,GAAG,SAAS;IAExC,MAAM,CAAC,EAAE,CAAC,CAAC;IACX,QAAQ,CAAC,EAAE,eAAe,CAAC;IAC3B,YAAY,CAAC,EAAE,aAAa,CAAC;IAC7B,eAAe,CAAC,EAAE,aAAa,CAAC;IAChC,WAAW,CAAC,EAAE,kBAAkB,CAAC;IACjC,OAAO,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,EAAE,CAAC,CAAC;IACxC,UAAU,CAAC,EAAE,aAAa,CAAC;IAC3B,SAAS,CAAC,EAAE,CAAC,WAAW,GAAG,SAAS,CAAC,EAAE,CAAC;IACxC,oBAAoB,CAAC,EAAE,MAAM,EAAE,CAAC;IAChC,aAAa,CAAC,EAAE,uBAAuB,CAAC;IACxC,KAAK,CAAC,EAAE,GAAG,CAAC;CACf;AAED,MAAM,WAAW,iBAAiB;IAE9B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,SAAS,CAAC;IAClB,KAAK,CAAC,EAAE,GAAG,CAAC;CACf;AAED,oBAAY,gBAAgB;IAExB,eAAe,IAAI;IACnB,kBAAkB,IAAI;IACtB,kBAAkB,IAAI;IACtB,eAAe,IAAI;CACtB;AAED,UAAU,YAAY;IAElB,IAAI,EAAE,cAAc,CAAC;IACrB,KAAK,EAAE,YAAY,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,SAAS,CAAC;IAC9B,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,UAAU,CAAC,EAAE,gBAAgB,CAAC;CACjC;AAED;;GAEG;AACH,qBACa,UAAW,SAAQ,KAAK,CAAC,SAAS,CAAC,YAAY,EAAE,EAAE,CAAC;IAC7D,OAAO,CAAC,gBAAgB,CAAkB;IAE1C,MAAM,CAAC,YAAY;;;;MAIjB;IACU,OAAO,CAAC,UAAU,CAA2B;gBAC7C,KAAK,KAAA;IAMjB,OAAO,CAAC,gBAAgB,CAgBtB;IACF,OAAO,CAAC,gBAAgB,CAGtB;IAEF,OAAO,CAAC,kBAAkB,CAGxB;IAEF,OAAO,CAAC,iBAAiB,CASvB;IAEI,yBAAyB;IAsD/B,MAAM;IAuCN,OAAO,CAAC,YAAY,CAMlB;IACF,OAAO,CAAC,YAAY,CAsBlB;CACL"} \ No newline at end of file diff --git a/types/UI/Components/Board/WineRack.d.ts.map b/types/UI/Components/Board/WineRack.d.ts.map index f680865..606dc0e 100644 --- a/types/UI/Components/Board/WineRack.d.ts.map +++ b/types/UI/Components/Board/WineRack.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"WineRack.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/Board/WineRack.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAa/B,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAU1D,qBACa,aAAc,SAAQ,KAAK,CAAC,SAAS,CAAC;IAAE,KAAK,CAAC,EAAE,aAAa,CAAC;CAAE,EAAE,EAAE,CAAC;IAE9E,OAAO,CAAC,KAAK,CAAW;IACxB,OAAO,CAAC,QAAQ,CAEd;IACF,OAAO,CAAC,OAAO,CAGb;IACF,UAAU,sBA0CR;IACF,OAAO,CAAC,aAAa,CAqCnB;IACF,OAAO,CAAC,YAAY,CAMlB;IACF,iBAAiB;IAmBjB,oBAAoB;IAKpB,MAAM;CAkRT"} \ No newline at end of file +{"version":3,"file":"WineRack.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/Board/WineRack.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAa/B,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAW1D,qBACa,aAAc,SAAQ,KAAK,CAAC,SAAS,CAAC;IAAE,KAAK,CAAC,EAAE,aAAa,CAAC;CAAE,EAAE,EAAE,CAAC;IAE9E,OAAO,CAAC,KAAK,CAAW;IACxB,OAAO,CAAC,QAAQ,CAEd;IACF,OAAO,CAAC,OAAO,CAGb;IACF,UAAU,sBA0CR;IACF,OAAO,CAAC,aAAa,CAqCnB;IACF,OAAO,CAAC,YAAY,CAMlB;IACF,iBAAiB;IAmBjB,oBAAoB;IAKpB,MAAM;CAmRT"} \ No newline at end of file diff --git a/types/UI/Components/BoardBatchCurtailModal.d.ts.map b/types/UI/Components/BoardBatchCurtailModal.d.ts.map index 98309e5..e742353 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":"AAGA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAQ/B,OAAO,+BAA+B,CAAC;AACvC,OAAO,EAAe,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AAChF,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEjD,OAAO,EAAE,aAAa,EAAc,MAAM,oBAAoB,CAAC;AAK/D,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,OAAO,CAAC,EAAE,CAkBR;IACF,OAAO,CAAC,KAAK,CAKX;IACF,OAAO,CAAC,SAAS;IAuBjB,OAAO,CAAC,KAAK,CAAW;IACxB,iBAAiB;IAajB,oBAAoB;IAQb,MAAM;CAgGhB"} \ No newline at end of file +{"version":3,"file":"BoardBatchCurtailModal.d.ts","sourceRoot":"","sources":["../../../../src/UI/Components/BoardBatchCurtailModal.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAQ/B,OAAO,+BAA+B,CAAC;AACvC,OAAO,EAAe,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AAChF,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEjD,OAAO,EAAoB,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAMrE,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,OAAO,CAAC,EAAE,CAkBR;IACF,OAAO,CAAC,KAAK,CAKX;IACF,OAAO,CAAC,SAAS;IAuBjB,OAAO,CAAC,KAAK,CAAW;IACxB,iBAAiB;IAajB,oBAAoB;IAQb,MAAM;CA4GhB"} \ 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 8efa9cd..eed3002 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":"AAKA,eAAO,MAAM,yBAAyB,eAAe,CAAC;AAEtD;;;;;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,CAAC,EAAE,MAAM,CAAC;IAChC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAEhC,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;AAGD,eAAO,MAAM,WAAW,EAAE,QAAQ,EAqmFjC,CAAC"} \ No newline at end of file +{"version":3,"file":"CommandList.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/CommandPanel/CommandList.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,yBAAyB,eAAe,CAAC;AAEtD;;;;;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,CAAC,EAAE,MAAM,CAAC;IAChC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAEhC,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;AAGD,eAAO,MAAM,WAAW,EAAE,QAAQ,EA6oFjC,CAAC"} \ No newline at end of file diff --git a/types/UI/Components/CommandPanel/ConfigListType.d.ts b/types/UI/Components/CommandPanel/ConfigListType.d.ts new file mode 100644 index 0000000..a45a38b --- /dev/null +++ b/types/UI/Components/CommandPanel/ConfigListType.d.ts @@ -0,0 +1,5 @@ +import { BoardModalType } from "../Board/BoardModalType"; +export declare const ConfigCommandMap: { + [key in BoardModalType]?: string; +}; +//# sourceMappingURL=ConfigListType.d.ts.map \ No newline at end of file diff --git a/types/UI/Components/CommandPanel/ConfigListType.d.ts.map b/types/UI/Components/CommandPanel/ConfigListType.d.ts.map new file mode 100644 index 0000000..63d1dbb --- /dev/null +++ b/types/UI/Components/CommandPanel/ConfigListType.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"ConfigListType.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/CommandPanel/ConfigListType.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAEzD,eAAO,MAAM,gBAAgB,EAAE;KAAG,GAAG,IAAI,cAAc,CAAC,CAAC,EAAE,MAAM;CAqDhE,CAAC"} \ No newline at end of file diff --git a/types/UI/Components/CommandPanel/SystemCommand/UICpmmand.d.ts b/types/UI/Components/CommandPanel/SystemCommand/UICpmmand.d.ts index d885495..600d0db 100644 --- a/types/UI/Components/CommandPanel/SystemCommand/UICpmmand.d.ts +++ b/types/UI/Components/CommandPanel/SystemCommand/UICpmmand.d.ts @@ -1,4 +1,8 @@ import { Command } from "../../../../Editor/CommandMachine"; +import { RightTabId } from "../../RightPanel/RightPanel"; +export declare const RightTabCommandMap: { + [key in RightTabId]?: string; +}; export declare class Command_PropertiesBar implements Command { exec(): Promise; } @@ -9,12 +13,8 @@ export declare class Command_ChangeLayout implements Command { exec(): Promise; } export declare class Command_RightPanel implements Command { - exec(): Promise; -} -export declare class Command_RightPanelScene implements Command { - exec(): Promise; -} -export declare class Command_RightPanelmMaterial implements Command { + private TabId?; + constructor(TabId?: string); exec(): Promise; } export declare class Comman_SwitchServers implements Command { diff --git a/types/UI/Components/CommandPanel/SystemCommand/UICpmmand.d.ts.map b/types/UI/Components/CommandPanel/SystemCommand/UICpmmand.d.ts.map index b83538c..0556e61 100644 --- a/types/UI/Components/CommandPanel/SystemCommand/UICpmmand.d.ts.map +++ b/types/UI/Components/CommandPanel/SystemCommand/UICpmmand.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"UICpmmand.d.ts","sourceRoot":"","sources":["../../../../../../src/UI/Components/CommandPanel/SystemCommand/UICpmmand.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,mCAAmC,CAAC;AAM5D,qBAAa,qBAAsB,YAAW,OAAO;IAE3C,IAAI;CAIb;AAED,qBAAa,iBAAkB,YAAW,OAAO;IAEvC,IAAI;CAIb;AAED,qBAAa,oBAAqB,YAAW,OAAO;IAE1C,IAAI;CAKb;AAED,qBAAa,kBAAmB,YAAW,OAAO;IAExC,IAAI;CAWb;AAED,qBAAa,uBAAwB,YAAW,OAAO;IAE7C,IAAI;CAWb;AAED,qBAAa,2BAA4B,YAAW,OAAO;IAEjD,IAAI;CAWb;AAED,qBAAa,oBAAqB,YAAW,OAAO;IAE1C,IAAI;CAIb"} \ No newline at end of file +{"version":3,"file":"UICpmmand.d.ts","sourceRoot":"","sources":["../../../../../../src/UI/Components/CommandPanel/SystemCommand/UICpmmand.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,mCAAmC,CAAC;AAI5D,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAEzD,eAAO,MAAM,kBAAkB,EAAE;KAAG,GAAG,IAAI,UAAU,CAAC,CAAC,EAAE,MAAM;CAU9D,CAAC;AAEF,qBAAa,qBAAsB,YAAW,OAAO;IAE3C,IAAI;CAIb;AAED,qBAAa,iBAAkB,YAAW,OAAO;IAEvC,IAAI;CAIb;AAED,qBAAa,oBAAqB,YAAW,OAAO;IAE1C,IAAI;CAKb;AAED,qBAAa,kBAAmB,YAAW,OAAO;IAElC,OAAO,CAAC,KAAK,CAAC;gBAAN,KAAK,CAAC,EAAE,MAAM;IAC5B,IAAI;CAWb;AAED,qBAAa,oBAAqB,YAAW,OAAO;IAE1C,IAAI;CAIb"} \ No newline at end of file diff --git a/types/UI/Components/ContextMenu/KeyWordContextMenu.d.ts.map b/types/UI/Components/ContextMenu/KeyWordContextMenu.d.ts.map index 83434f5..5fd6db4 100644 --- a/types/UI/Components/ContextMenu/KeyWordContextMenu.d.ts.map +++ b/types/UI/Components/ContextMenu/KeyWordContextMenu.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"KeyWordContextMenu.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/ContextMenu/KeyWordContextMenu.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AAIxE;;GAEG;AACH,qBAEa,kBAAmB,SAAQ,KAAK,CAAC,SAAS,CAAC;IAAE,YAAY,CAAC,EAAE,mBAAmB,CAAC;CAAE,EAAE,EAAE,CAAC;IAEzF,MAAM;CAkFhB"} \ No newline at end of file +{"version":3,"file":"KeyWordContextMenu.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/ContextMenu/KeyWordContextMenu.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AAIxE;;GAEG;AACH,qBAEa,kBAAmB,SAAQ,KAAK,CAAC,SAAS,CAAC;IAAE,YAAY,CAAC,EAAE,mBAAmB,CAAC;CAAE,EAAE,EAAE,CAAC;IAEzF,MAAM;CAsFhB"} \ 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 9fc4b54..5f81e18 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":"AAGA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAK/B,OAAO,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AASjE,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;IAmJb,OAAO,CAAC,EAAE,CAgBR;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":"AAGA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAK/B,OAAO,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AAUjE,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;IAoJb,OAAO,CAAC,EAAE,CAgBR;IACF,OAAO,CAAC,MAAM,CAGZ;CACL"} \ 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 b7d089b..e4e7810 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;AAK/B,OAAO,EAAE,uBAAuB,EAAE,MAAM,qCAAqC,CAAC;AAM9E,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;IAajB,oBAAoB;IAQb,MAAM;IAuMb,OAAO,CAAC,YAAY,CAiClB;IACF,OAAO,CAAC,EAAE,CAoBR;IACF,OAAO,CAAC,MAAM,CAKZ;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;AAK/B,OAAO,EAAE,uBAAuB,EAAE,MAAM,qCAAqC,CAAC;AAM9E,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;IAajB,oBAAoB;IAQb,MAAM;IA6Mb,OAAO,CAAC,YAAY,CAiClB;IACF,OAAO,CAAC,EAAE,CAoBR;IACF,OAAO,CAAC,MAAM,CAKZ;CACL"} \ No newline at end of file diff --git a/types/UI/Components/Modal/HideSelectModal.d.ts.map b/types/UI/Components/Modal/HideSelectModal.d.ts.map index 0c94bd3..9032013 100644 --- a/types/UI/Components/Modal/HideSelectModal.d.ts.map +++ b/types/UI/Components/Modal/HideSelectModal.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"HideSelectModal.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/Modal/HideSelectModal.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAC;AAa1B,OAAO,EAAE,MAAM,EAAE,MAAM,yCAAyC,CAAC;AAYjE,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAKpD,aAAK,SAAS,CAAC,CAAC,IAAI;KACf,CAAC,IAAI,MAAM,CAAC,GAAG,MAAM;CACzB,CAAC;AACF,eAAO,MAAM,SAAS,EAAE,SAAS,CAAC,SAAS,CA4B1C,CAAC;AAwBF,qBACa,eAAgB,SAAQ,KAAK,CAAC,SAAS,CAAC;IAAE,KAAK,EAAE,eAAe,CAAC;IAAC,WAAW,EAAE,MAAM,EAAE,CAAC;CAAE,CAAC;IAEpG,MAAM;IAyFN,OAAO,CAAC,SAAS,CAOf;IACF,OAAO,CAAC,OAAO;IAgBf,OAAO,CAAC,MAAM,CAMZ;IACF,OAAO,CAAC,MAAM,CAgBZ;IACF,OAAO,CAAC,WAAW,CAKjB;IACF,OAAO,CAAC,EAAE,CA8BR;IACF,OAAO,CAAC,MAAM,CAOZ;IACF,OAAO,CAAC,QAAQ,CAsCd;IACF,OAAO,CAAC,MAAM,CAmPZ;IACF,OAAO,CAAC,OAAO,CAiBb;IACF,OAAO,CAAC,SAAS,CAUf;IACF,OAAO,CAAC,SAAS,CAUf;IACF,OAAO,CAAC,iBAAiB,CAcvB;IACF,OAAO,CAAC,SAAS,CAMf;IACF,OAAO,CAAC,QAAQ,CAMd;IACF,OAAO,CAAC,MAAM,CA0BZ;CACL"} \ No newline at end of file +{"version":3,"file":"HideSelectModal.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/Modal/HideSelectModal.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAC;AAa1B,OAAO,EAAE,MAAM,EAAE,MAAM,yCAAyC,CAAC;AAYjE,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAMpD,aAAK,SAAS,CAAC,CAAC,IAAI;KACf,CAAC,IAAI,MAAM,CAAC,GAAG,MAAM;CACzB,CAAC;AACF,eAAO,MAAM,SAAS,EAAE,SAAS,CAAC,SAAS,CA4B1C,CAAC;AAwBF,qBACa,eAAgB,SAAQ,KAAK,CAAC,SAAS,CAAC;IAAE,KAAK,EAAE,eAAe,CAAC;IAAC,WAAW,EAAE,MAAM,EAAE,CAAC;CAAE,CAAC;IAEpG,MAAM;IA0FN,OAAO,CAAC,SAAS,CAOf;IACF,OAAO,CAAC,OAAO;IAgBf,OAAO,CAAC,MAAM,CAMZ;IACF,OAAO,CAAC,MAAM,CAgBZ;IACF,OAAO,CAAC,WAAW,CAKjB;IACF,OAAO,CAAC,EAAE,CA8BR;IACF,OAAO,CAAC,MAAM,CAOZ;IACF,OAAO,CAAC,QAAQ,CAsCd;IACF,OAAO,CAAC,MAAM,CAmPZ;IACF,OAAO,CAAC,OAAO,CAiBb;IACF,OAAO,CAAC,SAAS,CAUf;IACF,OAAO,CAAC,SAAS,CAUf;IACF,OAAO,CAAC,iBAAiB,CAcvB;IACF,OAAO,CAAC,SAAS,CAMf;IACF,OAAO,CAAC,QAAQ,CAMd;IACF,OAAO,CAAC,MAAM,CA0BZ;CACL"} \ No newline at end of file diff --git a/types/UI/Components/Modal/ModalContainer.d.ts b/types/UI/Components/Modal/ModalContainer.d.ts index 7cd6c40..a9c8f5e 100644 --- a/types/UI/Components/Modal/ModalContainer.d.ts +++ b/types/UI/Components/Modal/ModalContainer.d.ts @@ -2,6 +2,7 @@ import { IconName } from '@blueprintjs/core'; import React, { Component } from 'react'; import { IConfigStore } from '../../Store/BoardStore'; import { BoardModalType } from "../Board/BoardModalType"; +import { Config_ModalType } from '../Board/UserConfig'; interface IModalProps { modalId?: string; className?: string; @@ -15,6 +16,7 @@ interface IModalProps { type?: BoardModalType; bodyClass?: string; bodyStyle?: React.CSSProperties; + hasFooter?: boolean; footerStyle?: React.CSSProperties; footerRootStyle?: React.CSSProperties; containerEl?: (el: any) => void; @@ -22,8 +24,13 @@ interface IModalProps { helpUrl?: string; isImpExp?: boolean; configurationType?: string; + configType?: Config_ModalType; } export declare class CommonModal extends Component { + static defaultProps: { + hasFooter: boolean; + hasConfig: boolean; + }; render(): JSX.Element; } interface IModalContainer { @@ -75,6 +82,7 @@ interface IModalFooterProps { isImpExp?: boolean; rootStyle?: React.CSSProperties; hasConfig?: boolean; + configType?: Config_ModalType; configurationType?: string; } export declare class ModalFooter extends Component { diff --git a/types/UI/Components/Modal/ModalContainer.d.ts.map b/types/UI/Components/Modal/ModalContainer.d.ts.map index bdc262d..720643e 100644 --- a/types/UI/Components/Modal/ModalContainer.d.ts.map +++ b/types/UI/Components/Modal/ModalContainer.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"ModalContainer.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/Modal/ModalContainer.tsx"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"ModalContainer.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/Modal/ModalContainer.tsx"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/types/UI/Components/RightPanel/MatalsPanel.d.ts b/types/UI/Components/RightPanel/MatalsPanel.d.ts index 52bcff8..10fd980 100644 --- a/types/UI/Components/RightPanel/MatalsPanel.d.ts +++ b/types/UI/Components/RightPanel/MatalsPanel.d.ts @@ -1,10 +1,10 @@ import { TabId } from '@blueprintjs/core'; import * as React from 'react'; import { RightPanelStore } from '../../Store/RightPanelStore/RightPanelStore'; -export interface IMatalPanelProps { +export interface IMetalPanelProps { store?: RightPanelStore; } -export declare class MatalPanel extends React.Component { +export declare class MetalPanel extends React.Component { tabId: TabId; render(): JSX.Element; } diff --git a/types/UI/Components/RightPanel/Modeling/ModelingComponent2.d.ts.map b/types/UI/Components/RightPanel/Modeling/ModelingComponent2.d.ts.map index 7330ec5..154be0c 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,EAA4C,cAAc,EAAE,MAAM,+CAA+C,CAAC;AAMzH,qBACa,kBAAmB,SAAQ,KAAK,CAAC,SAAS,CAAC;IAAE,KAAK,CAAC,EAAE,cAAc,CAAC;IAAC,IAAI,EAAE,OAAO,CAAC;CAAE,CAAC;IAE/F,MAAM;IA8FN,OAAO,CAAC,UAAU,CAchB;IACF,OAAO,CAAC,gBAAgB,CAGtB;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;AAO/B,OAAO,EAA4C,cAAc,EAAE,MAAM,+CAA+C,CAAC;AAMzH,qBACa,kBAAmB,SAAQ,KAAK,CAAC,SAAS,CAAC;IAAE,KAAK,CAAC,EAAE,cAAc,CAAC;IAAC,IAAI,EAAE,OAAO,CAAC;CAAE,CAAC;IAE/F,MAAM;IAmGN,OAAO,CAAC,UAAU,CAchB;IACF,OAAO,CAAC,gBAAgB,CAGtB;CACL"} \ No newline at end of file diff --git a/types/UI/Components/RightPanel/ModelingComponent.d.ts.map b/types/UI/Components/RightPanel/ModelingComponent.d.ts.map index eb166c0..d8f64d6 100644 --- a/types/UI/Components/RightPanel/ModelingComponent.d.ts.map +++ b/types/UI/Components/RightPanel/ModelingComponent.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"ModelingComponent.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/RightPanel/ModelingComponent.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,6CAA6C,CAAC;AAI9E,MAAM,WAAW,aAAa;IAE1B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,aAAa,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CACpB;AAED,qBAEa,iBAAkB,SAAQ,KAAK,CAAC,SAAS,CAAC;IAAE,KAAK,CAAC,EAAE,eAAe,CAAC;CAAE,CAAC;IAEhF,MAAM;CAuFT"} \ No newline at end of file +{"version":3,"file":"ModelingComponent.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/RightPanel/ModelingComponent.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,6CAA6C,CAAC;AAI9E,MAAM,WAAW,aAAa;IAE1B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,aAAa,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CACpB;AAED,qBAEa,iBAAkB,SAAQ,KAAK,CAAC,SAAS,CAAC;IAAE,KAAK,CAAC,EAAE,eAAe,CAAC;CAAE,CAAC;IAEhF,MAAM;CA4FT"} \ No newline at end of file diff --git a/types/UI/Components/RightPanel/RightPanel.d.ts b/types/UI/Components/RightPanel/RightPanel.d.ts index 28f5f62..f5a4125 100644 --- a/types/UI/Components/RightPanel/RightPanel.d.ts +++ b/types/UI/Components/RightPanel/RightPanel.d.ts @@ -12,7 +12,7 @@ export declare enum RightTabId { Material = "material", Template = "template", TemplateParam = "templateparam", - Matals = "matals", + Metals = "metals", Model2 = "modeing2", Model3 = "modeing3", ModuelParams = "moduleparams" diff --git a/types/UI/Components/RightPanel/ScenePanel.d.ts.map b/types/UI/Components/RightPanel/ScenePanel.d.ts.map index e840b8f..c0bfd3d 100644 --- a/types/UI/Components/RightPanel/ScenePanel.d.ts.map +++ b/types/UI/Components/RightPanel/ScenePanel.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"ScenePanel.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/RightPanel/ScenePanel.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAU/B,OAAO,EAAS,oBAAoB,EAAE,MAAM,wCAAwC,CAAC;AACrF,OAAO,EAAE,eAAe,EAAE,MAAM,6CAA6C,CAAC;AAO9E,aAAa;AACb,eAAO,MAAM,WAAW;;CAAkB,CAAC;AAE3C,qBAEa,UAAW,SAAQ,KAAK,CAAC,SAAS,CAAC;IAAE,KAAK,CAAC,EAAE,eAAe,CAAC;CAAE,EAAE,EAAE,CAAC;IAE7E,YAAY,EAAE,oBAAoB,CAAC;IAEnC,yBAAyB;IAazB,MAAM;IAoFN,OAAO,CAAC,WAAW;IAiBnB,OAAO,CAAC,aAAa,CAkCnB;IACF,OAAO,CAAC,gBAAgB,CAuBtB;CACL"} \ No newline at end of file +{"version":3,"file":"ScenePanel.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/RightPanel/ScenePanel.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAU/B,OAAO,EAAS,oBAAoB,EAAE,MAAM,wCAAwC,CAAC;AACrF,OAAO,EAAE,eAAe,EAAE,MAAM,6CAA6C,CAAC;AAO9E,aAAa;AACb,eAAO,MAAM,WAAW;;CAAkB,CAAC;AAE3C,qBAEa,UAAW,SAAQ,KAAK,CAAC,SAAS,CAAC;IAAE,KAAK,CAAC,EAAE,eAAe,CAAC;CAAE,EAAE,EAAE,CAAC;IAE7E,YAAY,EAAE,oBAAoB,CAAC;IAEnC,yBAAyB;IAazB,MAAM;IAqFN,OAAO,CAAC,WAAW;IAiBnB,OAAO,CAAC,aAAa,CAkCnB;IACF,OAAO,CAAC,gBAAgB,CAuBtB;CACL"} \ 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 5c7ff78..0da5c9d 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,EAAsD,SAAS,EAAsC,MAAM,mBAAmB,CAAC;AAGtI,OAAO,KAAK,MAAM,OAAO,CAAC;AAc1B,OAAO,EAAE,cAAc,EAAE,MAAM,mDAAmD,CAAC;AAKnF,OAAO,EAAE,cAAc,EAAE,MAAM,4CAA4C,CAAC;AAC5E,OAAO,EAAE,uBAAuB,EAAE,MAAM,qDAAqD,CAAC;AAK9F,aAAK,gBAAgB;IAEjB,IAAI,IAAI;IACR,KAAK,IAAI;CACZ;AAID,qBACa,kBAAmB,SAAQ,KAAK,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,CAAC;IAE3D,KAAK,EAAE,uBAAuB,CAAyC;IAEvE,iBAAiB;IAKjB,kBAAkB;YAMJ,gBAAgB;IAiB9B,OAAO,CAAC,kBAAkB;IAU1B,OAAO,CAAC,eAAe,CAmGrB;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;IAIF,OAAO,CAAC,gBAAgB,CAmBtB;IAGF,OAAO,CAAC,2BAA2B,CAKjC;IAGF,OAAO,CAAC,cAAc,CASpB;IAGF,cAAc,SAAU,SAAS,QAAQ,gBAAgB,UAoCvD;IAGF,aAAa,aAAc,SAAS,UAqBlC;IAEF,OAAO,aASL;IAEF,MAAM;CA4DT;AAED,qBACa,mBAAoB,SAAQ,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC;IAExD,KAAK,EAAE,uBAAuB,CAAyC;IAGvE,OAAO,CAAC,SAAS,CAgBf;IAGF,kBAAkB,CAAC,EAAE,EAAE,cAAc,GAAG,MAAM;IAO9C,aAAa,OAAQ,cAAc,2BAajC;IAGF,kBAAkB,QAAS,cAAc,UAIvC;IAKF,cAAc,QAAS,cAAc,aAqBnC;IAGF,cAAc,sBAsCZ;IAEF,OAAO,CAAC,YAAY;IAwCpB,OAAO,CAAC,6BAA6B;IAsG9B,MAAM;CAoGhB"} \ No newline at end of file +{"version":3,"file":"TemplateParamPanel.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/RightPanel/TemplateParamPanel.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAsD,SAAS,EAAsC,MAAM,mBAAmB,CAAC;AAGtI,OAAO,KAAK,MAAM,OAAO,CAAC;AAc1B,OAAO,EAAE,cAAc,EAAE,MAAM,mDAAmD,CAAC;AAKnF,OAAO,EAAE,cAAc,EAAE,MAAM,4CAA4C,CAAC;AAC5E,OAAO,EAAE,uBAAuB,EAAE,MAAM,qDAAqD,CAAC;AAK9F,aAAK,gBAAgB;IAEjB,IAAI,IAAI;IACR,KAAK,IAAI;CACZ;AAID,qBACa,kBAAmB,SAAQ,KAAK,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,CAAC;IAE3D,KAAK,EAAE,uBAAuB,CAAyC;IAEvE,iBAAiB;IAKjB,kBAAkB;YAMJ,gBAAgB;IAiB9B,OAAO,CAAC,kBAAkB;IAU1B,OAAO,CAAC,eAAe,CAmGrB;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;IAIF,OAAO,CAAC,gBAAgB,CAmBtB;IAGF,OAAO,CAAC,2BAA2B,CAKjC;IAGF,OAAO,CAAC,cAAc,CASpB;IAGF,cAAc,SAAU,SAAS,QAAQ,gBAAgB,UAoCvD;IAGF,aAAa,aAAc,SAAS,UAqBlC;IAEF,OAAO,aASL;IAEF,MAAM;CA4DT;AAED,qBACa,mBAAoB,SAAQ,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC;IAExD,KAAK,EAAE,uBAAuB,CAAyC;IAGvE,OAAO,CAAC,SAAS,CAgBf;IAGF,kBAAkB,CAAC,EAAE,EAAE,cAAc,GAAG,MAAM;IAO9C,aAAa,OAAQ,cAAc,2BAajC;IAGF,kBAAkB,QAAS,cAAc,UAIvC;IAKF,cAAc,QAAS,cAAc,aA0BnC;IAGF,cAAc,sBAsCZ;IAEF,OAAO,CAAC,YAAY;IAwCpB,OAAO,CAAC,6BAA6B;IAsG9B,MAAM;CAoGhB"} \ No newline at end of file diff --git a/types/UI/Components/SourceManage/FilePanel.d.ts b/types/UI/Components/SourceManage/FilePanel.d.ts index ac56382..b1c7aed 100644 --- a/types/UI/Components/SourceManage/FilePanel.d.ts +++ b/types/UI/Components/SourceManage/FilePanel.d.ts @@ -12,9 +12,6 @@ export declare class FilePanel extends React.Component { commonPanel: CommonPanel; private canCreateFile; private currentFileInfo; - selectEl: HTMLInputElement; - private _isImporting; - handleImportFile: (files: FileList) => Promise; handleAddNewFile: (name: string, currentDir: IDirectoryProps) => boolean; handleFile: (name: string, currentDir: IDirectoryProps, callBack: () => void) => Promise; handleMutDown: () => Promise; diff --git a/types/UI/Components/SourceManage/FilePanel.d.ts.map b/types/UI/Components/SourceManage/FilePanel.d.ts.map index 118babd..9ea8147 100644 --- a/types/UI/Components/SourceManage/FilePanel.d.ts.map +++ b/types/UI/Components/SourceManage/FilePanel.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"FilePanel.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/SourceManage/FilePanel.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAQ/B,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAE1D,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAI7D,MAAM,WAAW,KAAK;IAElB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,KAAK,CAAC,EAAE,aAAa,CAAC;CACzB;AACD;;GAEG;AACH,qBAEa,SAAU,SAAQ,KAAK,CAAC,SAAS,CAAC,KAAK,EAAE,EAAE,CAAC;IAErD,WAAW,EAAE,WAAW,CAAC;IACzB,OAAO,CAAC,aAAa,CAAyB;IAC9C,OAAO,CAAC,eAAe,CAA6B;IACpD,QAAQ,EAAE,gBAAgB,CAAC;IACf,OAAO,CAAC,YAAY,CAAS;IACzC,gBAAgB,UAAiB,QAAQ,mBAmGvC;IACF,gBAAgB,SAAU,MAAM,cAAc,eAAe,aAY3D;IACF,UAAU,SAAgB,MAAM,cAAc,eAAe,YAAY,MAAM,IAAI,mBAqBjF;IACF,aAAa,sBAgBX;IACF,YAAY,SAAU;QAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;KAAE,UAQ3C;IACF,SAAS,oBAqDP;IACF,eAAe,oBAOb;IAGF,SAAS,aAcP;IAEF,MAAM;CA+BT"} \ No newline at end of file +{"version":3,"file":"FilePanel.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/SourceManage/FilePanel.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAM/B,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAE1D,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAK7D,MAAM,WAAW,KAAK;IAElB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,KAAK,CAAC,EAAE,aAAa,CAAC;CACzB;AACD;;GAEG;AACH,qBAEa,SAAU,SAAQ,KAAK,CAAC,SAAS,CAAC,KAAK,EAAE,EAAE,CAAC;IAErD,WAAW,EAAE,WAAW,CAAC;IACzB,OAAO,CAAC,aAAa,CAAyB;IAC9C,OAAO,CAAC,eAAe,CAA6B;IACpD,gBAAgB,SAAU,MAAM,cAAc,eAAe,aAY3D;IACF,UAAU,SAAgB,MAAM,cAAc,eAAe,YAAY,MAAM,IAAI,mBAqBjF;IACF,aAAa,sBAgBX;IACF,YAAY,SAAU;QAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;KAAE,UAQ3C;IACF,SAAS,oBAqCP;IACF,eAAe,oBAOb;IAGF,SAAS,aAcP;IAEF,MAAM;CA+BT"} \ No newline at end of file diff --git a/types/UI/Components/SourceManage/ImportFile.d.ts b/types/UI/Components/SourceManage/ImportFile.d.ts new file mode 100644 index 0000000..0ef2be3 --- /dev/null +++ b/types/UI/Components/SourceManage/ImportFile.d.ts @@ -0,0 +1,12 @@ +import React from "react"; +import { CommonPanel } from "./CommonPanel"; +export declare class ImportFile extends React.Component<{ + commonPanel: CommonPanel; + type: "file" | "template"; +}> { + private _isImporting; + selectEl: React.RefObject; + handleImportFile: (files: FileList) => Promise; + render(): JSX.Element; +} +//# sourceMappingURL=ImportFile.d.ts.map \ No newline at end of file diff --git a/types/UI/Components/SourceManage/ImportFile.d.ts.map b/types/UI/Components/SourceManage/ImportFile.d.ts.map new file mode 100644 index 0000000..269e2ad --- /dev/null +++ b/types/UI/Components/SourceManage/ImportFile.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"ImportFile.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/SourceManage/ImportFile.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,MAAM,OAAO,CAAC;AAU1B,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C,qBACa,UAAW,SAAQ,KAAK,CAAC,SAAS,CAAC;IAAE,WAAW,EAAE,WAAW,CAAC;IAAC,IAAI,EAAE,MAAM,GAAG,UAAU,CAAC;CAAE,CAAC;IACzF,OAAO,CAAC,YAAY,CAAS;IACzC,QAAQ,oCAAuC;IAE/C,gBAAgB,UAAiB,QAAQ,mBA8IvC;IAEF,MAAM;CA2BT"} \ No newline at end of file diff --git a/types/UI/Components/Template/InsertTemplateByBasePoint.d.ts b/types/UI/Components/Template/InsertTemplateByBasePoint.d.ts new file mode 100644 index 0000000..f48711d --- /dev/null +++ b/types/UI/Components/Template/InsertTemplateByBasePoint.d.ts @@ -0,0 +1,4 @@ +import { TemplateRecord } from "../../../DatabaseServices/Template/TemplateRecord"; +import { IGetRoomInfo } from "./GetRoomCabName"; +export declare function InsertTemplateByBasePoint(template: TemplateRecord, roomInfo?: IGetRoomInfo): Promise; +//# sourceMappingURL=InsertTemplateByBasePoint.d.ts.map \ No newline at end of file diff --git a/types/UI/Components/Template/InsertTemplateByBasePoint.d.ts.map b/types/UI/Components/Template/InsertTemplateByBasePoint.d.ts.map new file mode 100644 index 0000000..158f7e0 --- /dev/null +++ b/types/UI/Components/Template/InsertTemplateByBasePoint.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"InsertTemplateByBasePoint.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/Template/InsertTemplateByBasePoint.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,cAAc,EAAE,MAAM,mDAAmD,CAAC;AAQnF,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAEhD,wBAAsB,yBAAyB,CAAC,QAAQ,EAAE,cAAc,EAAE,QAAQ,CAAC,EAAE,YAAY,iBA2MhG"} \ No newline at end of file diff --git a/types/UI/Components/Template/TemplateComponent.d.ts b/types/UI/Components/Template/TemplateComponent.d.ts index b059c2c..9348ac4 100644 --- a/types/UI/Components/Template/TemplateComponent.d.ts +++ b/types/UI/Components/Template/TemplateComponent.d.ts @@ -4,7 +4,7 @@ import { R2bReplaceProps } from '../../../Add-on/twoD2threeD/R2bConfigComponent' import { Entity } from '../../../DatabaseServices/Entity/Entity'; import { TemplateRecord } from '../../../DatabaseServices/Template/TemplateRecord'; import { TempalteEditorStore } from '../../Store/TemplateEditorStore'; -import { IDirectoryProps } from '../SourceManage/CommonPanel'; +import { CommonPanel, IDirectoryProps } from '../SourceManage/CommonPanel'; import { IGetRoomInfo } from './GetRoomCabName'; export interface ITemplateManage { store?: TempalteEditorStore; @@ -18,9 +18,11 @@ export declare class TemplateManage extends React.Component private currentTemplateInfo; private autoCutOption; private TemplateDrawHingeTool; + commonPanel: React.RefObject; constructor(props: any); private renderNav; private renderMenuItems; + handleMutDown: () => Promise; private startCreateTemplate; handleTemplate: (name: string, currentDir: IDirectoryProps, callback: Function) => Promise; private uploadTemplate; @@ -35,6 +37,7 @@ export declare class TemplateManage extends React.Component private handleReplace; private handleR2bRepalce; private handleInsertHandle; + private extendHinge; getSpaceAllEntitys(door: Entity): Entity[]; private addHandleToDoor; private selectTemplateTag; diff --git a/types/UI/Components/Template/TemplateComponent.d.ts.map b/types/UI/Components/Template/TemplateComponent.d.ts.map index 75914b5..1ecd7a6 100644 --- a/types/UI/Components/Template/TemplateComponent.d.ts.map +++ b/types/UI/Components/Template/TemplateComponent.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"TemplateComponent.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/Template/TemplateComponent.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,OAAO,EAAE,aAAa,EAAsB,MAAM,6CAA6C,CAAC;AAEhG,OAAO,EAAE,eAAe,EAAE,MAAM,gDAAgD,CAAC;AASjF,OAAO,EAAE,MAAM,EAAE,MAAM,yCAAyC,CAAC;AAOjE,OAAO,EAAE,cAAc,EAAE,MAAM,mDAAmD,CAAC;AAmBnF,OAAO,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AAKtE,OAAO,EAAe,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAK3E,OAAO,EAAkB,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAKhE,MAAM,WAAW,eAAe;IAE5B,KAAK,CAAC,EAAE,mBAAmB,CAAC;IAC5B,UAAU,CAAC,EAAE,aAAa,CAAC;IAC3B,UAAU,CAAC,EAAE,eAAe,CAAC;CAChC;AAED,qBACa,cAAe,SAAQ,KAAK,CAAC,SAAS,CAAC,eAAe,EAAE,EAAE,CAAC;IACxD,OAAO,CAAC,MAAM,CAaxB;IACF,OAAO,CAAC,iBAAiB,CAAyB;IACtC,OAAO,CAAC,YAAY,CAAwB;IAC5C,OAAO,CAAC,mBAAmB,CAA2D;IACtF,OAAO,CAAC,aAAa,CAAqE;IACtG,OAAO,CAAC,qBAAqB,CAAwB;gBACzC,KAAK,KAAA;IAOjB,OAAO,CAAC,SAAS,CA0Df;IACF,OAAO,CAAC,eAAe,CAQrB;IACF,OAAO,CAAC,mBAAmB,CAKzB;IAEF,cAAc,SAAgB,MAAM,cAAc,eAAe,YAAY,QAAQ,mBAoCnF;IACF,OAAO,CAAC,cAAc,CAWpB;IACF,OAAO,CAAC,oBAAoB,CAc1B;IACF,OAAO,CAAC,oBAAoB,CAU1B;IACF,OAAO,CAAC,YAAY,CA+ClB;IACF,OAAO,CAAC,oBAAoB,CAgG1B;IACF,OAAO,CAAC,cAAc,CA6BpB;IACF,OAAO,CAAC,mBAAmB,CAmCzB;IACF,OAAO,CAAC,gBAAgB,CAqFtB;IACF,OAAO,CAAC,YAAY,CAMlB;IACF,OAAO,CAAC,aAAa,CAoKnB;IAGF,OAAO,CAAC,gBAAgB,CAQtB;IAEF,OAAO,CAAC,kBAAkB,CAqFxB;IACF,kBAAkB,CAAC,IAAI,EAAE,MAAM;IAe/B,OAAO,CAAC,eAAe,CA2KrB;IACF,OAAO,CAAC,iBAAiB,CAIvB;IACF,OAAO,CAAC,UAAU,CAMhB;IACF,OAAO,CAAC,kBAAkB,CAWxB;IACF,OAAO,CAAC,kBAAkB,CAiCxB;IACF,YAAY,MAAO,aAAa,UA4B9B;IACF,iBAAiB;IAKjB,oBAAoB;IAMb,MAAM;CA6EhB;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,cAAc,QA6D7E"} \ No newline at end of file +{"version":3,"file":"TemplateComponent.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/Template/TemplateComponent.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,OAAO,EAAE,aAAa,EAAsB,MAAM,6CAA6C,CAAC;AAEhG,OAAO,EAAE,eAAe,EAAE,MAAM,gDAAgD,CAAC;AAUjF,OAAO,EAAE,MAAM,EAAE,MAAM,yCAAyC,CAAC;AAQjE,OAAO,EAAE,cAAc,EAAE,MAAM,mDAAmD,CAAC;AAgBnF,OAAO,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AAKtE,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAM3E,OAAO,EAAkB,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAMhE,MAAM,WAAW,eAAe;IAE5B,KAAK,CAAC,EAAE,mBAAmB,CAAC;IAC5B,UAAU,CAAC,EAAE,aAAa,CAAC;IAC3B,UAAU,CAAC,EAAE,eAAe,CAAC;CAChC;AAED,qBACa,cAAe,SAAQ,KAAK,CAAC,SAAS,CAAC,eAAe,EAAE,EAAE,CAAC;IACxD,OAAO,CAAC,MAAM,CAaxB;IACF,OAAO,CAAC,iBAAiB,CAAyB;IACtC,OAAO,CAAC,YAAY,CAAwB;IAC5C,OAAO,CAAC,mBAAmB,CAA2D;IACtF,OAAO,CAAC,aAAa,CAAqE;IACtG,OAAO,CAAC,qBAAqB,CAAwB;IACrD,WAAW,+BAAkC;gBAEjC,KAAK,KAAA;IAOjB,OAAO,CAAC,SAAS,CAuEf;IACF,OAAO,CAAC,eAAe,CAQrB;IACF,aAAa,sBAgBX;IACF,OAAO,CAAC,mBAAmB,CAKzB;IAEF,cAAc,SAAgB,MAAM,cAAc,eAAe,YAAY,QAAQ,mBAoCnF;IACF,OAAO,CAAC,cAAc,CAWpB;IACF,OAAO,CAAC,oBAAoB,CAc1B;IACF,OAAO,CAAC,oBAAoB,CAU1B;IACF,OAAO,CAAC,YAAY,CA+ClB;IACF,OAAO,CAAC,oBAAoB,CAS1B;IACF,OAAO,CAAC,cAAc,CA6BpB;IACF,OAAO,CAAC,mBAAmB,CAmCzB;IACF,OAAO,CAAC,gBAAgB,CAqFtB;IACF,OAAO,CAAC,YAAY,CAMlB;IACF,OAAO,CAAC,aAAa,CA4KnB;IAGF,OAAO,CAAC,gBAAgB,CAQtB;IAEF,OAAO,CAAC,kBAAkB,CAqFxB;IACF,OAAO,CAAC,WAAW;IAuBnB,kBAAkB,CAAC,IAAI,EAAE,MAAM;IAe/B,OAAO,CAAC,eAAe,CAgLrB;IACF,OAAO,CAAC,iBAAiB,CAIvB;IACF,OAAO,CAAC,UAAU,CAMhB;IACF,OAAO,CAAC,kBAAkB,CAWxB;IACF,OAAO,CAAC,kBAAkB,CAkCxB;IACF,YAAY,MAAO,aAAa,UA4B9B;IACF,iBAAiB;IAKjB,oBAAoB;IAMb,MAAM;CA6EhB;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,cAAc,QA6D7E"} \ No newline at end of file diff --git a/types/UI/Components/Template/TemplateEditor.d.ts.map b/types/UI/Components/Template/TemplateEditor.d.ts.map index ad036d2..75b12ac 100644 --- a/types/UI/Components/Template/TemplateEditor.d.ts.map +++ b/types/UI/Components/Template/TemplateEditor.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"TemplateEditor.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/Template/TemplateEditor.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAS/B,OAAO,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AAStE,MAAM,WAAW,oBAAoB;IAEjC,KAAK,EAAE,mBAAmB,CAAC;IAC3B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,eAAO,MAAM,eAAe,kBAAkB,CAAC;AAE/C,qBACa,cAAe,SAAQ,KAAK,CAAC,SAAS,CAAC,oBAAoB,EAAE,EAAE,CAAC;IACzE,OAAO,CAAC,YAAY,CAAkB;IAEtC,oBAAoB,oCAAuC;IAC3D,iBAAiB;IAwDjB,oBAAoB;IAMb,MAAM;IAgEb,OAAO,CAAC,WAAW,CAMjB;IAEF;;OAEG;IACH,OAAO,CAAC,oBAAoB,CAK1B;IAEF,OAAO,CAAC,oBAAoB,CAI1B;IACF,OAAO,CAAC,IAAI,CAMV;CACL"} \ No newline at end of file +{"version":3,"file":"TemplateEditor.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/Template/TemplateEditor.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAS/B,OAAO,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AAUtE,MAAM,WAAW,oBAAoB;IAEjC,KAAK,EAAE,mBAAmB,CAAC;IAC3B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,eAAO,MAAM,eAAe,kBAAkB,CAAC;AAE/C,qBACa,cAAe,SAAQ,KAAK,CAAC,SAAS,CAAC,oBAAoB,EAAE,EAAE,CAAC;IACzE,OAAO,CAAC,YAAY,CAAkB;IAEtC,oBAAoB,oCAAuC;IAC3D,iBAAiB;IAwDjB,oBAAoB;IAMb,MAAM;IAwEb,OAAO,CAAC,WAAW,CAMjB;IAEF;;OAEG;IACH,OAAO,CAAC,oBAAoB,CAK1B;IAEF,OAAO,CAAC,oBAAoB,CAI1B;IACF,OAAO,CAAC,IAAI,CAMV;CACL"} \ No newline at end of file diff --git a/types/UI/Components/Template/TemplateParamList.d.ts.map b/types/UI/Components/Template/TemplateParamList.d.ts.map index 62da20a..6b468ff 100644 --- a/types/UI/Components/Template/TemplateParamList.d.ts.map +++ b/types/UI/Components/Template/TemplateParamList.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"TemplateParamList.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/Template/TemplateParamList.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAU/B,OAAO,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AAKtE,MAAM,WAAW,uBAAuB;IAEpC,KAAK,EAAE,mBAAmB,CAAC;CAC9B;AAGD,MAAM,CAAC,OAAO,OAAO,iBAAkB,SAAQ,KAAK,CAAC,SAAS,CAAC,uBAAuB,CAAC;IACnF,OAAO,CAAC,aAAa,CAAyB;IAClC,OAAO,CAAC,iBAAiB,CAAS;IAC9C,OAAO,CAAC,YAAY,CAAmB;IACvC,kBAAkB;IAKX,MAAM;IAuIb,OAAO,CAAC,WAAW,CA6BjB;IACF,OAAO,CAAC,oBAAoB,CA2B1B;IAEF;;OAEG;IACH,OAAO,CAAC,aAAa,CAanB;IACF,OAAO,CAAC,aAAa,CAInB;IACF,OAAO,CAAC,UAAU,CAShB;IACF,OAAO,CAAC,mBAAmB,CA0BzB;IACF,OAAO,CAAC,iBAAiB,CAiDvB;IACF,OAAO,CAAC,oBAAoB,CAa1B;IACF,OAAO,CAAC,qBAAqB,CAmE3B;CACL"} \ No newline at end of file +{"version":3,"file":"TemplateParamList.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/Template/TemplateParamList.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAU/B,OAAO,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AAKtE,MAAM,WAAW,uBAAuB;IAEpC,KAAK,EAAE,mBAAmB,CAAC;CAC9B;AAGD,MAAM,CAAC,OAAO,OAAO,iBAAkB,SAAQ,KAAK,CAAC,SAAS,CAAC,uBAAuB,CAAC;IACnF,OAAO,CAAC,aAAa,CAAyB;IAClC,OAAO,CAAC,iBAAiB,CAAS;IAC9C,OAAO,CAAC,YAAY,CAAmB;IACvC,kBAAkB;IAKX,MAAM;IAwIb,OAAO,CAAC,WAAW,CA6BjB;IACF,OAAO,CAAC,oBAAoB,CA2B1B;IAEF;;OAEG;IACH,OAAO,CAAC,aAAa,CAanB;IACF,OAAO,CAAC,aAAa,CAInB;IACF,OAAO,CAAC,UAAU,CAShB;IACF,OAAO,CAAC,mBAAmB,CA0BzB;IACF,OAAO,CAAC,iBAAiB,CAiDvB;IACF,OAAO,CAAC,oBAAoB,CAa1B;IACF,OAAO,CAAC,qBAAqB,CAmE3B;CACL"} \ No newline at end of file diff --git a/types/UI/Components/Text/TextModify.d.ts.map b/types/UI/Components/Text/TextModify.d.ts.map index b416bbc..ebb348d 100644 --- a/types/UI/Components/Text/TextModify.d.ts.map +++ b/types/UI/Components/Text/TextModify.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"TextModify.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/Text/TextModify.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,OAAO,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AACrE,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAEtD,OAAO,EAAE,aAAa,EAAc,MAAM,qBAAqB,CAAC;AAGhE,qBAAa,gBAAiB,YAAW,YAAY;IAErC,UAAU,SAAQ;IAC9B,UAAU;IAQE,QAAQ,EAAE,uBAAuB,CAAmC;IACpE,YAAY,EAAE,MAAM,EAAE,CAAM;IACxC,UAAU;IAIV,YAAY,CAAC,GAAG,EAAE,aAAa,CAAC,uBAAuB,CAAC;IAKxD,OAAO,CAAC,MAAM,CAAC,eAAe,CAAmB;IACjD,MAAM,CAAC,WAAW,IAAI,gBAAgB;CAMzC;AAED,qBACa,eAAgB,SAAQ,KAAK,CAAC,SAAS,CAAC;IAAE,KAAK,EAAE,gBAAgB,CAAC;CAAE,EAAE,EAAE,CAAC;IAElF,MAAM;CA2FT"} \ No newline at end of file +{"version":3,"file":"TextModify.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/Text/TextModify.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,OAAO,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AACrE,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAEtD,OAAO,EAAoB,aAAa,EAAc,MAAM,qBAAqB,CAAC;AAGlF,qBAAa,gBAAiB,YAAW,YAAY;IAErC,UAAU,SAAQ;IAC9B,UAAU;IAQE,QAAQ,EAAE,uBAAuB,CAAmC;IACpE,YAAY,EAAE,MAAM,EAAE,CAAM;IACxC,UAAU;IAIV,YAAY,CAAC,GAAG,EAAE,aAAa,CAAC,uBAAuB,CAAC;IAKxD,OAAO,CAAC,MAAM,CAAC,eAAe,CAAmB;IACjD,MAAM,CAAC,WAAW,IAAI,gBAAgB;CAMzC;AAED,qBACa,eAAgB,SAAQ,KAAK,CAAC,SAAS,CAAC;IAAE,KAAK,EAAE,gBAAgB,CAAC;CAAE,EAAE,EAAE,CAAC;IAElF,MAAM;CA4FT"} \ No newline at end of file diff --git a/types/UI/MaterialEditor/GoodsList.d.ts.map b/types/UI/MaterialEditor/GoodsList.d.ts.map index 5385b89..ee56b96 100644 --- a/types/UI/MaterialEditor/GoodsList.d.ts.map +++ b/types/UI/MaterialEditor/GoodsList.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"GoodsList.d.ts","sourceRoot":"","sources":["../../../../src/UI/MaterialEditor/GoodsList.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAc,MAAM,MAAM,CAAC;AAEpD,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAM/B,MAAM,WAAW,SAAS;IAEtB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;CACpB;AACD,UAAU,eAAe;IAErB,MAAM,EAAE,CAAC,IAAI,EAAE,SAAS,KAAK,IAAI,CAAC;IAClC,IAAI,EAAE,gBAAgB,CAAC,OAAO,CAAC,CAAC;CACnC;AAED,qBACa,SAAU,SAAQ,KAAK,CAAC,SAAS,CAAC,eAAe,CAAC;IAC3D,OAAO,CAAC,MAAM,CAAiB;IACnB,SAAS,SAAM;IACf,KAAK,QAAM;IACX,IAAI;;;;MAId;IACF,OAAO,CAAC,MAAM,CAAU;IACxB,yBAAyB;IAIlB,MAAM;IAoFb,YAAY,MAAO,MAAM,WAAW,CAAC,gBAAgB,CAAC,UAUpD;IACF,YAAY,mCAuBV;IACF,OAAO,CAAC,aAAa,CAMnB;IACF,OAAO,CAAC,gBAAgB,CAGtB;IACF,OAAO,CAAC,gBAAgB,CAUtB;CACL"} \ No newline at end of file +{"version":3,"file":"GoodsList.d.ts","sourceRoot":"","sources":["../../../../src/UI/MaterialEditor/GoodsList.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAc,MAAM,MAAM,CAAC;AAEpD,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAM/B,MAAM,WAAW,SAAS;IAEtB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;CACpB;AACD,UAAU,eAAe;IAErB,MAAM,EAAE,CAAC,IAAI,EAAE,SAAS,KAAK,IAAI,CAAC;IAClC,IAAI,EAAE,gBAAgB,CAAC,OAAO,CAAC,CAAC;CACnC;AAED,qBACa,SAAU,SAAQ,KAAK,CAAC,SAAS,CAAC,eAAe,CAAC;IAC3D,OAAO,CAAC,MAAM,CAAiB;IACnB,SAAS,SAAM;IACf,KAAK,QAAM;IACX,IAAI;;;;MAId;IACF,OAAO,CAAC,MAAM,CAAU;IACxB,yBAAyB;IAIlB,MAAM;IAkFb,YAAY,MAAO,MAAM,WAAW,CAAC,gBAAgB,CAAC,UAUpD;IACF,YAAY,mCAuBV;IACF,OAAO,CAAC,aAAa,CAMnB;IACF,OAAO,CAAC,gBAAgB,CAGtB;IACF,OAAO,CAAC,gBAAgB,CAUtB;CACL"} \ No newline at end of file diff --git a/types/UI/Store/RightPanelStore/LightConfigModel.d.ts.map b/types/UI/Store/RightPanelStore/LightConfigModel.d.ts.map index 3996f2c..5cfb551 100644 --- a/types/UI/Store/RightPanelStore/LightConfigModel.d.ts.map +++ b/types/UI/Store/RightPanelStore/LightConfigModel.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"LightConfigModel.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Store/RightPanelStore/LightConfigModel.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,MAAM,OAAO,CAAC;AAW1B,OAAO,EAAE,KAAK,EAAE,MAAM,wCAAwC,CAAC;AAO/D,OAAO,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAC;AAIvE,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,qBACa,gBAAiB,SAAQ,KAAK,CAAC,SAAS,CAAC;IAAE,KAAK,EAAE,UAAU,CAAC;IAAC,WAAW,EAAE,YAAY,CAAC;IAAC,SAAS,EAAE,cAAc,CAAC;IAAC,WAAW,CAAC,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;CAAE,EAAE,EAAE,CAAC;IAE5J,OAAO,EAAE,MAAM,CAA6N;IAC5O,SAAS,EAAE,MAAM,CAA0E;IACvG,OAAO,CAAC,WAAW,CAAkB;IAErC,iBAAiB;IAiBjB,oBAAoB;IAQpB,kBAAkB,UAAiB,KAAK,gBAAgB,OAAO,eAAe,OAAO,mBAsCnF;IAGF,OAAO,CAAC,SAAS;IAMjB,MAAM;CAkVT;AAED,qBACa,cAAe,SAAQ,KAAK,CAAC,SAAS,CAAC;IAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IAAC,KAAK,EAAE,UAAU,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,OAAO,CAAC;IAAC,WAAW,EAAE,OAAO,CAAC;CAAE,EAAE,EAAE,CAAC;IAE7K,OAAO,EAAE,MAAM,CAAK;IAEd,QAAQ,CAAC,KAAK,EAAE,MAAM;IA2D5B,YAAY,CAAC,KAAK,EAAE,MAAM;IAoC1B,MAAM;CAuFT"} \ No newline at end of file +{"version":3,"file":"LightConfigModel.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Store/RightPanelStore/LightConfigModel.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,MAAM,OAAO,CAAC;AAW1B,OAAO,EAAE,KAAK,EAAE,MAAM,wCAAwC,CAAC;AAO/D,OAAO,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAC;AAIvE,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,qBACa,gBAAiB,SAAQ,KAAK,CAAC,SAAS,CAAC;IAAE,KAAK,EAAE,UAAU,CAAC;IAAC,WAAW,EAAE,YAAY,CAAC;IAAC,SAAS,EAAE,cAAc,CAAC;IAAC,WAAW,CAAC,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;CAAE,EAAE,EAAE,CAAC;IAE5J,OAAO,EAAE,MAAM,CAA6N;IAC5O,SAAS,EAAE,MAAM,CAA0E;IACvG,OAAO,CAAC,WAAW,CAAkB;IAErC,iBAAiB;IAiBjB,oBAAoB;IAQpB,kBAAkB,UAAiB,KAAK,gBAAgB,OAAO,eAAe,OAAO,mBAsCnF;IAGF,OAAO,CAAC,SAAS;IAMjB,MAAM;CAmVT;AAED,qBACa,cAAe,SAAQ,KAAK,CAAC,SAAS,CAAC;IAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IAAC,KAAK,EAAE,UAAU,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,OAAO,CAAC;IAAC,WAAW,EAAE,OAAO,CAAC;CAAE,EAAE,EAAE,CAAC;IAE7K,OAAO,EAAE,MAAM,CAAK;IAEd,QAAQ,CAAC,KAAK,EAAE,MAAM;IA2D5B,YAAY,CAAC,KAAK,EAAE,MAAM;IAoC1B,MAAM;CAuFT"} \ No newline at end of file diff --git a/types/UI/Store/RightPanelStore/ModelingStore.d.ts b/types/UI/Store/RightPanelStore/ModelingStore.d.ts index cc08388..c24ed44 100644 --- a/types/UI/Store/RightPanelStore/ModelingStore.d.ts +++ b/types/UI/Store/RightPanelStore/ModelingStore.d.ts @@ -1,7 +1,7 @@ -import { IModelingItem } from "../../Components/RightPanel/ModelingComponent"; import { IModeling } from "../../../DatabaseServices/Entity/Board"; -import { IUiOption } from "../BoardInterface"; import { IConfigOption } from "../../Components/Board/UserConfig"; +import { IModelingItem } from "../../Components/RightPanel/ModelingComponent"; +import { IUiOption } from "../BoardInterface"; import { IConfigStore } from "../BoardStore"; export declare class ModelingStore implements IConfigStore { configName: string; diff --git a/types/UI/Store/RightPanelStore/ModelingStore.d.ts.map b/types/UI/Store/RightPanelStore/ModelingStore.d.ts.map index 52a5d30..2675023 100644 --- a/types/UI/Store/RightPanelStore/ModelingStore.d.ts.map +++ b/types/UI/Store/RightPanelStore/ModelingStore.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"ModelingStore.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Store/RightPanelStore/ModelingStore.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,+CAA+C,CAAC;AAC9E,OAAO,EAAE,SAAS,EAAE,MAAM,wCAAwC,CAAC;AAEnE,OAAO,EAAiB,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAE7C,qBAAa,aAAc,YAAW,YAAY;IAElC,UAAU,SAAQ;IAClB,YAAY,EAAE,MAAM,EAAE,CAAM;IAC5B,aAAa,EAAE,aAAa,EAAE,CAAM;IACpC,eAAe,EAAE,SAAS,CAAC,aAAa,CAAC,EAAE,CAAM;IAC7D,QAAQ,UAAQ;;IAMhB,iBAAiB;IA2BjB,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS;IAmBlD,UAAU;IAIV,UAAU;IAQV,YAAY,CAAC,GAAG,EAAE,aAAa;CAYlC"} \ No newline at end of file +{"version":3,"file":"ModelingStore.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Store/RightPanelStore/ModelingStore.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,wCAAwC,CAAC;AACnE,OAAO,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAClE,OAAO,EAAE,aAAa,EAAE,MAAM,+CAA+C,CAAC;AAC9E,OAAO,EAAiB,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAE7C,qBAAa,aAAc,YAAW,YAAY;IAElC,UAAU,SAAQ;IAClB,YAAY,EAAE,MAAM,EAAE,CAAM;IAC5B,aAAa,EAAE,aAAa,EAAE,CAAM;IACpC,eAAe,EAAE,SAAS,CAAC,aAAa,CAAC,EAAE,CAAM;IAC7D,QAAQ,UAAQ;;IAMhB,iBAAiB;IA2BjB,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS;IAmBlD,UAAU;IAIV,UAAU;IAQV,YAAY,CAAC,GAAG,EAAE,aAAa;CAYlC"} \ No newline at end of file diff --git a/types/UI/Store/UserConfigStore.d.ts b/types/UI/Store/UserConfigStore.d.ts index 9c6a84b..ec43d1a 100644 --- a/types/UI/Store/UserConfigStore.d.ts +++ b/types/UI/Store/UserConfigStore.d.ts @@ -23,12 +23,13 @@ export declare class UserConfigStore extends Singleton { InitUserConfig(): Promise; InitBBSTabIndex(): Promise; InitCommonPanelStore(): Promise; + InitModelingStore(): Promise; /**处理用户登陆后的信息 */ InitUserData(): Promise; GetConfig(type: BoardModalType): Promise; private ChangeDrillRuleMap; GetAllConfigs(key: BoardModalType | string, isChangeRuleMap?: boolean): Promise | undefined>; - SaveConfig(type: BoardModalType, store: IConfigStore, option?: ISaveOption): Promise; + SaveConfig(type: BoardModalType, store: IConfigStore, option?: ISaveOption, tagName?: string): Promise; DeleteConfig(type: BoardModalType, store: IConfigStore): Promise; UpdateBoardOption: (k: string, type: BoardModalType, store: IConfigStore) => Promise; private UpdateUserConfig; @@ -38,6 +39,7 @@ export declare class UserConfigStore extends Singleton { pricing_class_id: string; }[]): Promise; GetUserConfigNames(): Promise; + InitCustomCmd(): Promise; UploadUserConfigNames(dbStore: IndexedDbStore): Promise; OpenCacheFile(): Promise; ClearUserData(): void; diff --git a/types/UI/Store/UserConfigStore.d.ts.map b/types/UI/Store/UserConfigStore.d.ts.map index 3661398..8f51318 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.tsx"],"names":[],"mappings":"AASA,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAUnD,OAAO,EAAE,cAAc,EAAa,MAAM,gCAAgC,CAAC;AAC3E,OAAO,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AACpE,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAM/D,OAAO,EAAE,SAAS,EAA2B,MAAM,kBAAkB,CAAC;AACtE,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAY5C,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;IA8Cd,eAAe;IAQf,oBAAoB;IAkB1B,gBAAgB;IACV,YAAY;IA8BZ,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;IAyD5D,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;IAwCnB,aAAa;CAahB;AAED,eAAO,MAAM,eAAe,iBAAmD,CAAC"} \ No newline at end of file +{"version":3,"file":"UserConfigStore.d.ts","sourceRoot":"","sources":["../../../../src/UI/Store/UserConfigStore.tsx"],"names":[],"mappings":"AASA,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAUnD,OAAO,EAAE,cAAc,EAAa,MAAM,gCAAgC,CAAC;AAC3E,OAAO,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AAEpE,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAM/D,OAAO,EAAE,SAAS,EAA2B,MAAM,kBAAkB,CAAC;AACtE,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAY5C,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;IA8Cd,eAAe;IAQf,oBAAoB;IAkBpB,iBAAiB;IAevB,gBAAgB;IACV,YAAY;IA+BZ,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,EAAE,OAAO,CAAC,EAAE,MAAM;IA8EhG,YAAY,CAAC,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,YAAY;IA4D5D,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;IAalB,aAAa;IAMb,qBAAqB,CAAC,OAAO,EAAE,cAAc;IAS7C,aAAa;IAwCnB,aAAa;CAchB;AAED,eAAO,MAAM,eAAe,iBAAmD,CAAC"} \ No newline at end of file